@kynver-app/runtime 0.1.148 → 0.1.152
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-output/worker-start-stdout.d.ts +11 -0
- package/dist/cli.js +53 -53
- package/dist/exited-worker-handoff-capture.d.ts +19 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +67 -67
- package/dist/instruction-bundle/contract.js +2 -2
- package/dist/server/cleanup.js +7 -7
- package/dist/sidecar-cli.d.ts +16 -0
- package/dist/status.d.ts +2 -0
- package/dist/worker-persona-catalog.js +2 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`)}function
|
|
2
|
+
var Ky=Object.defineProperty;var D=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var $y=(e,r)=>{for(var t in r)Ky(e,t,{get:r[t],enumerable:!0})};import{existsSync as jy,mkdirSync as Vy,readFileSync as Bi,readdirSync as SO,statSync as qc,writeFileSync as Gy}from"node:fs";import zc from"node:path";function pr(e){console.error(e),process.exit(1)}function de(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function N(e,r){return e||pr(`missing ${r}`),e}function ct(e){try{return JSON.parse(e)}catch{return null}}function C(e,r){try{return JSON.parse(Bi(e,"utf8"))}catch(t){if(arguments.length>1)return r;pr(`failed to read ${e}: ${t.message}`)}}function se(e,r){Vy(zc.dirname(e),{recursive:!0}),Gy(e,`${JSON.stringify(r,null,2)}
|
|
3
|
+
`)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Xc(e){return v(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Qe(e){return String(e).replace(/\/+$/,"")}function Do(e){return String(e||"").replace(/\s+/g," ").trim()}function Mo(e){try{return qc(e).size}catch{return 0}}function Uo(e){try{return qc(e).mtime.toISOString()}catch{return null}}function Wo(e,r){return jy(e)?Bi(e,"utf8").split(`
|
|
4
4
|
`).slice(-r).join(`
|
|
5
|
-
`):""}function
|
|
6
|
-
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=Gc("git",r,ue({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 Vc(e,r,t){let n=ne(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 Do(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 Mi(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Mi(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=ne(e,["rev-parse",n]);if(f.status!==0)return Mi(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 l=Vc(e,i,a),c=Vc(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Mi(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var we=D(()=>{"use strict";w();at()});import{homedir as Ui}from"node:os";import Ir from"node:path";function Jc(e){return e==="~"?Ui():e.startsWith("~/")||e.startsWith("~\\")?Ir.join(Ui(),e.slice(2)):e}function lt(e){return Ir.resolve(Jc(e))}function ke(e){let r=Jc(e),t=Ir.resolve(r),n=Ir.resolve(Ui());return t===n?"~":t.startsWith(`${n}${Ir.sep}`)?`~/${Ir.relative(n,t).split(Ir.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function q(e){return ke(e)}var He=D(()=>{"use strict"});import{existsSync as Li,readFileSync as zc}from"node:fs";import{homedir as Ky}from"node:os";import er from"node:path";import{fileURLToPath as $y}from"node:url";function Vy(e){let r=er.join(e,"package.json");if(!Li(r))return null;try{let t=JSON.parse(zc(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Gy(e){return Vy(e)==="kynver"}function qc(e){let r=er.resolve(e);if(!Li(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?er.resolve(n):null}function Yy(e=import.meta.url){let r=er.dirname($y(e));for(let t=0;t<8;t+=1){let n=er.join(r,"package.json");if(Li(n))try{if(JSON.parse(zc(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=er.dirname(r);if(o===r)break;r=o}return null}function Wi(e,r,t,n){if(!t)return;let o=er.resolve(t);e.has(o)||Gy(o)&&(e.add(o),r.push({repo:o,source:n}))}function Xc(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Wi(t,n,qc(r),"cwd_git");let o=Yy(e?.runtimeModuleUrl??import.meta.url);o&&Wi(t,n,qc(o),"runtime_checkout");let s=Ky();for(let i of jy)Wi(t,n,lt(er.join(s,i)),"well_known_path");return n}function ct(e){return Xc(e)[0]??null}function Jy(e){let r=er.resolve(e).replace(/\\/g,"/");return r.includes("/.kynver/harness/worktrees/")||r.includes("/.openclaw/harness/worktrees/")||r.includes("/kynver-harness/")||r.includes("/openclaw/harness/worktrees/")}function Mo(e){let r=Xc(e);return r.find(n=>!Jy(n.repo))??r[0]??null}var jy,Uo=D(()=>{"use strict";we();He();jy=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function ut(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"forge"}function Qc(e,r){return e[r]?.trim()||null}function xe(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:ut(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Qc(e,"KYNVER_BOX_KIND");if(o)return{boxKind:ut(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Qc(e,"KYNVER_AGENT_OS_SLUG");return s&&t.push(`KYNVER_AGENT_OS_SLUG=${s} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!s,warnings:t}}function Fe(e={},r=process.env){return xe(r,e).boxKind}var Ee=D(()=>{"use strict"});function Bi(e,r){return e==="forge"?4:Math.max(1,r)}function rr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}function dt(e,r){return e==="forge"&&r>4}var dn=D(()=>{"use strict"});import{readFileSync as qy}from"node:fs";import Zc from"node:os";function pn(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Zc.freemem()}if(process.platform==="linux")try{let t=qy("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Zc.freemem()}var Wo=D(()=>{"use strict"});import{existsSync as zy,readFileSync as Xy,statfsSync as Qy}from"node:fs";function Hi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!zy(e))continue;let r=Xy(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function eu(e={}){if(!(e.forceWsl===void 0?Hi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||pt,n=e.wslHostFreeWarnBytes??Zy,o=e.wslHostFreeCriticalBytes??eR,s=e.statfs??Qy,i;try{i=s(t)}catch(h){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${h.message}`,probeError:h.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,p=(a/(1024*1024*1024)).toFixed(1),m=null;return f||(m=`Windows host disk ${t} at ${d?"critical":"warning"}: ${p} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${rR()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:m,probeError:null}}function rR(){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 Zy,eR,pt,Fi=D(()=>{"use strict";Zy=25*1024*1024*1024,eR=12*1024*1024*1024,pt="/mnt/c"});import{execFileSync as ru}from"node:child_process";import{existsSync as Bo,readFileSync as tu,readdirSync as tR,statSync as nR}from"node:fs";import Ki from"node:path";function Lo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function nu(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=ru("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()||pt;return r&&Bo(Ki.join(t,"Users",r))?r:null}function lR(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()||pt,n=e.windowsUser??nu();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function cR(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 uR(){try{if(Bo("/proc/sys/kernel/core_pattern"))return tu("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return ru("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function dR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function pR(e,r=pt){let t=Ki.join(r,"Users",e,".wslconfig");if(!Bo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=tu(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 l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function mR(e){if(!Bo(e))return[];let r=tR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Ki.join(e,n.name);try{let s=nR(o),i=cR(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 fr(e={}){if(!(e.forceWsl===void 0?Hi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||pt,n=e.windowsUser??nu(),o=e.warnBelowBytes??Lo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",oR),s=e.criticalBelowBytes??Lo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",sR),i=e.warnCount??Lo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",iR),a=e.criticalCount??Lo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",aR),l=(e.readCorePattern??uR)(),c=dR(l),u=null;n&&(u=(e.readWslConfig??pR)(n,t));let d=u?.maxCrashDumpCount??null,f=d===-1,p=lR({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!p)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:null,probeError:"windows_user_unresolved"};let m;try{m=(e.listDumps??mR)(p)}catch(F){return{ok:!1,path:p,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:`WSL crash dump probe failed at ${p}: ${F.message}`,probeError:F.message}}let h=m.reduce((F,P)=>F+P.bytes,0),k=m.length,g=[...new Set(m.map(F=>F.executableHint).filter(F=>!!F))],y=h>=s,I=h>=o,_=k>=a,E=k>=i,Y=!(y||_||I||E),$=null;if(!Y){let F=y||_?"critical":"warning",P=(h/1024**3).toFixed(1),B=g.length>0?g.join(", "):"unknown";$=`WSL crash dumps ${F}: ${k} file(s), ${P} GiB at ${p} (executables: ${B}). `+fR({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:Y,path:p,windowsUser:n,dumpCount:k,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:m,executables:g,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:$,probeError:null}}function fR(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 oR,sR,iR,aR,mn=D(()=>{"use strict";Fi();oR=5*1024*1024*1024,sR=10*1024*1024*1024,iR=2,aR=4});import{statfsSync as gR}from"node:fs";function Ke(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??hR,n=e.diskFreeCriticalBytes??kR,o=e.diskMaxUsedPercent??yR,s=e.diskHardMaxUsedPercent??RR,i=gR(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,f=a<t*2,p=f&&c>o,m=f&&c>s,h=!u&&!d&&!p&&!m,k=e.skipWslHostCheck?null:eu(e.wslHost),g=e.skipWslCrashDumpCheck?null:fr(e.wslCrashDumps),y=h&&(k?k.ok:!0)&&(g?g.ok:!0),I=null;return y||(I=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,m?`used percent above hard cap ${s}%`:null,p?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,g&&!g.ok?g.reason:null].filter(Boolean).join("; ")),vR({ok:y,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:I,wslHost:k,wslCrashDumps:g?{ok:g.ok,path:g.path,dumpCount:g.dumpCount,totalBytes:g.totalBytes,executables:g.executables,wslCaptureEnabled:g.wslCaptureEnabled,dumpsDisabledInWslConfig:g.dumpsDisabledInWslConfig,reason:g.reason,probeError:g.probeError}:null})}function vR(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 hR,kR,yR,RR,fn=D(()=>{"use strict";mn();Fi();hR=30*1024*1024*1024,kR=15*1024*1024*1024,yR=80,RR=90});import{existsSync as ou}from"node:fs";import{homedir as iu}from"node:os";import gr from"node:path";function le(e){let r=gr.resolve(lt(e.trim()));for(;bR.has(gr.basename(r));)r=gr.dirname(r);return r}function ye(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return le(e);let r=v().harnessRoot?.trim();if(r)return le(r);let t=gr.join(iu(),".kynver","harness");return ou(t)?t:ou(su)?su:t}function Ce(e){return gr.join(le(e),"runs")}function hr(e){return gr.join(le(e),"worktrees")}function mt(){let e=ye();return{harnessRoot:e,runsDir:Ce(e),worktreesDir:hr(e)}}function ft(e,r){return gr.join(e,b(r))}var su,bR,_e=D(()=>{"use strict";O();He();w();su=gr.join(iu(),".openclaw","harness"),bR=new Set(["runs","worktrees"])});import{existsSync as SR,readdirSync as wR,statSync as CR}from"node:fs";import gt from"node:path";function Z(){return mt()}function L(e){let{runsDir:r}=Z();return C(gt.join(ft(r,b(e)),"run.json"))}function z(){let{runsDir:e}=Z();return au(e)}function Ho(e){return au(Ce(e))}function _R(e){try{return CR(e).isDirectory()}catch{return!1}}function au(e){if(!SR(e))return[];let r=[];for(let t of wR(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=gt.join(e,t.name);if(!_R(n))continue;let o=C(gt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function pe(e,r){let{runsDir:t}=Z();return C(gt.join(ft(t,b(e)),"workers",b(r),"worker.json"))}function Te(e){let{runsDir:r}=Z();se(gt.join(ft(r,e.id),"run.json"),e)}function K(e,r){let{runsDir:t}=Z();se(gt.join(ft(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=Z();return gn(r,e)}function gn(e,r){return ft(Ce(e),b(r))}var T=D(()=>{"use strict";_e();w()});import{existsSync as xR,readdirSync as ER}from"node:fs";import PR from"node:path";function me(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(b(n));let t=PR.join(x(e.id),"workers");if(!xR(t))return[...r];for(let n of ER(t,{withFileTypes:!0}))n.isDirectory()&&r.add(b(n.name));return[...r]}var Or=D(()=>{"use strict";T();w()});function $i(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 lu(e){let r=e.trim();if(!r)return null;let t=$i(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=$i(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=$i(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function cu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?lu(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=lu(t);return n||t}var uu=D(()=>{"use strict"});import{existsSync as AR,readFileSync as IR}from"node:fs";function du(e){return e==="complete"}function ht(e){return du(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Re(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!AR(e))return r;let t=Date.now()+OR,n=new Date(t).toISOString(),o=IR(e,"utf8").split(`
|
|
7
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
8
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
9
|
-
${e.stderr}`.trim(),t=
|
|
10
|
-
`).filter(Boolean);for(let n of t){let o=it(n);if(!o)continue;let s=tv(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 l=a.find(c=>c?.type==="tool_use");l&&(r.currentTool=String(l.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,l=hu(a);l&&(r.currentTool=l)}let i=ku(o);i&&ov(r,Ji({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&nv(r,o)}return r}function sv(e){let r=ku(e);if(!r)return;let t=Ji({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Io(r.command).slice(0,120);return t.kind==="audit_findings"?`[audit:findings] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="search_no_matches"?`[search:no_matches] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="command_failure"?`[command:failed] ${t.summary}${n?` \xB7 ${n}`:""}`:`[command:ok] exit 0${n?` \xB7 ${n}`:""}`}function yu(e){if(e.type==="system"&&e.subtype)return`[system:${e.subtype}] ${String(e.status||e.cwd||"")}`.trim();if(e.type==="stream_event"&&e.event&&typeof e.event=="object"){let r=e.event.type;if(r==="content_block_start"){let t=e.event.content_block;if(t?.type==="tool_use")return`[tool:start] ${t.name}`}if(r==="content_block_delta"){let t=e.event.delta;if(t?.partial_json)return`[tool:input] ${t.partial_json}`}return r==="message_stop"?"[message:stop]":r?`[stream:${r}]`:void 0}if(e.type==="assistant"&&e.message&&typeof e.message=="object"){let r=e.message.content;if(Array.isArray(r)){let t=r.find(o=>o?.type==="text");if(t)return`[assistant] ${Io(String(t.text||""))}`;let n=r.find(o=>o?.type==="tool_use");if(n)return`[tool] ${n.name} ${JSON.stringify(n.input||{})}`}}if(e.type==="user"&&e.tool_use_result){let r=e.tool_use_result;return`[tool:result] stdout=${JSON.stringify(r.stdout||"")} stderr=${JSON.stringify(r.stderr||"")}`}if(e.type==="tool_call"){let r=String(e.subtype||""),t=r==="completed"?sv(e):void 0;if(t)return t;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:void 0,o=hu(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Io(String(e.result||""))}`.trim()}var Ko=D(()=>{"use strict";gu();w()});function av(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Ru(e){let r=(e??"").trim();if(!r)return null;for(let t of iv)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${av(r)}`};return null}var iv,vu=D(()=>{"use strict";iv=[{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 bu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function lv(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 cv(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:bu(e.head)}function uv(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 kt(e){if(e.alive||lv(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=bu(e.headCommit)??cv(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:uv(s,r,t)}}var $o=D(()=>{"use strict"});function yn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function dv(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 pv(e){if(yn(e.headCommit)||yn(e.prUrl)||yn(e.artifactBundlePath)||yn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&yn(r.head))}function yt(e){return dv(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:pv(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 Su(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var jo=D(()=>{"use strict"});function qi(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 wu(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Rt(e){let r=e.trim();if(!r)return null;let t=qi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=qi(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=qi(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=wu(l);for(let u of n){let d=wu(u);d>c&&(l=u,c=d)}return l}var Vo=D(()=>{"use strict"});function Cu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function _u(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function mv(e){return new Set(e.map(r=>_u(Cu(r)??r)).filter(Boolean))}function xu(e,r,t){let n=Cu(e)??e;if(!n)return"unrelated";let o=_u(n);return mv(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Eu=D(()=>{"use strict"});function vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function fv(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Tr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:vt(e)}function Go(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pu(e){let r=null;if(typeof e=="string"){let o=Rt(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=Tr(String(s.prUrl??s.pr_url??"")),a=vt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:vt(s.mergeCommit??s.merge_commit),reason:vt(s.reason)})}return n}function Au(e,r){let t=[],n=Tr(vt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Tr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Iu(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(!fv(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?Tr(vt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Tr(r.targetPrUrls[0]):null):null;if(s){let d=Au(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let h of d)if(h!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${h} instead of canonical target ${s}`}}let m=Pu(n).find(h=>h.prUrl===s);if(!m||m.outcome!=="merged"&&!(m.reason?.trim()&&(m.outcome==="skipped"||m.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Pu(n),a=new Map(i.map(d=>[Go(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Go(Tr(d)??d)).filter(Boolean)),c=Au(t,n);if(r.landingOnly)for(let d of c){let f=a.get(Go(d)),p=xu(d,r.targetPrUrls,f);if(!(p==="contract"||p==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let f=Go(Tr(d)??d),p=a.get(f);if(!p){u.push(f);continue}p.outcome!=="merged"&&!p.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Ou(e){if(e.blocked)return e.detail??e.reason}var Nu=D(()=>{"use strict";Vo();Eu()});function hv(e){let r=Date.now();if(e.completionBlocker&&!Tu(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&yv(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=yt(o);if(s.blocked){let i=Su(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Iu({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ou(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(kv(e))return{state:"done",reason:"empty abandoned worker record"};let o=Ru(e.error);if(o)return{state:"blocked",reason:o.reason};let s=kt({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>gv)return{state:"needs_attention",reason:`no first stream event ${Di(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>bt?{state:"stale",reason:`no log/event/heartbeat activity for ${Di(n)}s`}:{state:"ok",reason:"recent activity"}}function Tu(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function kv(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 yv(e){let r=null;if(typeof e=="string"?r=Rt(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 Rv(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??ht(t))}function M(e,r={}){let t=Fo(e.stdoutPath),n=Re(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Rv(e,t.finalResult,n),i=o?!1:H(e.pid),a=Oo(e.stdoutPath),l=Oo(e.stderrPath),c=Oo(e.heartbeatPath),u=un(e.worktreePath),d=Do(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=jc([t.lastEventAt,n.lastHeartbeatAt,No(e.stdoutPath),No(e.stderrPath),No(e.heartbeatPath)]),p=t.error||!i&&!s&&To(e.stderrPath,10).trim()||void 0,m=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,h=Tu(m)?null:m,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,g=hv({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:p,changedFiles:u,gitAncestry:d,completionBlocker:h,landingContract:k,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),y=h||g.state==="blocked"?"blocked":o||g.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:y,attention:g,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,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:p,changedFiles:u,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 ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function St(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Rn(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var gv,bt,X=D(()=>{"use strict";Nr();Ko();vu();$o();we();jo();Nu();Vo();w();gv=18e4,bt=6e5});import{readFileSync as vv}from"node:fs";function bv(e){if(!e||process.platform!=="linux")return null;try{return vv(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Yo(e){if(!e.pid||process.platform!=="linux")return!0;let r=bv(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function wt(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=M(e);return r.alive&&!Yo(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var vn=D(()=>{"use strict";X()});import Mu from"node:os";import Sv from"node:path";function Du(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function wv(e=v(),r,t){let n=Du(e.perWorkerMemBytes,bn),o=Du(e.memReserveBytes,Sn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):wn)),i=qo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Mu.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function zi(e,r={}){let t=r.perWorkerMemBytes??bn,n=r.memReserveBytes??Sn,o=r.memUtilization??wn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Jo)}function Cv(){return pn()}function _v(e){let r=0;for(let t of me(e)){let n=C(Sv.join(x(e.id),"workers",b(t),"worker.json"),void 0);!n||!wt(n)||r++}return r}function xv(){let e=0;for(let r of z())e+=_v(r);return e}function tr(e){let r=e.config??v(),t=e.totalMemBytes??Mu.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=wv(r,e.configuredMaxWorkersOverride,t),c=Fe(r),u=e.freeMemBytes??Cv(),d=e.activeWorkers??xv(),f=Math.max(0,Math.floor(t*s)-o),p=Math.max(0,Math.floor(f/n)),m=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,k=rr(c,i??h),g=Math.max(0,Math.min(k,p)),y=Math.max(0,g-d),_=Math.min(y,m),U=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Ke({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});U&&!U.ok&&(_=0);let Y=null;return _<=0&&(U&&!U.ok?Y=U.reason??"disk gate blocked worker admission":d>=g?Y=`at worker limit (${d}/${g} running)`:m<=0?Y="insufficient free memory \u2014 waiting for workers to finish":Y="no worker slots available"),{ok:_>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:p,maxConcurrentWorkers:g,activeWorkers:d,slotsAvailable:_,reason:Y,...U?{diskGate:U}:{}}}var bn,Sn,wn,Jo,Ct=D(()=>{"use strict";Wo();O();Ee();dn();zo();fn();T();Or();vn();w();bn=500*1024*1024,Sn=4*1024*1024*1024,wn=.85,Jo=64});function Dr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function qo(e){let r=e.config??{},t=e.env??process.env,n=Dr(r.perWorkerMemBytes,bn),o=Dr(r.memReserveBytes,Sn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):wn)),i=zi(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Dr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Dr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Jo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Dr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Jo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function Xi(e={}){let r=e.totalMemBytes??0,t=zi(r,{perWorkerMemBytes:Dr(e.config?.perWorkerMemBytes,bn),memReserveBytes:Dr(e.config?.memReserveBytes,Sn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):wn}),n=e.diskGateOk??!0,o=n?t:Math.max(1,Math.min(t,4));return{totalMemBytes:r,autoCap:t,recommendedMaxWorkers:o,diskPath:e.diskPath??"/",diskGateOk:n,diskFreeBytes:e.diskFreeBytes??null}}var zo=D(()=>{"use strict";Ct()});import{existsSync as Uu,mkdirSync as Ev,readFileSync as Wu,writeFileSync as Pv}from"node:fs";import{homedir as Av}from"node:os";import Lu from"node:path";function Qi(e){let r=new Map;for(let t of e.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),r.set(s,i)}return r}function Iv(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
5
|
+
`):""}function Qc(e){return e?Bi(zc.resolve(e),"utf8"):""}function Or(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function mr(e){return new Promise(r=>setTimeout(r,e))}function H(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function fr(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function Zc(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 Hi(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=D(()=>{"use strict"});function zy(e){return Jy.has(e)?!0:qy.some(r=>e.endsWith(r))}function Ze(e){let r={...e};for(let t of Object.keys(r))zy(t)&&delete r[t];return r}var Yy,Jy,qy,ut=D(()=>{"use strict";Yy=["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"],Jy=new Set(Yy),qy=["_SECRET","_API_KEY"]});import{spawnSync as ru}from"node:child_process";function pe(e,r,t={}){let n=ru("git",r,de({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);pr(o)}return n.stdout||""}function tu(e){pe(e,["rev-parse","--show-toplevel"])}function mn(e){return pe(e,["status","--short"],{allowFailure:!0}).split(`
|
|
6
|
+
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=ru("git",r,de({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 eu(e,r,t){let n=ne(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 Lo(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 Fi(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Fi(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=ne(e,["rev-parse",n]);if(f.status!==0)return Fi(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 l=eu(e,i,a),c=eu(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Fi(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var we=D(()=>{"use strict";w();ut()});import{homedir as Ki}from"node:os";import Nr from"node:path";function nu(e){return e==="~"?Ki():e.startsWith("~/")||e.startsWith("~\\")?Nr.join(Ki(),e.slice(2)):e}function dt(e){return Nr.resolve(nu(e))}function ye(e){let r=nu(e),t=Nr.resolve(r),n=Nr.resolve(Ki());return t===n?"~":t.startsWith(`${n}${Nr.sep}`)?`~/${Nr.relative(n,t).split(Nr.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function q(e){return ye(e)}var He=D(()=>{"use strict"});import{existsSync as ji,readFileSync as su}from"node:fs";import{homedir as Xy}from"node:os";import er from"node:path";import{fileURLToPath as Qy}from"node:url";function eR(e){let r=er.join(e,"package.json");if(!ji(r))return null;try{let t=JSON.parse(su(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function rR(e){return eR(e)==="kynver"}function ou(e){let r=er.resolve(e);if(!ji(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?er.resolve(n):null}function tR(e=import.meta.url){let r=er.dirname(Qy(e));for(let t=0;t<8;t+=1){let n=er.join(r,"package.json");if(ji(n))try{if(JSON.parse(su(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=er.dirname(r);if(o===r)break;r=o}return null}function $i(e,r,t,n){if(!t)return;let o=er.resolve(t);e.has(o)||rR(o)&&(e.add(o),r.push({repo:o,source:n}))}function iu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];$i(t,n,ou(r),"cwd_git");let o=tR(e?.runtimeModuleUrl??import.meta.url);o&&$i(t,n,ou(o),"runtime_checkout");let s=Xy();for(let i of Zy)$i(t,n,dt(er.join(s,i)),"well_known_path");return n}function pt(e){return iu(e)[0]??null}function nR(e){let r=er.resolve(e).replace(/\\/g,"/");return r.includes("/.kynver/harness/worktrees/")||r.includes("/.openclaw/harness/worktrees/")||r.includes("/kynver-harness/")||r.includes("/openclaw/harness/worktrees/")}function Bo(e){let r=iu(e);return r.find(n=>!nR(n.repo))??r[0]??null}var Zy,Ho=D(()=>{"use strict";we();He();Zy=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function mt(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"forge"}function au(e,r){return e[r]?.trim()||null}function xe(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:mt(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=au(e,"KYNVER_BOX_KIND");if(o)return{boxKind:mt(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=au(e,"KYNVER_AGENT_OS_SLUG");return s&&t.push(`KYNVER_AGENT_OS_SLUG=${s} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!s,warnings:t}}function Fe(e={},r=process.env){return xe(r,e).boxKind}var Ee=D(()=>{"use strict"});function Vi(e,r){return e==="forge"?4:Math.max(1,r)}function rr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}function ft(e,r){return e==="forge"&&r>4}var fn=D(()=>{"use strict"});import{readFileSync as oR}from"node:fs";import lu from"node:os";function gn(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:lu.freemem()}if(process.platform==="linux")try{let t=oR("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return lu.freemem()}var Fo=D(()=>{"use strict"});import{existsSync as sR,readFileSync as iR,statfsSync as aR}from"node:fs";function Gi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!sR(e))continue;let r=iR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function cu(e={}){if(!(e.forceWsl===void 0?Gi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||gt,n=e.wslHostFreeWarnBytes??lR,o=e.wslHostFreeCriticalBytes??cR,s=e.statfs??aR,i;try{i=s(t)}catch(h){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${h.message}`,probeError:h.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,p=(a/(1024*1024*1024)).toFixed(1),m=null;return f||(m=`Windows host disk ${t} at ${d?"critical":"warning"}: ${p} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${uR()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:m,probeError:null}}function uR(){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 lR,cR,gt,Yi=D(()=>{"use strict";lR=25*1024*1024*1024,cR=12*1024*1024*1024,gt="/mnt/c"});import{execFileSync as uu}from"node:child_process";import{existsSync as $o,readFileSync as du,readdirSync as dR,statSync as pR}from"node:fs";import Ji from"node:path";function Ko(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function pu(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=uu("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()||gt;return r&&$o(Ji.join(t,"Users",r))?r:null}function kR(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()||gt,n=e.windowsUser??pu();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function yR(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 RR(){try{if($o("/proc/sys/kernel/core_pattern"))return du("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return uu("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function bR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function vR(e,r=gt){let t=Ji.join(r,"Users",e,".wslconfig");if(!$o(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=du(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 l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function SR(e){if(!$o(e))return[];let r=dR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Ji.join(e,n.name);try{let s=pR(o),i=yR(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 gr(e={}){if(!(e.forceWsl===void 0?Gi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||gt,n=e.windowsUser??pu(),o=e.warnBelowBytes??Ko("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",mR),s=e.criticalBelowBytes??Ko("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",fR),i=e.warnCount??Ko("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",gR),a=e.criticalCount??Ko("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",hR),l=(e.readCorePattern??RR)(),c=bR(l),u=null;n&&(u=(e.readWslConfig??vR)(n,t));let d=u?.maxCrashDumpCount??null,f=d===-1,p=kR({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!p)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:null,probeError:"windows_user_unresolved"};let m;try{m=(e.listDumps??SR)(p)}catch(F){return{ok:!1,path:p,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:`WSL crash dump probe failed at ${p}: ${F.message}`,probeError:F.message}}let h=m.reduce((F,P)=>F+P.bytes,0),k=m.length,g=[...new Set(m.map(F=>F.executableHint).filter(F=>!!F))],y=h>=s,I=h>=o,_=k>=a,E=k>=i,Y=!(y||_||I||E),$=null;if(!Y){let F=y||_?"critical":"warning",P=(h/1024**3).toFixed(1),B=g.length>0?g.join(", "):"unknown";$=`WSL crash dumps ${F}: ${k} file(s), ${P} GiB at ${p} (executables: ${B}). `+wR({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:Y,path:p,windowsUser:n,dumpCount:k,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:m,executables:g,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:$,probeError:null}}function wR(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 mR,fR,gR,hR,hn=D(()=>{"use strict";Yi();mR=5*1024*1024*1024,fR=10*1024*1024*1024,gR=2,hR=4});import{statfsSync as CR}from"node:fs";function Ke(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??_R,n=e.diskFreeCriticalBytes??xR,o=e.diskMaxUsedPercent??ER,s=e.diskHardMaxUsedPercent??PR,i=CR(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,f=a<t*2,p=f&&c>o,m=f&&c>s,h=!u&&!d&&!p&&!m,k=e.skipWslHostCheck?null:cu(e.wslHost),g=e.skipWslCrashDumpCheck?null:gr(e.wslCrashDumps),y=h&&(k?k.ok:!0)&&(g?g.ok:!0),I=null;return y||(I=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,m?`used percent above hard cap ${s}%`:null,p?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,g&&!g.ok?g.reason:null].filter(Boolean).join("; ")),AR({ok:y,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:I,wslHost:k,wslCrashDumps:g?{ok:g.ok,path:g.path,dumpCount:g.dumpCount,totalBytes:g.totalBytes,executables:g.executables,wslCaptureEnabled:g.wslCaptureEnabled,dumpsDisabledInWslConfig:g.dumpsDisabledInWslConfig,reason:g.reason,probeError:g.probeError}:null})}function AR(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 _R,xR,ER,PR,kn=D(()=>{"use strict";hn();Yi();_R=30*1024*1024*1024,xR=15*1024*1024*1024,ER=80,PR=90});import{existsSync as mu}from"node:fs";import{homedir as gu}from"node:os";import hr from"node:path";function ce(e){let r=hr.resolve(dt(e.trim()));for(;IR.has(hr.basename(r));)r=hr.dirname(r);return r}function Re(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ce(e);let r=b().harnessRoot?.trim();if(r)return ce(r);let t=hr.join(gu(),".kynver","harness");return mu(t)?t:mu(fu)?fu:t}function Ce(e){return hr.join(ce(e),"runs")}function kr(e){return hr.join(ce(e),"worktrees")}function ht(){let e=Re();return{harnessRoot:e,runsDir:Ce(e),worktreesDir:kr(e)}}function kt(e,r){return hr.join(e,v(r))}var fu,IR,_e=D(()=>{"use strict";O();He();w();fu=hr.join(gu(),".openclaw","harness"),IR=new Set(["runs","worktrees"])});import{existsSync as OR,readdirSync as NR,statSync as TR}from"node:fs";import yt from"node:path";function Z(){return ht()}function L(e){let{runsDir:r}=Z();return C(yt.join(kt(r,v(e)),"run.json"))}function z(){let{runsDir:e}=Z();return hu(e)}function jo(e){return hu(Ce(e))}function DR(e){try{return TR(e).isDirectory()}catch{return!1}}function hu(e){if(!OR(e))return[];let r=[];for(let t of NR(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=yt.join(e,t.name);if(!DR(n))continue;let o=C(yt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function me(e,r){let{runsDir:t}=Z();return C(yt.join(kt(t,v(e)),"workers",v(r),"worker.json"))}function Te(e){let{runsDir:r}=Z();se(yt.join(kt(r,e.id),"run.json"),e)}function K(e,r){let{runsDir:t}=Z();se(yt.join(kt(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=Z();return yn(r,e)}function yn(e,r){return kt(Ce(e),v(r))}var T=D(()=>{"use strict";_e();w()});import{existsSync as MR,readdirSync as UR}from"node:fs";import WR from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=WR.join(x(e.id),"workers");if(!MR(t))return[...r];for(let n of UR(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Tr=D(()=>{"use strict";T();w()});function qi(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 ku(e){let r=e.trim();if(!r)return null;let t=qi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=qi(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=qi(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function yu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?ku(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=ku(t);return n||t}var Ru=D(()=>{"use strict"});import{existsSync as LR,readFileSync as BR}from"node:fs";function bu(e){return e==="complete"}function tr(e){return bu(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function ae(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!LR(e))return r;let t=Date.now()+HR,n=new Date(t).toISOString(),o=BR(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let s of o){let i=ct(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),bu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=yu(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(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var HR,yr=D(()=>{"use strict";Ru();w();HR=6e4});function KR(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function $R(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 jR(e){let r=KR(e[0]);return!!(r&&FR.has(r))}function zi(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Xi(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function VR(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function GR(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;vu.has(n)&&(t+=1);continue}r.push(n)}}return r}function YR(e){let r=!1,t=e.map((o,s)=>{let i=VR(o),a=e[s-1];return a&&vu.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=GR(t);if(n.length===2){let[o,s]=n;if(Xi(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(zi(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 Qi(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=$R(i.trim());if(!a.length||!jR(a))return i;let l=YR(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Su(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 JR(e){let{pattern:r,target:t}=Su(e);return r?Xi(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:zi(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function qR(e){let{pattern:r,target:t}=Su(e);if(!r)return null;if(Xi(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&zi(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function zR(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 XR(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 Zi(e){let r=e.meta?.trim()||(e.command?XR(e.command):null)||null;if(r){let t=JR(r),n=zR(t);if(n)return n;let o=qR(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=Qi(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 FR,vu,wu=D(()=>{"use strict";FR=new Set(["rg","ripgrep","grep"]),vu=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Rn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function rb(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 bn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function tb(e){let r=e.metadata;if(!bn(r))return null;let t=r.vulnerabilities;if(!bn(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 nb(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 ob(e,r){let t=e.error;if(bn(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?Rn(o.split(`
|
|
8
|
+
`).find(Boolean)??o,160):"npm audit failed"}function sb(e){let r=`${e.stdout}
|
|
9
|
+
${e.stderr}`.trim(),t=rb(r);if(!t||!bn(t)){let o=Rn(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(bn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${ob(t,e.stderr)}`};let n=tb(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:nb(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function ib(e){return QR.test(e)}function ab(e){return ZR.test(e)}function lb(e){let r=Zi({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&&eb.test(n)){let i=Rn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Qi(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=Rn(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 ea(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(ib(e.command)){let i=r.trim()||n.trim()||t.trim();return sb({exitCode:e.exitCode,stdout:i,stderr:t})}if(ab(e.command))return lb({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Zi({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=Rn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var QR,ZR,eb,Cu=D(()=>{"use strict";wu();QR=/\bnpm\s+audit\b/i,ZR=/\b(rg|ripgrep)\b/i,eb=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as cb,readFileSync as ub}from"node:fs";function db(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function _u(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 pb(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 xu(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 l=a,c=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:c,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function mb(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Rt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!cb(e))return r;let t=ub(e,"utf8").split(`
|
|
10
|
+
`).filter(Boolean);for(let n of t){let o=ct(n);if(!o)continue;let s=db(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 l=a.find(c=>c?.type==="tool_use");l&&(r.currentTool=String(l.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,l=_u(a);l&&(r.currentTool=l)}let i=xu(o);i&&mb(r,ea({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&pb(r,o)}return r}function fb(e){let r=xu(e);if(!r)return;let t=ea({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Do(r.command).slice(0,120);return t.kind==="audit_findings"?`[audit:findings] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="search_no_matches"?`[search:no_matches] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="command_failure"?`[command:failed] ${t.summary}${n?` \xB7 ${n}`:""}`:`[command:ok] exit 0${n?` \xB7 ${n}`:""}`}function Eu(e){if(e.type==="system"&&e.subtype)return`[system:${e.subtype}] ${String(e.status||e.cwd||"")}`.trim();if(e.type==="stream_event"&&e.event&&typeof e.event=="object"){let r=e.event.type;if(r==="content_block_start"){let t=e.event.content_block;if(t?.type==="tool_use")return`[tool:start] ${t.name}`}if(r==="content_block_delta"){let t=e.event.delta;if(t?.partial_json)return`[tool:input] ${t.partial_json}`}return r==="message_stop"?"[message:stop]":r?`[stream:${r}]`:void 0}if(e.type==="assistant"&&e.message&&typeof e.message=="object"){let r=e.message.content;if(Array.isArray(r)){let t=r.find(o=>o?.type==="text");if(t)return`[assistant] ${Do(String(t.text||""))}`;let n=r.find(o=>o?.type==="tool_use");if(n)return`[tool] ${n.name} ${JSON.stringify(n.input||{})}`}}if(e.type==="user"&&e.tool_use_result){let r=e.tool_use_result;return`[tool:result] stdout=${JSON.stringify(r.stdout||"")} stderr=${JSON.stringify(r.stderr||"")}`}if(e.type==="tool_call"){let r=String(e.subtype||""),t=r==="completed"?fb(e):void 0;if(t)return t;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:void 0,o=_u(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Do(String(e.result||""))}`.trim()}var vn=D(()=>{"use strict";Cu();w()});function hb(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Vo(e){let r=(e??"").trim();if(!r)return null;for(let t of gb)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${hb(r)}`};return null}var gb,ra=D(()=>{"use strict";gb=[{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 Pu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kb(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 yb(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Pu(e.head)}function Rb(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function bt(e){if(e.alive||kb(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Pu(e.headCommit)??yb(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:Rb(s,r,t)}}var Go=D(()=>{"use strict"});function Sn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function bb(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 vb(e){if(Sn(e.headCommit)||Sn(e.prUrl)||Sn(e.artifactBundlePath)||Sn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Sn(r.head))}function vt(e){return bb(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:vb(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 Au(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Yo=D(()=>{"use strict"});function ta(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 Iu(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function St(e){let r=e.trim();if(!r)return null;let t=ta(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ta(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ta(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Iu(l);for(let u of n){let d=Iu(u);d>c&&(l=u,c=d)}return l}var Jo=D(()=>{"use strict"});function Ou(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function Nu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Sb(e){return new Set(e.map(r=>Nu(Ou(r)??r)).filter(Boolean))}function Tu(e,r,t){let n=Ou(e)??e;if(!n)return"unrelated";let o=Nu(n);return Sb(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Du=D(()=>{"use strict"});function wt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function wb(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Dr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:wt(e)}function qo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Mu(e){let r=null;if(typeof e=="string"){let o=St(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=Dr(String(s.prUrl??s.pr_url??"")),a=wt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:wt(s.mergeCommit??s.merge_commit),reason:wt(s.reason)})}return n}function Uu(e,r){let t=[],n=Dr(wt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Dr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Wu(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(!wb(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?Dr(wt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Dr(r.targetPrUrls[0]):null):null;if(s){let d=Uu(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let h of d)if(h!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${h} instead of canonical target ${s}`}}let m=Mu(n).find(h=>h.prUrl===s);if(!m||m.outcome!=="merged"&&!(m.reason?.trim()&&(m.outcome==="skipped"||m.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Mu(n),a=new Map(i.map(d=>[qo(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>qo(Dr(d)??d)).filter(Boolean)),c=Uu(t,n);if(r.landingOnly)for(let d of c){let f=a.get(qo(d)),p=Tu(d,r.targetPrUrls,f);if(!(p==="contract"||p==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let f=qo(Dr(d)??d),p=a.get(f);if(!p){u.push(f);continue}p.outcome!=="merged"&&!p.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Lu(e){if(e.blocked)return e.detail??e.reason}var Bu=D(()=>{"use strict";Jo();Du()});function _b(e){let r=Date.now();if(e.completionBlocker&&!Hu(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Eb(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=vt(o);if(s.blocked){let i=Au(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Wu({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Lu(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(xb(e))return{state:"done",reason:"empty abandoned worker record"};let o=Vo(e.error);if(o)return{state:"blocked",reason:o.reason};let s=bt({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Cb)return{state:"needs_attention",reason:`no first stream event ${Hi(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ct?{state:"stale",reason:`no log/event/heartbeat activity for ${Hi(n)}s`}:{state:"ok",reason:"recent activity"}}function Hu(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function xb(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 Eb(e){let r=null;if(typeof e=="string"?r=St(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 Pb(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??tr(t))}function M(e,r={}){let t=Rt(e.stdoutPath),n=ae(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Pb(e,t.finalResult,n),i=o?!1:H(e.pid),a=Mo(e.stdoutPath),l=Mo(e.stderrPath),c=Mo(e.heartbeatPath),u=mn(e.worktreePath),d=Lo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=Zc([t.lastEventAt,n.lastHeartbeatAt,Uo(e.stdoutPath),Uo(e.stderrPath),Uo(e.heartbeatPath)]),p=t.error||!i&&!s&&Wo(e.stderrPath,10).trim()||void 0,m=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,h=Hu(m)?null:m,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,g=_b({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:p,changedFiles:u,gitAncestry:d,completionBlocker:h,landingContract:k,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),y=h||g.state==="blocked"?"blocked":o||g.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:y,attention:g,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,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:p,changedFiles:u,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 ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function _t(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function wn(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var Cb,Ct,X=D(()=>{"use strict";yr();vn();ra();Go();we();Yo();Bu();Jo();w();Cb=18e4,Ct=6e5});import{readFileSync as Ab}from"node:fs";function Ib(e){if(!e||process.platform!=="linux")return null;try{return Ab(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function zo(e){if(!e.pid||process.platform!=="linux")return!0;let r=Ib(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function xt(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=M(e);return r.alive&&!zo(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Cn=D(()=>{"use strict";X()});import Ku from"node:os";import Ob from"node:path";function Fu(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Nb(e=b(),r,t){let n=Fu(e.perWorkerMemBytes,_n),o=Fu(e.memReserveBytes,xn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):En)),i=Qo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Ku.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function na(e,r={}){let t=r.perWorkerMemBytes??_n,n=r.memReserveBytes??xn,o=r.memUtilization??En,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Xo)}function Tb(){return gn()}function Db(e){let r=0;for(let t of fe(e)){let n=C(Ob.join(x(e.id),"workers",v(t),"worker.json"),void 0);!n||!xt(n)||r++}return r}function Mb(){let e=0;for(let r of z())e+=Db(r);return e}function nr(e){let r=e.config??b(),t=e.totalMemBytes??Ku.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Nb(r,e.configuredMaxWorkersOverride,t),c=Fe(r),u=e.freeMemBytes??Tb(),d=e.activeWorkers??Mb(),f=Math.max(0,Math.floor(t*s)-o),p=Math.max(0,Math.floor(f/n)),m=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,k=rr(c,i??h),g=Math.max(0,Math.min(k,p)),y=Math.max(0,g-d),_=Math.min(y,m),U=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Ke({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});U&&!U.ok&&(_=0);let Y=null;return _<=0&&(U&&!U.ok?Y=U.reason??"disk gate blocked worker admission":d>=g?Y=`at worker limit (${d}/${g} running)`:m<=0?Y="insufficient free memory \u2014 waiting for workers to finish":Y="no worker slots available"),{ok:_>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:p,maxConcurrentWorkers:g,activeWorkers:d,slotsAvailable:_,reason:Y,...U?{diskGate:U}:{}}}var _n,xn,En,Xo,Et=D(()=>{"use strict";Fo();O();Ee();fn();Zo();kn();T();Tr();Cn();w();_n=500*1024*1024,xn=4*1024*1024*1024,En=.85,Xo=64});function Mr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Qo(e){let r=e.config??{},t=e.env??process.env,n=Mr(r.perWorkerMemBytes,_n),o=Mr(r.memReserveBytes,xn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):En)),i=na(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Mr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Mr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Xo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Mr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Xo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function oa(e={}){let r=e.totalMemBytes??0,t=na(r,{perWorkerMemBytes:Mr(e.config?.perWorkerMemBytes,_n),memReserveBytes:Mr(e.config?.memReserveBytes,xn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):En}),n=e.diskGateOk??!0,o=n?t:Math.max(1,Math.min(t,4));return{totalMemBytes:r,autoCap:t,recommendedMaxWorkers:o,diskPath:e.diskPath??"/",diskGateOk:n,diskFreeBytes:e.diskFreeBytes??null}}var Zo=D(()=>{"use strict";Et()});import{existsSync as $u,mkdirSync as Ub,readFileSync as ju,writeFileSync as Wb}from"node:fs";import{homedir as Lb}from"node:os";import Vu from"node:path";function sa(e){let r=new Map;for(let t of e.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),r.set(s,i)}return r}function Bb(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
11
11
|
`){let t=[r.trimEnd(),""];for(let[n,o]of[...e.entries()].sort(([s],[i])=>s.localeCompare(i))){let s=o.includes(" ")||o.includes("#")||o.includes('"')?`"${o.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:o;t.push(`${n}=${s}`)}return t.push(""),t.join(`
|
|
12
|
-
`)}function
|
|
13
|
-
`)}function
|
|
14
|
-
`,{mode:384})}function
|
|
15
|
-
`,{mode:384})}function oe(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Tn().apiKey}function On(e){ed({...Tn(),apiKey:e})}function qu(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Tn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Mr(e,r){ed({...Tn(),runnerToken:r,runnerTokenAgentOsId:e})}function V(e){let r=Dn(e);return r||ls("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function rd(e){return Dn(e)}function Dn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||v().apiBaseUrl;return r?Qe(String(r)):void 0}function eb(e,r){let t=e||qu(r)||(r?void 0:qu(v().agentOsId));if(t)return String(t);let n=process.env.KYNVER_RUNTIME_SECRET||process.env.KYNVER_CRON_SECRET||process.env.OPENCLAW_CRON_SECRET;if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function la(e,r,t){let n=eb(e,r);if(n)return{ok:!0,secret:n};let o=oe(),s=Dn(t?.baseUrl);if(o&&r&&s)try{let i=await Ur(r,{baseUrl:s,apiKey:o});return Mr(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function J(e,r,t){let n=await la(e,r,t);if(n.ok)return n.secret;ls(n.reason)}async function td(e,r){let t=oe(),n=Dn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Ur(e,{baseUrl:n,apiKey:t});return Mr(e,o),o}catch{return null}}async function nd(e,r,t){let n=oe(),o=Dn(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await Ur(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Mr(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function Ur(e,r){let t=r?.apiKey||oe();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${V(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}async function od(e){let r=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";r||ls("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Ur(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Mr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:q(Pt),tokenPrefix:`${t.slice(0,12)}\u2026`,note:"Scoped runner token saved; callbacks use X-Kynver-Runner-Token."},null,2))}catch(t){console.error(t instanceof Error?t.message:String(t)),process.exit(1)}}function ls(e){console.error(e),process.exit(1)}function cs(e){let r={};for(let t=0;t<e.length;t++){let n=e[t];if(!n.startsWith("--"))continue;let o=n.slice(2).replace(/-([a-z])/g,(i,a)=>a.toUpperCase()),s=e[t+1];!s||s.startsWith("--")?r[o]=!0:(r[o]=s,t++)}return r}async function us(e){let r=v(),t=Ke({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=Xi({totalMemBytes:qv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=Zv(r,e),s=aa({...r,...Qv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!Nn(s.agentOsId).ok&&ls(as(s.agentOsId)),ce(s);let i=xe(process.env,s),a=ns(s,e);a.configUpdated&&(s=v());let l,c=oe(),u=s.agentOsId;if(c&&u)try{let d=await Ur(u,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:c});Mr(u,d),l="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{l="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:q(ss),config:At(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,daemonSupervision:{hostKind:a.policy.hostKind,owner:a.policy.owner,envFilePath:a.envFilePath},...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:l??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function sd(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){On(r),console.log(JSON.stringify({ok:!0,credentialsPath:q(Pt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(sa(),Ju));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:q(Pt)},null,2))}var is,ss,Pt,zv,Xv,YT,JT,O=D(()=>{"use strict";Uo();He();w();Ee();dn();zo();fn();In();is=ia.join(Yv(),".kynver"),ss=ia.join(is,"config.json"),Pt=ia.join(is,"credentials"),zv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,Xv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);YT=500*1024*1024,JT=4*1024*1024*1024});O();import{mkdirSync as Ey,realpathSync as Py}from"node:fs";import{fileURLToPath as sO}from"node:url";O();w();sa();import rb from"node:os";function tb(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||v().apiBaseUrl;return r?Qe(String(r)):void 0}async function nb(e,r){let t=await fetch(`${e}/api/agent-os`,{headers:{Authorization:`Bearer ${r}`}});if(!t.ok)return null;let n=await t.json().catch(()=>null);if(!n?.primarySlug)return null;let o=n.items?.find(s=>s.slug===n.primarySlug);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:n.primarySlug}}async function ds(e){let r=tb(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),oe()||(typeof e.apiKey=="string"?On(e.apiKey):(await oa({...e,apiBaseUrl:r})).ok||process.exit(1));let t=oe();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await nb(r,t);n||(console.error("Could not resolve your AgentOS workspace from the account. Confirm this account has AgentOS access, then retry."),process.exit(1));let o={...e,apiBaseUrl:r,agentOsSlug:n.slug,...n.id?{agentOsId:n.id}:{},...typeof e.repo=="string"?{}:{discoverRepo:!0}};await us(o),console.log(""),console.log(` Bootstrap complete \u2014 ${rb.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online with Kynver-owned keeper supervision + local Kynver Cron when needed."),console.log(" Persistent background (Linux): `kynver start --install-systemd` or `kynver cron install --install-systemd`."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}O();import gA from"node:os";O();He();O();import sb from"node:path";import{homedir as ib}from"node:os";O();Uo();He();import id from"node:path";function ob(e){return id.resolve(lt(e.trim()))}function It(e,r,t){let n=e?.trim();return n?{repo:ob(n),source:r,persistedInConfig:t}:null}function ad(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function $e(e={}){let r=e.env??process.env,t=e.config??v(),n=It(t.defaultRepo,"config",!0);if(n)return n;let o=It(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=It(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||ad(ct({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function ld(e={}){let r=e.env??process.env,t=e.config??v(),n=It(t.defaultRepo,"config",!0);if(n)return n;let o=It(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=It(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||ad(Mo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function cd(e,r){let t={...r??v(),defaultRepo:ke(id.resolve(e))};return ce(t),t}function Mn(e){return{defaultRepo:q(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var ca=sb.join(ib(),".kynver","config.json");function Un(e){let r=v(),t=ld({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(ca),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:q(ca),resolved:Mn(t),config:At(r)};let n=cd(t.repo,r),o=Mn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(ca),resolved:o,config:At(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function ud(e=!1){let r=Un();if(e){console.log(JSON.stringify(r,null,2)),r.ok||(process.exitCode=1);return}if(!r.ok){console.error(r.reason??"Could not resolve a Kynver git checkout."),r.remediation&&console.error(r.remediation),process.exitCode=1;return}if(r.alreadyPersisted){console.log(`defaultRepo already set (${r.resolved?.defaultRepo??"unknown"}) in ${r.configPath}`);return}console.log(`Persisted defaultRepo ${r.resolved?.defaultRepo??""} in ${r.configPath}. \`kynver run create\` can omit --repo.`)}function dd(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}function De(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}import{mkdirSync as ab,readFileSync as lb,renameSync as cb,writeFileSync as ub}from"node:fs";import{homedir as db}from"node:os";import md from"node:path";function pd(e){return JSON.stringify(ua(e))}function ua(e){if(Array.isArray(e))return e.map(ua);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ua(e[t]);return r}return e}function da(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function Wn(e){if(!e||typeof e!="object")return!1;let r=e;if(typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.bundle;return!(!t||typeof t!="object"||typeof t.version!="string"||!t.version||typeof t.generatedAt!="string"||!Array.isArray(t.personas)||!t.instructions||typeof t.instructions!="object"||!t.policyThresholds||typeof t.policyThresholds!="object")}function fd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return md.join(db(),".kynver",`instruction-bundle-${r}.json`)}function gd(e,r){try{let t=fd(e);ab(md.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;ub(n,JSON.stringify(r),"utf8"),cb(n,t)}catch{}}function hd(e){try{let r=lb(fd(e),"utf8"),t=JSON.parse(r);return Wn(t)?t:null}catch{return null}}var pb="embedded-1",mb=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],fb={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
12
|
+
`)}function Pt(e=be){return $u(e)?sa(ju(e,"utf8")):new Map}function es(e,r={}){let t=r.filePath??be,n=$u(t)?ju(t,"utf8"):"",o=sa(n),s=[],i=[];for(let u of r.removeKeys??[])o.delete(u)&&i.push(u);for(let[u,d]of Object.entries(e)){if(d===void 0)continue;let f=o.get(u);o.set(u,d),f!==d&&s.push(u)}let a=sa(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=Bb(o);return l&&(Ub(Vu.dirname(t),{recursive:!0}),Wb(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var be,Rr=D(()=>{"use strict";be=Vu.join(Lb(),".kynver",".env")});var ia,Pn=D(()=>{"use strict";ia="1.5G"});import{spawnSync as Hb}from"node:child_process";function In(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:An!==void 0?An:process.platform!=="linux"?(An=!1,!1):(An=Hb("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,An)}function aa(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??ia,t=e.memorySwapMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_SWAP_MAX??"2G",n=["systemd-run","--scope","--collect","-p",`MemoryMax=${r}`,"-p",`MemorySwapMax=${t}`];return e.cwd&&n.push("--working-directory",e.cwd),n.push("--",...e.command),n}var An,rs=D(()=>{"use strict";Pn()});import{realpathSync as Fb}from"node:fs";function At(e=process.argv[1]){let r=process.env.KYNVER_BIN?.trim();if(r)return r;let t=e?.trim();if(!t)return"kynver";try{return Fb.native(t)}catch{return t}}function Yu(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var ts=D(()=>{"use strict"});import{existsSync as Kb,mkdirSync as $b,writeFileSync as jb}from"node:fs";import{homedir as Vb}from"node:os";import qu from"node:path";import{spawnSync as Ju}from"node:child_process";function Gb(){return qu.join(Vb(),".config","systemd","user")}function Yb(e){let r=Yu(e.kynverBin?.trim()||At());return["[Unit]","Description=Kynver AgentOS daemon (keeper-supervised pipeline + cron tick)","After=network-online.target","","[Service]","Type=simple",`EnvironmentFile=${e.envFilePath}`,`ExecStart=${r} daemon --run ${e.runId} --agent-os-id ${e.agentOsId} --execute`,"Restart=always","RestartSec=10","","[Install]","WantedBy=default.target",""].join(`
|
|
13
|
+
`)}function ns(e,r){if(!In())return{supported:!1,unitPath:null,written:!1,enabled:!1,started:!1,note:process.platform==="linux"?"systemd-run not available \u2014 install user service manually or run `kynver daemon` under your supervisor.":"systemd user units are only supported on Linux; use `kynver daemon` manually on macOS/Windows."};let t=Gb(),n=qu.join(t,On),o=Yb(e);if(!r)return{supported:!0,unitPath:n,written:!1,enabled:!1,started:!1,note:"Dry-run \u2014 pass --execute to write and enable the user unit."};$b(t,{recursive:!0});let s=Kb(n);jb(n,o,"utf8");let i=Ju("systemctl",["--user","daemon-reload"],{encoding:"utf8"});if(i.status!==0)return{supported:!0,unitPath:n,written:!0,enabled:!1,started:!1,note:`Wrote ${n} but systemctl --user daemon-reload failed: ${i.stderr||i.stdout}`};let a=Ju("systemctl",["--user","enable","--now",On],{encoding:"utf8"});return{supported:!0,unitPath:n,written:!s||!0,enabled:a.status===0,started:a.status===0,note:a.status===0?`Enabled and started ${On}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}var On,os=D(()=>{"use strict";rs();ts();On="kynver-cron-daemon.service"});import{existsSync as Jb,readFileSync as qb}from"node:fs";function It(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Jb("/proc/version")){let e=qb("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}function Nn(e){return e==="linux"}var Tn=D(()=>{"use strict"});function zu(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}function zb(e){return"keeper"}function Xu(e,r,t={}){if(zu(t.installSystemd)||zu(t["install-systemd"]))return Nn(r)?"systemd":"keeper";let n=e.daemonSupervisionOwner;return n==="systemd"&&Nn(r)?"systemd":n==="keeper"?"keeper":zb(r)}function Xb(){return{KYNVER_CRON_DAEMON_PRESENT:"1"}}function la(e,r){let t=["Daemon restart hardening is Kynver-owned: `kynver start` runs the in-process keeper by default (crash + heartbeat-stall respawn)."];return e==="linux"?t.push("For logout-surviving supervision on Linux: `kynver start --install-systemd` (or `kynver cron install --install-systemd`)."):e==="wsl"?t.push("WSL: run `kynver start` in a persistent tmux/screen session, or use Windows `start-tier2-wsl.ps1` which delegates to the keeper."):e==="darwin"?t.push("macOS: run `kynver start` under launchd or a terminal multiplexer for session survival."):e==="win32"&&t.push("Native Windows: prefer WSL (`kynver start` inside WSL). Native console daemon is blocked unless KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1."),r==="systemd"&&t.push("This box is configured for systemd user-unit supervision (~/.config/systemd/user/kynver-cron-daemon.service)."),t}function ca(e,r={},t){let n=t??It(),o=Xu(e,n,r);return{hostKind:n,owner:o,envUpdates:Xb(),guidance:la(n,o)}}var ss=D(()=>{"use strict";Tn()});import{existsSync as Qb}from"node:fs";import Qu from"node:path";import{homedir as Zu}from"node:os";function Zb(){return Qu.join(Zu(),".config","systemd","user",On)}function ua(){return Qb(Zb())}function is(e,r={},t){let n=ca(e,r,t),o={};e.daemonSupervisionOwner||(o.daemonSupervisionOwner=n.owner);let s={...e,...o},i=!1;Object.keys(o).length>0&&(ue(s),i=!0);let a=es(n.envUpdates,{filePath:be});return{policy:n,configPath:q(Qu.join(Zu(),".kynver","config.json")),envFilePath:q(a.path),envChanged:a.changed,configUpdated:i}}function as(e,r){return e.daemonSupervisionOwner==="systemd"&&ua()?"systemd":e.daemonSupervisionOwner??"keeper"}var Dn=D(()=>{"use strict";Rr();He();O();os();ss()});var rd={};$y(rd,{runDeviceLogin:()=>da});import ed from"node:os";function ev(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Qe(String(r)):void 0}async function rv(e){await new Promise(r=>setTimeout(r,e))}async function da(e){let r=ev(e);if(!r)return console.error("kynver login (device flow) requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site, set KYNVER_API_URL, or run `kynver setup` first."),{ok:!1};let t=`${ed.hostname()} (${ed.platform()})`,n;try{let a=await fetch(`${r}/api/auth/device/code`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientName:t})});if(!a.ok)return console.error(`Could not start device authorization (${a.status}).`),{ok:!1};n=await a.json()}catch(a){return console.error(`Could not reach ${r}: ${a.message}`),{ok:!1}}let o=n.verification_uri_complete||n.verification_uri;console.log(""),console.log(" Authorize this machine:"),console.log(` 1. Open: ${o}`),console.log(` 2. Confirm the code: ${n.user_code}`),console.log(""),console.log(" Waiting for approval\u2026");let s=Date.now()+n.expires_in*1e3,i=Math.max(1,n.interval)*1e3;for(;Date.now()<s;){await rv(i);let a;try{a=await(await fetch(`${r}/api/auth/device/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_code:n.device_code})})).json().catch(()=>({}))}catch{continue}switch(a.status){case"approved":return a.api_key?(Mn(a.api_key),console.log(" Approved \u2014 this machine is now linked to your Kynver account."),{ok:!0,apiKey:a.api_key}):{ok:!1};case"slow_down":i+=2e3;break;case"authorization_pending":typeof a.interval=="number"&&(i=Math.max(i,a.interval*1e3));break;case"access_denied":return console.error(" Request was denied in the browser."),{ok:!1};case"expired_token":return console.error(" The code expired before it was approved. Run `kynver login` again."),{ok:!1};default:break}}return console.error(" Timed out waiting for approval. Run `kynver login` again."),{ok:!1}}var pa=D(()=>{"use strict";O();w()});import{existsSync as nd,mkdirSync as od,readFileSync as sd,writeFileSync as id}from"node:fs";import{homedir as tv,totalmem as nv}from"node:os";import ma from"node:path";import ov from"node:os";function Un(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return iv.has(t)?{ok:!1,value:r,reason:"placeholder"}:sv.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function us(e){let r=Un(e),t=r.value??String(e??"").trim(),n=t?`"${t}"`:"<empty>",o=r.reason==="placeholder"?"looks like a placeholder":r.reason??"is invalid";return[`Invalid AgentOS id ${n}: ${o}.`,"AgentOS ids are UUIDs from the AgentOS registry, not slugs or examples (for example, not `aos`).","Fix: run `kynver bootstrap` to relink this runner, or run `kynver setup --agent-os-id <uuid>` / pass `--agent-os-id <uuid>` after copying the id from Command Center.","If this came from stale ~/.kynver/config.json, remove or replace the agentOsId value before starting the daemon."].join(" ")}function b(){if(!nd(ls))return{};try{return JSON.parse(sd(ls,"utf8"))}catch{return{}}}function ue(e){od(cs,{recursive:!0}),id(ls,`${JSON.stringify(fa(e),null,2)}
|
|
14
|
+
`,{mode:384})}function fa(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:ye(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:ye(e.defaultRepo.trim())}:{}}}function Nt(e){return fa(e)}function av(e,r){let t=Wn(),n=(typeof r.apiBaseUrl=="string"?r.apiBaseUrl:void 0)||e.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim(),o=(typeof r.agentOsId=="string"?r.agentOsId:void 0)||e.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||(t.runnerToken?.trim().startsWith("krc1.")?t.runnerTokenAgentOsId?.trim():void 0),i=(typeof r.repo=="string"?r.repo:r.discoverRepo===!0||r.discoverRepo==="true"?pt()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||Bo()?.repo,a=(typeof r.harnessRoot=="string"?r.harnessRoot:void 0)||e.harnessRoot?.trim()||process.env.KYNVER_HARNESS_ROOT?.trim()||process.env.OPUS_HARNESS_ROOT?.trim();return{...n?{apiBaseUrl:Qe(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function lv(e,r,t=nv()){let n=typeof r.maxWorkers=="string"?r.maxWorkers:typeof r.maxConcurrentWorkers=="string"?r.maxConcurrentWorkers:void 0,o=typeof r.boxKind=="string"?r.boxKind:typeof r["box-kind"]=="string"?String(r["box-kind"]):void 0,s=xe(process.env,{...e,...o?{boxKind:mt(o)}:{}}).boxKind,i=Ke({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=oa({totalMemBytes:t,diskPath:i.path,diskGateOk:i.ok,diskFreeBytes:i.freeBytes,config:e});if(n){let l=Math.max(1,Math.floor(Number(n)));return{maxConcurrentWorkers:rr(s,l),maxConcurrentWorkersSource:"setup-flag",boxKind:s}}if(e.maxConcurrentWorkers!==void 0&&e.maxConcurrentWorkers!==null){let l=Math.max(1,Math.floor(Number(e.maxConcurrentWorkers)));return ft(s,l)?{maxConcurrentWorkers:Vi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}:{maxConcurrentWorkers:rr(s,l),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}}return{maxConcurrentWorkers:Vi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function Wn(){if(!nd(Ot))return{};try{return JSON.parse(sd(Ot,"utf8"))}catch{return{}}}function ad(e){od(cs,{recursive:!0}),id(Ot,`${JSON.stringify(e,null,2)}
|
|
15
|
+
`,{mode:384})}function oe(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Wn().apiKey}function Mn(e){ad({...Wn(),apiKey:e})}function td(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Wn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Ur(e,r){ad({...Wn(),runnerToken:r,runnerTokenAgentOsId:e})}function V(e){let r=Ln(e);return r||ds("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function ld(e){return Ln(e)}function Ln(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||b().apiBaseUrl;return r?Qe(String(r)):void 0}function cv(e,r){let t=e||td(r)||(r?void 0:td(b().agentOsId));if(t)return String(t);let n=process.env.KYNVER_RUNTIME_SECRET||process.env.KYNVER_CRON_SECRET||process.env.OPENCLAW_CRON_SECRET;if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function ga(e,r,t){let n=cv(e,r);if(n)return{ok:!0,secret:n};let o=oe(),s=Ln(t?.baseUrl);if(o&&r&&s)try{let i=await Wr(r,{baseUrl:s,apiKey:o});return Ur(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function J(e,r,t){let n=await ga(e,r,t);if(n.ok)return n.secret;ds(n.reason)}async function cd(e,r){let t=oe(),n=Ln(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Wr(e,{baseUrl:n,apiKey:t});return Ur(e,o),o}catch{return null}}async function ud(e,r,t){let n=oe(),o=Ln(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await Wr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Ur(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function Wr(e,r){let t=r?.apiKey||oe();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${V(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}async function dd(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||ds("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Wr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Ur(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:q(Ot),tokenPrefix:`${t.slice(0,12)}\u2026`,note:"Scoped runner token saved; callbacks use X-Kynver-Runner-Token."},null,2))}catch(t){console.error(t instanceof Error?t.message:String(t)),process.exit(1)}}function ds(e){console.error(e),process.exit(1)}function ps(e){let r={};for(let t=0;t<e.length;t++){let n=e[t];if(!n.startsWith("--"))continue;let o=n.slice(2).replace(/-([a-z])/g,(i,a)=>a.toUpperCase()),s=e[t+1];!s||s.startsWith("--")?r[o]=!0:(r[o]=s,t++)}return r}async function ms(e){let r=b(),t=Ke({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=oa({totalMemBytes:ov.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=lv(r,e),s=fa({...r,...av(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!Un(s.agentOsId).ok&&ds(us(s.agentOsId)),ue(s);let i=xe(process.env,s),a=is(s,e);a.configUpdated&&(s=b());let l,c=oe(),u=s.agentOsId;if(c&&u)try{let d=await Wr(u,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:c});Ur(u,d),l="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{l="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:q(ls),config:Nt(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,daemonSupervision:{hostKind:a.policy.hostKind,owner:a.policy.owner,envFilePath:a.envFilePath},...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:l??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function pd(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){Mn(r),console.log(JSON.stringify({ok:!0,credentialsPath:q(Ot)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(pa(),rd));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:q(Ot)},null,2))}var cs,ls,Ot,sv,iv,sD,iD,O=D(()=>{"use strict";Ho();He();w();Ee();fn();Zo();kn();Dn();cs=ma.join(tv(),".kynver"),ls=ma.join(cs,"config.json"),Ot=ma.join(cs,"credentials"),sv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,iv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);sD=500*1024*1024,iD=4*1024*1024*1024});O();import{mkdirSync as Uy,realpathSync as Wy}from"node:fs";import{fileURLToPath as kO}from"node:url";O();w();pa();import uv from"node:os";function dv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Qe(String(r)):void 0}async function pv(e,r){let t=await fetch(`${e}/api/agent-os`,{headers:{Authorization:`Bearer ${r}`}});if(!t.ok)return null;let n=await t.json().catch(()=>null);if(!n?.primarySlug)return null;let o=n.items?.find(s=>s.slug===n.primarySlug);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:n.primarySlug}}async function fs(e){let r=dv(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),oe()||(typeof e.apiKey=="string"?Mn(e.apiKey):(await da({...e,apiBaseUrl:r})).ok||process.exit(1));let t=oe();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await pv(r,t);n||(console.error("Could not resolve your AgentOS workspace from the account. Confirm this account has AgentOS access, then retry."),process.exit(1));let o={...e,apiBaseUrl:r,agentOsSlug:n.slug,...n.id?{agentOsId:n.id}:{},...typeof e.repo=="string"?{}:{discoverRepo:!0}};await ms(o),console.log(""),console.log(` Bootstrap complete \u2014 ${uv.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online with Kynver-owned keeper supervision + local Kynver Cron when needed."),console.log(" Persistent background (Linux): `kynver start --install-systemd` or `kynver cron install --install-systemd`."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}O();import PA from"node:os";O();He();O();import fv from"node:path";import{homedir as gv}from"node:os";O();Ho();He();import md from"node:path";function mv(e){return md.resolve(dt(e.trim()))}function Tt(e,r,t){let n=e?.trim();return n?{repo:mv(n),source:r,persistedInConfig:t}:null}function fd(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function $e(e={}){let r=e.env??process.env,t=e.config??b(),n=Tt(t.defaultRepo,"config",!0);if(n)return n;let o=Tt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Tt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||fd(pt({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function gd(e={}){let r=e.env??process.env,t=e.config??b(),n=Tt(t.defaultRepo,"config",!0);if(n)return n;let o=Tt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Tt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||fd(Bo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function hd(e,r){let t={...r??b(),defaultRepo:ye(md.resolve(e))};return ue(t),t}function Bn(e){return{defaultRepo:q(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var ha=fv.join(gv(),".kynver","config.json");function Hn(e){let r=b(),t=gd({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(ha),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:q(ha),resolved:Bn(t),config:Nt(r)};let n=hd(t.repo,r),o=Bn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(ha),resolved:o,config:Nt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function kd(e=!1){let r=Hn();if(e){console.log(JSON.stringify(r,null,2)),r.ok||(process.exitCode=1);return}if(!r.ok){console.error(r.reason??"Could not resolve a Kynver git checkout."),r.remediation&&console.error(r.remediation),process.exitCode=1;return}if(r.alreadyPersisted){console.log(`defaultRepo already set (${r.resolved?.defaultRepo??"unknown"}) in ${r.configPath}`);return}console.log(`Persisted defaultRepo ${r.resolved?.defaultRepo??""} in ${r.configPath}. \`kynver run create\` can omit --repo.`)}function yd(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}function De(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}import{mkdirSync as hv,readFileSync as kv,renameSync as yv,writeFileSync as Rv}from"node:fs";import{homedir as bv}from"node:os";import bd from"node:path";function Rd(e){return JSON.stringify(ka(e))}function ka(e){if(Array.isArray(e))return e.map(ka);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ka(e[t]);return r}return e}function ya(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function Fn(e){if(!e||typeof e!="object")return!1;let r=e;if(typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.bundle;return!(!t||typeof t!="object"||typeof t.version!="string"||!t.version||typeof t.generatedAt!="string"||!Array.isArray(t.personas)||!t.instructions||typeof t.instructions!="object"||!t.policyThresholds||typeof t.policyThresholds!="object")}function vd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return bd.join(bv(),".kynver",`instruction-bundle-${r}.json`)}function Sd(e,r){try{let t=vd(e);hv(bd.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Rv(n,JSON.stringify(r),"utf8"),yv(n,t)}catch{}}function wd(e){try{let r=kv(vd(e),"utf8"),t=JSON.parse(r);return Fn(t)?t:null}catch{return null}}var vv="embedded-1",Sv=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],wv={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
16
16
|
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
17
17
|
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
18
18
|
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
|
19
|
-
`)},gb={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Ot={version:pb,generatedAt:"1970-01-01T00:00:00.000Z",personas:mb,instructions:fb,policyThresholds:gb};var Ln=Ot,kd="embedded";function Wr(){return Ln.version}function yr(){return kd}function yd(e,r){Ln=e,kd=r}function Bn(e){let r=Ln.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Ot.instructions[e];return typeof t=="string"?t:""}function Nt(e,r){let t=Ln.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Ot.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Rd(e){if(!e)return null;let r=e.trim().toLowerCase();return Ln.personas.find(t=>t.slug===r)??null}import{createPublicKey as kb,verify as yb}from"node:crypto";var hb={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function vd(e,r=process.env){let t=da(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=hb[e];return n?da(n):null}var Rb=Buffer.from("302a300506032b6570032100","hex");function vb(e){return kb({key:Buffer.concat([Rb,Buffer.from(e)]),format:"der",type:"spki"})}function bb(e,r){if(!Wn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t;try{t=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(t.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(pd(e.bundle),"utf8");return yb(null,n,vb(r),t)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function bd(e,r=process.env){if(!Wn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=vd(e.publicKeyId,r);return t?bb(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var Sb=15*6e4,wb=1e4,nr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Fn(e,r){console.error(JSON.stringify({event:e,...r}))}function Sd(e,r,t){let n=bd(e);return n.ok?(yd(n.bundle,r),r==="server"&&gd(t,e),!0):(Fn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Hn(e){if(nr.diskCacheTried)return!1;nr.diskCacheTried=!0;let r=hd(e);return r?Sd(r,"disk",e):!1}async function wd(e){let r=e.nowMs??Date.now(),t=()=>({source:yr(),version:Wr(),updated:!1});if(!e.force&&r-nr.lastAttemptAtMs<Sb)return t();nr.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return yr()==="embedded"&&Hn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),wb);try{let l=De(o);delete l["Content-Type"],nr.etag&&yr()==="server"&&(l["If-None-Match"]=nr.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return nr.routeMissingLogged||(nr.routeMissingLogged=!0,Fn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),yr()==="embedded"&&Hn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Fn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),yr()==="embedded"&&Hn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Sd(u,"server",e.agentOsId)?yr()==="embedded"&&Hn(e.agentOsId)?{...t(),updated:!0}:t():(nr.etag=c.headers.get("etag"),Fn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Wr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Fn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),yr()==="embedded"&&Hn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ee();dn();zo();import Cb from"node:os";function Cd(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function _d(e=v(),r=process.env){let t=xe(r,e),n=qo({config:e,totalMemBytes:Cb.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=rr(t.boxKind,i);dt(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Cd("warn",c);for(let c of s)Cd("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as _b,readFileSync as xb,renameSync as Eb,writeFileSync as Pb}from"node:fs";import{homedir as Ab}from"node:os";import xd from"node:path";function Ed(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return xd.join(Ab(),".kynver",`daemon-heartbeat-${r}.json`)}function Pd(e){try{let r=Ed(e.agentOsId);_b(xd.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;Pb(n,JSON.stringify(t),"utf8"),Eb(n,r)}catch{}}function Ad(e){try{let r=xb(Ed(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Id(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function Ib(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Tt(){process.platform==="win32"&&(Ib("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}O();import{existsSync as Ob}from"node:fs";import{homedir as Nb}from"node:os";import Tb from"node:path";function Od(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Kn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function Rr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Tb.join(Nb(),".kynver","agent-os-cron.json")}function Db(e=Rr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function Mb(){let e=v();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function pa(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function or(){let e=Rr(),r=Db(e),t=Mb(),n=pa(),o=!!(t&&n),s=Ob(e),i=o&&(s||Od("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:Od("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Kn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Kn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Kn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Kn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Kn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function ps(e=or()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Ub(e){return e.replace(/\/+$/,"")}async function Nd(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${Ub(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:De(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as Wb,existsSync as ma,openSync as Lb,readFileSync as Bb,unlinkSync as Td,writeFileSync as Hb}from"node:fs";var Fb=10*6e4;function Dd(e){if(!ma(e))return null;try{let r=JSON.parse(Bb(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Kb(e){let r=Dd(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>Fb}function Md(e){if(ma(e)&&!Kb(e)){let r=Dd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(ma(e))try{Td(e)}catch{}try{let r=Lb(e,"wx");return Hb(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Wb(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Ud(e){try{Td(e)}catch{}}var $b=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function jb(e){return $b.test(e.trim())}function Vb(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let p=d;p<=f;p+=l)n.add(p);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function $n(e,r,t,n){let o=e.trim();return o==="*"?!0:Vb(o,t,n).has(r)}function Gb(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return $n(n,r.getUTCMinutes(),0,59)&&$n(o,r.getUTCHours(),0,23)&&$n(s,r.getUTCDate(),1,31)&&$n(i,r.getUTCMonth()+1,1,12)&&$n(a,r.getUTCDay(),0,6)}var Yb=366*24*60;function Jb(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Wd(e,r){if(!jb(e))return null;let t=Jb(r);t=new Date(t.getTime()+6e4);for(let n=0;n<Yb;n++){if(Gb(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Ld(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=Wd(e.cron.trim(),r);return t?t.toISOString():null}return null}function fa(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Wd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as qb}from"node:fs";async function Bd(e){try{return await qb.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function zb(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Lr(e=Rr()){let r=await Bd(e);return zb(r)}async function Hd(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function Fd(e,r=Rr()){let t=await Lr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Hd(r,t)}async function Kd(e=Rr()){return await Bd(e)!==null?{created:!1}:(await Hd(e,[]),{created:!0})}import{randomBytes as Xb}from"node:crypto";import{promises as jn}from"node:fs";import Qb from"node:path";var ms={version:1,jobs:{}};async function Zb(e){try{return await jn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function eS(e){if(!e)return{...ms,jobs:{...ms.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...ms,jobs:{}}:r}catch{return{...ms,jobs:{}}}}async function fs(e){let r=await Zb(e);return eS(r)}async function rS(e,r){await jn.mkdir(Qb.dirname(e),{recursive:!0});let t=Xb(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await jn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
20
|
-
`,"utf8");try{await jn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await jn.unlink(n).catch(()=>{})}}async function $d(e,r){await rS(e,r)}function jd(e,r){let t=e.jobs[r];if(t)return t;let n={providerScheduleId:r,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[r]=n,n}function tS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function nS(e){return!!e.completedAt}function oS(e,r,t,n){if(r.consecutiveFailures===0)return!0;if(e.spec.scheduleKind!=="cron"&&r.consecutiveFailures>t.maxRetries)return!1;if(!r.lastAttemptAt)return!0;let o=Date.parse(r.lastAttemptAt);return Number.isNaN(o)?!0:n-o>=t.retryBackoffMs}function sS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Ld(e.spec,t);return r.nextFireAt=n,n}function iS(e,r,t,n){if(e.paused||nS(r)||tS(r,t)||!oS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function aS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=fa(e.spec,t))}async function Dt(e={}){let r=e.env??or(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=Md(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await Lr(r.storePath),i=e.agentOsIdFilter?s.filter(p=>p.spec.target.agentOsId===e.agentOsIdFilter):s,a=await fs(r.statePath),l=[];for(let p of i){let m=jd(a,p.providerScheduleId);sS(p,m,t),iS(p,m,n,r)&&l.push({entry:p,job:m})}l.sort((p,m)=>{let h=Date.parse(p.job.nextFireAt??"")||0,k=Date.parse(m.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:p,job:m}of l){if(r.missedRunPolicy==="skip"&&p.spec.scheduleKind==="cron"){let h=Date.parse(m.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){m.nextFireAt=fa(p.spec,t),d++;continue}}if(f<=0){d++;continue}m.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),m.lastAttemptAt=t.toISOString(),aS(p,m,t);try{let h=await Nd({entry:p,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});m.inflightUntil=null,h.ok?(m.lastFiredAt=t.toISOString(),m.consecutiveFailures=0,p.spec.scheduleKind==="runAt"&&(m.completedAt=t.toISOString(),m.nextFireAt=null),c++,f--):(m.consecutiveFailures+=1,u++)}catch{m.inflightUntil=null,m.consecutiveFailures+=1,u++}}return await $d(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Ud(r.lockPath)}}w();T();import Vd from"node:path";var Gd="mesh-cron-lease.json";function gs(e){return C(Vd.join(x(e),Gd),null)}function Yd(e,r){se(Vd.join(x(e),Gd),{...r,updatedAt:new Date().toISOString()})}function Jd(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}w();import ZE from"node:path";T();vn();w();import lS from"node:path";function cS(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function hs(e){let r=L(e),t=[];for(let n of Object.keys(r.workers||{})){let o=C(lS.join(x(r.id),"workers",b(n),"worker.json"),void 0);!o?.taskId||!wt(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...cS(o)})}return t}O();O();function qd(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}async function zd(e,r){let t=qd(r),n=new AbortController,o;try{return await Promise.race([e(n.signal),new Promise((s,i)=>{o=setTimeout(()=>{n.abort(),i(new Error(`callback timeout after ${t}ms`))},t)})])}finally{o&&clearTimeout(o)}}function Xd(e,r){let t=qd(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Br(e,r,t,n){try{return await zd(async o=>{let s=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Xd(o,n?.timeoutMs)}}async function re(e,r,t,n){let o=await Br(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await nd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Br(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function ks(e,r,t){try{return await zd(async n=>{let o=await fetch(e,{method:"GET",headers:De(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Xd(n,t?.timeoutMs)}}O();function Qd(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function ga(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Zd(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}var uS=["implementation","review","landing"],dS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function pS(e){return uS.includes(e)}function mS(e){return dS.includes(e)}function ep(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||pS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:mS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var rp=Ot.personas.map(ep),fS=new Map(rp.map(e=>[e.slug,e]));function gS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=fS.get(r)??null,n=Rd(r);if(!n)return t;let o=ep(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function ha(e){return gS(e)?.defaultRoleLane??null}function tp(){return rp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function np(e){return(e??"").trim().toLowerCase()}function hS(e){switch(np(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function kS(e){let r=np(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=hS(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function op(e){return kS(e)??"any"}fn();Ct();T();T();function ys(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function ka(e){return e.toLowerCase()}function yS(e){let r=ys(e,"roleLane");if(r)return r;let t=ka(ys(e,"executorRef")),n=ka(ys(e,"title")),o=ka(ys(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=ha(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function sp(e){let r=yS(e);return r?{...e,roleLane:r}:e}O();var sr="cursor",RS=new Set(["claude","opus","anthropic"]),vS=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ya(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Hr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return RS.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ra(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Hr(r))return!0;let t=ya(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=ya(e,"description");if(vS.some(s=>s.test(n)))return!0;let o=ya(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function bS(e,r){return{provider:sr,model:va,rule:`policy:cursor_default${r}`,requestedModel:e}}function ip(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Hr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Ra(t)||r.rule==="explicit:cli"&&Hr(r.provider)||!Hr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return bS(r.model,o)}function Rs(e,r=sr){let t=e?.trim();return t?Hr(t)?sr:t==="codex"?"codex":t:r}var ap={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function Mt(e){return ap[e]}function lp(){return Object.values(ap)}import{existsSync as wS}from"node:fs";import{homedir as CS}from"node:os";import dp from"node:path";import{createHash as cp}from"node:crypto";import{statSync as SS}from"node:fs";import{spawnSync as up}from"node:child_process";function je(e){try{let r=SS(e),t=`${e}|${r.size}|${r.mtimeMs}`;return cp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Ut(e){return cp("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Pe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Ve(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=up(e,r,{encoding:"utf8",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function vs(e,r,t={}){let n=t.timeoutMs??8e3;try{return up(e,r,{stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var _S="codex";function xS(){let e=CS();return[dp.join(e,".codex","auth.json"),dp.join(e,".config","codex","auth.json")]}function pp(e=new Date().toISOString()){let r=Pe(_S,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ut("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=xS().find(s=>wS(s)),n=Ve(r,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"}),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?je(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no ~/.codex/auth.json"].filter(Boolean).join("; ")}}import{existsSync as ES}from"node:fs";import{homedir as PS}from"node:os";import ba from"node:path";function AS(){let e=process.env.HERMES_HOME?.trim(),r=e?ba.resolve(e):ba.join(PS(),".hermes");return ba.join(r,"auth.json")}function bs(e=new Date().toISOString()){let r=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=AS(),o=ES(n),s=vs(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?je(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Wt(e=new Date().toISOString()){let r=pp(e);if(r.ready)return{...r,path:"codex_cli"};let t=bs(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var mp=["low","medium","high"],fp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function gp(e,r){let t=Mt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function IS(e,r){let t=Mt(e.providerId),n=Mt(r.providerId),o=mp.indexOf(t.costTier)-mp.indexOf(n.costTier);if(o!==0)return o;let s=fp[e.binding.authSource]-fp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Sa(e){let r=lp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&gp(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(IS)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return gp(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as OS}from"node:fs";import{homedir as NS}from"node:os";import TS from"node:path";var DS="claude";function MS(){let e=NS();return[TS.join(e,".claude",".credentials.json")]}function hp(e=new Date().toISOString()){let r=Pe(DS,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Ut("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=MS().find(i=>OS(i)),o=vs(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as US}from"node:fs";import{homedir as WS}from"node:os";import LS from"node:path";var BS="agent";function HS(){let e=WS();return[LS.join(e,".config","cursor","auth.json")]}function kp(e=new Date().toISOString()){let r=Pe(BS,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Ut("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=HS().find(s=>US(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as FS,readFileSync as KS}from"node:fs";import{homedir as $S}from"node:os";import wa from"node:path";var jS=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function VS(){let e=process.env.HERMES_HOME?.trim(),r=e?wa.resolve(e):wa.join($S(),".hermes");return wa.join(r,".env")}function GS(e){try{let r=KS(e,"utf8"),t=[];for(let n of jS)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function yp(e=new Date().toISOString()){let r=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=VS(),o=FS(n),s=o?GS(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?je(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Rp(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Wt(r),n={codex:t,cursor:kp(r),claude:hp(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},hermes:yp(r),hermesOpenAiCodex:bs(r),codexAdapterPath:t.path,readyCount:o}}var YS=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],JS=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function Ca(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function qS(e){let r=Ca(e,"executorRef").toLowerCase(),t=Ca(e,"title").toLowerCase(),n=Ca(e,"description").toLowerCase(),o=`${r}
|
|
19
|
+
`)},Cv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Dt={version:vv,generatedAt:"1970-01-01T00:00:00.000Z",personas:Sv,instructions:wv,policyThresholds:Cv};var Kn=Dt,Cd="embedded";function Lr(){return Kn.version}function br(){return Cd}function _d(e,r){Kn=e,Cd=r}function $n(e){let r=Kn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Dt.instructions[e];return typeof t=="string"?t:""}function Mt(e,r){let t=Kn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Dt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function xd(e){if(!e)return null;let r=e.trim().toLowerCase();return Kn.personas.find(t=>t.slug===r)??null}import{createPublicKey as xv,verify as Ev}from"node:crypto";var _v={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Ed(e,r=process.env){let t=ya(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=_v[e];return n?ya(n):null}var Pv=Buffer.from("302a300506032b6570032100","hex");function Av(e){return xv({key:Buffer.concat([Pv,Buffer.from(e)]),format:"der",type:"spki"})}function Iv(e,r){if(!Fn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t;try{t=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(t.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(Rd(e.bundle),"utf8");return Ev(null,n,Av(r),t)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function Pd(e,r=process.env){if(!Fn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Ed(e.publicKeyId,r);return t?Iv(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var Ov=15*6e4,Nv=1e4,or={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Vn(e,r){console.error(JSON.stringify({event:e,...r}))}function Ad(e,r,t){let n=Pd(e);return n.ok?(_d(n.bundle,r),r==="server"&&Sd(t,e),!0):(Vn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function jn(e){if(or.diskCacheTried)return!1;or.diskCacheTried=!0;let r=wd(e);return r?Ad(r,"disk",e):!1}async function Id(e){let r=e.nowMs??Date.now(),t=()=>({source:br(),version:Lr(),updated:!1});if(!e.force&&r-or.lastAttemptAtMs<Ov)return t();or.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return br()==="embedded"&&jn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Nv);try{let l=De(o);delete l["Content-Type"],or.etag&&br()==="server"&&(l["If-None-Match"]=or.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return or.routeMissingLogged||(or.routeMissingLogged=!0,Vn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),br()==="embedded"&&jn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Vn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),br()==="embedded"&&jn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Ad(u,"server",e.agentOsId)?br()==="embedded"&&jn(e.agentOsId)?{...t(),updated:!0}:t():(or.etag=c.headers.get("etag"),Vn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Lr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Vn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),br()==="embedded"&&jn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ee();fn();Zo();import Tv from"node:os";function Od(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Nd(e=b(),r=process.env){let t=xe(r,e),n=Qo({config:e,totalMemBytes:Tv.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=rr(t.boxKind,i);ft(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Od("warn",c);for(let c of s)Od("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as Dv,readFileSync as Mv,renameSync as Uv,writeFileSync as Wv}from"node:fs";import{homedir as Lv}from"node:os";import Td from"node:path";function Dd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Td.join(Lv(),".kynver",`daemon-heartbeat-${r}.json`)}function Md(e){try{let r=Dd(e.agentOsId);Dv(Td.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;Wv(n,JSON.stringify(t),"utf8"),Uv(n,r)}catch{}}function Ud(e){try{let r=Mv(Dd(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Wd(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function Bv(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Ut(){process.platform==="win32"&&(Bv("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}O();import{existsSync as Hv}from"node:fs";import{homedir as Fv}from"node:os";import Kv from"node:path";function Ld(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Gn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function vr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Kv.join(Fv(),".kynver","agent-os-cron.json")}function $v(e=vr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function jv(){let e=b();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function Ra(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function sr(){let e=vr(),r=$v(e),t=jv(),n=Ra(),o=!!(t&&n),s=Hv(e),i=o&&(s||Ld("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:Ld("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Gn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Gn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Gn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Gn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Gn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function gs(e=sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Vv(e){return e.replace(/\/+$/,"")}async function Bd(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${Vv(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:De(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as Gv,existsSync as ba,openSync as Yv,readFileSync as Jv,unlinkSync as Hd,writeFileSync as qv}from"node:fs";var zv=10*6e4;function Fd(e){if(!ba(e))return null;try{let r=JSON.parse(Jv(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Xv(e){let r=Fd(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>zv}function Kd(e){if(ba(e)&&!Xv(e)){let r=Fd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(ba(e))try{Hd(e)}catch{}try{let r=Yv(e,"wx");return qv(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Gv(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function $d(e){try{Hd(e)}catch{}}var Qv=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function Zv(e){return Qv.test(e.trim())}function eS(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let p=d;p<=f;p+=l)n.add(p);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function Yn(e,r,t,n){let o=e.trim();return o==="*"?!0:eS(o,t,n).has(r)}function rS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Yn(n,r.getUTCMinutes(),0,59)&&Yn(o,r.getUTCHours(),0,23)&&Yn(s,r.getUTCDate(),1,31)&&Yn(i,r.getUTCMonth()+1,1,12)&&Yn(a,r.getUTCDay(),0,6)}var tS=366*24*60;function nS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function jd(e,r){if(!Zv(e))return null;let t=nS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<tS;n++){if(rS(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Vd(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=jd(e.cron.trim(),r);return t?t.toISOString():null}return null}function va(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=jd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as oS}from"node:fs";async function Gd(e){try{return await oS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function sS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Br(e=vr()){let r=await Gd(e);return sS(r)}async function Yd(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function Jd(e,r=vr()){let t=await Br(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Yd(r,t)}async function qd(e=vr()){return await Gd(e)!==null?{created:!1}:(await Yd(e,[]),{created:!0})}import{randomBytes as iS}from"node:crypto";import{promises as Jn}from"node:fs";import aS from"node:path";var hs={version:1,jobs:{}};async function lS(e){try{return await Jn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function cS(e){if(!e)return{...hs,jobs:{...hs.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...hs,jobs:{}}:r}catch{return{...hs,jobs:{}}}}async function ks(e){let r=await lS(e);return cS(r)}async function uS(e,r){await Jn.mkdir(aS.dirname(e),{recursive:!0});let t=iS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await Jn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
20
|
+
`,"utf8");try{await Jn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await Jn.unlink(n).catch(()=>{})}}async function zd(e,r){await uS(e,r)}function Xd(e,r){let t=e.jobs[r];if(t)return t;let n={providerScheduleId:r,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[r]=n,n}function dS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function pS(e){return!!e.completedAt}function mS(e,r,t,n){if(r.consecutiveFailures===0)return!0;if(e.spec.scheduleKind!=="cron"&&r.consecutiveFailures>t.maxRetries)return!1;if(!r.lastAttemptAt)return!0;let o=Date.parse(r.lastAttemptAt);return Number.isNaN(o)?!0:n-o>=t.retryBackoffMs}function fS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Vd(e.spec,t);return r.nextFireAt=n,n}function gS(e,r,t,n){if(e.paused||pS(r)||dS(r,t)||!mS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function hS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=va(e.spec,t))}async function Wt(e={}){let r=e.env??sr(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=Kd(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await Br(r.storePath),i=e.agentOsIdFilter?s.filter(p=>p.spec.target.agentOsId===e.agentOsIdFilter):s,a=await ks(r.statePath),l=[];for(let p of i){let m=Xd(a,p.providerScheduleId);fS(p,m,t),gS(p,m,n,r)&&l.push({entry:p,job:m})}l.sort((p,m)=>{let h=Date.parse(p.job.nextFireAt??"")||0,k=Date.parse(m.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:p,job:m}of l){if(r.missedRunPolicy==="skip"&&p.spec.scheduleKind==="cron"){let h=Date.parse(m.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){m.nextFireAt=va(p.spec,t),d++;continue}}if(f<=0){d++;continue}m.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),m.lastAttemptAt=t.toISOString(),hS(p,m,t);try{let h=await Bd({entry:p,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});m.inflightUntil=null,h.ok?(m.lastFiredAt=t.toISOString(),m.consecutiveFailures=0,p.spec.scheduleKind==="runAt"&&(m.completedAt=t.toISOString(),m.nextFireAt=null),c++,f--):(m.consecutiveFailures+=1,u++)}catch{m.inflightUntil=null,m.consecutiveFailures+=1,u++}}return await zd(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{$d(r.lockPath)}}w();T();import Qd from"node:path";var Zd="mesh-cron-lease.json";function ys(e){return C(Qd.join(x(e),Zd),null)}function ep(e,r){se(Qd.join(x(e),Zd),{...r,updatedAt:new Date().toISOString()})}function rp(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}w();import pP from"node:path";T();Cn();w();import kS from"node:path";function yS(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Rs(e){let r=L(e),t=[];for(let n of Object.keys(r.workers||{})){let o=C(kS.join(x(r.id),"workers",v(n),"worker.json"),void 0);!o?.taskId||!xt(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...yS(o)})}return t}O();O();function tp(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}async function np(e,r){let t=tp(r),n=new AbortController,o;try{return await Promise.race([e(n.signal),new Promise((s,i)=>{o=setTimeout(()=>{n.abort(),i(new Error(`callback timeout after ${t}ms`))},t)})])}finally{o&&clearTimeout(o)}}function op(e,r){let t=tp(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Hr(e,r,t,n){try{return await np(async o=>{let s=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return op(o,n?.timeoutMs)}}async function re(e,r,t,n){let o=await Hr(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await ud(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Hr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function bs(e,r,t){try{return await np(async n=>{let o=await fetch(e,{method:"GET",headers:De(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return op(n,t?.timeoutMs)}}O();function sp(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function Sa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function ip(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}var RS=["implementation","review","landing"],bS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function vS(e){return RS.includes(e)}function SS(e){return bS.includes(e)}function ap(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||vS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:SS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var lp=Dt.personas.map(ap),wS=new Map(lp.map(e=>[e.slug,e]));function CS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=wS.get(r)??null,n=xd(r);if(!n)return t;let o=ap(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function wa(e){return CS(e)?.defaultRoleLane??null}function cp(){return lp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function up(e){return(e??"").trim().toLowerCase()}function _S(e){switch(up(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function xS(e){let r=up(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=_S(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function dp(e){return xS(e)??"any"}kn();Et();T();T();function vs(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ca(e){return e.toLowerCase()}function ES(e){let r=vs(e,"roleLane");if(r)return r;let t=Ca(vs(e,"executorRef")),n=Ca(vs(e,"title")),o=Ca(vs(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=wa(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function pp(e){let r=ES(e);return r?{...e,roleLane:r}:e}O();var ir="cursor",PS=new Set(["claude","opus","anthropic"]),AS=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function _a(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Fr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return PS.has(r)?!0:r.includes("claude")||r.includes("opus")}function xa(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Fr(r))return!0;let t=_a(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=_a(e,"description");if(AS.some(s=>s.test(n)))return!0;let o=_a(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function IS(e,r){return{provider:ir,model:Ea,rule:`policy:cursor_default${r}`,requestedModel:e}}function mp(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Fr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(xa(t)||r.rule==="explicit:cli"&&Fr(r.provider)||!Fr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return IS(r.model,o)}function Ss(e,r=ir){let t=e?.trim();return t?Fr(t)?ir:t==="codex"?"codex":t:r}var fp={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function Lt(e){return fp[e]}function gp(){return Object.values(fp)}import{existsSync as NS}from"node:fs";import{homedir as TS}from"node:os";import yp from"node:path";import{createHash as hp}from"node:crypto";import{statSync as OS}from"node:fs";import{spawnSync as kp}from"node:child_process";function je(e){try{let r=OS(e),t=`${e}|${r.size}|${r.mtimeMs}`;return hp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Bt(e){return hp("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Pe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Ve(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=kp(e,r,{encoding:"utf8",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function ws(e,r,t={}){let n=t.timeoutMs??8e3;try{return kp(e,r,{stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var DS="codex";function MS(){let e=TS();return[yp.join(e,".codex","auth.json"),yp.join(e,".config","codex","auth.json")]}function Rp(e=new Date().toISOString()){let r=Pe(DS,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Bt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=MS().find(s=>NS(s)),n=Ve(r,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"}),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?je(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no ~/.codex/auth.json"].filter(Boolean).join("; ")}}import{existsSync as US}from"node:fs";import{homedir as WS}from"node:os";import Pa from"node:path";function LS(){let e=process.env.HERMES_HOME?.trim(),r=e?Pa.resolve(e):Pa.join(WS(),".hermes");return Pa.join(r,"auth.json")}function Cs(e=new Date().toISOString()){let r=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=LS(),o=US(n),s=ws(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?je(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Ht(e=new Date().toISOString()){let r=Rp(e);if(r.ready)return{...r,path:"codex_cli"};let t=Cs(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var bp=["low","medium","high"],vp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Sp(e,r){let t=Lt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function BS(e,r){let t=Lt(e.providerId),n=Lt(r.providerId),o=bp.indexOf(t.costTier)-bp.indexOf(n.costTier);if(o!==0)return o;let s=vp[e.binding.authSource]-vp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Aa(e){let r=gp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Sp(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(BS)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Sp(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as HS}from"node:fs";import{homedir as FS}from"node:os";import KS from"node:path";var $S="claude";function jS(){let e=FS();return[KS.join(e,".claude",".credentials.json")]}function wp(e=new Date().toISOString()){let r=Pe($S,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Bt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=jS().find(i=>HS(i)),o=ws(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as VS}from"node:fs";import{homedir as GS}from"node:os";import YS from"node:path";var JS="agent";function qS(){let e=GS();return[YS.join(e,".config","cursor","auth.json")]}function Cp(e=new Date().toISOString()){let r=Pe(JS,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Bt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=qS().find(s=>VS(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as zS,readFileSync as XS}from"node:fs";import{homedir as QS}from"node:os";import Ia from"node:path";var ZS=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function ew(){let e=process.env.HERMES_HOME?.trim(),r=e?Ia.resolve(e):Ia.join(QS(),".hermes");return Ia.join(r,".env")}function rw(e){try{let r=XS(e,"utf8"),t=[];for(let n of ZS)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function _p(e=new Date().toISOString()){let r=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ew(),o=zS(n),s=o?rw(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?je(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function xp(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ht(r),n={codex:t,cursor:Cp(r),claude:wp(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},hermes:_p(r),hermesOpenAiCodex:Cs(r),codexAdapterPath:t.path,readyCount:o}}var tw=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],nw=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function Oa(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function ow(e){let r=Oa(e,"executorRef").toLowerCase(),t=Oa(e,"title").toLowerCase(),n=Oa(e,"description").toLowerCase(),o=`${r}
|
|
21
21
|
${t}
|
|
22
|
-
${n}`;return YS.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":JS.some(s=>s.test(o))?"low":"elevated"}function zS(e){let r=Mt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function XS(e){let r=e.inventory??Rp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Fr(e){let r=zS({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function vp(e){let r=e.task??{},t=qS(r),n=XS({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Wt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=sr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Sa({inventory:n,riskClass:t});return Fr(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return Fr({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return Fr({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return Fr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Sa({inventory:n,riskClass:t});if(a)return Fr({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return Fr({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}at();w();import{closeSync as bp,openSync as Sp}from"node:fs";import{spawn as nw}from"node:child_process";var QS=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function ZS(e){return e.replace(QS,"")}var ew=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function _a(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var rw=new Set(["cursor"]);function tw(e){let r=e.trim().toLowerCase();return rw.has(r)?"auto":null}function xa(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=ZS(t).trim()||r;return ew.test(o)||!_a(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function Lt(e,r){let t=(e??"").trim();return t?_a(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function Ea(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=tw(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:_a(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var Bt="claude-sonnet-4-6",wp={name:"claude",defaultModel:Bt,preflightModel(e){return xa(e,Bt)},start(e){let r=xa(e.model,Bt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Sp(e.stdoutPath,"a"),o=Sp(e.stderrPath,"a"),s=["ignore",n,o],i=nw("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],ue({cwd:e.worktreePath,detached:!0,stdio:s,env:Ze(process.env)}));if(bp(n),bp(o),!i.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return i.unref(),{pid:i.pid,model:t}}};at();w();import{closeSync as Ep,existsSync as aw,openSync as Pp}from"node:fs";import{spawn as Ap}from"node:child_process";at();w();import{closeSync as Cp,openSync as _p}from"node:fs";import{spawn as ow}from"node:child_process";var Pa=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function sw(){return Ze({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function iw(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var xp={name:"hermes-codex",defaultModel:Pa,preflightModel(e){return Lt(e,Pa)},start(e){let r=Lt(e.model,Pa);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=_p(e.stdoutPath,"a"),o=_p(e.stderrPath,"a"),s=["ignore",n,o],i=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=iw(t,e.prompt),l=ow(i,a,ue({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:sw()}));if(Cp(n),Cp(o),!l.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${i}\` on PATH? run \`hermes auth status openai-codex\`)`);return l.unref(),{pid:l.pid,model:t}}};function lw(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Kr=lw();function cw(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function uw(){return Ze({...process.env,CI:"1",NO_COLOR:"1"})}function dw(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function pw(e,r,t){if(!(process.platform!=="win32"&&aw("/usr/bin/script")))return Ap(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Ap("script",["-qfc",o,"/dev/null"],t)}var Ip={name:"codex",defaultModel:Kr,preflightModel(e){return Lt(e,Kr)},start(e){if(Wt().path==="hermes_openai_codex")return xp.start(e);let t=Lt(e.model,Kr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Pp(e.stdoutPath,"a"),s=Pp(e.stderrPath,"a"),i=["ignore",o,s],a=cw(),l=dw(n,e.prompt),c=pw(a,l,ue({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:uw()}));if(Ep(o),Ep(s),!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};var mw="claude-sonnet-4-6",va="composer-2.5";function Ss(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Op(e){return e.toLowerCase()}function Ia(e=v()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||mw}function Aa(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":"cursor"}function fw(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:va,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Bt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Np(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function gw(e){let r=Op(Ss(e,"executorRef")),t=Ss(e,"title").toLowerCase(),n=Ss(e,"priority")||"normal",o=Op(Ss(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Kr,rule:"lane:codex_orchestration"};if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Kr,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Np(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Np(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Ia();return{model:s,provider:Aa(s),rule:"default:global"}}function ws(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=fw(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Aa(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=gw(e.task);r={...o,requestedModel:o.model}}else{let o=Ia();r={model:o,provider:e.explicitProvider?.trim()||Aa(o),rule:"default:global",requestedModel:o}}let t=ip({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});if(!e.task||Object.keys(e.task).length===0||t.rule==="explicit:model_provider_alias"||t.rule==="explicit:model_provider_alias_overrode_provider"||t.rule==="explicit:cli"||Hr(t.provider)&&(e.explicitProviderIsOperatorOverride||Ra(e.task)))return t;let n=vp({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Kr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Tp(e,r,t){return e||r||t||Ia()||Bt}function Dp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Mp(){return{maxTaskAttempts:Dp(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Nt("harness.maxTaskAttempts",4))),dispatchCooldownMs:Dp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Nt("harness.dispatchCooldownMs",5e3)))}}O();import yw from"node:path";T();X();w();var Oa="kynver-harness:",Up="@runner:";function Na(e){return e?.trim()?e.trim():null}function hw(e){let r=Na(e);if(!r?.startsWith(Oa))return null;let t=r.slice(Oa.length),n=t.indexOf(Up);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ta(e,r){let t=e.trim(),n=r.trim();return`${Oa}${t}${Up}${n}`}function Da(e,r){let t=Na(r);return t?hw(e)===t:!1}function Cs(e){let r=Na(e.workerLeaseOwner);return r&&Da(r,e.runId)?r:Ta(e.runId,e.runnerId)}import Wp from"node:os";Ee();Ee();import kw from"node:os";function _s(e,r){let t=(r??kw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function vr(e){return e?.trim()?e.trim():null}function Ge(e={}){let r=e.env??process.env;return{runnerId:vr(r.KYNVER_RUNTIME_ID)??vr(r.OPENCLAW_RUNTIME_ID)??vr(r.HOSTNAME)??Wp.hostname(),hostname:vr(r.HOSTNAME)??Wp.hostname(),profile:vr(r.KYNVER_RUNNER_PROFILE)??vr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:vr(r.KYNVER_HARNESS_REPO)??vr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Wr()}}O();async function Ht(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=V(e.baseUrl);try{let o=await J(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await re(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}T();async function xs(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await Ht({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&K(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function Lp(e,r){return C(yw.join(x(e),"workers",b(r),"worker.json"),void 0)}async function Es(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=V(r.baseUrl?String(r.baseUrl):void 0),s=await J(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ma,a=Ge({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Lp(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!H(f.pid)){u.push(d);continue}if(M(f).status==="done"){u.push(d);continue}let m=Cs({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await xs({worker:f,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,g=await re(k,s,{leaseOwner:h.leaseOwner??m,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(g.ok){l.push(d);continue}let y=g.response&&typeof g.response=="object"&&"reason"in g.response?String(g.response.reason??`http ${g.status}`):`http ${g.status}`;c.push({worker:d,reason:y})}return{renewed:l,failed:c,skipped:u}}function Bp(e,r){let t=L(e);for(let n of Object.keys(t.workers||{})){let o=Lp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||M(o).status==="done"))return!0}return!1}we();T();T();import{existsSync as WC,mkdirSync as LC}from"node:fs";import Kt from"node:path";var Rw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,vw="next-action-fix:";function Ps(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Hp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ps(e)}function bw(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(vw)||t.includes("repair")||t.includes("unblock"))}function Sw(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Rw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Ps(String(n.targetPrUrl??n.target_pr_url??"")),s=Ps(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Hp(o):null,targetPrBranch:s}}catch{return r}}function Fp(e){if(!bw(e))return null;let r=Sw(e.description),t=e.prUrl?Hp(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Ps(e.branch)}:null}function Kp(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function $p(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...Bn(`worker.prompt.progress.${n}`).split(`
|
|
23
|
-
`),o],i
|
|
24
|
-
`),a
|
|
25
|
-
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks."
|
|
26
|
-
`),"",...s,"",...i,"",...a,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...
|
|
27
|
-
`)}w();O();w();
|
|
28
|
-
`).map(r=>r.trim()).find(Boolean)??""}function
|
|
29
|
-
`)}function $a(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Yn(e.snapshot.worktreePath,e.exec)??void 0};let r=Ds({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function ja(e,r=Ts){let t=e.prUrlHint??nm(e.status.finalResult)??null,n=sm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!om({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?$a({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return $a({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!eC(r)){let g=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${g?`${g} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=lm(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let g=!1,y=!1,I=n.headCommit??Yn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let _=Ds({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!_.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${_.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};g=_.committed,y=_.pushed,I=_.headCommit??I}else{let _=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(_.status!==0&&!/already up to date/i.test(_.stderr||_.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${_.stderr||_.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};y=_.status===0}return{ok:!0,prUrl:a,headCommit:I,committed:g,pushed:y}}let l=Ns(n.worktreePath,i,n.branch,r);if(l)return $a({snapshot:n,prUrl:l,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let c=n.changedFiles.length>0,u=!1,d=!1,f=n.headCommit??void 0,p=Ds({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!p.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${p.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=p.committed,d=p.pushed,!p.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${p.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let g=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(g.status!==0&&!/already up to date/i.test(g.stderr||g.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${g.stderr||g.stdout||g.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};d=g.status===0}f=p.headCommit??f??Yn(n.worktreePath,r)??void 0;let m=f?um(n.worktreePath,i,f,r):null;if(m)return{ok:!0,prUrl:m.prUrl,headCommit:f,committed:u,pushed:d,created:!1};let h=e.run.base?.trim()||"main",k=cm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:rC(e.worker.name,e.worker.runId),body:tC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!k.ok||!k.prUrl){if(rm(k.detail))return{ok:!0,headCommit:f??void 0,committed:u,pushed:d};let g=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${g?`${g} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${k.detail?` (${k.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}return{ok:!0,prUrl:k.prUrl,headCommit:f??void 0,committed:u,pushed:d,created:k.created}}X();Ko();function Ms(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 n!=="node_modules"&&!n.startsWith("node_modules/")})}function dm(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function pm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function mm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function gm(e){let r=mm(e);if(!r)return[];let t=mm(r.worktreeHandoff),n=pm(t?.disposableArtifactsRemoved);return n.length?n:pm(r.disposableArtifactsRemoved)}function fm(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function hm(e,r){let t=Ms(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>fm(o)));return t.every(o=>{let s=fm(dm(o));return n.has(s)})}function Us(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function km(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function nC(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 oC(e){let r=km(e.disposableArtifactsRemoved),t=gm(e.finalResult);return[...new Set([...r,...t])]}function ym(e){let r=km(e.changedFiles),t=Ms(r),n=oC(e),o=t.length===0||hm(r,n);return Us(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:Us(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:Us(e.artifactBundlePath)||Us(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:nC(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}T();X();w();import sC from"node:path";var iC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Rm(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function aC(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function lC(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:aC(r);return{finalResult:r??t??"completed",summary:t}}function Va(e,r,t){if(Rm(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=lC(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),K(e.runId,e)}function cC(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function vm(e,r){let t=cC(r);if(t.size===0)return[];let n=L(e),o=[];for(let s of Object.keys(n.workers||{})){let i=C(sC.join(x(n.id),"workers",b(s),"worker.json"),void 0);if(!i?.taskId||Rm(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!iC.has(a))continue;let l=M(i,{base:n.base,baseCommit:n.baseCommit});Va(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import uC from"node:path";var dC=/^[a-z0-9][a-z0-9._-]{0,127}$/i,pC=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Ga=new Set(["undefined","null"]),bm="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Ws(e){let r=e.trim();if(!dC.test(r))throw new Error(`invalid run id: ${e}`);return r}function mC(e){let r=e.trim();if(!pC.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Ya(e){return typeof e=="string"?e.trim():""}function Je(e){let r=Ya(e.run),t=Ya(e.name);return(!r||Ga.has(r))&&dr(`missing --run RUN_ID (${bm})`),(!t||Ga.has(t))&&dr(`missing --name WORKER_NAME (${bm})`),{runId:Ws(r),workerName:mC(t)}}function Ja(e){let r=Ya(e.run);return(!r||Ga.has(r))&&dr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Ws(r)}function Sm(e){let r=uC.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function wm(e,r,t){let n=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function fC(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Cm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Jn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gC(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function hC(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function xm(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function kC(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function qn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,K(e.runId,e))}function yC(e){e.completionBlocker&&(delete e.completionBlocker,K(e.runId,e))}function Ls(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function RC(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function Xn(e){let{runId:r,workerName:t}=Je(e),n=pe(r,t),o=L(n.runId),s=M(n,Ls(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&jr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Fa(n)&&yC(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let E=ja({worker:n,run:o,status:s});if(!E.ok)return qn(n,E.reason),{ok:!1,reason:E.reason,nextAction:E.nextAction,completionBlocked:!0};(E.prUrl||E.headCommit)&&(s=M(n,Ls(o)),s=RC(s,E))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let E=ym({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!E.allowed){let U=E.detail??`worktree completion blocked (${E.state})`;return qn(n,U),{ok:!1,reason:U,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=V(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,p=await J(f,i,{baseUrl:d});a&&(await xs({worker:n,agentOsId:i,baseUrl:d,secret:p}),n=pe(r,t));let m=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,h={...s};n.disposableArtifactsRemoved?.length&&(h.disposableArtifactsRemoved=n.disposableArtifactsRemoved);let k={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),status:n.leaseToken?{...h,leaseToken:n.leaseToken}:h,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},g=await wm(m,p,k);if((g.status===401||g.status===403)&&!f){let E=await td(i,{baseUrl:d});E&&E!==p&&(p=E,g=await wm(m,p,k))}if(g.ok){let E=zp(g.parsed);if(!Xp(E)){let P=`completion acknowledged but board not advanced: ${E.detail??(E.routeOutcome?`harness completion returned ${E.routeOutcome}`:"harness completion did not advance the linked task")}`;qn(n,P);let B={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:g.parsed};return Ha(n,n.runId,B),{ok:!1,httpStatus:g.status,response:g.parsed,reason:P,completionBlocked:!0}}qn(n,void 0);let U=E.routeOutcome??"acknowledged",Y={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:g.parsed};Ha(n,n.runId,Y),Va(n,s,{source:"harness-completion"});let $=s.prUrl;return{ok:!0,httpStatus:g.status,response:g.parsed,reason:U,...$?{prHandoff:{prUrl:$}}:{}}}let y=g.status===401||g.status===403,I=fC(g.parsed)??(y?"runner token unauthorized":"non-2xx response"),_=y?`completion replay rejected (${g.status}): ${I}`:`completion replay failed (${g.status}): ${I}`;return qn(n,_),{ok:!1,httpStatus:g.status,response:g.parsed,completionBlocked:!0}}async function za(e){try{let{runId:r,workerName:t}=Je(e),n=pe(r,t),o=L(n.runId),s=M(n,Ls(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await Xn(e);console.log(JSON.stringify({worker:n.name,runId:n.runId,...l.skipped?{status:"skipped"}:{},...l.reason?{reason:l.reason}:{},...l.nextAction?{nextAction:l.nextAction}:{},...l.completionBlocked?{completionBlocked:l.completionBlocked}:{},agentOsId:i,taskId:a,httpStatus:l.httpStatus,response:l.response},null,2)),l.ok||process.exit(1)}catch(r){console.error(`worker complete failed: ${r.message}`),process.exit(1)}}function Em(e){let{runId:r,workerName:t}=Je(e),n=pe(r,t),o=L(n.runId),s=M(n,Ls(o));se(zn.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function vC(e){return{full:`kynver worker list --run ${e} --full`,blocked:`kynver worker list --run ${e} --blocked`,running:`kynver worker list --run ${e} --running`,task:`kynver worker list --run ${e} --task <task-id>`,worker:`kynver worker list --run ${e} --worker <worker>`,runFull:`kynver run status --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`}}function qa(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function bC(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=qa(e.task??e.taskId);t&&(r.task=t);let n=qa(e.worker??e.name);n&&(r.worker=n);let o=qa(e.status);return o&&(r.status=o),r}function SC(e,r){if(r.blocked){let t=typeof e.attention=="string"?e.attention:"",n=typeof e.status=="string"?e.status:"";if(!(t==="blocked"||t==="needs_attention"||t==="stale"||n==="blocked"))return!1}return!(r.running&&!(e.status==="running"&&e.attention!=="blocked"&&e.attention!=="needs_attention")||typeof r.task=="string"&&e.taskId!==r.task||typeof r.worker=="string"&&e.worker!==r.worker||typeof r.status=="string"&&e.status!==r.status)}function Pm(e,r){let t=bC(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>SC(s,t)),o={...e,workerCount:n.length,needsAttention:n.filter(s=>s.attention&&s.attention!=="ok"&&s.attention!=="done").map(s=>s.worker),workers:n,activeFilters:t};return e.summary&&(o.summary={statusCounts:br(n,"status"),attentionCounts:br(n,"attention"),lifecycleCounts:br(n,"lifecycleStage")}),e.controller&&(o.controller=Om(n)),o}function Am(e){let r=Ja(e),t=e.full===!0||e.full==="true",n=Pm(t?Qn(r):Zn(r),e),o=n.workers;console.log(JSON.stringify({runId:n.runId,status:n.status,projection:t?"full":"compact",workerCount:n.workerCount,...n.activeFilters?{activeFilters:n.activeFilters}:{},...t?{}:{resultContract:{projection:"compact",rawWorkerPayloadsOmitted:!0,deepDetailAvailableVia:["--full","worker status","worker tail","run status --full"]},drilldownCommands:vC(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Im(e){let{run:r,workerName:t,worker:n}=e,o=M(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=kt({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=xm(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Cm(n.completionResponse),p=Cm(f?.task),m=Jn(f?.outcome),h=Jn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(U=>typeof U=="string"&&U.trim().length>0):[],g=Jn(p?.prUrl)??Jn(f?.prUrl),y=Jn(n.completionReportedAt),I=gC({finished:ie(o),completionBlocker:c,completionOutcome:m,completionReportedAt:y}),_=hC({completionBlocker:c,completionOutcome:m,completionReportedAt:y,finished:ie(o)}),E=kC({changedFiles:o.changedFiles,headCommit:s,prUrl:g??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let U=n.instructionPolicyEvidence;if(!U||typeof U!="object")return null;let Y=U.ruleSlugs;return Array.isArray(Y)?Y.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:g,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:I,completionReportedAt:y,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:m,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:_,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function wC(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!xm(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function CC(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function br(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function _m(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function Om(e){let r=e.filter(_m),t=e.filter(n=>{if(_m(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function Nm(e,r,t){let n={runId:e.id,name:e.name,status:Rn(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:br(r,"status"),attentionCounts:br(r,"attention"),lifecycleCounts:br(r,"lifecycleStage")},n.controller=Om(r)),n}function _C(e){return e.status==="done"&&e.attention==="done"}function Qn(e){let r=L(e),n=Object.keys(r.workers||{}).map(s=>{let i=C(zn.join(x(r.id),"workers",b(s),"worker.json"),void 0);return i?Im({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Nm(r,n,!1);return se(zn.join(x(r.id),"last-board.json"),o),o}function Zn(e){let r=L(e),n=Object.keys(r.workers||{}).map(i=>{let a=C(zn.join(x(r.id),"workers",b(i),"worker.json"),void 0);return a?wC(a)?CC(i,a):Im({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!_C(i)),s=Nm(r,o,!0);return s.status=Rn(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:br(n,"status"),allAttentionCounts:br(n,"attention")},se(zn.join(x(r.id),"last-board-compact.json"),s),s}async function Tm(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Qn(t),s=V(e.baseUrl?String(e.baseUrl):void 0),i=await J(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await re(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}function xC(e){return{full:`kynver run status --run ${e} --full`,blocked:`kynver status --run ${e} --blocked`,running:`kynver status --run ${e} --running`,task:`kynver status --run ${e} --task <task-id>`,worker:`kynver status --run ${e} --worker <worker>`,workersFull:`kynver worker list --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`,monitorTick:`kynver monitor status --run ${e} --tick`}}function Dm(e){let r=Ja(e),t=e.full===!0||e.full==="true",n=Pm(t?Qn(r):Zn(r),e);n.projection=t?"full":"compact",t||(n.resultContract={projection:"compact",rawWorkerPayloadsOmitted:!0,omittedWorkerFields:["finalResult","changedFiles","gitAncestry","completionResponse","stdout/stderr tails"],deepDetailAvailableVia:["--full","worker status","worker tail","monitor status --tick"]},n.drilldownCommands=xC(r)),console.log(JSON.stringify(n,null,2))}function Mm(e){let{runId:r,workerName:t}=Je(e),n=pe(r,t),o=To(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
30
|
-
`).filter(Boolean)){let i=it(s),a=i?yu(i):s;a&&console.log(a)}}function Um(e){let{runId:r,workerName:t}=Je(e),n=pe(r,t);if(!H(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(mr(n.pid,"SIGTERM"),Ar(1500),H(n.pid)){mr(n.pid,"SIGKILL"),console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"sigkill_sent"},null,2));return}console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"stopped"},null,2))}w();var OC=5e3,NC=360*60*1e3,TC=3,DC=5e3;function MC(e){let{runId:r,workerName:t}=Je(e);return{run:r,name:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,maxTotalMs:Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):void 0,completeAttempts:Number(e.completeAttempts)>0?Math.floor(Number(e.completeAttempts)):void 0,completeBackoffMs:Number(e.completeBackoffMs)>0?Math.floor(Number(e.completeBackoffMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}}async function Ft(e){let r=MC(e),t=r.pollMs??OC,n=r.maxTotalMs??NC,o=r.completeAttempts??TC,s=r.completeBackoffMs??DC,i=pe(r.run,r.name);if(!i.agentOsId||!i.taskId)return{worker:i.name,runId:i.runId,outcome:"missing_link",attempts:0,reason:"worker has no agentOsId/taskId \u2014 nothing to attribute completion to"};if(jr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let a=Date.now();for(;;){if(i=pe(r.run,r.name),jr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=M(i);if(ie(u)||!H(i.pid))break;if(Date.now()-a>n)return{worker:i.name,runId:i.runId,outcome:"timed_out",attempts:0,reason:`worker did not finish within ${n}ms`};Ar(t)}let l,c;for(let u=1;u<=o;u++){let d=await Xn({run:r.run,name:r.name,...r.agentOsId?{agentOsId:r.agentOsId}:{},...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.secret?{secret:r.secret}:{}});if(l=d.httpStatus,d.ok)return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:d.httpStatus,attempts:u};if(d.httpStatus===401||d.httpStatus===403)return c=typeof d.reason=="string"?d.reason:"completion replay refused",{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:d.httpStatus,attempts:u,reason:c};c=typeof d.reason=="string"?d.reason:"transient failure",u<o&&Ar(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function Bm(e){try{let r=await Ft(e);console.log(JSON.stringify(r,null,2)),(r.outcome==="missing_link"||r.outcome==="timed_out")&&process.exit(1),process.exit(0)}catch(r){console.error(`worker auto-complete failed: ${r.message}`),process.exit(1)}}function UC(){return Lm.join(IC(new URL(".",import.meta.url)),"cli.js")}function Hm(e){let r=e.cliPath??UC();if(!PC(r))return;let t=Lm.join(e.workerDir,"auto-complete.log"),n;try{n=AC(t,"a")}catch{n=void 0}let o=["ignore",n??"ignore",n??"ignore"],s=e.nodeExecutable??process.execPath,i=[r,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&i.push("--agent-os-id",e.agentOsId),e.baseUrl&&i.push("--base-url",e.baseUrl),e.secret&&i.push("--secret",e.secret);try{let a=EC(s,i,ue({detached:!0,stdio:o,env:process.env}));return n!==void 0&&Wm(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{Wm(n)}catch{}return}}we();function Fm(e,r,t){de(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Ee();O();function Xa(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=b(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||sr,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:ws({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=qp(o.provider),i=o.model;if(s.preflightModel){let F=s.preflightModel(r.model);if(!F.ok)throw new Error(`model preflight failed for provider "${s.name}": ${F.note??"invalid model/provider combination"}`);F.normalized&&console.error(`[supervisor] ${n}: ${F.note}`),i=F.model}let{worktreesDir:a}=Z(),l=Kt.join(x(e.id),"workers",n);LC(l,{recursive:!0});let c=Kt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(WC(c))throw new Error(`worktree path already exists: ${c}`);de(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?Fm(e.repo,c,u):de(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Kt.join(l,"stdout.jsonl"),p=Kt.join(l,"stderr.log"),m=Kt.join(l,"heartbeat.jsonl"),h=$p({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:m,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,g=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let y;try{y=s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:p,heartbeatPath:m,prompt:h})}catch(F){throw de(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),de(e.repo,["branch","-D",d],{allowFailure:!0}),F}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,g===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=g}let I=Tp(y.model,i,s.defaultModel),_=v(),E=xe(process.env,_),U=Ge().runnerId,Y=_s(E.boxKind),$={name:n,runId:e.id,status:"running",pid:y.pid,model:I,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:p,heartbeatPath:m,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},boxKind:E.boxKind,boxId:Y,runtimeId:U,startedAt:new Date().toISOString()};if(K(e.id,$),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Kt.join(l,"worker.json")}},e.status="running",Te(e),$.agentOsId&&$.taskId){let F;try{F=Hm({runId:e.id,workerName:n,workerDir:l,agentOsId:$.agentOsId})}catch(P){let B=`completion sidecar failed to spawn: ${P.message}`;$.completionBlocker=B,K(e.id,$)}if(F)F.pid&&($.completionSidecarPid=F.pid,K(e.id,$));else{let P="completion sidecar failed to spawn (CLI not found or spawn error)";$.completionBlocker=P,$.completionSidecarSpawnFailedAt=new Date().toISOString(),K(e.id,$)}}return $}async function Km(e){let r=L(String(e.run)),t=typeof e.name=="string"?e.name.trim():"";t||(console.error("worker start failed: --name is required"),process.exit(1));let n=e.task?String(e.task):$c(e.taskFile?String(e.taskFile):void 0);n||(console.error("missing --task or --task-file"),process.exit(1));let o=!!(e.agentOsId&&e.taskId),s=e.localOnly===!0||e.localOnly==="true";!o&&!s&&(e.agentOsId||e.taskId)&&(console.error("worker start: board-linked workers require both --agent-os-id and --task-id (or pass --local-only for direct runs)"),process.exit(1));let i=e.wait===!0||e.wait==="true",a;try{a=Xa(r,{name:t,task:n,ownedPaths:e.owned?String(e.owned).split(",").map(c=>c.trim()).filter(Boolean):[],model:e.model?String(e.model):void 0,branch:e.branch?String(e.branch):void 0,agentOsId:e.agentOsId?String(e.agentOsId):void 0,taskId:e.taskId?String(e.taskId):void 0,provider:e.provider?String(e.provider):void 0}),console.log(JSON.stringify({runId:r.id,worker:a.name,pid:a.pid,branch:a.branch,worktreePath:a.worktreePath,workerDir:a.workerDir},null,2))}catch(c){console.error(`worker start failed: ${c.message}`),process.exit(1)}if(!i||!a)return;let l=await Ft({run:String(e.run),name:a.name,...a.agentOsId?{agentOsId:a.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...l})),l.outcome==="timed_out"&&(process.exitCode=1)}w();import{createHash as $m}from"node:crypto";function Sr(e){let r=e.replace(/\r\n/g,`
|
|
31
|
-
`).trimEnd();return
|
|
32
|
-
`,{mode:384}),l}function
|
|
33
|
-
`,{mode:384})}function
|
|
34
|
-
`)}function
|
|
35
|
-
`)}var
|
|
36
|
-
`)}function g_(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Yr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let tt=function(){return Q.filter(S=>S.started).length},Le=function(S,R){ga({runId:i.id,agentOsId:a,phase:S,startedCount:tt(),outcomeCount:Q.length,cappedStarts:_,...R})},ge=function(){return Q.some(S=>(typeof S.error=="string"?S.error:"").startsWith("dispatch_start_readback_failed:"))},W=function(S){return S.landPrDispatch===!0?!0:S.task?.executor==="land_pr"};var t=tt,n=Le,o=ge,s=W;let i=L(String(N(String(e.run||""),"--run"))),a=String(N(String(e.agentOsId||""),"--agent-os-id")),l=V(e.baseUrl?String(e.baseUrl):void 0),c=await J(e.secret?String(e.secret):void 0,a,{baseUrl:l}),d=!(e.execute===!0||e.execute==="true"),f=Ge({runId:i.id}),p=Ta(i.id,f.runnerId),m=e.diskPath?Ke({diskPath:String(e.diskPath)}):Ke({diskPath:i.repo}),h=tr({runId:i.id}),k=g_(e),g=k.size>0,y=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,I=g?Math.min(y,k.size):y,_=d?I:Math.min(I,h.slotsAvailable);if(!d&&_<=0){let S={runId:i.id,agentOsId:a,dryRun:!1,skipped:!0,reason:h.reason??"no resource slots",resourceGate:h};if(r)return{ok:!0,...S};console.log(JSON.stringify(S,null,2));return}let E=hs(i.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let S=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/lane-hygiene`;try{await re(S,c,{agentOsId:a,dryRun:!1,includeBoardReconcile:!0},{agentOsId:a,baseUrl:l})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let U=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/tasks/dispatch-next`,Y=S=>({agentOsId:a,dryRun:d,maxStarts:S,leaseOwner:p,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Ma,runnerDiskGate:m,runnerResourceGate:h,activeHarnessWorkers:E,runnerPresence:f,harnessBoardSnapshot:Qn(i.id),...e.lane?{lane:op(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(R=>R.trim()).filter(Boolean)}:{}}),$=Qd(),F=async S=>{let R=await re(U,c,Y(S),{agentOsId:a,baseUrl:l,timeoutMs:$})??{ok:!1,status:0,response:null},A=R.response;return{dispatch:R,result:A?.result}},P=await F(g||d?_:1);if(!P.dispatch.ok||!P.result){let S={runId:i.id,agentOsId:a,action:"dispatch",httpStatus:P.dispatch.status,response:P.dispatch.response,authRefreshed:P.dispatch.refreshedAuth===!0,authRefreshFailure:P.dispatch.authRefreshFailure};if(r)return{ok:!1,...S};console.log(JSON.stringify(S,null,2)),process.exit(1)}let B=P.result;if(d){let S=hf(B),R=kf(B),A={runId:i.id,agentOsId:a,dryRun:!0,wouldStart:B.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:B.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:B.diskGate,resourceGate:B.resourceGate,inspected:B.inspected,pagesScanned:B.pagesScanned??null,candidatesExhausted:B.candidatesExhausted??null,capacityIdle:S?.capacityIdle===!0,admissionExhaustion:S,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let Pr=Mp(),Q=[],cr=[],rt=Number(B.inspected)||0,We=!1;async function G(S,R,A){let j=await cl({baseUrl:l,secret:c,agentOsId:a,taskId:String(S.id),leaseOwner:p,failureDetail:R}),ae={taskId:S.id,started:!1,error:R,released:j.released,releaseResponse:j.releaseResponse,...A};return Q.push(ae),Le("outcome",{lastOutcome:ae}),!1}async function he(S){let R=S.task,A=String(R.id);if(g&&!k.has(A))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let j=R.prUrl?String(R.prUrl):"";if(!j)return G(R,"land_pr task missing prUrl");try{let ae=await df({prUrl:j,repo:cf(j),cwd:i.repo}),ot=await pf({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:R,report:ae});return ot.ok?(Q.push({taskId:A,started:!0,landPr:!0,outcome:ae.outcome,completionStatus:ot.status}),!0):G(R,`land_pr completion POST failed (HTTP ${ot.status})`,{landPr:!0,outcome:ae.outcome})}catch(ae){return G(R,ae.message)}}async function be(S){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await cl({baseUrl:l,secret:c,agentOsId:a,taskId:String(S.id),leaseOwner:p,failureDetail:R}),j={taskId:S.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return Q.push(j),Le("outcome",{lastOutcome:j}),!1}async function ur(S){let R=S.task,A=p_(S),j=String(R.id);if(g&&!k.has(j))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let ae=m_(R.personaSlug);if(ae&&(!A?.personaInjectionReady||!A.personaMarkdown))return G(R,`persona_injection_required: missing anchored context-envelope persona block for "${ae}"`);if(Bp(i.id,j))return be(R);let ot=Number(R.attempt)||1;if(ot>Pr.maxTaskAttempts)return G(R,`task attempt ${ot} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Pr.maxTaskAttempts})`);let cn=R.leaseToken?String(R.leaseToken).trim():"";if(!cn)return G(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Oy=b(`t-${R.id}-a${R.attempt}`),st=ws({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:sp(R)});try{let Ni=R.planId?String(R.planId):void 0,Po=Fp({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),Be=Xa(i,{name:Oy,task:f_(R,a),ownedPaths:e.owned?String(e.owned).split(",").map(Ny=>Ny.trim()).filter(Boolean):[],model:st.model,provider:st.provider,routingRule:st.rule,requestedModel:st.requestedModel,agentOsId:a,taskId:String(R.id),planId:Ni,branch:Po?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Po?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Po?.targetPrUrl,repairTargetBranch:Po?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??ae,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,leaseOwner:p,leaseToken:cn,dispatched:!0}),Ao=await ff({agentOsId:a,taskId:String(R.id),leaseOwner:p,expectedLeaseToken:cn,worker:Be,baseUrl:l,secret:c});if(!Ao.ok)return gf(i.id,Be,Ao.error??"dispatch_start_readback_failed"),G(R,Ao.error??"dispatch_start_readback_failed",{readback:Ao.detail??null});Be.leaseToken!==cn&&(Be.leaseToken=cn,Be.leaseOwner=p,K(i.id,Be));let Bc={taskId:R.id,started:!0,worker:Be.name,pid:Be.pid,branch:Be.branch,model:Be.model,provider:st.provider,routingRule:st.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??ae,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return Q.push(Bc),Le("worker_started",{lastOutcome:Bc}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: operating-rules policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Ni){return G(R,Ni.message)}}let Se=new Set;async function _o(S){let R=S.task,A=String(R.id);if(Se.has(A))return G(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=W(S)?await he(S):await ur(S);return j||Se.add(A),j}for(let S of B.started)await _o(S);if(cr.push(...B.skipped??[]),g)for(let S of cr){let R=String(S.task.id);k.has(R)&&Q.push({taskId:R,started:!1,error:`exact_target_not_started:${S.skipReason}`,skipReason:S.skipReason,detail:S.reason??null,requestedTargetTaskIds:[...k]})}for(;!g&&Q.length<_;){if(ge()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};Q.push(A),Le("circuit_breaker",{lastOutcome:A});break}let S=await F(1);if(!S.dispatch.ok||!S.result){let A=Zd(S.dispatch.response),j=tt();We=A&&j>0;let ae={started:!1,error:"dispatch_next request failed during top-up",httpStatus:S.dispatch.status,response:S.dispatch.response,...We?{nonFatal:!0,partialTopUp:!0}:{}};Q.push(ae),Le("top_up_failed",{partialTopUpInterrupted:We,lastOutcome:ae});break}rt+=Number(S.result.inspected)||0,cr.push(...S.result.skipped??[]);let R=S.result.started??[];if(R.length===0)break;for(let A of R){if(Q.length>=_)break;await _o(A)}}let xo=Q.filter(S=>S.started).length,nt=hf(B),Eo=kf(B),Mc=xo===0&&(nt?.capacityIdle===!0||Number(B.resourceGate?.slotsAvailable)>0);if(Mc&&nt?.summary){let S=nt.skipReasonCounts?.retry_ceiling_exceeded??0,R=B.overAttemptIdleRecovery??nt.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:S>0?"; over_attempt_recovery not attempted":"",j=Eo?`; dispatch_skip_drain scanned=${Eo.scanned??0} advanced=${Eo.advanced??0}`:"";console.error(`[dispatch] ${nt.summary}${S>0?`; retry_ceiling_exceeded=${S}`:""}${A}${j}`)}let Uc={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:p,startedCount:xo,capacityIdle:Mc,admissionExhaustion:nt,dispatchSkipDrain:Eo,outcomes:Q,skipped:cr.map(S=>({taskId:S.task.id,skipReason:S.skipReason})),inspected:rt,pagesScanned:B.pagesScanned??null,candidatesExhausted:B.candidatesExhausted??null,diskGate:B.diskGate,resourceGate:B.resourceGate,...We?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:$},Wc=S=>!S.started&&S.nonFatal!==!0,Iy=Q.some(Wc),Lc=We&&xo>0?!0:!Iy;if(ga({runId:i.id,agentOsId:a,phase:"complete",partial:We,startedCount:xo,ok:Lc}),r)return{ok:Lc,...Uc};console.log(JSON.stringify(Uc,null,2)),Q.some(Wc)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var h_=1;function Gt(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function k_(e){let{maxStarts:r,...t}=e;return t}async function pl(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=k_(e);if(t.targetTaskId||t.targetTaskIds){let u=await Yr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Gt(u)}}let n=Math.min(r,h_),o=Math.max(0,r-n),s=await Yr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Gt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Yr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Gt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function yf(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function y_(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function so(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function R_(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Rf(e,r){let t=y_(r),n=so(t?.recommendedMaxStarts),o=so(t?.actionableReady),s=so(t?.queuedTasks),i=so(t?.boardAdvancedThisTick)??0,a=so(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=R_("KYNVER_DAEMON_MAX_DISPATCH_STARTS");f!==null&&(u=Math.min(u,f));let p=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:p,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import X_ from"node:path";T();Or();X();w();import v_ from"node:path";var b_=new Set(["running","dispatching","pending","queued","needs_attention"]),ir=new Set(["completed","failed","cancelled","done"]);function Jr(e){let r=me(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=C(v_.join(x(e.id),"workers",b(i),"worker.json"),void 0);if(!a)continue;let l=M(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),St(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function io(){let e=[];for(let r of z()){if(!b_.has(r.status))continue;let t=Jr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Te(r),e.push({runId:r.id,from:n,to:t})}return e}T();Or();X();w();Nr();Ko();import{existsSync as _r,lstatSync as O_,readdirSync as N_,readlinkSync as T_,renameSync as vl,unlinkSync as D_}from"node:fs";import qe from"node:path";_e();w();import Ue from"node:path";var S_=`${Ue.sep}runs${Ue.sep}runs${Ue.sep}`;function Vs(e){return e.includes(S_)}function ml(e,r){return Ue.join(Ce(le(e)),b(r))}function wr(e,r,t){return Ue.join(ml(e,r),"workers",b(t))}function vf(e,r,t){let n=le(e);return Ue.join(n,"runs","runs",b(r),"workers",b(t))}function fl(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function qr(e){return{workerJsonPath:Ue.join(e,"worker.json"),stdoutPath:Ue.join(e,"stdout.jsonl"),stderrPath:Ue.join(e,"stderr.log"),heartbeatPath:Ue.join(e,"heartbeat.jsonl"),lastStatusPath:Ue.join(e,"last-status.json")}}function bf(e){let r=qr(wr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Vs(e.statusPath)?e.statusPath:r}import{existsSync as Cr,mkdirSync as w_,readdirSync as wf,renameSync as C_,statSync as gl}from"node:fs";import te from"node:path";Nr();_e();T();w();var ao=900*1e3,__=3600*1e3;function Cf(e,r){let t=te.resolve(e),n=te.resolve(Ce(r)),o=te.relative(n,t);return o!==".."&&!o.startsWith("..")&&!te.isAbsolute(o)}function hl(e){if(!Cr(e))return[];try{return wf(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function kl(e){let r=te.join(e,"workers");if(!Cr(r))return[];try{return wf(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function _f(e){return te.join(e,"archived-workers")}function x_(e,r){let t=te.join(_f(e),b(r));return Cr(t)?`${t}-${Date.now()}`:t}function Sf(e,r,t){if(!Cr(e))return!1;try{let n=r-gl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function xf(e,r=Date.now(),t=ao){if(!Cr(e))return!1;let n=qr(e),o=C(n.workerJsonPath,void 0);if(o?.status==="running"&&H(o.pid))return!0;let s=Re(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Sf(n.stdoutPath,r,t)||Sf(n.heartbeatPath,r,t))}function E_(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-gl(te.join(e,"worker.json")).mtimeMs}catch{return 0}}function P_(e,r,t,n){if(xf(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=E_(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function Yt(e,r=Date.now(),t=ao){for(let n of kl(e))if(xf(te.join(e,"workers",n),r,t))return!0;return!1}function A_(){return{repo:$e()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function I_(e,r){let t=te.join(Ce(e),b(r));if(!Cr(t))return null;let n=kl(t);if(n.length===0)return null;let o;try{o=gl(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=wr(e,r,a);s[a]={workerDir:l,statusPath:te.join(l,"worker.json")}}let i=Yt(t);return{id:r,name:r,...A_(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function yl(e){let r=le(e??ye()),t=Ce(r),n=[];for(let o of hl(t)){let s=te.join(t,o,"run.json");if(Cr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=I_(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Te(i),n.push({runId:o,action:"repaired_run_json",reason:Yt(te.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Rl(e,r={}){let t=le(e??ye()),n=Ce(t),o=r.now??Date.now(),s=r.archiveAgeMs??__,i=[];yl(t);for(let a of hl(n)){let l=te.join(n,a),c=te.join(l,"run.json"),u=C(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...kl(l)]),f=!1;for(let p of d){let m=te.join(l,"workers",b(p)),h=te.join(m,"worker.json"),k=C(h,void 0);if(!k){let I=te.join(_f(l),b(p));if(Cr(I)&&(u.workers[b(p)]||u.workers[p])){delete u.workers[b(p)],delete u.workers[p],f=!0,i.push({runId:u.id,worker:p,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:I});continue}i.push({runId:u.id,worker:p,action:"skipped",reason:"worker.json missing"});continue}let g=P_(m,k,o,s);if(!g.eligible){i.push({runId:u.id,worker:p,action:"skipped",reason:g.reason});continue}let y=x_(l,p);w_(te.dirname(y),{recursive:!0}),C_(m,y),delete u.workers[b(p)],delete u.workers[p],f=!0,i.push({runId:u.id,worker:p,action:"archived",reason:g.reason,archivePath:y})}f&&Te(u)}return{workers:i}}function Ef(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of hl(n)){let s=te.join(n,o);Yt(s,r)&&t.add(`${e}\0${o}`)}return t}T();w();function M_(e,r){let t=ml(e,r),n;try{n=O_(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=qe.resolve(qe.dirname(t),T_(t));if(Yt(o)||Yt(t))return null;let s=`${t}.materialize-${Date.now()}`;return vl(o,s),D_(t),vl(s,t),o}function U_(e){let r=[];for(let t of fl()){let n=qe.join(e.fromDir,t),o=qe.join(e.toDir,t);!_r(n)||_r(o)||(vl(n,o),r.push(t))}return r}function Pf(e,r){let t=qr(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function W_(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function L_(e){let r=qr(e.canonicalDir),t=C(r.lastStatusPath,void 0),n=_r(r.stdoutPath),o=_r(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Fo(r.stdoutPath):{finalResult:null},a=o?Re(r.heartbeatPath):Re(""),l=ht(a),c=W_({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:qe.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Pf(u,e.canonicalDir),u}function B_(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=wr(r,e.id,o),a=qe.join(i,"worker.json");(Vs(s.workerDir)||Vs(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Te(e)),t}function H_(e){let r=[],t=wr(e.harnessRoot,e.run.id,e.workerName),n=vf(e.harnessRoot,e.run.id,e.workerName),o=qr(t),s=U_({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=bf({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=C(i,void 0);if(!a&&_r(o.workerJsonPath)&&(a=C(o.workerJsonPath,void 0)),!a){let l=L_({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return K(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=_r(t),u=fl().some(d=>_r(qe.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:qe.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return K(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return Pf(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",K(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function F_(e,r){let t=qe.join(x(e.id),"workers");if(!_r(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of N_(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Af(){let{harnessRoot:e}=Z(),r=yl(e),t=[];for(let n of z()){let o=M_(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),B_(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of F_(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:wr(e,n.id,i),statusPath:qe.join(wr(e,n.id,i),"worker.json")}},Te(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...H_({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}Nr();Vo();X();T();Or();w();import{execFileSync as If}from"node:child_process";import Of from"node:path";function bl(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function K_(e){let r=bl(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function $_(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function j_(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function V_(e){let r=null;if(typeof e=="string"?r=Rt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!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=bl(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function G_(e){try{let n=If("git",["config","--get","remote.origin.url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=If("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:bl(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function Y_(e){let r=Re(e.heartbeatPath);return e.completionSnapshot?.finalResult??ht(r)}function J_(e){let r=new Map,t=x(e.id);for(let n of me(e)){let o=C(Of.join(t,"workers",b(n),"worker.json"),void 0);if(o)for(let s of V_(Y_(o))){let i=K_(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function q_(e,r){let t=Re(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,$_(r)].filter(Boolean).join(`
|
|
37
|
-
`);return j_(n)}function z_(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Sl(e={}){let r=e.lookupPr??G_,t=[],n=new Map;for(let o of z()){let s=J_(o),i=x(o.id);for(let a of me(o)){let l=Of.join(i,"workers",b(a),"worker.json"),c=C(l,void 0);if(!c||!z_(c))continue;let u=M(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let p of q_(c,u.finalResult)){if(d=s.get(p)??null,!d){let m=o.repo||c.worktreePath,h=`${m}#${p}`,k=n.has(h)?n.get(h)??null:r({repoDir:m,prNumber:p});n.has(h)||n.set(h,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",K(o.id,c),t.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:t}}var Q_=900*1e3;function Z_(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function lo(){let e=Af();if(Z_()){let s=Sl(),i=Rl();return{workers:[],finalizedRuns:io(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of me(s)){let a=X_.join(x(s.id),"workers",b(i),"worker.json"),l=C(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=M(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c.attention.state==="blocked"?"blocked":c.attention.state==="done"||c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason="synced finished worker record after terminal stdout/heartbeat",K(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=c.attention.state==="blocked"?"blocked":c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason=c.attention.reason,K(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&H(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||t-u>Q_,p=Number.isFinite(d)&&t-d>bt;if(f&&p){mr(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,K(s.id,l),r.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}r.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=Sl(),o=Rl();return{workers:r,finalizedRuns:io(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Nf(){let e=lo(),r=e.workers.filter(l=>l.action==="marked_exited").length,t=e.workers.filter(l=>l.action==="killed_stale").length,n=e.workers.filter(l=>l.action==="skipped").length,o=e.metadataReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),s=e.localPrAttentionReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),i=e.metadataReconcile.runMetadataRetention.runs.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),a=e.terminalWorkerArchive.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{});console.log(JSON.stringify({ok:!0,workers:{markedExited:r,killedStale:t,skipped:n,total:e.workers.length},metadataReconcile:{totals:o,total:e.metadataReconcile.workers.length,runMetadataRetention:{totals:i,total:e.metadataReconcile.runMetadataRetention.runs.length}},localPrAttentionReconcile:{totals:s,total:e.localPrAttentionReconcile.workers.length},terminalWorkerArchive:{totals:a,total:e.terminalWorkerArchive.workers.length},finalizedRuns:e.finalizedRuns.length,details:{workers:e.workers,metadataReconcile:e.metadataReconcile.workers,localPrAttentionReconcile:e.localPrAttentionReconcile.workers,terminalWorkerArchive:e.terminalWorkerArchive.workers,runMetadataRetention:e.metadataReconcile.runMetadataRetention.runs,finalizedRuns:e.finalizedRuns}},null,2))}Ct();O();Ee();import ex from"node:os";function Gs(e,r={}){let t=(r.boxKind??Fe(v())).trim().toLowerCase()||"forge",n=r.hostLabel??ex.hostname();return{boxId:r.boxId??_s(t,n),boxKind:t,displayName:r.displayName??null,hostLabel:n,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{}}}T();$o();X();O();import rx from"node:path";T();X();w();async function co(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=L(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=V(e.baseUrl?String(e.baseUrl):void 0),s=await J(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Ge({runId:t.id}).runnerId,a=await Tm({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let p=C(rx.join(x(t.id),"workers",b(f),"worker.json"),void 0);if(!p||!p.dispatched||!p.taskId)continue;let m=M(p);if(m.alive||m.finalResult||p.completionReportedAt)continue;let h=Cs({runId:t.id,workerLeaseOwner:p.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(p.taskId))}/release`,g;try{g=await re(k,s,{agentOsId:n,leaseOwner:h},{agentOsId:n,baseUrl:o})}catch(y){g={ok:!1,error:y.message}}l.push({worker:f,taskId:p.taskId,pid:p.pid,released:g.ok===!0||g.response?.ok===!0,response:g.response??g})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await re(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}w();X();T();w();import tx from"node:path";O();async function Tf(e){let r=V(e.baseUrl),t=await J(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await re(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function Df(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=C(tx.join(x(t.id),"workers",b(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=M(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await Tf({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,K(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}vn();O();Ee();function nx(e=process.env){let r=v();return Fe(r,e)!=="forge"}function Mf(e,r=process.env){if(nx(r))return e?.maxConcurrentWorkers??void 0}async function Uf(e,r){let t=V(r.baseUrl?String(r.baseUrl):void 0),n=await J(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await ks(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}O();Ee();_e();import Ne from"node:path";jo();import qs from"node:path";we();X();var wl=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Wf(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of wl)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Ae(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!Wf(n)})}function zr(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 uo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(zr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function po(e){return e.status||(e.status=M(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Cl(e,r){if(e.status)return Ae(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):un(e.worktreePath);return Ae(t).length>0}function ox(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function _l(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=ox(e);if(o&&!H(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):un(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"}:Do(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={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??zr(s)};return e.status=u,u}return po(e)}X();X();Nr();w();function xl(e,r=Date.now(),t=ao){let n=Re(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Ys(e,r=Date.now(),t=ao){return H(e.pid)?!0:xl(e,r,t)}function sx(e,r){return r?r.runTerminalCache.derive(e.run):Jr(e.run)}function ar(e,r=Date.now()){return Ys(e.worker,r)}function El(e,r){return ir.has(e.run.status)?!1:sx(e,r)!==null}function Lf(e,r,t=Date.now()){if(ar(e,t))return!0;if(ir.has(e.run.status)||El(e,r))return!1;let n=po(e);return ie(n)?!1:!!ar(e,t)}jo();X();function Bf(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ar(e))return!0;let n=r??po(e);return!!(!ie(n)||uo(n)||Ae(n.changedFiles).length>0||yt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:zr(n.finalResult)}).blocked)}we();w();import{existsSync as Ff,mkdirSync as ix,writeFileSync as Hf}from"node:fs";import Js from"node:path";function Kf(e,r,t){return Js.join(e,"salvage",b(r),b(t))}function $f(e){return Ff(Js.join(Kf(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function jf(e){let r=Kf(e.harnessRoot,e.indexed.runId,e.indexed.workerName);ix(r,{recursive:!0});let t=Js.join(r,"salvage.patch"),n=!1;if(Ff(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
38
|
-
`);a.trim()&&(
|
|
22
|
+
${n}`;return tw.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":nw.some(s=>s.test(o))?"low":"elevated"}function sw(e){let r=Lt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function iw(e){let r=e.inventory??xp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Kr(e){let r=sw({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function Ep(e){let r=e.task??{},t=ow(r),n=iw({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ht())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=ir;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Aa({inventory:n,riskClass:t});return Kr(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return Kr({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return Kr({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return Kr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Aa({inventory:n,riskClass:t});if(a)return Kr({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return Kr({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}ut();w();import{closeSync as Pp,openSync as Ap}from"node:fs";import{spawn as pw}from"node:child_process";var aw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function lw(e){return e.replace(aw,"")}var cw=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Na(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var uw=new Set(["cursor"]);function dw(e){let r=e.trim().toLowerCase();return uw.has(r)?"auto":null}function Ta(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=lw(t).trim()||r;return cw.test(o)||!Na(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function Ft(e,r){let t=(e??"").trim();return t?Na(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function Da(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=dw(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Na(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var Kt="claude-sonnet-4-6",Ip={name:"claude",defaultModel:Kt,preflightModel(e){return Ta(e,Kt)},start(e){let r=Ta(e.model,Kt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Ap(e.stdoutPath,"a"),o=Ap(e.stderrPath,"a"),s=["ignore",n,o],i=pw("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],de({cwd:e.worktreePath,detached:!0,stdio:s,env:Ze(process.env)}));if(Pp(n),Pp(o),!i.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return i.unref(),{pid:i.pid,model:t}}};ut();w();import{closeSync as Dp,existsSync as hw,openSync as Mp}from"node:fs";import{spawn as Up}from"node:child_process";ut();w();import{closeSync as Op,openSync as Np}from"node:fs";import{spawn as mw}from"node:child_process";var Ma=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function fw(){return Ze({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function gw(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Tp={name:"hermes-codex",defaultModel:Ma,preflightModel(e){return Ft(e,Ma)},start(e){let r=Ft(e.model,Ma);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Np(e.stdoutPath,"a"),o=Np(e.stderrPath,"a"),s=["ignore",n,o],i=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=gw(t,e.prompt),l=mw(i,a,de({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:fw()}));if(Op(n),Op(o),!l.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${i}\` on PATH? run \`hermes auth status openai-codex\`)`);return l.unref(),{pid:l.pid,model:t}}};function kw(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var $r=kw();function yw(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Rw(){return Ze({...process.env,CI:"1",NO_COLOR:"1"})}function bw(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function vw(e,r,t){if(!(process.platform!=="win32"&&hw("/usr/bin/script")))return Up(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Up("script",["-qfc",o,"/dev/null"],t)}var Wp={name:"codex",defaultModel:$r,preflightModel(e){return Ft(e,$r)},start(e){if(Ht().path==="hermes_openai_codex")return Tp.start(e);let t=Ft(e.model,$r);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Mp(e.stdoutPath,"a"),s=Mp(e.stderrPath,"a"),i=["ignore",o,s],a=yw(),l=bw(n,e.prompt),c=vw(a,l,de({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Rw()}));if(Dp(o),Dp(s),!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};var Sw="claude-sonnet-4-6",Ea="composer-2.5";function _s(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Lp(e){return e.toLowerCase()}function Wa(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Sw}function Ua(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":"cursor"}function ww(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ea,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Kt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Bp(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function Cw(e){let r=Lp(_s(e,"executorRef")),t=_s(e,"title").toLowerCase(),n=_s(e,"priority")||"normal",o=Lp(_s(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:$r,rule:"lane:codex_orchestration"};if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:$r,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Bp(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Bp(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Wa();return{model:s,provider:Ua(s),rule:"default:global"}}function xs(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=ww(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Ua(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Cw(e.task);r={...o,requestedModel:o.model}}else{let o=Wa();r={model:o,provider:e.explicitProvider?.trim()||Ua(o),rule:"default:global",requestedModel:o}}let t=mp({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});if(!e.task||Object.keys(e.task).length===0||t.rule==="explicit:model_provider_alias"||t.rule==="explicit:model_provider_alias_overrode_provider"||t.rule==="explicit:cli"||Fr(t.provider)&&(e.explicitProviderIsOperatorOverride||xa(e.task)))return t;let n=Ep({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??$r:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Hp(e,r,t){return e||r||t||Wa()||Kt}function Fp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Kp(){return{maxTaskAttempts:Fp(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Mt("harness.maxTaskAttempts",4))),dispatchCooldownMs:Fp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Mt("harness.dispatchCooldownMs",5e3)))}}O();import Ew from"node:path";T();X();w();var La="kynver-harness:",$p="@runner:";function Ba(e){return e?.trim()?e.trim():null}function _w(e){let r=Ba(e);if(!r?.startsWith(La))return null;let t=r.slice(La.length),n=t.indexOf($p);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ha(e,r){let t=e.trim(),n=r.trim();return`${La}${t}${$p}${n}`}function Fa(e,r){let t=Ba(r);return t?_w(e)===t:!1}function Es(e){let r=Ba(e.workerLeaseOwner);return r&&Fa(r,e.runId)?r:Ha(e.runId,e.runnerId)}import jp from"node:os";Ee();Ee();import xw from"node:os";function Ps(e,r){let t=(r??xw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Sr(e){return e?.trim()?e.trim():null}function Ge(e={}){let r=e.env??process.env;return{runnerId:Sr(r.KYNVER_RUNTIME_ID)??Sr(r.OPENCLAW_RUNTIME_ID)??Sr(r.HOSTNAME)??jp.hostname(),hostname:Sr(r.HOSTNAME)??jp.hostname(),profile:Sr(r.KYNVER_RUNNER_PROFILE)??Sr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Sr(r.KYNVER_HARNESS_REPO)??Sr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Lr()}}O();async function $t(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=V(e.baseUrl);try{let o=await J(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await re(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}T();async function As(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await $t({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&K(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function Vp(e,r){return C(Ew.join(x(e),"workers",v(r),"worker.json"),void 0)}async function Is(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=V(r.baseUrl?String(r.baseUrl):void 0),s=await J(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ka,a=Ge({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Vp(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!H(f.pid)){u.push(d);continue}if(M(f).status==="done"){u.push(d);continue}let m=Es({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await As({worker:f,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,g=await re(k,s,{leaseOwner:h.leaseOwner??m,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(g.ok){l.push(d);continue}let y=g.response&&typeof g.response=="object"&&"reason"in g.response?String(g.response.reason??`http ${g.status}`):`http ${g.status}`;c.push({worker:d,reason:y})}return{renewed:l,failed:c,skipped:u}}function Gp(e,r){let t=L(e);for(let n of Object.keys(t.workers||{})){let o=Vp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||M(o).status==="done"))return!0}return!1}we();T();T();import{existsSync as YC,mkdirSync as JC}from"node:fs";import Vt from"node:path";var Pw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Aw="next-action-fix:";function Os(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Yp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Os(e)}function Iw(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Aw)||t.includes("repair")||t.includes("unblock"))}function Ow(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Pw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Os(String(n.targetPrUrl??n.target_pr_url??"")),s=Os(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Yp(o):null,targetPrBranch:s}}catch{return r}}function Jp(e){if(!Iw(e))return null;let r=Ow(e.description),t=e.prUrl?Yp(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Os(e.branch)}:null}function qp(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function zp(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...$n(`worker.prompt.progress.${n}`).split(`
|
|
23
|
+
`),o],i=$n(`worker.prompt.merge_gate.${n}`).split(`
|
|
24
|
+
`),a=$n(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
25
|
+
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.",...$n("worker.prompt.core_rules").split(`
|
|
26
|
+
`),"",...s,"",...i,"",...a,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...qp({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
27
|
+
`)}w();O();w();ut();import{closeSync as ja,existsSync as Qp,mkdirSync as Uw,openSync as Va,statSync as Ww,unlinkSync as Xp}from"node:fs";import{spawn as Lw}from"node:child_process";import Bw from"node:os";import Ye from"node:path";import{existsSync as qn,readdirSync as Nw}from"node:fs";import jr from"node:path";var Tw=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Dw(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function Mw(e){let r=jr.join(e,"versions");if(!qn(r))return null;let t=null,n=-1;for(let o of Nw(r,{withFileTypes:!0})){if(!o.isDirectory()||!Tw.test(o.name))continue;let s=Dw(o.name);s==null||s<=n||(n=s,t=jr.join(r,o.name))}return t}function Ns(e){let r=e?.trim()||jr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=jr.join(r,"node.exe"),n=jr.join(r,"index.js");if(qn(t)&&qn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Mw(r);if(!o)return null;let s=jr.join(o,"node.exe"),i=jr.join(o,"index.js");return!qn(s)||!qn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var $a="composer-2.5",Hw=15e3,Fw=6e4,Kw=3e4;function $w(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function jw(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Qp(Ye.join(Ye.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ns(Ye.dirname(e)):t?{nodeExe:e,indexJs:Ye.join(Ye.dirname(e),"index.js"),versionDir:Ye.dirname(e)}:Ns();if(o)return $w(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:!0}}function Vw(){let e=process.env.KYNVER_CURSOR_AGENT_BIN?.trim()||process.env.CURSOR_AGENT_BIN?.trim();if(e)return e;if(process.platform==="win32"){let r=Ns(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=Ye.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(Qp(t))return t}return"agent"}function Gw(e,r){return Ze({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:Ye.basename(e)||"agent.cmd"}:{}})}function Zp(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Ga(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?Math.floor(n):r}function Yw(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Ye.join(Bw.homedir(),".kynver","locks");return Uw(e,{recursive:!0}),Ye.join(e,"cursor-agent-start.lock")}function Jw(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=Yw(),r=Ga("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",Fw),t=Ga("KYNVER_CURSOR_START_LOCK_STALE_MS",Kw),n=Date.now();for(;;)try{let o=Va(e,"wx");return ja(o),()=>{try{Xp(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Ww(e).mtimeMs>t){Xp(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Zp(250)}}var em={name:"cursor",defaultModel:$a,preflightModel(e){return Da(e,$a)},start(e){let r=Da(e.model,$a);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Va(e.stdoutPath,"a"),o=Va(e.stderrPath,"a"),s=["ignore",n,o],i=Vw(),a=jw(i),l=Jw(),c;try{c=Lw(a.executable,[...a.prefixArgs,"-p","--force","--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt],de({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:Gw(i,a)})),Zp(Ga("KYNVER_CURSOR_START_LOCK_HOLD_MS",Hw))}finally{l(),ja(n),ja(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:t}}};var Ts={claude:Ip,codex:Wp,cursor:em},rm=null;function tm(e){if(rm)return rm;let r=e?.trim();if(r){let o=Ts[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Ts).join(", ")}`);return o}let t=Ss(b().workerProvider),n=Ts[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Ts).join(", ")}`);return n}w();import{spawn as LC}from"node:child_process";import{existsSync as BC,openSync as HC,closeSync as jm}from"node:fs";import FC from"node:path";T();function Ds(e){return!!e.completionReportedAt?.trim()}function Ya(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),K(r,e)}function qw(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ja(e){return!!(qw(e.completionBlocker)||e.completionOutcome==="rejected")}function Vr(e){return Ds(e)&&!Ja(e)}T();X();O();import eo from"node:path";function qa(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function zn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var zw=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function nm(e){let r=qa(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=zn(r.outcome),n=zn(r.detail)??zn(r.error),o=qa(r.task),s=qa(r.closedTask),i=o?zn(o.status):null,a=s?zn(s.status):null,l=t!==null&&zw.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function om(e){return e.taskAdvanced}T();Go();var Xw="expert-lane-pr-review:",Qw="plan-review-task",Zw="scheduledjob:";function sm(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function im(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(Xw)||r===Qw||r.startsWith("daemon-review:"))return!0;if(r.startsWith(Zw)&&e.parentTaskId){let n=sm(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}let t=(e.title??"").toLowerCase();if(t.includes("expert pr review"))return!0;if(e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))){let n=sm(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var am=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,eC=new Set(cp()),rC=/no commits between/i;function lm(e){return!!(e&&rC.test(e))}function ge(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function cm(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ge(e.head)}function um(e){if(e==null)return null;let t=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return t?ge(t[0]):null}function tC(e,r,t){let n=r.trim();if(!n)return null;let o=t.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function nC(e,r){if(r.changedFiles.length>0)return!1;let t=ge(e.personaSlug)?.toLowerCase();if(t&&eC.has(t))return!0;let n=ge(e.routingRule)??"";return!!(n&&am.test(n))}function oC(e,r){if(e.changedFiles.length>0)return!0;let t=ge(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=tC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(ge(e.headCommit)||cm(e.gitAncestry))}function dm(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(im({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=ge(e.routingRule)??"";if(r&&am.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(nC(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(ge(e.patchPath)||ge(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(ge(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(ge(e.prUrl)??ge(e.taskPrUrl)??ge(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return oC(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function pm(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:ge(r?.headCommit)??cm(e.gitAncestry),prUrl:ge(r?.prUrl)??null}}import{spawnSync as sC}from"node:child_process";function fm(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return mm(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return mm(n[1]);try{let o=new URL(r.includes("://")?r:`https://${r}`);if(o.hostname.toLowerCase()!=="github.com")return null;let s=o.pathname.replace(/^\/+|\/+$/g,"").split("/");if(s.length<2)return null;let[i,a]=s;return!i||!a?null:`${i}/${a.replace(/\.git$/i,"")}`}catch{return null}}function mm(e){let r=e.split("/").filter(Boolean);if(r.length<2)return null;let t=r[0],n=r[1].replace(/\.git$/i,"");return t&&n?`${t}/${n}`:null}we();function iC(e,r,t){try{let n=sC(e,t,{cwd:r,encoding:"utf8"});return{status:n.status,stdout:(n.stdout||"").trim(),stderr:(n.stderr||"").trim(),error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}var Us={git:(e,r)=>ne(e,r),gh:(e,r)=>iC("gh",e,r)};function aC(e){return e.split(`
|
|
28
|
+
`).map(r=>r.trim()).find(Boolean)??""}function gm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:fm(t.stdout)}function Xn(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Ms(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function Ws(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=Xn(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function hm(e){let r=Ms(e.worktreePath,e.repo,e.branch,e.exec);if(r)return{ok:!0,prUrl:r,created:!1};let t=e.exec.gh(e.worktreePath,["pr","create","--repo",e.repo,"--base",e.base,"--head",e.branch,"--title",e.title,"--body",e.body,"--draft"]);if(t.status!==0)return{ok:!1,detail:t.stderr||t.stdout||t.error||"gh pr create failed"};let n=lC(t.stdout)??Ms(e.worktreePath,e.repo,e.branch,e.exec);return n?{ok:!0,prUrl:n,created:!0}:{ok:!1,detail:"gh pr create succeeded but no PR URL was parsed"}}function lC(e){let t=aC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}function km(e,r,t,n){let o=t.trim();if(!o||!r.trim())return null;let s=n.gh(e,["api",`repos/${r}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}function cC(e){return e.gh(process.cwd(),["--version"]).status===0}function uC(e,r){return`AgentOS harness: ${e} (${r})`}function dC(e,r,t){return["Automated PR-ready handoff from the Kynver harness runtime.","",e?`AgentOS task: \`${e}\``:"",`Harness worker: \`${r}\` \xB7 run \`${t}\``,"","Opened by orchestrator completion enforcement so production review receives a reviewable artifact."].filter(Boolean).join(`
|
|
29
|
+
`)}function za(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Xn(e.snapshot.worktreePath,e.exec)??void 0};let r=Ws({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Xa(e,r=Us){let t=e.prUrlHint??um(e.status.finalResult)??null,n=pm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!dm({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?za({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return za({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!cC(r)){let g=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${g?`${g} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=gm(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let g=!1,y=!1,I=n.headCommit??Xn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let _=Ws({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!_.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${_.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};g=_.committed,y=_.pushed,I=_.headCommit??I}else{let _=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(_.status!==0&&!/already up to date/i.test(_.stderr||_.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${_.stderr||_.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};y=_.status===0}return{ok:!0,prUrl:a,headCommit:I,committed:g,pushed:y}}let l=Ms(n.worktreePath,i,n.branch,r);if(l)return za({snapshot:n,prUrl:l,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let c=n.changedFiles.length>0,u=!1,d=!1,f=n.headCommit??void 0,p=Ws({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!p.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${p.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=p.committed,d=p.pushed,!p.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${p.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let g=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(g.status!==0&&!/already up to date/i.test(g.stderr||g.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${g.stderr||g.stdout||g.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};d=g.status===0}f=p.headCommit??f??Xn(n.worktreePath,r)??void 0;let m=f?km(n.worktreePath,i,f,r):null;if(m)return{ok:!0,prUrl:m.prUrl,headCommit:f,committed:u,pushed:d,created:!1};let h=e.run.base?.trim()||"main",k=hm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:uC(e.worker.name,e.worker.runId),body:dC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!k.ok||!k.prUrl){if(lm(k.detail))return{ok:!0,headCommit:f??void 0,committed:u,pushed:d};let g=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${g?`${g} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${k.detail?` (${k.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}return{ok:!0,prUrl:k.prUrl,headCommit:f??void 0,committed:u,pushed:d,created:k.created}}X();vn();function Ls(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 n!=="node_modules"&&!n.startsWith("node_modules/")})}function ym(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function Rm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function bm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Sm(e){let r=bm(e);if(!r)return[];let t=bm(r.worktreeHandoff),n=Rm(t?.disposableArtifactsRemoved);return n.length?n:Rm(r.disposableArtifactsRemoved)}function vm(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function wm(e,r){let t=Ls(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>vm(o)));return t.every(o=>{let s=vm(ym(o));return n.has(s)})}function Bs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Cm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function pC(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 mC(e){let r=Cm(e.disposableArtifactsRemoved),t=Sm(e.finalResult);return[...new Set([...r,...t])]}function _m(e){let r=Cm(e.changedFiles),t=Ls(r),n=mC(e),o=t.length===0||wm(r,n);return Bs(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:Bs(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:Bs(e.artifactBundlePath)||Bs(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:pC(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}T();X();w();import fC from"node:path";var gC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function xm(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function hC(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Gr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:hC(r);return{finalResult:r??t??"completed",summary:t}}function Qa(e,r,t){if(xm(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Gr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),K(e.runId,e)}function kC(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function Em(e,r){let t=kC(r);if(t.size===0)return[];let n=L(e),o=[];for(let s of Object.keys(n.workers||{})){let i=C(fC.join(x(n.id),"workers",v(s),"worker.json"),void 0);if(!i?.taskId||xm(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!gC.has(a))continue;let l=M(i,{base:n.base,baseCommit:n.baseCommit});Qa(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import yC from"node:path";var RC=/^[a-z0-9][a-z0-9._-]{0,127}$/i,bC=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Za=new Set(["undefined","null"]),Pm="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Hs(e){let r=e.trim();if(!RC.test(r))throw new Error(`invalid run id: ${e}`);return r}function vC(e){let r=e.trim();if(!bC.test(r))throw new Error(`invalid worker name: ${e}`);return r}function el(e){return typeof e=="string"?e.trim():""}function Je(e){let r=el(e.run),t=el(e.name);return(!r||Za.has(r))&&pr(`missing --run RUN_ID (${Pm})`),(!t||Za.has(t))&&pr(`missing --name WORKER_NAME (${Pm})`),{runId:Hs(r),workerName:vC(t)}}function rl(e){let r=el(e.run);return(!r||Za.has(r))&&pr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Hs(r)}function Am(e){let r=yC.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function Im(e,r,t){let n=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function SC(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Om(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Qn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function wC(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function CC(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function Tm(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function _C(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Zn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,K(e.runId,e))}function xC(e){e.completionBlocker&&(delete e.completionBlocker,K(e.runId,e))}function Fs(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function EC(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function ro(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=L(n.runId),s=M(n,Fs(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Vr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Ja(n)&&xC(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let E=Xa({worker:n,run:o,status:s});if(!E.ok)return Zn(n,E.reason),{ok:!1,reason:E.reason,nextAction:E.nextAction,completionBlocked:!0};(E.prUrl||E.headCommit)&&(s=M(n,Fs(o)),s=EC(s,E))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let E=_m({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!E.allowed){let U=E.detail??`worktree completion blocked (${E.state})`;return Zn(n,U),{ok:!1,reason:U,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=V(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,p=await J(f,i,{baseUrl:d});a&&(await As({worker:n,agentOsId:i,baseUrl:d,secret:p}),n=me(r,t));let m=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,h={...s};n.disposableArtifactsRemoved?.length&&(h.disposableArtifactsRemoved=n.disposableArtifactsRemoved);let k={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),status:n.leaseToken?{...h,leaseToken:n.leaseToken}:h,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},g=await Im(m,p,k);if((g.status===401||g.status===403)&&!f){let E=await cd(i,{baseUrl:d});E&&E!==p&&(p=E,g=await Im(m,p,k))}if(g.ok){let E=nm(g.parsed);if(!om(E)){let P=`completion acknowledged but board not advanced: ${E.detail??(E.routeOutcome?`harness completion returned ${E.routeOutcome}`:"harness completion did not advance the linked task")}`;Zn(n,P);let B={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:g.parsed};return Ya(n,n.runId,B),{ok:!1,httpStatus:g.status,response:g.parsed,reason:P,completionBlocked:!0}}Zn(n,void 0);let U=E.routeOutcome??"acknowledged",Y={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:g.parsed};Ya(n,n.runId,Y),Qa(n,s,{source:"harness-completion"});let $=s.prUrl;return{ok:!0,httpStatus:g.status,response:g.parsed,reason:U,...$?{prHandoff:{prUrl:$}}:{}}}let y=g.status===401||g.status===403,I=SC(g.parsed)??(y?"runner token unauthorized":"non-2xx response"),_=y?`completion replay rejected (${g.status}): ${I}`:`completion replay failed (${g.status}): ${I}`;return Zn(n,_),{ok:!1,httpStatus:g.status,response:g.parsed,completionBlocked:!0}}async function nl(e){try{let{runId:r,workerName:t}=Je(e),n=me(r,t),o=L(n.runId),s=M(n,Fs(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await ro(e);console.log(JSON.stringify({worker:n.name,runId:n.runId,...l.skipped?{status:"skipped"}:{},...l.reason?{reason:l.reason}:{},...l.nextAction?{nextAction:l.nextAction}:{},...l.completionBlocked?{completionBlocked:l.completionBlocked}:{},agentOsId:i,taskId:a,httpStatus:l.httpStatus,response:l.response},null,2)),l.ok||process.exit(1)}catch(r){console.error(`worker complete failed: ${r.message}`),process.exit(1)}}function Dm(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=L(n.runId),s=M(n,Fs(o));se(eo.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function PC(e){return{full:`kynver worker list --run ${e} --full`,blocked:`kynver worker list --run ${e} --blocked`,running:`kynver worker list --run ${e} --running`,task:`kynver worker list --run ${e} --task <task-id>`,worker:`kynver worker list --run ${e} --worker <worker>`,runFull:`kynver run status --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`}}function tl(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function AC(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=tl(e.task??e.taskId);t&&(r.task=t);let n=tl(e.worker??e.name);n&&(r.worker=n);let o=tl(e.status);return o&&(r.status=o),r}function IC(e,r){if(r.blocked){let t=typeof e.attention=="string"?e.attention:"",n=typeof e.status=="string"?e.status:"";if(!(t==="blocked"||t==="needs_attention"||t==="stale"||n==="blocked"))return!1}return!(r.running&&!(e.status==="running"&&e.attention!=="blocked"&&e.attention!=="needs_attention")||typeof r.task=="string"&&e.taskId!==r.task||typeof r.worker=="string"&&e.worker!==r.worker||typeof r.status=="string"&&e.status!==r.status)}function Mm(e,r){let t=AC(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>IC(s,t)),o={...e,workerCount:n.length,needsAttention:n.filter(s=>s.attention&&s.attention!=="ok"&&s.attention!=="done").map(s=>s.worker),workers:n,activeFilters:t};return e.summary&&(o.summary={statusCounts:wr(n,"status"),attentionCounts:wr(n,"attention"),lifecycleCounts:wr(n,"lifecycleStage")}),e.controller&&(o.controller=Lm(n)),o}function Um(e){let r=rl(e),t=e.full===!0||e.full==="true",n=Mm(t?to(r):no(r),e),o=n.workers;console.log(JSON.stringify({runId:n.runId,status:n.status,projection:t?"full":"compact",workerCount:n.workerCount,...n.activeFilters?{activeFilters:n.activeFilters}:{},...t?{}:{resultContract:{projection:"compact",rawWorkerPayloadsOmitted:!0,deepDetailAvailableVia:["--full","worker status","worker tail","run status --full"]},drilldownCommands:PC(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Wm(e){let{run:r,workerName:t,worker:n}=e,o=M(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=bt({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=Tm(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Om(n.completionResponse),p=Om(f?.task),m=Qn(f?.outcome),h=Qn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(U=>typeof U=="string"&&U.trim().length>0):[],g=Qn(p?.prUrl)??Qn(f?.prUrl),y=Qn(n.completionReportedAt),I=wC({finished:ie(o),completionBlocker:c,completionOutcome:m,completionReportedAt:y}),_=CC({completionBlocker:c,completionOutcome:m,completionReportedAt:y,finished:ie(o)}),E=_C({changedFiles:o.changedFiles,headCommit:s,prUrl:g??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let U=n.instructionPolicyEvidence;if(!U||typeof U!="object")return null;let Y=U.ruleSlugs;return Array.isArray(Y)?Y.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:g,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:I,completionReportedAt:y,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:m,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:_,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function OC(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!Tm(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function NC(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function wr(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function Nm(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function Lm(e){let r=e.filter(Nm),t=e.filter(n=>{if(Nm(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function Bm(e,r,t){let n={runId:e.id,name:e.name,status:wn(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:wr(r,"status"),attentionCounts:wr(r,"attention"),lifecycleCounts:wr(r,"lifecycleStage")},n.controller=Lm(r)),n}function TC(e){return e.status==="done"&&e.attention==="done"}function to(e){let r=L(e),n=Object.keys(r.workers||{}).map(s=>{let i=C(eo.join(x(r.id),"workers",v(s),"worker.json"),void 0);return i?Wm({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Bm(r,n,!1);return se(eo.join(x(r.id),"last-board.json"),o),o}function no(e){let r=L(e),n=Object.keys(r.workers||{}).map(i=>{let a=C(eo.join(x(r.id),"workers",v(i),"worker.json"),void 0);return a?OC(a)?NC(i,a):Wm({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!TC(i)),s=Bm(r,o,!0);return s.status=wn(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:wr(n,"status"),allAttentionCounts:wr(n,"attention")},se(eo.join(x(r.id),"last-board-compact.json"),s),s}async function Hm(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=to(t),s=V(e.baseUrl?String(e.baseUrl):void 0),i=await J(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await re(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}function DC(e){return{full:`kynver run status --run ${e} --full`,blocked:`kynver status --run ${e} --blocked`,running:`kynver status --run ${e} --running`,task:`kynver status --run ${e} --task <task-id>`,worker:`kynver status --run ${e} --worker <worker>`,workersFull:`kynver worker list --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`,monitorTick:`kynver monitor status --run ${e} --tick`}}function Fm(e){let r=rl(e),t=e.full===!0||e.full==="true",n=Mm(t?to(r):no(r),e);n.projection=t?"full":"compact",t||(n.resultContract={projection:"compact",rawWorkerPayloadsOmitted:!0,omittedWorkerFields:["finalResult","changedFiles","gitAncestry","completionResponse","stdout/stderr tails"],deepDetailAvailableVia:["--full","worker status","worker tail","monitor status --tick"]},n.drilldownCommands=DC(r)),console.log(JSON.stringify(n,null,2))}function Km(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=Wo(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
30
|
+
`).filter(Boolean)){let i=ct(s),a=i?Eu(i):s;a&&console.log(a)}}function $m(e){let{runId:r,workerName:t}=Je(e),n=me(r,t);if(!H(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(fr(n.pid,"SIGTERM"),Or(1500),H(n.pid)){fr(n.pid,"SIGKILL"),console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"sigkill_sent"},null,2));return}console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"stopped"},null,2))}w();import{existsSync as Ks}from"node:fs";import Yr from"node:path";import{fileURLToPath as MC}from"node:url";function UC(e,r){let t=Yr.resolve(e);for(;;){let n=Yr.join(t,r);if(Ks(n))return n;let o=Yr.dirname(t);if(o===t)return null;t=o}}function WC(e){return UC(e,Yr.join("node_modules",".bin","tsx"))??"npx"}function ol(e,r){if(e.endsWith(".ts")){let t=WC(Yr.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function $s(e){if(e.explicitCliPath)return Ks(e.explicitCliPath)?ol(e.explicitCliPath,e.nodeExecutable):null;let r=MC(new URL(".",e.importMetaUrl)),t=Yr.join(r,"cli.js");if(Ks(t))return ol(t,e.nodeExecutable);let n=Yr.join(r,"cli.ts");return Ks(n)?ol(n,e.nodeExecutable):null}var KC=5e3,$C=360*60*1e3,jC=3,VC=5e3;function GC(e){let{runId:r,workerName:t}=Je(e);return{run:r,name:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,maxTotalMs:Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):void 0,completeAttempts:Number(e.completeAttempts)>0?Math.floor(Number(e.completeAttempts)):void 0,completeBackoffMs:Number(e.completeBackoffMs)>0?Math.floor(Number(e.completeBackoffMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}}async function jt(e){let r=GC(e),t=r.pollMs??KC,n=r.maxTotalMs??$C,o=r.completeAttempts??jC,s=r.completeBackoffMs??VC,i=me(r.run,r.name);if(!i.agentOsId||!i.taskId)return{worker:i.name,runId:i.runId,outcome:"missing_link",attempts:0,reason:"worker has no agentOsId/taskId \u2014 nothing to attribute completion to"};if(Vr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let a=Date.now();for(;;){if(i=me(r.run,r.name),Vr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=M(i);if(ie(u)||!H(i.pid))break;if(Date.now()-a>n)return{worker:i.name,runId:i.runId,outcome:"timed_out",attempts:0,reason:`worker did not finish within ${n}ms`};Or(t)}let l,c;for(let u=1;u<=o;u++){let d=await ro({run:r.run,name:r.name,...r.agentOsId?{agentOsId:r.agentOsId}:{},...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.secret?{secret:r.secret}:{}});if(l=d.httpStatus,d.ok)return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:d.httpStatus,attempts:u};if(d.httpStatus===401||d.httpStatus===403)return c=typeof d.reason=="string"?d.reason:"completion replay refused",{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:d.httpStatus,attempts:u,reason:c};c=typeof d.reason=="string"?d.reason:"transient failure",u<o&&Or(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function Vm(e){try{let r=await jt(e);console.log(JSON.stringify(r,null,2)),(r.outcome==="missing_link"||r.outcome==="timed_out")&&process.exit(1),process.exit(0)}catch(r){console.error(`worker auto-complete failed: ${r.message}`),process.exit(1)}}function Gm(e){let r=e.nodeExecutable??process.execPath,t=$s({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!BC(n))return;let o=FC.join(e.workerDir,"auto-complete.log"),s;try{s=HC(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=LC(t.command,a,de({detached:!0,stdio:i,env:process.env}));return s!==void 0&&jm(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{jm(s)}catch{}return}}function Ym(e){let r=e.branch?.trim()||"unknown branch",t=e.pid!=null?`pid ${e.pid}`:"pid pending";return`Harness worker started: ${e.worker} (${t}, ${r})`}function sl(e){return JSON.stringify(e,null,2)}we();function Jm(e,r,t){pe(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Ee();O();function il(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=v(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:xs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=tm(o.provider),i=o.model;if(s.preflightModel){let F=s.preflightModel(r.model);if(!F.ok)throw new Error(`model preflight failed for provider "${s.name}": ${F.note??"invalid model/provider combination"}`);F.normalized&&console.error(`[supervisor] ${n}: ${F.note}`),i=F.model}let{worktreesDir:a}=Z(),l=Vt.join(x(e.id),"workers",n);JC(l,{recursive:!0});let c=Vt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(YC(c))throw new Error(`worktree path already exists: ${c}`);pe(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?Jm(e.repo,c,u):pe(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Vt.join(l,"stdout.jsonl"),p=Vt.join(l,"stderr.log"),m=Vt.join(l,"heartbeat.jsonl"),h=zp({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:m,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,g=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let y;try{y=s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:p,heartbeatPath:m,prompt:h})}catch(F){throw pe(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),pe(e.repo,["branch","-D",d],{allowFailure:!0}),F}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,g===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=g}let I=Hp(y.model,i,s.defaultModel),_=b(),E=xe(process.env,_),U=Ge().runnerId,Y=Ps(E.boxKind),$={name:n,runId:e.id,status:"running",pid:y.pid,model:I,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:p,heartbeatPath:m,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},boxKind:E.boxKind,boxId:Y,runtimeId:U,startedAt:new Date().toISOString()};if(K(e.id,$),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Vt.join(l,"worker.json")}},e.status="running",Te(e),$.agentOsId&&$.taskId){let F;try{F=Gm({runId:e.id,workerName:n,workerDir:l,agentOsId:$.agentOsId})}catch(P){let B=`completion sidecar failed to spawn: ${P.message}`;$.completionBlocker=B,K(e.id,$)}if(F)F.pid&&($.completionSidecarPid=F.pid,K(e.id,$));else{let P="completion sidecar failed to spawn (CLI not found or spawn error)";$.completionBlocker=P,$.completionSidecarSpawnFailedAt=new Date().toISOString(),K(e.id,$)}}return $}async function qm(e){let r=L(String(e.run)),t=typeof e.name=="string"?e.name.trim():"";t||(console.error("worker start failed: --name is required"),process.exit(1));let n=e.task?String(e.task):Qc(e.taskFile?String(e.taskFile):void 0);n||(console.error("missing --task or --task-file"),process.exit(1));let o=!!(e.agentOsId&&e.taskId),s=e.localOnly===!0||e.localOnly==="true";!o&&!s&&(e.agentOsId||e.taskId)&&(console.error("worker start: board-linked workers require both --agent-os-id and --task-id (or pass --local-only for direct runs)"),process.exit(1));let i=e.wait===!0||e.wait==="true",a=e.emitJson===!0||e.emitJson==="true",l;try{l=il(r,{name:t,task:n,ownedPaths:e.owned?String(e.owned).split(",").map(d=>d.trim()).filter(Boolean):[],model:e.model?String(e.model):void 0,branch:e.branch?String(e.branch):void 0,agentOsId:e.agentOsId?String(e.agentOsId):void 0,taskId:e.taskId?String(e.taskId):void 0,provider:e.provider?String(e.provider):void 0});let u={runId:r.id,worker:l.name,pid:l.pid,branch:l.branch,worktreePath:l.worktreePath,workerDir:l.workerDir};a?console.log(sl(u)):(console.log(Ym(u)),console.error(sl(u)))}catch(u){console.error(`worker start failed: ${u.message}`),process.exit(1)}if(!i||!l)return;let c=await jt({run:String(e.run),name:l.name,...l.agentOsId?{agentOsId:l.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...c})),c.outcome==="timed_out"&&(process.exitCode=1)}w();import{createHash as zm}from"node:crypto";function Cr(e){let r=e.replace(/\r\n/g,`
|
|
31
|
+
`).trimEnd();return zm("sha256").update(r,"utf8").digest("hex")}function Gt(e){if(e==null)return null;let r=e.trim();return r?zm("sha256").update(r,"utf8").digest("hex"):null}O();var ee=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function oo(e,r){return e===401||e===403?new ee("auth",r,e):e>=500?new ee("server",r,e):new ee("permanent",r,e)}function al(e){let r=e instanceof Error?e.message:String(e);return/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|fetch failed|network/i.test(r)?new ee("network",r):new ee("tool_interruption",r)}function Xm(e){return e!=="permanent"}function Vs(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Gs(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function Qm(e,r,t={}){let n=V(t.baseUrl),o=t.apiKey??oe(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:Vs(o)}),l=await Gs(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw oo(a.status,c)}return l}catch(a){throw a instanceof ee?a:al(a)}}async function Zm(e,r={}){let t=V(r.baseUrl),n=r.apiKey??oe(),o=r.fetchFn??fetch,s=e.agentOsSlug;try{if(e.operation==="create"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans`,p={title:e.title,summary:e.summary??null,slug:e.planSlug??null,sourceRefs:js(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:js(e)}},m=await o(f,{method:"POST",headers:Vs(n),body:JSON.stringify(p)}),h=await Gs(m);if(!m.ok){let g=typeof h=="object"&&h&&"error"in h?String(h.error):`create plan failed (${m.status})`;throw oo(m.status,g)}let k=h;return{planId:k.plan.id,versionId:k.version.id,versionNumber:k.version.versionNumber}}let i=e.planId;if(!i)throw new ee("permanent","planId is required for this operation");if(e.operation==="update_metadata"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}`,p={title:e.title,summary:e.summary??null,sourceRefs:js(e)},m=await o(f,{method:"PATCH",headers:Vs(n),body:JSON.stringify(p)}),h=await Gs(m);if(!m.ok){let g=typeof h=="object"&&h&&"error"in h?String(h.error):`update plan failed (${m.status})`;throw oo(m.status,g)}let k=h;return{planId:k.id,versionId:k.currentVersionId,versionNumber:null}}let a=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}/versions`,l={title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:js(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Vs(n),body:JSON.stringify(l)}),u=await Gs(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw oo(c.status,f)}let d=u;return{planId:d.version.planId,versionId:d.version.id,versionNumber:d.version.versionNumber}}catch(i){throw i instanceof ee?i:al(i)}}function js(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as qC}from"node:crypto";function Ys(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:Gt(e.summary),bodyHash:Cr(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return qC("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as ef}from"node:fs";import{homedir as zC}from"node:os";import Yt from"node:path";function Js(){let e=process.env.KYNVER_STATE_ROOT;return e?Yt.resolve(e):Yt.join(zC(),".kynver","state")}function qs(){return Yt.join(Js(),"plan-outbox")}function XC(){return Yt.join(Js(),"plan-outbox-archive")}function Jr(){let e=qs(),r=XC();return ef(e,{recursive:!0}),ef(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function so(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=Yt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(Yt.join("/var","folders"))}import{existsSync as ll,readFileSync as tf,renameSync as rf,readdirSync as QC,writeFileSync as cl,unlinkSync as fH}from"node:fs";import Me from"node:path";import{randomUUID as ZC}from"node:crypto";var e_=12;function Jt(){let{outboxDir:e}=Jr(),r=QC(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=dl(Me.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function ul(e){for(let r of Jt())if(r.idempotencyKey===e)return r;return null}function dl(e){if(!ll(e))return null;try{return JSON.parse(tf(e,"utf8"))}catch{return null}}function nf(e){let{outboxDir:r}=Jr(),t=Me.join(r,e.bodyPath);return tf(t,"utf8")}function pl(e,r){let{outboxDir:t}=Jr(),n=new Date().toISOString(),o=r.existing?.id??ZC(),s=r.existing?.bodyPath??`${o}.body.md`,i=Me.join(t,`${o}.json`),a=Me.join(t,s);r.existing||cl(a,e.body,"utf8");let l={id:o,idempotencyKey:Ys(e),operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??r.existing?.planId??null,planSlug:e.planSlug??r.existing?.planSlug??null,title:e.title,summary:e.summary??null,bodyPath:s,bodyHash:Cr(e.body),author:e.author??null,model:e.model??null,sourceRefs:e.sourceRefs??null,changeSummary:e.changeSummary??null,markCurrent:e.markCurrent??!0,createdAt:r.existing?.createdAt??n,updatedAt:n,retryCount:(r.existing?.retryCount??0)+(r.existing?1:0),maxRetries:e.maxRetries??r.existing?.maxRetries??e_,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return cl(i,`${JSON.stringify(l,null,2)}
|
|
32
|
+
`,{mode:384}),l}function of(e){let{outboxDir:r}=Jr(),t=Me.join(r,`${e.id}.json`);cl(t,`${JSON.stringify(e,null,2)}
|
|
33
|
+
`,{mode:384})}function sf(e){let{outboxDir:r,archiveDir:t}=Jr(),n=Me.join(r,`${e.id}.json`),o=Me.join(r,e.bodyPath),s=Me.join(t,`${e.id}.json`),i=Me.join(t,e.bodyPath);ll(n)&&rf(n,s),ll(o)&&rf(o,i)}function io(e){let{outboxDir:r}=Jr();return{jsonPath:Me.join(r,`${e.id}.json`),bodyPath:Me.join(r,e.bodyPath)}}function af(e,r){return{operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId,planSlug:e.planSlug,title:e.title,summary:e.summary,body:r,changeSummary:e.changeSummary??void 0,author:e.author??void 0,model:e.model??void 0,sourceRefs:e.sourceRefs,markCurrent:e.markCurrent??!0,maxRetries:e.maxRetries}}async function lf(e,r,t={}){let n=await Qm(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new ee("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=Gt(r.summary),a=Gt(o.summary);if(i!==a)throw new ee("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new ee("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new ee("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=Cr(l);if(r.bodyHash&&c!==r.bodyHash)throw new ee("verification_failed","body hash mismatch on readback");return{planId:o.id,currentVersionId:o.currentVersionId,versionNumber:s?.versionNumber??null,title:o.title,summary:o.summary,bodyHash:r.bodyHash||c,readAt:new Date().toISOString()}}function cf(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:Cr(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var uf="persisted and read back",r_="queued for retry",ml="failed and needs action";async function ao(e,r={}){e.bodyPathHint&&so(e.bodyPathHint);let t=Ys(e),n=ul(t);if(n?.readbackEvidence)return{userStatus:uf,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return df(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??Zm,s=r.verifyReadback??lf;try{let i=await o(e,r),a={...e,planId:i.planId},l=cf(a,i),c=await s(e.agentOsSlug,t_(e,l),r);return n&&sf(n),{userStatus:uf,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof ee?i:new ee("tool_interruption",i instanceof Error?i.message:String(i));if(!Xm(a.kind)){let l=pl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=io(l),u=pf(l,a.message);return{userStatus:ml,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return df(e,a.message,a.kind,n)}}function t_(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function df(e,r,t,n){let o=pl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=io(o);if(o.retryCount>=o.maxRetries){let i=pf(o,r);return{userStatus:ml,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:r_,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function pf(e,r){let t={...e,queueStatus:"failed",userStatus:ml,lastError:r,updatedAt:new Date().toISOString()};return of(t),t}import n_ from"node:path";async function fl(e={},r={}){let t=Jt().filter(s=>e.outboxId?s.id===e.outboxId:!0),n=e.max&&e.max>0?t.slice(0,e.max):t,o={processed:0,succeeded:0,stillQueued:0,failed:0,results:[]};for(let s of n){o.processed+=1;let i=nf(s),a=af(s,i),l=await ao(a,r);l.userStatus==="persisted and read back"?o.succeeded+=1:l.userStatus==="failed and needs action"?o.failed+=1:o.stillQueued+=1,o.results.push({outboxId:s.id,userStatus:l.userStatus,lastError:l.lastError})}return o}function gl(e){let r=n_.join(qs(),`${e}.json`);return dl(r)}function hl(e){let r=io(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
34
|
+
`)}function kl(e){let r=e.metadata&&typeof e.metadata=="object"?e.metadata:null,t=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(r&&typeof r.planPersistenceOutboxId=="string"?r.planPersistenceOutboxId:void 0);return t?{outboxId:t,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:r&&typeof r.planPersistenceOutboxPath=="string"?r.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:r&&typeof r.planPersistenceBodyPath=="string"?r.planPersistenceBodyPath:void 0}:null}async function yl(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await re(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,releaseResponse:t.response??t}}import{spawnSync as ff}from"node:child_process";import{spawnSync as o_}from"node:child_process";function mf(){if(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim())return{source:"env",configured:!0,reason:"GitHub token already configured in environment"};let e=o_("gh",["auth","token"],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(e.status!==0)return{source:"missing",configured:!1,reason:typeof e.stderr=="string"&&e.stderr.trim()?e.stderr.trim():"gh auth token failed; run `gh auth login` on this machine"};let r=typeof e.stdout=="string"?e.stdout.trim():"";return r?(process.env.GH_TOKEN=r,{source:"gh-cli",configured:!0,reason:"Using local GitHub CLI auth for daemon land_pr merge"}):{source:"missing",configured:!1,reason:"gh auth token returned an empty token; run `gh auth login` on this machine"}}var gf=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),s_=new Set(["CLEAN","HAS_HOOKS"]);function bl(e){return e?.trim()?["--repo",e.trim()]:[]}function hf(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function kf(e,r,t){let n=e.gh(r,t);if(n.status!==0)throw new Error(n.stderr||n.stdout||`gh ${t.join(" ")} failed`);return JSON.parse(n.stdout||"{}")}function lo(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function i_(e){let r=Array.isArray(e)?e:[],t=[],n=[];for(let o of r){let s=o&&typeof o=="object"?o:{},i=typeof s.conclusion=="string"?s.conclusion.toUpperCase():"",a=typeof s.status=="string"?s.status.toUpperCase():"",l=typeof s.state=="string"?s.state.toUpperCase():"";if(!(i&&gf.has(i))){if(i){n.push(`${lo(s)}=${i}`);continue}if(!(l&&gf.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${lo(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${lo(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${lo(s)}=${a}`);continue}t.push(`${lo(s)}=PENDING`)}}}return{pending:t,failed:n}}function a_(e){return(Array.isArray(e)?e:[]).some(t=>{let n=t&&typeof t=="object"?t:{},o=typeof n.name=="string"&&n.name||typeof n.context=="string"&&n.context||"",s=typeof n.conclusion=="string"?n.conclusion.toUpperCase():"",i=typeof n.state=="string"?n.state.toUpperCase():"";return/^vercel/i.test(o)&&(s==="SUCCESS"||i==="SUCCESS")})}var l_=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,c_=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,u_=/^docs[(:]/i,d_=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function p_(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=u_.test(r)||d_.test(t),o=l_.test(t),s=c_.test(t);return n||o||s||e.vercelCheckSuccess===!0}function m_(e){if(!p_({title:e.title,body:e.body,vercelCheckSuccess:a_(e.statusCheckRollup)}))throw new Error(`PR #${e.number} lacks landing verification evidence \u2014 add ## Test plan / ## Verification with local commands, Vercel preview, or docs/no-code rationale`)}function f_(e){if(e.state!=="OPEN")throw new Error(`PR #${e.number} is ${e.state}, not OPEN`);if(e.isDraft)throw new Error(`PR #${e.number} is still a draft`);if(!s_.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=i_(e.statusCheckRollup);if(r.failed.length>0)throw new Error(`PR #${e.number} has failing checks: ${r.failed.join(", ")}`);if(r.pending.length>0)throw new Error(`PR #${e.number} has pending checks: ${r.pending.join(", ")}`);m_(e)}function g_(e){try{return f_(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function h_(e,r,t,n){if(!n?.trim())return;let o=encodeURI(`heads/${n}`);e.gh(r,["api","-X","DELETE",`repos/${t}/git/refs/${o}`])}function k_(e,r,t){if(t?.trim())return t.trim();let n=e.gh(r,["repo","view","--json","nameWithOwner"]);if(n.status!==0)throw new Error(n.stderr||"Could not resolve GitHub repo");let o=JSON.parse(n.stdout||"{}");if(!o.nameWithOwner)throw new Error("Could not resolve GitHub repo");return o.nameWithOwner}function y_(e,r){if(!r?.trim())return;let t=ff("git",["worktree","list","--porcelain"],{cwd:e,encoding:"utf8"});if(t.status!==0)return;let n=String(t.stdout||"").split(/\r?\n/),o=null,s=null;for(let i of n){if(i.startsWith("worktree ")){o=i.slice(9).trim(),s=null;continue}i.startsWith("branch ")&&o&&(s=i.slice(7).trim(),s.endsWith(`/${r}`)&&ff("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function yf(e){let r=e.cwd??process.cwd(),t=e.exec??Us,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=mf();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=kf(t,r,["pr","view",n,...bl(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","mergedAt","mergeCommit"].join(",")]);if(s.state==="MERGED"||s.mergedAt)return{prUrl:s.url||n,outcome:"skipped",mergeCommit:s.mergeCommit?.oid??null,reason:`PR #${s.number} is already merged \u2014 land_pr no-op (redelivery)`};let i=g_(s);if(i)return e.skipNotReady?{prUrl:s.url||n,outcome:"skipped",reason:i}:{prUrl:s.url||n,outcome:"blocked",reason:i};if(e.dryRun)return{prUrl:s.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};let a=String(s.number),l=t.gh(r,["pr","merge",a,...bl(e.repo),"--squash"]);if(l.status!==0){let u=Rl(t,r,a,e.repo);return u?{prUrl:u.url||s.url||n,outcome:"skipped",mergeCommit:u.mergeCommit?.oid??null,reason:`PR #${s.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:s.url||n,outcome:"blocked",reason:l.stderr||l.stdout||"gh pr merge failed"}}let c=Rl(t,r,a,e.repo);c||(c=Rl(t,r,a,e.repo));try{let u=k_(t,r,e.repo);h_(t,r,u,s.headRefName),y_(r,s.headRefName)}catch{}return{prUrl:c?.url||s.url||n,outcome:"merged",mergeCommit:c?.mergeCommit?.oid??null,reason:`Daemon land_pr merged PR #${s.number}${c?"":" (post-merge view unavailable \u2014 merge verified by gh exit 0)"}`}}function Rl(e,r,t,n){try{let o=kf(e,r,["pr","view",t,...bl(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}O();async function Rf(e){let r=await J(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),t=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${t}`,taskId:t,leaseToken:e.task.leaseToken??null,startedAt:o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await re(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function bf(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "liveReadback": "<prod readback string from acceptance.liveReadbackQuery>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface.","When the subject carries an acceptance snapshot, include liveReadback \u2014 the server oracle rejects passed if the original symptom still appears."].join(`
|
|
35
|
+
`)}var R_="dispatch_start_readback_failed:";function qr(e){return`${R_} ${e.trim()}`}function b_(e){return e.branch?.trim()?e.worktreePath?.trim()?e.heartbeatPath?.trim()?e.startedAt?.trim()?null:"missing local worker startedAt":"missing local worker heartbeatPath":"missing local worker worktreePath":"missing local worker branch"}function v_(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:qr("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:qr(`AgentOS task status=${r.status} (expected running)`),detail:{taskId:r.taskId,status:r.status,leaseOwner:r.leaseOwner,blocker:r.blocker},snapshot:r};let s=r.leaseOwner?.trim()??"";if(!s||s!==t.trim())return{ok:!1,error:qr(`leaseOwner mismatch (board=${s||"null"}, expected=${t})`),detail:{taskId:r.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:t},snapshot:r};let i=r.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:qr(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=b_(o);return a?{ok:!1,error:qr(a),detail:{taskId:o.taskId,worker:o.name},snapshot:r}:r.heartbeatAt?.trim()?o.executorRef?.trim()&&r.executorRef?.trim()&&o.executorRef.trim()!==r.executorRef.trim()?{ok:!1,error:qr(`executorRef mismatch (board=${r.executorRef}, worker=${o.executorRef})`),detail:{taskId:r.taskId,boardExecutorRef:r.executorRef,workerExecutorRef:o.executorRef},snapshot:r}:{ok:!0,snapshot:r}:{ok:!1,error:qr("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function vf(e){let r=await $t({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return v_({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}w();T();function Sf(e,r,t){r.pid&&H(r.pid)&&(fr(r.pid,"SIGTERM"),H(r.pid)&&fr(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return K(e,n),n}T();var Ka=3600*1e3;function wf(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Cf(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function S_(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,f=t.contextEnvelopeReady===!0,p=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,m=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof p?.promptMarkdown=="string"?p.promptMarkdown:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:p,memoryQualityPromptMarkdown:m,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:f}}function w_(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function C_(e,r){let t=[`[AgentOS task ${e.id}] ${e.title}`,"",e.description?String(e.description):"(no description on the board task)","",`Board linkage: agentOsId=${r}, taskId=${e.id}, attempt=${e.attempt}, executor=${e.executor}${e.executorRef?`, executorRef=${e.executorRef}`:""}.`,"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish."];e.executor==="verify_live"&&t.push("",bf());let n=kl(e);if(n?.outboxId){let o=gl(n.outboxId);o?t.push("",hl(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
36
|
+
`)}function __(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function zr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let st=function(){return Q.filter(S=>S.started).length},Le=function(S,R){Sa({runId:i.id,agentOsId:a,phase:S,startedCount:st(),outcomeCount:Q.length,cappedStarts:_,...R})},he=function(){return Q.some(S=>(typeof S.error=="string"?S.error:"").startsWith("dispatch_start_readback_failed:"))},W=function(S){return S.landPrDispatch===!0?!0:S.task?.executor==="land_pr"};var t=st,n=Le,o=he,s=W;let i=L(String(N(String(e.run||""),"--run"))),a=String(N(String(e.agentOsId||""),"--agent-os-id")),l=V(e.baseUrl?String(e.baseUrl):void 0),c=await J(e.secret?String(e.secret):void 0,a,{baseUrl:l}),d=!(e.execute===!0||e.execute==="true"),f=Ge({runId:i.id}),p=Ha(i.id,f.runnerId),m=e.diskPath?Ke({diskPath:String(e.diskPath)}):Ke({diskPath:i.repo}),h=nr({runId:i.id}),k=__(e),g=k.size>0,y=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,I=g?Math.min(y,k.size):y,_=d?I:Math.min(I,h.slotsAvailable);if(!d&&_<=0){let S={runId:i.id,agentOsId:a,dryRun:!1,skipped:!0,reason:h.reason??"no resource slots",resourceGate:h};if(r)return{ok:!0,...S};console.log(JSON.stringify(S,null,2));return}let E=Rs(i.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let S=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/lane-hygiene`;try{await re(S,c,{agentOsId:a,dryRun:!1,includeBoardReconcile:!0},{agentOsId:a,baseUrl:l})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let U=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/tasks/dispatch-next`,Y=S=>({agentOsId:a,dryRun:d,maxStarts:S,leaseOwner:p,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Ka,runnerDiskGate:m,runnerResourceGate:h,activeHarnessWorkers:E,runnerPresence:f,harnessBoardSnapshot:to(i.id),...e.lane?{lane:dp(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(R=>R.trim()).filter(Boolean)}:{}}),$=sp(),F=async S=>{let R=await re(U,c,Y(S),{agentOsId:a,baseUrl:l,timeoutMs:$})??{ok:!1,status:0,response:null},A=R.response;return{dispatch:R,result:A?.result}},P=await F(g||d?_:1);if(!P.dispatch.ok||!P.result){let S={runId:i.id,agentOsId:a,action:"dispatch",httpStatus:P.dispatch.status,response:P.dispatch.response,authRefreshed:P.dispatch.refreshedAuth===!0,authRefreshFailure:P.dispatch.authRefreshFailure};if(r)return{ok:!1,...S};console.log(JSON.stringify(S,null,2)),process.exit(1)}let B=P.result;if(d){let S=wf(B),R=Cf(B),A={runId:i.id,agentOsId:a,dryRun:!0,wouldStart:B.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:B.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:B.diskGate,resourceGate:B.resourceGate,inspected:B.inspected,pagesScanned:B.pagesScanned??null,candidatesExhausted:B.candidatesExhausted??null,capacityIdle:S?.capacityIdle===!0,admissionExhaustion:S,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let Ir=Kp(),Q=[],ur=[],ot=Number(B.inspected)||0,We=!1;async function G(S,R,A){let j=await yl({baseUrl:l,secret:c,agentOsId:a,taskId:String(S.id),leaseOwner:p,failureDetail:R}),le={taskId:S.id,started:!1,error:R,released:j.released,releaseResponse:j.releaseResponse,...A};return Q.push(le),Le("outcome",{lastOutcome:le}),!1}async function ke(S){let R=S.task,A=String(R.id);if(g&&!k.has(A))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let j=R.prUrl?String(R.prUrl):"";if(!j)return G(R,"land_pr task missing prUrl");try{let le=await yf({prUrl:j,repo:hf(j),cwd:i.repo}),at=await Rf({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:R,report:le});return at.ok?(Q.push({taskId:A,started:!0,landPr:!0,outcome:le.outcome,completionStatus:at.status}),!0):G(R,`land_pr completion POST failed (HTTP ${at.status})`,{landPr:!0,outcome:le.outcome})}catch(le){return G(R,le.message)}}async function ve(S){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await yl({baseUrl:l,secret:c,agentOsId:a,taskId:String(S.id),leaseOwner:p,failureDetail:R}),j={taskId:S.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return Q.push(j),Le("outcome",{lastOutcome:j}),!1}async function dr(S){let R=S.task,A=S_(S),j=String(R.id);if(g&&!k.has(j))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let le=w_(R.personaSlug);if(le&&(!A?.personaInjectionReady||!A.personaMarkdown))return G(R,`persona_injection_required: missing anchored context-envelope persona block for "${le}"`);if(Gp(i.id,j))return ve(R);let at=Number(R.attempt)||1;if(at>Ir.maxTaskAttempts)return G(R,`task attempt ${at} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Ir.maxTaskAttempts})`);let pn=R.leaseToken?String(R.leaseToken).trim():"";if(!pn)return G(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Hy=v(`t-${R.id}-a${R.attempt}`),lt=xs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:pp(R)});try{let Li=R.planId?String(R.planId):void 0,No=Jp({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),Be=il(i,{name:Hy,task:C_(R,a),ownedPaths:e.owned?String(e.owned).split(",").map(Fy=>Fy.trim()).filter(Boolean):[],model:lt.model,provider:lt.provider,routingRule:lt.rule,requestedModel:lt.requestedModel,agentOsId:a,taskId:String(R.id),planId:Li,branch:No?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:No?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:No?.targetPrUrl,repairTargetBranch:No?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??le,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,leaseOwner:p,leaseToken:pn,dispatched:!0}),To=await vf({agentOsId:a,taskId:String(R.id),leaseOwner:p,expectedLeaseToken:pn,worker:Be,baseUrl:l,secret:c});if(!To.ok)return Sf(i.id,Be,To.error??"dispatch_start_readback_failed"),G(R,To.error??"dispatch_start_readback_failed",{readback:To.detail??null});Be.leaseToken!==pn&&(Be.leaseToken=pn,Be.leaseOwner=p,K(i.id,Be));let Jc={taskId:R.id,started:!0,worker:Be.name,pid:Be.pid,branch:Be.branch,model:Be.model,provider:lt.provider,routingRule:lt.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??le,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return Q.push(Jc),Le("worker_started",{lastOutcome:Jc}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: operating-rules policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Li){return G(R,Li.message)}}let Se=new Set;async function Ao(S){let R=S.task,A=String(R.id);if(Se.has(A))return G(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=W(S)?await ke(S):await dr(S);return j||Se.add(A),j}for(let S of B.started)await Ao(S);if(ur.push(...B.skipped??[]),g)for(let S of ur){let R=String(S.task.id);k.has(R)&&Q.push({taskId:R,started:!1,error:`exact_target_not_started:${S.skipReason}`,skipReason:S.skipReason,detail:S.reason??null,requestedTargetTaskIds:[...k]})}for(;!g&&Q.length<_;){if(he()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};Q.push(A),Le("circuit_breaker",{lastOutcome:A});break}let S=await F(1);if(!S.dispatch.ok||!S.result){let A=ip(S.dispatch.response),j=st();We=A&&j>0;let le={started:!1,error:"dispatch_next request failed during top-up",httpStatus:S.dispatch.status,response:S.dispatch.response,...We?{nonFatal:!0,partialTopUp:!0}:{}};Q.push(le),Le("top_up_failed",{partialTopUpInterrupted:We,lastOutcome:le});break}ot+=Number(S.result.inspected)||0,ur.push(...S.result.skipped??[]);let R=S.result.started??[];if(R.length===0)break;for(let A of R){if(Q.length>=_)break;await Ao(A)}}let Io=Q.filter(S=>S.started).length,it=wf(B),Oo=Cf(B),jc=Io===0&&(it?.capacityIdle===!0||Number(B.resourceGate?.slotsAvailable)>0);if(jc&&it?.summary){let S=it.skipReasonCounts?.retry_ceiling_exceeded??0,R=B.overAttemptIdleRecovery??it.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:S>0?"; over_attempt_recovery not attempted":"",j=Oo?`; dispatch_skip_drain scanned=${Oo.scanned??0} advanced=${Oo.advanced??0}`:"";console.error(`[dispatch] ${it.summary}${S>0?`; retry_ceiling_exceeded=${S}`:""}${A}${j}`)}let Vc={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:p,startedCount:Io,capacityIdle:jc,admissionExhaustion:it,dispatchSkipDrain:Oo,outcomes:Q,skipped:ur.map(S=>({taskId:S.task.id,skipReason:S.skipReason})),inspected:ot,pagesScanned:B.pagesScanned??null,candidatesExhausted:B.candidatesExhausted??null,diskGate:B.diskGate,resourceGate:B.resourceGate,...We?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:$},Gc=S=>!S.started&&S.nonFatal!==!0,By=Q.some(Gc),Yc=We&&Io>0?!0:!By;if(Sa({runId:i.id,agentOsId:a,phase:"complete",partial:We,startedCount:Io,ok:Yc}),r)return{ok:Yc,...Vc};console.log(JSON.stringify(Vc,null,2)),Q.some(Gc)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var x_=1;function qt(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function E_(e){let{maxStarts:r,...t}=e;return t}async function vl(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=E_(e);if(t.targetTaskId||t.targetTaskIds){let u=await zr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:qt(u)}}let n=Math.min(r,x_),o=Math.max(0,r-n),s=await zr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=qt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await zr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=qt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function _f(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function P_(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function co(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function A_(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function xf(e,r){let t=P_(r),n=co(t?.recommendedMaxStarts),o=co(t?.actionableReady),s=co(t?.queuedTasks),i=co(t?.boardAdvancedThisTick)??0,a=co(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=A_("KYNVER_DAEMON_MAX_DISPATCH_STARTS");f!==null&&(u=Math.min(u,f));let p=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:p,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import cx from"node:path";T();Tr();X();w();import I_ from"node:path";var O_=new Set(["running","dispatching","pending","queued","needs_attention"]),ar=new Set(["completed","failed","cancelled","done"]);function Xr(e){let r=fe(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=C(I_.join(x(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let l=M(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),_t(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function uo(){let e=[];for(let r of z()){if(!O_.has(r.status))continue;let t=Xr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Te(r),e.push({runId:r.id,from:n,to:t})}return e}T();Tr();yr();ra();vn();function zs(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function N_(e){let r=e.lastHeartbeatPhase?.trim();if(!r||r==="complete")return null;let t=e.lastHeartbeatSummary?.trim();return t?{summary:t,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:r,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function T_(e){let r=Vo(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function Ef(e){let{worker:r,status:t}=e;if(zs(t.finalResult)){let l=ae(r.heartbeatPath),c=tr(l),u=zs(c)&&JSON.stringify(c)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:u,snapshot:Gr(t)}}if(t.alive)return null;let n=Rt(r.stdoutPath);if(zs(n.finalResult)){let l={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Gr(l)}}let o=ae(r.heartbeatPath),s=tr(o);if(zs(s)){let l={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Gr(l)}}let i=T_(t.error??n.error);if(i){let l={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Gr(l)}}let a=N_(o);if(a){let l={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Gr(l)}}return null}function Pf(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}X();w();yr();vn();import{existsSync as Er,lstatSync as $_,readdirSync as j_,readlinkSync as V_,renameSync as Al,unlinkSync as G_}from"node:fs";import qe from"node:path";_e();w();import Ue from"node:path";var D_=`${Ue.sep}runs${Ue.sep}runs${Ue.sep}`;function Xs(e){return e.includes(D_)}function Sl(e,r){return Ue.join(Ce(ce(e)),v(r))}function _r(e,r,t){return Ue.join(Sl(e,r),"workers",v(t))}function Af(e,r,t){let n=ce(e);return Ue.join(n,"runs","runs",v(r),"workers",v(t))}function wl(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Qr(e){return{workerJsonPath:Ue.join(e,"worker.json"),stdoutPath:Ue.join(e,"stdout.jsonl"),stderrPath:Ue.join(e,"stderr.log"),heartbeatPath:Ue.join(e,"heartbeat.jsonl"),lastStatusPath:Ue.join(e,"last-status.json")}}function If(e){let r=Qr(_r(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Xs(e.statusPath)?e.statusPath:r}import{existsSync as xr,mkdirSync as M_,readdirSync as Nf,renameSync as U_,statSync as Cl}from"node:fs";import te from"node:path";yr();_e();T();w();var po=900*1e3,W_=3600*1e3;function Tf(e,r){let t=te.resolve(e),n=te.resolve(Ce(r)),o=te.relative(n,t);return o!==".."&&!o.startsWith("..")&&!te.isAbsolute(o)}function _l(e){if(!xr(e))return[];try{return Nf(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function xl(e){let r=te.join(e,"workers");if(!xr(r))return[];try{return Nf(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Df(e){return te.join(e,"archived-workers")}function L_(e,r){let t=te.join(Df(e),v(r));return xr(t)?`${t}-${Date.now()}`:t}function Of(e,r,t){if(!xr(e))return!1;try{let n=r-Cl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Mf(e,r=Date.now(),t=po){if(!xr(e))return!1;let n=Qr(e),o=C(n.workerJsonPath,void 0);if(o?.status==="running"&&H(o.pid))return!0;let s=ae(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Of(n.stdoutPath,r,t)||Of(n.heartbeatPath,r,t))}function B_(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-Cl(te.join(e,"worker.json")).mtimeMs}catch{return 0}}function H_(e,r,t,n){if(Mf(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=B_(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function zt(e,r=Date.now(),t=po){for(let n of xl(e))if(Mf(te.join(e,"workers",n),r,t))return!0;return!1}function F_(){return{repo:$e()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function K_(e,r){let t=te.join(Ce(e),v(r));if(!xr(t))return null;let n=xl(t);if(n.length===0)return null;let o;try{o=Cl(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=_r(e,r,a);s[a]={workerDir:l,statusPath:te.join(l,"worker.json")}}let i=zt(t);return{id:r,name:r,...F_(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function El(e){let r=ce(e??Re()),t=Ce(r),n=[];for(let o of _l(t)){let s=te.join(t,o,"run.json");if(xr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=K_(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Te(i),n.push({runId:o,action:"repaired_run_json",reason:zt(te.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Pl(e,r={}){let t=ce(e??Re()),n=Ce(t),o=r.now??Date.now(),s=r.archiveAgeMs??W_,i=[];El(t);for(let a of _l(n)){let l=te.join(n,a),c=te.join(l,"run.json"),u=C(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...xl(l)]),f=!1;for(let p of d){let m=te.join(l,"workers",v(p)),h=te.join(m,"worker.json"),k=C(h,void 0);if(!k){let I=te.join(Df(l),v(p));if(xr(I)&&(u.workers[v(p)]||u.workers[p])){delete u.workers[v(p)],delete u.workers[p],f=!0,i.push({runId:u.id,worker:p,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:I});continue}i.push({runId:u.id,worker:p,action:"skipped",reason:"worker.json missing"});continue}let g=H_(m,k,o,s);if(!g.eligible){i.push({runId:u.id,worker:p,action:"skipped",reason:g.reason});continue}let y=L_(l,p);M_(te.dirname(y),{recursive:!0}),U_(m,y),delete u.workers[v(p)],delete u.workers[p],f=!0,i.push({runId:u.id,worker:p,action:"archived",reason:g.reason,archivePath:y})}f&&Te(u)}return{workers:i}}function Uf(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of _l(n)){let s=te.join(n,o);zt(s,r)&&t.add(`${e}\0${o}`)}return t}T();w();function Y_(e,r){let t=Sl(e,r),n;try{n=$_(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=qe.resolve(qe.dirname(t),V_(t));if(zt(o)||zt(t))return null;let s=`${t}.materialize-${Date.now()}`;return Al(o,s),G_(t),Al(s,t),o}function J_(e){let r=[];for(let t of wl()){let n=qe.join(e.fromDir,t),o=qe.join(e.toDir,t);!Er(n)||Er(o)||(Al(n,o),r.push(t))}return r}function Wf(e,r){let t=Qr(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function q_(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function z_(e){let r=Qr(e.canonicalDir),t=C(r.lastStatusPath,void 0),n=Er(r.stdoutPath),o=Er(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Rt(r.stdoutPath):{finalResult:null},a=o?ae(r.heartbeatPath):ae(""),l=tr(a),c=q_({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:qe.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Wf(u,e.canonicalDir),u}function X_(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=_r(r,e.id,o),a=qe.join(i,"worker.json");(Xs(s.workerDir)||Xs(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Te(e)),t}function Q_(e){let r=[],t=_r(e.harnessRoot,e.run.id,e.workerName),n=Af(e.harnessRoot,e.run.id,e.workerName),o=Qr(t),s=J_({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=If({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=C(i,void 0);if(!a&&Er(o.workerJsonPath)&&(a=C(o.workerJsonPath,void 0)),!a){let l=z_({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return K(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=Er(t),u=wl().some(d=>Er(qe.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:qe.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return K(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return Wf(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",K(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function Z_(e,r){let t=qe.join(x(e.id),"workers");if(!Er(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of j_(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Lf(){let{harnessRoot:e}=Z(),r=El(e),t=[];for(let n of z()){let o=Y_(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),X_(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of Z_(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:_r(e,n.id,i),statusPath:qe.join(_r(e,n.id,i),"worker.json")}},Te(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...Q_({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}yr();Jo();X();T();Tr();w();import{execFileSync as Bf}from"node:child_process";import Hf from"node:path";function Il(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function ex(e){let r=Il(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function rx(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function tx(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function nx(e){let r=null;if(typeof e=="string"?r=St(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!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=Il(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function ox(e){try{let n=Bf("git",["config","--get","remote.origin.url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Bf("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:Il(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function sx(e){let r=ae(e.heartbeatPath);return e.completionSnapshot?.finalResult??tr(r)}function ix(e){let r=new Map,t=x(e.id);for(let n of fe(e)){let o=C(Hf.join(t,"workers",v(n),"worker.json"),void 0);if(o)for(let s of nx(sx(o))){let i=ex(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function ax(e,r){let t=ae(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,rx(r)].filter(Boolean).join(`
|
|
37
|
+
`);return tx(n)}function lx(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Ol(e={}){let r=e.lookupPr??ox,t=[],n=new Map;for(let o of z()){let s=ix(o),i=x(o.id);for(let a of fe(o)){let l=Hf.join(i,"workers",v(a),"worker.json"),c=C(l,void 0);if(!c||!lx(c))continue;let u=M(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let p of ax(c,u.finalResult)){if(d=s.get(p)??null,!d){let m=o.repo||c.worktreePath,h=`${m}#${p}`,k=n.has(h)?n.get(h)??null:r({repoDir:m,prNumber:p});n.has(h)||n.set(h,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",K(o.id,c),t.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:t}}var ux=900*1e3;function dx(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Ff(e,r){let t=Ef({worker:e,status:r}),n=t?Pf(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function mo(){let e=Lf();if(dx()){let s=Ol(),i=Pl();return{workers:[],finalizedRuns:uo(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of fe(s)){let a=cx.join(x(s.id),"workers",v(i),"worker.json"),l=C(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=M(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Ff(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,K(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=Ff(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,K(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&H(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||t-u>ux,p=Number.isFinite(d)&&t-d>Ct;if(f&&p){fr(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,K(s.id,l),r.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}r.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=Ol(),o=Pl();return{workers:r,finalizedRuns:uo(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Kf(){let e=mo(),r=e.workers.filter(l=>l.action==="marked_exited").length,t=e.workers.filter(l=>l.action==="killed_stale").length,n=e.workers.filter(l=>l.action==="skipped").length,o=e.metadataReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),s=e.localPrAttentionReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),i=e.metadataReconcile.runMetadataRetention.runs.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),a=e.terminalWorkerArchive.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{});console.log(JSON.stringify({ok:!0,workers:{markedExited:r,killedStale:t,skipped:n,total:e.workers.length},metadataReconcile:{totals:o,total:e.metadataReconcile.workers.length,runMetadataRetention:{totals:i,total:e.metadataReconcile.runMetadataRetention.runs.length}},localPrAttentionReconcile:{totals:s,total:e.localPrAttentionReconcile.workers.length},terminalWorkerArchive:{totals:a,total:e.terminalWorkerArchive.workers.length},finalizedRuns:e.finalizedRuns.length,details:{workers:e.workers,metadataReconcile:e.metadataReconcile.workers,localPrAttentionReconcile:e.localPrAttentionReconcile.workers,terminalWorkerArchive:e.terminalWorkerArchive.workers,runMetadataRetention:e.metadataReconcile.runMetadataRetention.runs,finalizedRuns:e.finalizedRuns}},null,2))}Et();O();Ee();import px from"node:os";function Qs(e,r={}){let t=(r.boxKind??Fe(b())).trim().toLowerCase()||"forge",n=r.hostLabel??px.hostname();return{boxId:r.boxId??Ps(t,n),boxKind:t,displayName:r.displayName??null,hostLabel:n,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{}}}T();Go();X();O();import mx from"node:path";T();X();w();async function fo(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=L(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=V(e.baseUrl?String(e.baseUrl):void 0),s=await J(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Ge({runId:t.id}).runnerId,a=await Hm({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let p=C(mx.join(x(t.id),"workers",v(f),"worker.json"),void 0);if(!p||!p.dispatched||!p.taskId)continue;let m=M(p);if(m.alive||m.finalResult||p.completionReportedAt)continue;let h=Es({runId:t.id,workerLeaseOwner:p.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(p.taskId))}/release`,g;try{g=await re(k,s,{agentOsId:n,leaseOwner:h},{agentOsId:n,baseUrl:o})}catch(y){g={ok:!1,error:y.message}}l.push({worker:f,taskId:p.taskId,pid:p.pid,released:g.ok===!0||g.response?.ok===!0,response:g.response??g})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await re(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}w();X();T();w();import fx from"node:path";O();async function $f(e){let r=V(e.baseUrl),t=await J(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await re(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function jf(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=C(fx.join(x(t.id),"workers",v(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=M(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await $f({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,K(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}Cn();O();Ee();function gx(e=process.env){let r=b();return Fe(r,e)!=="forge"}function Vf(e,r=process.env){if(gx(r))return e?.maxConcurrentWorkers??void 0}async function Gf(e,r){let t=V(r.baseUrl?String(r.baseUrl):void 0),n=await J(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await bs(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}O();Ee();_e();import Ne from"node:path";Yo();import ri from"node:path";we();X();var Nl=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Yf(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Nl)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Ae(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!Yf(n)})}function Zr(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 go(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(Zr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function ho(e){return e.status||(e.status=M(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Tl(e,r){if(e.status)return Ae(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):mn(e.worktreePath);return Ae(t).length>0}function hx(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Dl(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=hx(e);if(o&&!H(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):mn(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"}:Lo(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={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??Zr(s)};return e.status=u,u}return ho(e)}X();X();yr();w();function Ml(e,r=Date.now(),t=po){let n=ae(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Zs(e,r=Date.now(),t=po){return H(e.pid)?!0:Ml(e,r,t)}function kx(e,r){return r?r.runTerminalCache.derive(e.run):Xr(e.run)}function lr(e,r=Date.now()){return Zs(e.worker,r)}function Ul(e,r){return ar.has(e.run.status)?!1:kx(e,r)!==null}function Jf(e,r,t=Date.now()){if(lr(e,t))return!0;if(ar.has(e.run.status)||Ul(e,r))return!1;let n=ho(e);return ie(n)?!1:!!lr(e,t)}Yo();X();function qf(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(lr(e))return!0;let n=r??ho(e);return!!(!ie(n)||go(n)||Ae(n.changedFiles).length>0||vt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Zr(n.finalResult)}).blocked)}we();w();import{existsSync as Xf,mkdirSync as yx,writeFileSync as zf}from"node:fs";import ei from"node:path";function Qf(e,r,t){return ei.join(e,"salvage",v(r),v(t))}function Zf(e){return Xf(ei.join(Qf(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function eg(e){let r=Qf(e.harnessRoot,e.indexed.runId,e.indexed.workerName);yx(r,{recursive:!0});let t=ei.join(r,"salvage.patch"),n=!1;if(Xf(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
38
|
+
`);a.trim()&&(zf(t,a.endsWith(`
|
|
39
39
|
`)?a:`${a}
|
|
40
|
-
`),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
|
|
41
|
-
`),o}var ax=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function lx(e){return!ax.has(e.skipReason)||ar(e.indexed,e.now)?!1:$f({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(jf({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function cx(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?ir.has(r.run.status)||e.liveness&&El(r,e.liveness)||e.liveness&&ie(_l(r,e.liveness))&&!ar(r)?o:n:t?o:n}function ux(e,r){if(e.harnessRoot?.trim())return qs.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${qs.sep}runs${qs.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Vf(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 l=cx(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(ar(r,a))return"active_worker";let c=_l(r,e.liveness),u=ux(e,r),d=m=>u&&lx({indexed:r,harnessRoot:u,skipReason:m,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:m;if(Bf(r,c)){let m=d("completion_blocked");if(m)return m}if(Cl(r,e.liveness?.gitStatusCache)){let m=d("dirty_worktree");if(m)return m}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let m=d("pr_or_unmerged_commits");if(m)return m}if(Lf(r,e.liveness,a)||!ie(c))return"run_still_active";if(uo(c)){let m=d("pr_or_unmerged_commits");if(m)return m}if(Ae(c.changedFiles).length>0){let m=d("dirty_worktree");if(m)return m}if(yt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:zr(c.finalResult)}).blocked){let m=d("landing_blocked");if(m)return m}if(i&&e.worktreePath){let m=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(m)return m.detail?{reason:m.reason,detail:m.detail}:m.reason}return null}function Pl(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(qs.resolve(o))||r&&ar(r)?"active_worker":r&&Cl(r,e.gitStatusCache)?"dirty_worktree":null}function Gf(e){return Pl(e)}var Yf=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Jf(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)Yf.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Yf.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Qf,readdirSync as Zf,statSync as mx}from"node:fs";import eg from"node:path";T();_e();import qf from"node:path";w();function px(e,r){return Ys(e,r)}function zf(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ho(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=C(qf.join(gn(o,s.id),"workers",b(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=qf.resolve(l.worktreePath);px(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Ef(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Xf(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function fx(e,r){try{let t=mx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gx(e,r){let t=eg.join(e,"runs",r,"run.json");return Qf(t)?C(t,null):null}function rg(e){try{return Zf(e).length===0}catch{return!1}}function tg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Xf(n,r,t,i.liveRunKeys)||!rg(n))return"run_still_active";let a=gx(r,t);return a&&!ir.has(a.status)&&!Jr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function ng(e){if(!Qf(e.worktreesDir))return[];let r=[],t;try{t=Zf(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=eg.join(e.worktreesDir,o);rg(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:fx(s,e.now)})}return r}we();import{existsSync as Il,rmSync as fg}from"node:fs";import{execFileSync as hx}from"node:child_process";import{existsSync as og,readdirSync as kx,statSync as yx}from"node:fs";import Rx from"node:path";var vx=2500;function bx(e,r=vx){if(!og(e))return 0;try{let n=hx("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 lr(e,r=5e4){if(!og(e))return 0;let t=bx(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=kx(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=Rx.join(i,l),u;try{u=yx(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as _x,rmSync as xx}from"node:fs";_e();import{lstatSync as Sx,readdirSync as wx}from"node:fs";function sg(e){try{let r=Sx(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 ig(e,r=32){let t=sg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=wx(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=sg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Cx}from"node:child_process";import cg from"node:path";import Ie from"node:path";function ag(e,r,t,n){let o=Ie.resolve(e),s=`${Ie.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ie.relative(t,i);if(a.startsWith("..")||Ie.isAbsolute(a))return"path_outside_harness";let l=a.split(Ie.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ie.resolve(r))?"path_outside_harness":null}function zs(e,r,t){return ag(e,r,t,"node_modules")}function Xs(e,r,t){return ag(e,r,t,".next")}function Qs(e,r,t){let n=Ie.resolve(e),o=Ie.relative(t,n);return o.startsWith("..")||Ie.isAbsolute(o)||o.split(Ie.sep).length<3||!n.startsWith(Ie.resolve(r))?"path_outside_harness":null}function lg(e,r,t){let n=Ie.resolve(e);return zs(n,r,t)===null||Xs(n,r,t)===null||Qs(n,r,t)===null}function dg(){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 ug(e){let r=Cx("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function pg(e,r,t){if(!lg(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=ug(["chown","-R",`${n}:${o}`,cg.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=ug(["rm","-rf",cg.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 Al="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 Ex(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function mg(e,r,t={}){if(!_x(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?hr(n):null,i=e.bytes??lr(e.path)??void 0,a=t.removePath??xx,l=t.hasForeignOwnedEntry??ig;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!Ex(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=dg();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Al}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let p=pg(e.path,n,o);if(p.ok&&p.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(p.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(m){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${m.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${p.error}; ${Al}`}}}function Ol(e){let r=e.harnessRoot;return!r||!Cf(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Nl(e,r){let t=Ol(e);if(t)return t;let n=mg(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function gg(e,r){return Nl(e,r)}function hg(e,r){return Nl(e,r)}function kg(e,r){return Nl(e,r)}function yg(e,r){let t=Ol(e);if(t)return t;if(!Il(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??lr(e.path);return fg(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 Rg(e,r){let t=Ol(e);if(t)return t;if(!Il(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??lr(e.path);return n&&de(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Il(e.path)&&fg(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 Zs,readdirSync as ei,statSync as Px}from"node:fs";import ze from"node:path";function Tl(e,r){try{let t=Px(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function bg(e,r){let t=ze.relative(r,e);return t===""||!t.startsWith("..")&&!ze.isAbsolute(t)}function vg(e,r,t,n){let o=[];for(let s of wl){if(s===".next")continue;let i=ze.join(e,s);if(!Zs(i))continue;let a=ze.resolve(i);t.has(a)||bg(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:Tl(a,r.now)}))}return o}function Sg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...vg(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Zs(e.worktreesDir))return r;for(let n of ei(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=ze.join(e.worktreesDir,n.name);for(let s of ei(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=ze.join(o,s.name);r.push(...vg(i,e,t,{runId:n.name,worker:s.name}))}}return r}function wg(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;Zs(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:Tl(a,e.now)})))}if(!t||!Zs(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(ze.resolve(i.worktreePath));for(let i of ei(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=ze.join(e.worktreesDir,i.name),l;try{l=ei(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=ze.resolve(ze.join(a,c.name));o.has(u)||s.has(u)||bg(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Tl(u,e.now)}))}}return n}import{existsSync as xg,readdirSync as Cg,statSync as Ax}from"node:fs";import Jt from"node:path";var Ix=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function Ox(e,r){try{let t=Ax(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Nx(e,r){let t=Jt.relative(r,e);return t===""||!t.startsWith("..")&&!Jt.isAbsolute(t)}function Tx(e,r,t,n,o,s){if(!xg(n))return;let i=Jt.resolve(n);r.has(i)||Nx(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:Ox(i,t.now)}))}function _g(e,r,t,n,o){for(let s of Ix)Tx(e,r,t,Jt.join(n,s.dirName),s.kind,o)}function Eg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||_g(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!xg(e.worktreesDir))return r;for(let n of Cg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Jt.join(e.worktreesDir,n.name),s;try{s=Cg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Jt.join(o,i.name);_g(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as Pg,statSync as Dx}from"node:fs";import Xe from"node:path";function Mx(e,r){try{let t=Dx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ux(e){let r=[],t=null;for(let n of e.split(`
|
|
42
|
-
`)){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
|
|
43
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(Ae(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}_e();import{existsSync as
|
|
44
|
-
`).map(t=>t.trim()).filter(Boolean)}var oi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Gg(t)??[];return this.cache.set(t,o),o}};var si=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Jr(r);return this.cache.set(r.id,n),n}};function tE(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Yg(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:tE(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 nE(e={}){let r=e.harnessRoot?le(e.harnessRoot):ye(),t=Fg({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function oE(e){return typeof e=="string"?{reason:e}:e}function qt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function ii(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:lr(e.path,t)}}function Jg(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 sE(e,r){return e.kind==="remove_next_cache"?hg(e,r):gg(e,r)}function iE(e,r,t){return e.kind==="remove_next_cache"?Xs(e.path,r,t):zs(e.path,r,t)}function aE(e){let r=new Map;for(let t of e)for(let[n,o]of Og(t))r.set(n,o);return r}function qg(e,r){return e.runId&&e.worker?Ne.join(r,e.runId,e.worker):Ne.resolve(e.path,"..")}function Bl(e={}){let r=Ul(e),t=Kg();r=$g(r,t);let n=nE(e);Oe("scan",`${n.scanRoots.length} harness root(s)`);let o=zf(n.scanRoots,n.now),s=r.finalizeStaleRuns?io().map(P=>({runId:P.runId,from:P.from,to:P.to})):[];s.length>0&&Oe("finalize",`${s.length} stale run(s) marked terminal`),Oe("index","building worktree index");let i=aE(n.scanRoots);Oe("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new si,gitStatusCache:new oi,gitRevCache:new ni},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let P of n.scanRoots){if(f())break;Oe("root",P);let B=Ne.join(P,"worktrees"),Pr=Ig(i,P),Q={harnessRoot:P,worktreesDir:B,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Pr,now:n.now},cr=r.scanDependencyCaches?Eg(Q):[];Oe("dependency",r.scanDependencyCaches?`${cr.length} cache candidate(s) at ${P}`:"skipped (worktree-only sweep)");let rt=0;for(let ge of cr){if(f())break;rt+=1,rt%50===0&&Oe("dependency",`${rt}/${cr.length} evaluated`);let G=Ne.resolve(ge.path);if(u.has(G))continue;u.add(G);let W={...ge,path:G},he=iE(W,P,B);if(he){qt(l,W.path,he),c.push({...W,executed:!1,skipped:!0,skipReason:he});continue}let be=qg(W,B),ur=Pr.get(Ne.resolve(be))??null,Se=Pl({indexed:ur,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:be,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){qt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(sE(ii(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let ge of Sg(Q)){if(f())break;let G=Ne.resolve(ge.path);if(u.has(G))continue;u.add(G);let W={...ge,path:G},he=Qs(W.path,P,B);if(he){qt(l,W.path,he),c.push({...W,executed:!1,skipped:!0,skipReason:he});continue}let be=qg(W,B),ur=Pr.get(Ne.resolve(be))??null,Se=Gf({indexed:ur,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:be,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){qt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(kg(ii(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let We=[...wg(Q),...Ag(Q)];Oe("worktrees",`${We.length} candidate(s) at ${P}`);let tt=new Set,Le=0;for(let ge of We){if(f())break;Le+=1,Le%50===0&&Oe("worktrees",`${Le}/${We.length} evaluated`);let G=Ne.resolve(ge.path);if(tt.has(G))continue;tt.add(G);let W={...ge,path:G},he=Pr.get(Ne.resolve(W.path))??null,be=he?null:Wg({worktreePath:W.path,harnessRoot:P,runId:W.runId,workerName:W.worker,now:n.now}),ur=Vf({indexed:he,worktreePath:Ne.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:be,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:P,writeSalvageEvidence:r.execute});if(ur){let{reason:Se,detail:_o}=oE(ur);qt(l,W.path,Se,_o),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Rg(ii(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let ge of ng({harnessRoot:P,worktreesDir:B,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let G=Ne.resolve(ge.path);if(u.has(G))continue;u.add(G);let W={...ge,path:G},he=W.runId??Ne.basename(G),be=tg({harnessRoot:P,runId:he,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(be){qt(l,W.path,be),c.push({...W,executed:!1,skipped:!0,skipReason:be});continue}c.push(yg(ii(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let p=0,m=0,h=0,k=0,g=0,y=0;for(let P of c)P.bytes&&(p+=P.bytes),!P.skipped&&!P.executed&&P.bytes&&(h+=P.bytes),P.executed?(g+=1,k+=P.bytes??0,P.kind==="remove_run_directory"&&(m+=1)):P.skipped&&(y+=1,P.skipReason==="dry_run"&&P.bytes&&(h+=P.bytes));let I=r.accountBytes?Bg({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,_=fr(),E=r.execute&&Vg(_),U=E?ti({execute:!0}):null,Y=_?{observed:!0,execute:E,dumpCount:_.dumpCount,totalBytes:_.totalBytes,removedCount:U?.removed.length??0,removedBytes:U?.removedBytes??0,executables:_.executables,path:_.path,reason:_.reason}:void 0;U&&U.removed.length>0&&(k+=U.removedBytes,g+=U.removed.length,Oe("wsl-crashes",`removed ${U.removed.length} dump(s), ${U.removedBytes} bytes`)),Oe("complete",`${c.length} action(s), ${y} skipped, ${g} removed`);let $=Jf(c,l),F=Yg({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:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:Jg(c,l)},...I?{storage:I}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{}});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:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:Jg(c,l)},...I?{storage:I}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:F}}function zg(e){let r=Mg(e);return Bl({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Xg(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as hE}from"node:fs/promises";import{homedir as kE}from"node:os";import Qr from"node:path";Uo();import{existsSync as Qg,readFileSync as lE}from"node:fs";import ai from"node:path";var eh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},rh=Object.keys(eh),Hl={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},cE={"@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 Zg(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 li(e,r){let t=Zg(e),n=Zg(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 th(e,r){return li(e,r)>=0}function uE(e){let r=null;for(let t of e)(!r||li(t,r)>0)&&(r=t);return r}function dE(e){try{let r=JSON.parse(lE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function pE(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=ai.resolve(o);if(Qg(ai.join(s,"packages/kynver-runtime/package.json"))&&Qg(ai.join(s,"package.json")))return s}return ct({cwd:e})?.repo??null}function nh(e={}){let r=e.cwd??process.cwd(),t=pE(r,e.repoRoot);if(!t)return{};let n={};for(let o of rh){let s=ai.join(t,cE[o]),i=dE(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function mE(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function fE(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&th(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${mE(r).join("; ")}.`),i.push("Do not publish npm packages or wait on an operator release."),i):(n?i.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):i.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&i.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&s&&i.push(`Repo checkout reports ${s}; rebuild/link repo source if you develop from the monorepo.`),i)}function gE(e){if(e.length===0)return{version:null,source:"unknown"};let r=uE(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 oh(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=rh.map(i=>{let a=eh[i],l=[],c=r(e.installed?.[i],"installed"),u=r(e.repo?.[i],"repo"),d=r(e.self?.[i],"self");c&&l.push(c),u&&l.push(u),d&&l.push(d);let{version:f,source:p}=gE(l),m=u?.version??null,h=f?th(f,a):!1,k=h?[]:fE({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:p,repoVersion:m}),g=h?`${Hl[i]} ${f} meets memory-cost minimum ${a} (${p}).`:`${Hl[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${p})`:" (no version detected)")+".";return{packageName:i,displayName:Hl[i],minimumVersion:a,effectiveVersion:f,effectiveSource:p,ok:h,summary:g,remediation:k}}),n=t.filter(i=>!i.ok),o=n.length===0,s=o?"All managed AgentOS packages meet memory-cost minimum versions.":`Memory-cost package guard blocked ${n.length} stale package(s): ${n.map(i=>`${i.packageName} < ${i.minimumVersion}`).join("; ")}.`;return{ok:o,summary:s,packages:t}}var Fl=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(`
|
|
45
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function
|
|
46
|
-
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function
|
|
47
|
-
`)){let i=s.match(
|
|
48
|
-
`))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{r.releaseLock()}}function
|
|
49
|
-
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:gP.has(t)?{ok:!0,mutating:!1}:hP.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var RP=10*6e4,vP=5e3,Ah=2e5;async function Ih(e,r,t={}){let n=Ph(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??RP,i=new Qt(r);return new Promise(a=>{let l=0,c=!1,u=yP(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=p=>{if(l>=Ah)return;let m=p.toString("utf8").slice(0,Ah-l);l+=m.length,i.push(m)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),vP).unref()},s);u.on("error",p=>{clearTimeout(f),i.push(`spawn failed: ${p.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",p=>{clearTimeout(f),i.close(),a({exitCode:p,timedOut:c})})})}var SP=25e3,wP=32e3,CP=5e3,_P=6e4,Oh=5*6e4,xP=5e3,EP="claude-sonnet-4-6";async function PP(e,r,t){let n=t.KYNVER_RUNTIME_CHAT_BRIDGE_URL?.trim();if(n)return n;if(!e)return null;let o=new AbortController,s=setTimeout(()=>o.abort(),xP);try{let i=await fetch(`${e.replace(/\/$/,"")}/api/runtime/chat-bridge`,{headers:{Authorization:`Bearer ${r}`},signal:o.signal});if(!i.ok)return null;let a=await i.json().catch(()=>null);return typeof a?.bridgeUrl=="string"&&a.bridgeUrl.trim()?a.bridgeUrl.trim():null}catch{return null}finally{clearTimeout(s)}}async function Nh(e=process.env){let r=v(),t=r.agentOsId?.trim(),n=oe();if(!t||!n)return null;let o=await PP(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:bP.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||EP,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function AP(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),wP),o=setInterval(()=>{r()&&t.abort()},500);try{let s=await fetch(`${e.bridgeUrl}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,waitMs:SP}),signal:t.signal});if(s.status===204)return null;if(s.status===401||s.status===403)return"auth_error";if(!s.ok)throw new Error(`claim failed: HTTP ${s.status}`);return(await s.json().catch(()=>null))?.turn??null}catch(s){if(r())return null;throw s}finally{clearTimeout(n),clearInterval(o)}}async function Zr(e,r,t){return(await fetch(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(r)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,events:t})})).ok}async function IP(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Ih(n,s=>{Zr(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await Zr(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await Zr(e,r.turnId,[{seq:t++,kind:"final",message:{exitCode:o.exitCode,timedOut:o.timedOut}}]).catch(()=>{}),console.error(JSON.stringify({event:"command_turn_done",turnId:r.turnId,argv:n.slice(0,4),exitCode:o.exitCode,timedOut:o.timedOut,refused:o.refused??null}))}async function OP(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||Zr(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Qt(s),a=xh(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await Zr(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Eh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await Zr(e,r.turnId,[{seq:t++,kind:"final",message:l}]),console.error(JSON.stringify({event:"chat_turn_done",turnId:r.turnId,model:e.model}))}catch(l){i.close(),n||await Zr(e,r.turnId,[{seq:t++,kind:"error",error:l instanceof Error?l.message:String(l)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",turnId:r.turnId,error:l instanceof Error?l.message:String(l)}))}}async function ql(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Th(e){let r=await Nh();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!oe()||!v().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Oh}));!r&&!e.shouldStop();){if(!oe()||!v().agentOsId?.trim()||(await ql(Oh,e.shouldStop),e.shouldStop()))return;r=await Nh()}if(!(!r||e.shouldStop())){for(console.error(JSON.stringify({event:"chat_claim_loop_start",bridgeUrl:r.bridgeUrl,agentOsId:r.agentOsId,boxId:r.boxId,model:r.model,useClaudeOauth:r.useClaudeOauth}));!e.shouldStop();)try{let t=await AP(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await ql(_P,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await IP(r,t):await OP(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await ql(CP,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var NP=6e4,TP=5*6e4,DP=10,MP=250;async function zl(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(MP,t);await pr(n),t-=n}}async function pi(e){Tt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):NP,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Un();a.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:a.resolved?.defaultRepo??null,configPath:a.configPath}));let l=_d(v());l.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:l.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:l.box.boxKind,workerCapSource:l.workerCapSource,maxConcurrentWorkers:l.maxConcurrentWorkers}));let c=or(),u=Th({shouldStop:()=>s}).catch(f=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:f instanceof Error?f.message:String(f)}))}),d=!1;for(;!s;)try{Pd({agentOsId:t,runId:r,instructionBundleVersion:Wr()});let f=await la(e.secret?String(e.secret):void 0,t);if(!f.ok){d||(d=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:f.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await zl(o,()=>s);continue}d&&(d=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await wd({agentOsId:t,baseUrl:rd(e.baseUrl?String(e.baseUrl):void 0),secret:f.secret});let p=await Jl({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...p})),c.tickEnabled){let g=gs(r);if(g&&!g.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:g.holderBoxId}));else{let y=await Dt({env:c,agentOsIdFilter:t});y.enabled&&(y.fired>0||y.errors>0||y.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...y}))}}p.idle?i++:i=0;let m=Math.floor(Nt("daemon.maxIdleStreak",DP)),h=Math.floor(Nt("daemon.idleIntervalMs",TP)),k=i>=m?h:o;await zl(k,()=>s)}catch(f){console.error(JSON.stringify({event:"daemon_tick_error",error:f.message})),await zl(o,()=>s)}await u,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as UP}from"node:child_process";w();var WP=15*6e4,Dh=2*6e4,Mh=1e4,LP=5e3,BP=5*6e4,HP=30*6e4,Uh=5e3;function FP(e,r=process.env){let t=typeof e=="string"?Number.parseInt(e,10):NaN;if(Number.isFinite(t)&&t>0)return t;let n=Number.parseInt(r.KYNVER_DAEMON_STALL_MS??"",10);return Number.isFinite(n)&&n>0?n:WP}function mi(e,r=process.env){if(e.keeperChild===!0||e.keeperChild==="true"||e.noSupervise===!0||e.noSupervise==="true"||e.supervised==="false")return!1;let t=(r.KYNVER_DAEMON_SUPERVISED??"").trim().toLowerCase();return!(t==="0"||t==="false"||t==="no"||t==="off")}function KP(e,r=LP,t=BP){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function $P(e,r,t=HP){return r-e>=t}function et(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function jP(e){let r=[];for(let t=0;t<e.length;t+=1){let n=e[t];if(!(n==="--supervised"||n==="--no-supervise"||n==="--keeper-child")){if(n==="--stall-ms"){t+1<e.length&&!e[t+1].startsWith("--")&&(t+=1);continue}n.startsWith("--stall-ms=")||n.startsWith("--supervised=")||r.push(n)}}return r.push("--keeper-child"),r}async function fi(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=FP(e.stallMs),o=jP(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,et("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),et("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,p=null;for(a=UP(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),et("child_spawned",{pid:a.pid??null}),a.on("exit",(k,g)=>{d=!0,f=k,p=g});!d&&!i&&(await pr(Uh),!(d||i));){if(Date.now()-u<Dh)continue;let k=Ad(t),g=k&&k.pid===a.pid?k:null;if(g&&Id(g,n)){et("stall_detected",{pid:a.pid??null,lastBeatAt:g.observedAt,stallMs:n}),a.kill("SIGTERM"),await pr(Mh),d||a.kill("SIGKILL");break}if(!g&&Date.now()-u>n+Dh){et("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await pr(Mh),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await pr(Uh);if(i)break;let m=Date.now();$P(u,m)&&(l=0),l+=1;let h=KP(l);et("child_exited",{code:f,signal:p,uptimeMs:m-u,consecutiveFailures:l,respawnInMs:h}),await pr(h)}et("stopped",{agentOsId:t})}we();T();import{existsSync as QP,mkdirSync as ZP}from"node:fs";import eA from"node:path";T();Or();import{existsSync as VP,readFileSync as GP}from"node:fs";import Wh from"node:path";X();w();function YP(e){if(!e||!VP(e))return 0;try{return GP(e,"utf8").trim().length}catch{return 0}}function JP(e,r){let t=Wh.join(x(e.id),"workers",b(r),"worker.json"),n=C(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=M(n,{base:e.base,baseCommit:e.baseCommit}),s=YP(n.heartbeatPath)===0,i=!o.finalResult&&!o.alive,a=typeof n.completionBlocker=="string"&&n.completionBlocker.length>0;return{worker:r,workerStatus:n.status,attention:o.attention.state,attentionReason:o.attention.reason,missingHeartbeat:s,missingFinalResult:i,landingBlocked:St(o),completionBlocked:a}}function qP(e){return e.openWorkerCount>0?"active_workers":e.workers.some(r=>r.completionBlocked)?"completion_blocked":e.workers.some(r=>r.landingBlocked)?"landing_blocked":null}function zP(e){let r={blocked:5,needs_attention:4,stale:3,done:2,ok:1},t="ok",n;for(let o of e){let s=o.attention;(r[s]??0)>=(r[t]??0)&&(t=s,n=o.attentionReason)}return{attention:t,attentionReason:n}}function XP(e){let r=0;for(let t of me(e)){let n=Wh.join(x(e.id),"workers",b(t),"worker.json"),o=C(n,void 0);if(!o)continue;let s=M(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function ho(){return lo(),z().map(e=>{let t=me(e).map(d=>JP(e,d)),n=t.filter(d=>d.missingHeartbeat).map(d=>d.worker),o=t.filter(d=>d.missingFinalResult).map(d=>d.worker),s=t.filter(d=>d.landingBlocked).map(d=>d.worker),i=t.filter(d=>d.completionBlocked).map(d=>d.worker),{attention:a,attentionReason:l}=zP(t),c=XP(e),u=Rn(e.status,t.map(d=>({attention:d.attention,status:d.workerStatus})));return{id:e.id,name:e.name,status:e.status,effectiveStatus:u,repo:e.repo,createdAt:e.createdAt,openWorkerCount:c,attention:a,attentionReason:l,finalizeBlockedReason:qP({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Lh(){console.log(JSON.stringify(ho(),null,2))}w();function rA(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=$e();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function gi(e){let r=Sm(rA(e));Yc(r);let t=e.id?Ws(String(e.id)):Kc(String(e.name||"run")),n=x(t);QP(n)&&tA(`run already exists: ${t}`),ZP(n,{recursive:!0});let o=String(e.base||"origin/main"),s=de(r,["rev-parse",o]).trim(),i={id:t,name:String(e.name||t),repo:r,base:o,baseCommit:s,status:"created",createdAt:new Date().toISOString(),workers:{}};se(eA.join(n,"run.json"),i);let a={runId:t,runDir:n,repo:r,base:o,baseCommit:s};return console.log(JSON.stringify(a,null,2)),a}function Bh(){Lh()}function tA(e){console.error(e),process.exit(1)}T();import{existsSync as ki}from"node:fs";async function hi(e=or()){let r=await Lr(e.storePath).catch(()=>[]),t=await fs(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=ps(e),s="disabled";return o?s="kynver-cron-daemon":process.env.QSTASH_TOKEN?.trim()&&(s="qstash"),{primary:s,env:{storePath:e.storePath,statePath:e.statePath,tickEnabled:e.tickEnabled,fireBaseUrl:e.fireBaseUrl,missedRunPolicy:e.missedRunPolicy,maxCatchUpPerTick:e.maxCatchUpPerTick,maxRetries:e.maxRetries},jobCount:r.length,stateJobCount:Object.keys(t.jobs).length,credentialsReady:n,daemonPrimary:o}}import{homedir as nA}from"node:os";import oA from"node:path";kr();var xr="watchdog:board-sweep",sA="*/5 * * * *",iA=["Set KYNVER_SCHEDULER_PROVIDER=kynver-cron on the hosted Kynver deployment (Vercel).","Set KYNVER_CRON_SECRET to the same value written to ~/.kynver/.env by this installer.","Unset KYNVER_CRON_STORE_PATH on Vercel \u2014 the connected box owns the local store.","Keep QSTASH_TOKEN only if other non-watchdog schedules still use QStash (analyst/market jobs)."];function Hh(e){let r=e.storePath?.trim()||Rr(),t=e.envFilePath?.trim()||ve,n=oA.join(nA(),".kynver","config.json"),o=`/api/agent-os/by-id/${e.agentOsId}/scheduler/fire`,s=[];e.apiBaseUrl?.trim()||s.push("apiBaseUrl \u2014 run `kynver setup --api-base-url \u2026`"),e.agentOsId?.trim()||s.push("agentOsId \u2014 run `kynver setup --agent-os-id \u2026`");let i={KYNVER_API_URL:e.apiBaseUrl,KYNVER_CRON_SECRET:e.cronSecret,KYNVER_CRON_STORE_PATH:r,KYNVER_CRON_TICK_ENABLED:"1",KYNVER_CRON_DAEMON_PRESENT:"1"},a=["OPENCLAW_CRON_STORE_PATH","OPENCLAW_CRON_SECRET","OPENCLAW_CRON_FIRE_BASE_URL"],l={deploymentSchedulerProvider:"kynver-cron",apiBaseUrl:e.apiBaseUrl,agentOsId:e.agentOsId,...e.defaultDaemonRunId?{defaultDaemonRunId:e.defaultDaemonRunId}:{}};return{envFilePath:t,configPath:n,storePath:r,envUpdates:i,envRemovals:a,configUpdates:l,deploymentSteps:iA,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:sA,dedupeKey:xr,callbackPath:o}}}kr();async function Zt(e){let r=e.envFilePath??ve,t=[],n=or(),o=await hi(n),s=_t(r);t.push({id:"config_agent_os",ok:!!e.config.agentOsId?.trim(),summary:e.config.agentOsId?`agentOsId configured (${e.config.agentOsId})`:"agentOsId missing in ~/.kynver/config.json",remediation:"Run `kynver setup --agent-os-id <id>`."}),t.push({id:"config_api_base",ok:!!(e.config.apiBaseUrl?.trim()||n.fireBaseUrl),summary:n.fireBaseUrl?`fire base URL resolved (${n.fireBaseUrl})`:"KYNVER_API_URL / apiBaseUrl not configured",remediation:"Run `kynver setup --api-base-url https://\u2026`."}),t.push({id:"deployment_provider",ok:e.config.deploymentSchedulerProvider==="kynver-cron",summary:`deploymentSchedulerProvider=${e.config.deploymentSchedulerProvider??"(unset)"}`,remediation:'Run `kynver cron install` or set deploymentSchedulerProvider to "kynver-cron".'}),t.push({id:"cron_secret",ok:!!n.secret,summary:n.secret?"KYNVER_CRON_SECRET present":"KYNVER_CRON_SECRET missing",remediation:"Run `kynver cron install` to generate and persist the shared secret."}),t.push({id:"env_file",ok:ki(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:ki(r)?`~/.kynver/.env present (${s.size} keys)`:"~/.kynver/.env missing",remediation:"Run `kynver cron install` to write ~/.kynver/.env."}),t.push({id:"cron_store",ok:ki(n.storePath),summary:ki(n.storePath)?`cron store present (${n.storePath})`:`cron store missing (${n.storePath})`,remediation:"Run `kynver cron install` to initialize the local store."});let a=(await Lr(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===xr);t.push({id:"watchdog_local",ok:!!a,summary:a?`watchdog entry in local store (${a.providerScheduleId})`:"watchdog entry not mirrored in local cron store",remediation:"Run `kynver cron install` (with API access) to register and mirror watchdog."}),t.push({id:"daemon_primary",ok:o.daemonPrimary,summary:o.daemonPrimary?"cron tick enabled with credentials (daemon-primary)":`cron primary=${o.primary}; tickEnabled=${o.env.tickEnabled}`,remediation:"Ensure KYNVER_CRON_TICK_ENABLED=1 and run `kynver daemon` (or enable the systemd user unit)."});let l=s.has("OPENCLAW_CRON_STORE_PATH")||s.has("OPENCLAW_CRON_SECRET")||s.has("OPENCLAW_CRON_FIRE_BASE_URL");return t.push({id:"legacy_openclaw_env",ok:!l,summary:l?"legacy OPENCLAW_CRON_* keys still present in ~/.kynver/.env":"no legacy OPENCLAW_CRON_* keys in env file",remediation:"Re-run `kynver cron install` to retire legacy aliases."}),{ok:t.every(u=>u.ok),checks:t}}O();He();w();import{existsSync as zh}from"node:fs";import{createHash as aA}from"node:crypto";function Fh(e){let r=JSON.stringify({cb:e.callbackPath,cron:e.cron??null,runAt:e.runAt??null,kind:e.kind,target:e.target,dedupeKey:e.dedupeKey??null});return`kc-cron:${aA("sha1").update(r).digest("hex").slice(0,16)}`}async function Xl(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function Kh(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await Xl(s,t),a=await i.text(),l=null;try{l=JSON.parse(a)}catch{l=null}if(!i.ok)throw new Error(`list scheduler jobs failed (${i.status}): ${l?.error??a.slice(0,200)}`);return l?.items??[]}async function $h(e,r,t,n,o={}){let s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/watchdog/ensure`,i={};n&&(i.cron=n),o.requireProvider&&(i.requireProvider=o.requireProvider);let a=await Xl(s,t,{method:"POST",body:JSON.stringify(i)}),l=await a.text(),c=null;try{c=JSON.parse(l)}catch{c=null}if(!a.ok||!c?.job)throw new Error(`ensure watchdog failed (${a.status}): ${c?.error??l.slice(0,200)}`);return{job:c.job,route:c.route??`/api/agent-os/by-id/${r}/scheduler/fire`,dedupeKey:c.dedupeKey??xr,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function jh(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await Xl(o,n,{method:"POST",body:"{}"});if(!s.ok){let i=await s.text();throw new Error(`cancel job ${t} failed (${s.status}): ${i.slice(0,200)}`)}}function Vh(e,r,t=xr){return{kind:"watchdog",scheduleKind:"cron",cron:r,callbackPath:`/api/agent-os/by-id/${e}/scheduler/fire`,payload:{source:"agent-os.watchdog-schedule",agentOsId:e},target:{agentOsId:e},description:"Watchdog board sweep (repair loop)",dedupeKey:t}}function Gh(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===xr&&r.provider==="qstash"&&r.status!=="cancelled")}function lA(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===xr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function Yh(e){return lA(e)?{allowed:!0}:{allowed:!1,reason:"Cannot cancel QStash watchdog until hosted KYNVER_SCHEDULER_PROVIDER=kynver-cron is live and a kynver-cron watchdog row exists. Set Vercel env, redeploy, re-run `kynver cron install`, then `--confirm-qstash-removal`."}}kr();kr();import{randomBytes as cA}from"node:crypto";function uA(){return cA(32).toString("base64url")}function Jh(e=ve){let r=pa();if(r)return{secret:r,generated:!1,source:"env"};let n=_t(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:uA(),generated:!0,source:"generated"}}Zo();rs();T();function qh(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=Z().runsDir;return zh(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function yi(e={}){let r=e.execute!==!1,t=v(),n=Qe(e.apiBaseUrl?.trim()||t.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||""),o=e.agentOsId?.trim()||t.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||"",s=Jh(),i=Hh({config:t,apiBaseUrl:n,agentOsId:o,cronSecret:s.secret,defaultDaemonRunId:e.runId?.trim()||t.defaultDaemonRunId,installSystemd:e.installSystemd===!0}),a=[...i.prerequisites],l={ok:!1,dryRun:!r,plan:i,secretGenerated:s.generated,configPath:q(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=Xo(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:q(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=qh(u,e.runId);d&&(u.defaultDaemonRunId=d),ce(u),process.env.KYNVER_API_URL=n,process.env.KYNVER_CRON_SECRET=s.secret,process.env.KYNVER_CRON_STORE_PATH=i.storePath,process.env.KYNVER_CRON_TICK_ENABLED="1";let f=await Kd(i.storePath);l.storeInitialized=f.created||zh(i.storePath);let p=oe();if(p)try{let m=await Ur(o,{baseUrl:n,apiKey:p});Mr(o,m)}catch{}if(!e.skipWatchdog)if(!p)l.watchdog={error:"KYNVER_API_KEY required to register watchdog on server"},a.push("login \u2014 run `kynver login --api-key \u2026` to register watchdog remotely");else try{let m=await $h(n,o,p,void 0,{requireProvider:"kynver-cron"}),h=Vh(o,m.requestedCron,m.dedupeKey),k={providerScheduleId:Fh(h),spec:h,registeredAt:new Date().toISOString(),paused:!1};await Fd(k,i.storePath),l.watchdog={remoteJobId:m.job.id,provider:m.selectedProvider??m.job.provider,localProviderScheduleId:k.providerScheduleId};let g=await Kh(n,o,p),y=Gh(g),I=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],_=[];if(y.length)if(e.confirmQstashRemoval){let E=Yh(g);if(!E.allowed)a.push(E.reason);else for(let U of y)await jh(n,o,U.id,p),_.push(U.id)}else a.push(`${y.length} QStash watchdog job(s) still active \u2014 complete Vercel cutover (KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET), re-run install, then --confirm-qstash-removal`);l.qstashWatchdog={found:y.map(E=>({id:E.id,provider:E.provider,status:E.status})),removed:_,manualSteps:I}}catch(m){l.watchdog={error:m.message},a.push(`watchdog registration failed: ${m.message}`)}if(e.installSystemd){let m=qh({...t,...i.configUpdates},e.runId);if(!m)l.systemd={supported:i.systemdSupported,unitPath:null,written:!1,enabled:!1,started:!1,note:"No harness run found \u2014 run `kynver run create` first or pass --run <runId>."},a.push("harness run \u2014 create a run before installing systemd unit");else{try{L(m)}catch{a.push(`harness run ${m} not found`)}if(l.systemd=es({envFilePath:i.envFilePath,agentOsId:o,runId:m,kynverBin:xt()},r),r&&l.systemd.enabled){let h=v();ce({...h,daemonSupervisionOwner:"systemd"})}}}if(!e.skipTestFire&&a.length===0){let m=await Dt({agentOsIdFilter:o});l.testFire={fired:m.fired,errors:m.errors},m.errors>0&&a.push(`test fire reported ${m.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await Zt({config:v(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var dA=["deployment_provider","cron_secret","env_file","cron_store"];function Xh(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function pA(e){let r=Xh(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Xh(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function mA(e){if(!pA(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Zt({config:e})).checks.filter(n=>dA.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function fA(e){let r=["Run `kynver cron install` on this box."];for(let t of e)t.remediation&&r.push(` \u2022 ${t.id}: ${t.remediation}`);return r}function Ql(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Qh(e){if(Ql(e.args.skipCron))return{action:"skipped"};let r=await mA(e.config);if(!r.expectsKynverCron||r.ready)return{action:"ready"};console.log(""),console.log(" Local Kynver Cron is not ready \u2014 running `kynver cron install`\u2026");let t=Ql(e.args.installSystemd)||Ql(e.args["install-systemd"]),n=await yi({execute:!0,skipTestFire:!0,agentOsId:e.agentOsId,runId:e.runId,installSystemd:t});if(n.ok)return console.log(" Kynver Cron configured for this box."),console.log(""),{action:"installed",installOk:!0};console.log(""),console.log(" Cron install did not fully complete (daemon will still start):");for(let o of n.blockers)console.log(` ! ${o}`);if(n.plan.deploymentSteps.length){console.log(""),console.log(" Hosted deployment (complete on Vercel, then re-run install):");for(let o of n.plan.deploymentSteps)console.log(` - ${o}`)}for(let o of fA(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}O();Ee();dn();function Zh(e=v(),r=process.env){let t=xe(r,e),n=[...t.warnings],o=e.maxConcurrentWorkers,s=!1,i={...e};if(e.boxKind?.trim()||(i.boxKind=t.boxKind,s=!0,n.push(`persisted boxKind=${t.boxKind} to ~/.kynver/config.json \u2014 set explicitly via kynver setup --box-kind`)),dt(t.boxKind,o??0))o=4,i.maxConcurrentWorkers=4,i.maxConcurrentWorkersSource="setup-auto",s=!0,n.push(`clamped Forge maxConcurrentWorkers to ${4} (was ${e.maxConcurrentWorkers}; workspace aggregate caps are Ghost-only)`);else if(o!=null){let a=rr(t.boxKind,o);a!==o&&(o=a,i.maxConcurrentWorkers=a,s=!0,n.push(`clamped maxConcurrentWorkers to ${a} for ${t.boxKind} pool`))}return s&&ce(i),{repaired:s,boxKind:t.boxKind,maxConcurrentWorkers:o??4,warnings:n}}rs();Zo();O();kr();An();ts();In();T();async function ek(e){let r=ns(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&Pn(t.hostKind)))return{action:"keeper",owner:"keeper"};try{L(e.runId)}catch{return{action:"systemd_skipped",owner:"keeper",blockers:[`harness run ${e.runId} not found \u2014 cannot install systemd unit`]}}let o=es({envFilePath:ve,agentOsId:e.agentOsId,runId:e.runId,kynverBin:xt()},!0),s=[];if(!o.supported)return s.push(o.note??"systemd user units not supported on this host"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};if(!o.enabled)return s.push(o.note??"systemd unit write/enable failed"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};let i=v();return ce({...i,daemonSupervisionOwner:"systemd"}),console.log(""),console.log(" Daemon supervision: systemd user unit enabled (`kynver daemon` with Restart=always)."),o.unitPath&&console.log(` unit: ${o.unitPath}`),console.log(""),{action:"systemd_installed",owner:"systemd",systemd:o}}function rk(e){return e.action==="systemd_installed"}function tk(e="kynver-cron-daemon"){return["Daemon delegated to systemd user unit.","The unit runs `kynver daemon` with systemd Restart=always.",`Status: systemctl --user status ${e}`,`Stop: systemctl --user stop ${e}`]}function hA(e,r){return e.filter(n=>n.repo===r&&!ir.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function nk(e){Tt();let r=v();(!oe()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await ds(e),r=v());let t=(typeof e.agentOsId=="string"?e.agentOsId.trim():"")||r.agentOsId?.trim()||"";t||(console.error("No AgentOS workspace configured \u2014 run `kynver bootstrap` (or pass --agent-os-id)."),process.exit(1)),Nn(t).ok||(console.error(as(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(ce({...r,chatUseClaudeOauth:!0}),r=v(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let o=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||$e()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=Zh(r);if(s.repaired){r=v();for(let c of s.warnings)console.log(` ${c}`)}let i=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";i||(i=hA(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=gi({...e,repo:o,name:"agent"}).runId),await Qh({config:r,agentOsId:t,runId:i,args:e});let a=await ek({config:v(),agentOsId:t,runId:i,args:e});if(rk(a)){console.log("");for(let c of tk())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${gA.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${o}`),console.log(` run: ${i}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let l={...e,run:i,agentOsId:t};if(mi(l)){await fi(l,kA(i,t,e));return}await pi(l)}function kA(e,r,t){if(!Nn(r).ok)throw new Error(as(r));let o=["daemon","--run",e,"--agent-os-id",r];return typeof t.intervalMs=="string"&&t.intervalMs.trim()&&o.push("--interval-ms",t.intervalMs.trim()),(t.execute===!1||t.execute==="false")&&o.push("--execute","false"),typeof t.stallMs=="string"&&t.stallMs.trim()&&o.push("--stall-ms",t.stallMs.trim()),o}T();T();X();import{existsSync as yA,rmSync as RA}from"node:fs";import Zl from"node:path";function vA(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function bA(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function SA(e){let{runId:r,workerName:t}=Je(e),n=pe(r,t),o=[...bA(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Zl.resolve(n.worktreePath),i=[];for(let c of o){let u=vA(c),d=Zl.resolve(s,u);if(!d.startsWith(s+Zl.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!yA(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};RA(d,{recursive:!0,force:!0}),i.push(u)}let a=Array.isArray(n.disposableArtifactsRemoved)?n.disposableArtifactsRemoved.filter(c=>typeof c=="string"):[];n.disposableArtifactsRemoved=[...new Set([...a,...i])],K(n.runId,n);let l=M(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function ok(e){let r=SA(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import JA from"node:path";Cn();Wo();Cn();var wA=/--max-old-space-size=(\d+)/;function CA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ec(){return CA(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function rc(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(wA.test(t))return r;let o=`--max-old-space-size=${ec()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function en(e=ec()){return`--max-old-space-size=${e}`}Qo();O();Cn();Wo();import{spawnSync as _A}from"node:child_process";function vi(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ik(e=v()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?vi(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?vi(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??vi(e.perWorkerMemBytes,1610612736),reserveBytes:t??vi(e.memReserveBytes,2147483648)}}var bi=0;function oc(){bi+=1}function sc(){bi=Math.max(0,bi-1)}function rn(e={}){let r={...ik(),...e},t=e.memAvailableBytes??pn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:bi,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function xA(e){e<=0||_A(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ic(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=rn({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)xA(Math.min(r,n-Date.now())),o=rn({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as GA}from"node:child_process";w();import{closeSync as IA,existsSync as ac,mkdirSync as OA,openSync as NA,readdirSync as lk,readFileSync as TA,unlinkSync as cc,writeFileSync as DA}from"node:fs";import uc from"node:path";import{mkdirSync as EA}from"node:fs";import{tmpdir as PA}from"node:os";import Si from"node:path";function AA(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function ak(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?Si.resolve(e):AA()?Si.join(PA(),"kynver","state","heavy-verification"):Si.join($s(),"heavy-verification")}function ko(){return Si.join(ak(),"slots")}function tn(){let e=ko();return EA(e,{recursive:!0}),e}var nn=120*6e4,lc=1;function MA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ro(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function yo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?MA(e,lc):lc}function UA(e){return`slot-${e}`}function ck(e,r=ko()){return uc.join(r,`${e}.json`)}function dc(e){if(!ac(e))return null;try{let r=JSON.parse(TA(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 wi(e,r=nn){if(!e||!H(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function WA(e,r){let t=dc(e);if(wi(t,r))try{cc(e)}catch{}}function LA(e){return OA(e,{recursive:!0}),e}function _i(e={}){let r=LA(e.slotsDir??tn()),t=e.staleMs??nn,n=0;for(let o of lk(r)){if(!o.endsWith(".json"))continue;let s=uc.join(r,o),i=ac(s);WA(s,t),i&&!ac(s)&&(n+=1)}return n}function uk(e={}){let r=e.slotsDir??tn(),t=e.staleMs??nn;_i({slotsDir:r,staleMs:t});let n=[];for(let o of lk(r)){if(!o.endsWith(".json"))continue;let s=dc(uc.join(r,o));s&&!wi(s,t)&&n.push(s)}return n}function Ci(e={}){return uk(e).length}function on(e,r={}){if(Ro())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:yo(),reason:null};let t=r.slotsDir??tn(),n=r.staleMs??nn,o=r.maxSlots??yo();_i({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=UA(i),l=ck(a,t),c=dc(l);if(c&&wi(c,n))try{cc(l)}catch{}else if(c&&!wi(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=NA(l,"wx");DA(d,JSON.stringify(u,null,2),"utf8"),IA(d);let f=Ci({slotsDir:t,staleMs:n});return{admitted:!0,slotId:a,activeSlots:f,maxSlots:o,reason:null}}catch(d){if(d.code==="EEXIST")continue;throw d}}let s=Ci({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function vo(e,r={}){if(!e)return;let t=ck(e,r.slotsDir??ko());try{cc(t)}catch{}}function bo(e,r={}){if(Ro())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:yo(),reason:null};let t=r.slotsDir??tn(),n=r.staleMs??nn,o=r.maxSlots??yo();_i({slotsDir:t,staleMs:n});let s=Ci({slotsDir:t,staleMs:n}),i=s<o;return{admitted:i,slotId:null,activeSlots:s,maxSlots:o,reason:i?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}import{spawnSync as BA}from"node:child_process";function HA(e){e<=0||BA(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function pc(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=on(e,n);for(;!s.admitted&&Date.now()<o;)HA(Math.min(t,o-Date.now())),s=on(e,n);return s}var FA=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,KA=/\b(npm run build\b|next build\b)\b/i,$A=/\b(vercel (build|deploy|--prod))\b/i,jA=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function mc(e){let r=e.trim();return r?jA.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:$A.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:KA.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:FA.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var xi="heavy_verification_token_required";function fc(e,r={}){let t=mc(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...bo(e),slotId:null}};if(Ro())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...bo(e),slotId:null}};let n=r.waitMs??0,o=n>0?pc(e,n,r.pollMs):on(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:xi,commandClass:t.commandClass,reason:t.reason??o.reason??xi,verificationGate:o}}_e();import gc from"node:path";function VA(e){let r=hr(ye()),t=gc.relative(r,gc.resolve(e));return t.length>0&&!t.startsWith("..")&&!gc.isAbsolute(t)}function dk(e){return VA(e)?(typeof process.getuid=="function"?process.getuid():null)===0?{ok:!1,reason:"Refusing build/install as root inside a harness worktree \u2014 generated caches become root-owned and block daemon cleanup. Run kynver daemon and workers as the harness owner (never sudo kynver)."}:{ok:!0}:{ok:!0}}Qo();function YA(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function pk(e,r){let t=GA(e[0],e.slice(1),{cwd:r.cwd,env:r.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:r.shell,timeout:r.timeoutMs});return{exitCode:t.status??1,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}function hc(e){let r=e.waitForAdmissionMs??6e5,t=fc(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:en(),admission:rn(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?ic(r):rn();if(!s.admitted)return vo(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:en(),admission:s,verificationGate:n,command:e.command};let i=dk(e.cwd);if(!i.ok)return vo(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:en(),admission:s,verificationGate:n,command:e.command};let a=rc({...process.env,...e.env}),l=en(),c=xn();oc();try{let u;if(c){let d=ea({cwd:e.cwd,command:["/usr/bin/env",...YA(a),"/bin/bash","-lc",e.command]});u=pk(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=pk([e.command],{cwd:e.cwd,env:a,shell:!0,timeoutMs:e.timeoutMs});return{ok:u.exitCode===0,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,admitted:!0,wrappedWithSystemd:c,nodeOptionsFlag:l,admission:s,verificationGate:n,gateOutcome:t.outcome,command:e.command}}finally{sc(),vo(o)}}var kc=["npm run typecheck","npm run test"];function Ei(e,r=kc,t={}){let n=[],o=!0;for(let s of r){let i=hc({cwd:e,command:s,waitForAdmissionMs:t.waitForAdmissionMs,timeoutMs:t.timeoutMs});n.push({command:s,result:i}),i.ok||(o=!1)}return{passed:o,steps:n}}w();function mk(e){let r=e.indexOf(":");if(r<=0)throw new Error(`invalid --evidence ${e} (expected type:value)`);return{type:e.slice(0,r),value:e.slice(r+1)}}async function fk(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let I of i)s.push(mk(String(I)));else typeof i=="string"&&s.push(mk(i));let a=V(e.baseUrl?String(e.baseUrl):void 0),l=await J(e.secret?String(e.secret):void 0,t,{baseUrl:a}),c=`${a}/api/agent-os/by-id/${encodeURIComponent(t)}/plans/${encodeURIComponent(r)}/progress-events`,u=v(),f=`provider:${Rs(u.workerProvider,sr)}`,m=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),h={rowKey:e.row?String(e.row):void 0,rowId:e.rowId?String(e.rowId):void 0,taskId:e.task?String(e.task):void 0,reviewTaskId:e.reviewTask?String(e.reviewTask):void 0,roleLane:n,status:o,note:e.note?String(e.note):void 0,remainingWork:e.remaining?String(e.remaining):void 0,evidence:s.length?s:void 0,executorRef:e.executorRef?String(e.executorRef):f};m!==void 0&&(h.proposed=m);let k=await fetch(c,{method:"POST",headers:De(l),body:JSON.stringify(h)}),g=await k.text(),y=null;try{y=JSON.parse(g)}catch{y=g}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:y},null,2)),process.exit(1)),console.log(JSON.stringify(y,null,2))}function qA(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=JA.resolve(r),n=Ei(t),o=e.json===!0||e.json==="true",s={passed:n.passed,worktree:t,steps:n.steps};console.log(o?JSON.stringify(s,null,2):n.passed?"local plan verify passed":"local plan verify failed"),n.passed||process.exit(1)}async function gk(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){qA(e);return}let n=v().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=V(e.baseUrl?String(e.baseUrl):void 0),s=process.env.KYNVER_API_KEY,i={"Content-Type":"application/json"};s&&(i.Authorization=`Bearer ${s}`);let a=`${o}/api/agent-os/${encodeURIComponent(n)}/plans/${encodeURIComponent(r)}/verify`,l=await fetch(a,{method:"POST",headers:i,body:JSON.stringify({worktreePath:e.worktree?String(e.worktree):void 0,taskId:e.task?String(e.task):void 0,humanOverride:e.humanOverride===!0||e.humanOverride==="true"})}),c=await l.text(),u=null;try{u=JSON.parse(c)}catch{u=c}l.ok||(console.error(JSON.stringify({httpStatus:l.status,response:u},null,2)),process.exit(1)),console.log(JSON.stringify(u,null,2))}import zA from"node:path";w();function hk(e){let r=zA.resolve(N(e.worktree?String(e.worktree):void 0,"worktree")),t=e.json===!0||e.json==="true"||e.emitJson===!0||e.emitJson==="true",n=[],o=e.command;if(Array.isArray(o))for(let a of o)n.push(String(a));else typeof o=="string"&&n.push(o);let s=Ei(r,n.length?n:kc,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
|
|
50
|
-
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as
|
|
51
|
-
`),diagnostic:
|
|
52
|
-
`),diagnostic:Er(e)}}import cI from"node:path";T();X();w();X();w();function Sk(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Da(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=n.leaseToken?.trim()??"";if(n.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>bt?{health:"stale",reason:`heartbeat older than ${Math.floor(bt/1e3)}s`}:t.alive&&r.pid&&!H(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}_e();w();import{existsSync as wk,mkdirSync as iI,readdirSync as aI,unlinkSync as lI}from"node:fs";import yc from"node:path";function Ck(){let{harnessRoot:e}=mt(),r=yc.join(e,"monitors");return iI(r,{recursive:!0}),r}function sn(e,r){return r?`${b(e)}--${b(r)}`:b(e)}function Rc(e){return yc.join(Ck(),`${e}.json`)}function an(e){return C(Rc(e),void 0)}function ln(e){se(Rc(e.monitorId),e)}function _k(e){let r=Rc(e);return wk(r)?(lI(r),!0):!1}function xk(){let e=Ck();if(!wk(e))return[];let r=[];for(let t of aI(e)){if(!t.endsWith(".json"))continue;let n=C(yc.join(e,t),void 0);n?.monitorId&&r.push({monitorId:n.monitorId,runId:n.runId,workerName:n.workerName,agentOsId:n.agentOsId,pid:n.pid,alive:n.pid?H(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}X();function vc(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),Os(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),St(t)&&n.push(t.attention.reason||"landing gate blocked");let o=ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}function Ek(e,r){return C(cI.join(x(e),"workers",b(r),"worker.json"),void 0)}function Pk(e,r){let t=L(e),n=Object.keys(t.workers||{});if(!r)return n;let o=b(r);return n.filter(s=>b(s)===o)}function Ak(e,r){let t=L(e.runId),n=M(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=Sk({worker:e,status:n,taskLease:o}),i=vc({worker:e,status:n});return{runId:e.runId,worker:e.name,health:s.health,healthReason:s.reason,workerStatus:n.status,attentionState:n.attention.state,attentionReason:n.attention.reason,alive:n.alive,taskId:e.taskId,leaseOwner:o?.leaseOwner??void 0,taskStatus:o?.status,autoComplete:i,status:n}}async function So(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=L(r),s=Pk(r,t),i=[];for(let m of s){let h=Ek(r,m);h&&i.push(h)}let a=n||i.map(m=>m.agentOsId).find(m=>typeof m=="string"&&m.trim())||void 0,l=i.map(m=>m.taskId).filter(m=>!!m),c=await Ht({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(m=>Ak(m,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Es(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let m of u){if(!m.autoComplete.eligible){f.push({worker:m.worker,outcome:"skipped",ok:!1,reason:m.autoComplete.blockers.join("; ")||"not eligible"});continue}let h=await Ft({run:r,name:m.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:m.worker,outcome:h.outcome,ok:h.outcome==="completed",reason:h.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function Ik(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Pk(r,t),o=[];for(let s of n){let i=Ek(r,s);i&&o.push(Ak(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function bc(){return xk()}function Ok(e){let r=String(e.run||"");N(r,"--run");let t=sn(r,e.name?String(e.name):void 0),n=an(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&H(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),ln(n),_k(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Sc(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=pe(r,t),o=L(r),s=M(n,{base:o.base,baseCommit:o.baseCommit}),i=vc({worker:n,status:s});if(!i.eligible){console.log(JSON.stringify({runId:r,worker:t,outcome:"blocked",blockers:i.blockers,terminalVerified:i.terminalVerified},null,2)),process.exitCode=1;return}let a=await Ft({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var uI=5e3,dI=360*60*1e3;async function Nk(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):uI,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):dI,o=Date.now();for(;Date.now()-o<=n;){let s=r?an(r):void 0;if(s?.stoppedAt)break;let i=await So({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Pi({monitorId:r,phase:"tick",...i});if(console.log(a.primary),a.diagnostic&&console.error(`[monitor diagnostic] ${a.diagnostic}`),i.workers.length>0&&i.workers.every(c=>c.autoComplete.terminalVerified&&(c.autoComplete.eligible||c.autoComplete.blockers.some(u=>u.includes("already acknowledged"))))&&i.autoCompleted.every(c=>c.ok||c.outcome==="skipped")){r&&s&&(s.stoppedAt=new Date().toISOString(),ln(s));break}Ar(t)}}w();_e();import{spawn as pI}from"node:child_process";import{closeSync as Tk,existsSync as mI,openSync as fI}from"node:fs";import Dk from"node:path";import{fileURLToPath as gI}from"node:url";function hI(){return Dk.join(gI(new URL(".",import.meta.url)),"cli.js")}function Mk(e){let r=e.cliPath??hI();if(!mI(r))return;let t=sn(e.runId,e.workerName),{harnessRoot:n}=mt(),o=Dk.join(n,"monitors",`${t}.log`),s;try{s=fI(o,"a")}catch{s=void 0}let i=e.nodeExecutable??process.execPath,a=e.pollMs??5e3,l=[r,"monitor","run-loop","--run",e.runId,"--monitor-id",t,"--poll-ms",String(a),"--auto-complete","true","--renew-leases","true"];e.workerName&&l.push("--name",e.workerName),e.agentOsId&&l.push("--agent-os-id",e.agentOsId),e.baseUrl&&l.push("--base-url",e.baseUrl),e.secret&&l.push("--secret",e.secret);let c=["ignore",s??"ignore",s??"ignore"];try{let u=pI(i,l,ue({detached:!0,stdio:c,env:process.env}));s!==void 0&&Tk(s),u.unref();let d={monitorId:t,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:u.pid,startedAt:new Date().toISOString(),pollMs:a,logPath:o};return ln(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{Tk(s)}catch{}return}}w();async function Uk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=sn(r,t),o=an(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=Mk({runId:r,workerName:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0});if(!s)throw new Error("failed to spawn monitor sidecar (cli.js missing or spawn error)");return{monitorId:n,session:s.session,spawned:!0,pid:s.pid}}async function Wk(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await So({...e,autoComplete:!1}):Ik(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:bc()},null,2))}function Lk(e){console.log(JSON.stringify(Ok(e),null,2))}function Bk(){console.log(JSON.stringify({monitors:bc()},null,2))}async function Hk(e){await Nk(e)}async function Fk(e){let r=await So(e);console.log(JSON.stringify(r,null,2))}import{existsSync as kI,readFileSync as yI}from"node:fs";import{dirname as wc,join as $k}from"node:path";import{fileURLToPath as Kk}from"node:url";function RI(e){let r=wc(Kk(e));for(let t=0;t<6;t+=1){if(kI($k(r,"package.json")))return r;let n=wc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${wc(Kk(e))}`)}function jk(e=import.meta.url){let r=$k(RI(e),"package.json"),t=JSON.parse(yI(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Ai=jk();function vI(e){return e.some(r=>r==="--version"||r==="-v")}function bI(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Vk(e,r=import.meta.url,t){return vI(e)?(bI(jk(r),t),!0):!1}function SI(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 wI(e={}){let[r,t]=await Promise.all([ci(),Promise.resolve(nh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Ai;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:SI(r),repo:t,self:n}}async function Gk(e={}){let r=await wI(e);return sh(r)}function Yk(e,r){return e?e==="daemon"||e==="start"||e==="worker"||e==="monitor"||e==="run"&&(r==="dispatch"||r==="sweep"||r==="reconcile"||r==="unblock")||e==="cron"&&r==="tick":!1}w();function CI(e){let r=e.trim();return r?ho().find(n=>n.name===r&&n.status!=="completed")??null:null}function Jk(e){let r=String(N(String(e.name||""),"--name")),t=CI(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}T();X();w();O();import _I from"node:path";function wo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function xI(e){let r=V(e.baseUrl?String(e.baseUrl):void 0),t=e.agentOsId?String(e.agentOsId).trim():null,n=e.dryRun===!0||e.dryRun==="true",o=[],s=[],i=[];for(let a of z())for(let l of Object.keys(a.workers??{})){let c=_I.join(x(a.id),"workers",b(l),"worker.json"),u=C(c,void 0);if(!u){s.push(wo(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",f=u.agentOsId??"",p=u.leaseOwner??"";if(!u.dispatched||!d||!f||!p){s.push(wo(a.id,l,d,f,p,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(wo(a.id,l,d,f,p,"completion already reported"));continue}let m=M(u);if(m.finalResult){s.push(wo(a.id,l,d,f,p,"has final result \u2014 let pipeline tick complete it"));continue}if(m.alive){s.push(wo(a.id,l,d,f,p,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let h=await J(e.secret?String(e.secret):void 0,f,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(f)}/tasks/${encodeURIComponent(d)}/release`,g=await re(k,h,{agentOsId:f,leaseOwner:p},{agentOsId:f,baseUrl:r});g.ok===!0||g.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"skipped",reason:`release returned ok:false (likely owner mismatch or already released): HTTP ${g.status}`})}catch(h){i.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"error",reason:h.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function qk(e){let r=await xI(e),t={ok:r.errors.length===0,dryRun:r.dryRun,released:r.released.length,skipped:r.skipped.length,errors:r.errors.length,details:r};console.log(JSON.stringify(t,null,2)),r.errors.length>0&&process.exit(1)}import oy from"node:path";He();O();import{accessSync as EI,constants as PI,existsSync as Cc,readFileSync as AI}from"node:fs";import{homedir as Ii}from"node:os";import Oi from"node:path";import{spawnSync as II}from"node:child_process";_e();function zk(e,r){try{let t=II(e,r,{encoding:"utf8"}),n=(t.stdout||"").trim(),o=(t.stderr||"").trim();return{ok:t.status===0,stdout:n,stderr:o,error:t.error?.message}}catch(t){return{ok:!1,stdout:"",stderr:"",error:t.message}}}function Xk(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function OI(e){if(!Cc(e))return!1;try{return EI(e,PI.W_OK),!0}catch{return!1}}var Qk={packageVersion:()=>Ai,commandOnPath:e=>zk(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>zk(e,["--version"]),loadConfig:()=>v(),configFilePath:()=>Oi.join(Ii(),".kynver","config.json"),credentialsFilePath:()=>Oi.join(Ii(),".kynver","credentials"),readCredentials:()=>{let e=Oi.join(Ii(),".kynver","credentials");if(!Cc(e))return{hasApiKey:!1};try{let r=JSON.parse(AI(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:Xk(r.runnerToken),runnerTokenAgentOsId:r.runnerTokenAgentOsId}}catch{return{hasApiKey:!1}}},envSnapshot:()=>({kynverApiUrl:process.env.KYNVER_API_URL?.trim()||void 0,openclawCronFireBaseUrl:process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||void 0,kynverRunnerTokenPrefix:Xk(process.env.KYNVER_RUNNER_TOKEN),kynverRuntimeSecret:!!process.env.KYNVER_RUNTIME_SECRET?.trim(),openclawCronSecret:!!process.env.OPENCLAW_CRON_SECRET?.trim(),kynverHarnessRoot:process.env.KYNVER_HARNESS_ROOT?.trim()||void 0,opusHarnessRoot:process.env.OPUS_HARNESS_ROOT?.trim()||void 0,kynverSchedulerProvider:process.env.KYNVER_SCHEDULER_PROVIDER?.trim()||void 0,openclawCronStorePath:!!(process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim()),kynverCronDaemonPrimary:ps(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>ye(),legacyOpenclawHarnessRoot:()=>Oi.join(Ii(),".openclaw","harness"),pathExists:e=>Cc(e),pathWritable:e=>OI(e)};function Zk(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function NI(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function ey(e){return!!e.openclawCronStorePath}function TI(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function ry(e,r){let t={schedulerProvider:e.kynverSchedulerProvider??null,deploymentSchedulerProvider:r.deploymentSchedulerProvider??null,openclawCronStorePath:!!e.openclawCronStorePath,kynverCronDaemonPrimary:!!e.kynverCronDaemonPrimary},n=!!r.agentOsId?.trim()&&!!r.apiBaseUrl?.trim()&&r.hasScopedRunnerToken;if(TI(e,r)&&!Zk(e,r)){let u=e.kynverSchedulerProvider==="qstash"?"KYNVER_SCHEDULER_PROVIDER=qstash on this host":"deploymentSchedulerProvider=qstash in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler cut over to QStash (${u})`,details:t}}if(NI(e,r)&&!Zk(e,r)){if(ey(e)&&e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=e.kynverSchedulerProvider==="kynver-cron"?"KYNVER_SCHEDULER_PROVIDER=kynver-cron on this host":"deploymentSchedulerProvider=kynver-cron in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler owned by Kynver Cron (${u})`,details:t}}if(ey(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}kr();An();In();ts();function ty(e,r={}){let t=Et(),n=os(e,t),o=[],s=r.envFilePath??ve,a=_t(s).get("KYNVER_CRON_DAEMON_PRESENT")==="1";if(o.push({id:"daemon_supervision_owner",ok:!!e.daemonSupervisionOwner,summary:e.daemonSupervisionOwner?`daemonSupervisionOwner=${e.daemonSupervisionOwner} (${t})`:"daemonSupervisionOwner unset \u2014 run `kynver setup` to persist Kynver-owned restart policy",remediation:e.daemonSupervisionOwner?void 0:"Run `kynver setup` (or `kynver bootstrap`) on this box."}),o.push({id:"daemon_present_signal",ok:a,summary:a?`KYNVER_CRON_DAEMON_PRESENT=1 (persisted in ${s})`:`KYNVER_CRON_DAEMON_PRESENT not set in persisted env (${s})`,remediation:a?void 0:"Run `kynver setup` or `kynver start` once to write ~/.kynver/.env supervision keys."}),n==="systemd"){let c=na();o.push({id:"systemd_user_unit",ok:c,summary:c?"systemd user unit present (~/.config/systemd/user/kynver-cron-daemon.service)":"daemonSupervisionOwner=systemd but user unit missing",remediation:c?void 0:"Run `kynver start --install-systemd` or `kynver cron install --install-systemd`."})}let l=ra(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}An();In();function ny(e){let r=e.loadConfig(),t=Et(),n=os(r,t),s=ty(r).map(i=>({id:i.id,label:i.id.replace(/_/g," "),status:i.ok?"pass":i.id==="daemon_supervision_owner"||i.id==="daemon_present_signal"?"warn":"fail",summary:i.summary,remediation:i.remediation}));return s.push({id:"daemon_keeper_default",label:"Kynver keeper owns in-process restarts",status:n==="keeper"||n==="systemd"?"pass":"warn",summary:n==="systemd"?"systemd persists the keeper parent \u2014 Hermes/OpenClaw cron is not required to restart the daemon":"`kynver start` / `kynver daemon` run the keeper by default (opt out with --no-supervise only when an external supervisor owns restarts)",details:{owner:n,hostKind:t}}),{id:"daemon_supervision",label:"Daemon restart supervision",checks:s}}function DI(e){let r={pass:0,warn:0,fail:0};for(let t of e)for(let n of t.checks)r[n.status]+=1;return r}function MI(e){let r=e.packageVersion(),t=e.commandOnPath("kynver"),n=t.ok&&t.stdout.length>0,o=n?t.stdout.split(/\r?\n/)[0]?.trim():void 0,s=o?q(o):void 0,i=[{id:"cli_running_version",label:"Running @kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${r}`,details:{version:r}},{id:"cli_on_path",label:"kynver executable on PATH",status:n?"pass":"warn",summary:n?`Found ${s}`:"kynver not found on PATH (invoked via node/npx?)",remediation:n?void 0:"Install globally (`npm i -g @kynver-app/runtime`) or invoke via `npx @kynver-app/runtime`.",details:{path:s}}];if(n&&o){let a=e.kynverVersion(o),l=a.stdout.replace(/^kynver\s+/i,"").trim()||void 0,c=a.ok&&(!l||l===r);i.push({id:"cli_installed_version",label:"Installed kynver CLI version matches running package",status:c?"pass":"warn",summary:a.ok&&l?c?`Installed ${l}`:`Installed ${l} differs from running ${r}`:a.error?`Could not read installed version (${a.error})`:a.stderr||"Could not read installed version",remediation:c?void 0:"Reinstall or rebuild @kynver-app/runtime so PATH kynver matches the harness worktree version.",details:{installedVersion:l,runningVersion:r,path:s}})}return{id:"cli_package",label:"CLI / package",checks:i}}function UI(e){let r=e.configFilePath(),t=q(r),n=e.pathExists(r),o=e.loadConfig(),s=[{id:"config_file",label:"~/.kynver/config.json present",status:n?"pass":"fail",summary:n?`Found ${t}`:`Missing ${t}`,remediation:n?void 0:"Run `kynver setup --api-base-url <url> --agent-os-id <id> --repo <path>`.",details:{configPath:t}}];if(n){let i=o.apiBaseUrl?.trim(),a=o.agentOsId?.trim(),l=$e({config:o}),c=l?Mn(l):null,u=dd(l);s.push({id:"config_api_base_url",label:"Default API base URL",status:i?"pass":"warn",summary:i??"Not set in config (KYNVER_API_URL / --base-url required per command)",remediation:i?void 0:"Set `apiBaseUrl` via `kynver setup --api-base-url https://\u2026`.",details:{apiBaseUrl:i??null}},{id:"config_agent_os_id",label:"Default AgentOS id",status:a?"pass":"warn",summary:a??"Not set (pass --agent-os-id on daemon/dispatch/worker commands)",remediation:a?void 0:"Set `agentOsId` via `kynver setup --agent-os-id <uuid>`.",details:{agentOsId:a??null,agentOsSlug:o.agentOsSlug??null}},{id:"config_default_repo",label:"Default repo path",status:u.status,summary:l?l.persistedInConfig?`${c.defaultRepo} (config)`:`${c.defaultRepo} (${l.source}, not persisted in ~/.kynver/config.json)`:"Not set in ~/.kynver/config.json (`kynver run create` requires --repo)",remediation:u.remediation,details:{defaultRepo:c?.defaultRepo??null,source:c?.source??null,persistedInConfig:c?.persistedInConfig??!1,harnessRoot:o.harnessRoot?ke(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function WI(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=q(s),a=o.kynverRunnerTokenPrefix,l=n.runnerTokenPrefix,c=n.runnerTokenAgentOsId,u=!!l&&(!t||!c||c===t),d=!!a?.startsWith("krc1.")||u&&l?.startsWith("krc1.");return{id:"runner_token",label:"Runner token readiness",checks:[{id:"runner_token_scoped",label:"Scoped runner token (krc1.*) ready",status:d?"pass":"fail",summary:d?a?"KYNVER_RUNNER_TOKEN is set (scoped prefix shown)":`Saved scoped token for agentOsId ${c??t??"(unknown)"}`:"No scoped runner token for the configured AgentOS workspace",remediation:d?void 0:"Run `kynver login` then `kynver runner credential --agent-os-id <id>` (or `kynver setup` with API key).",details:{source:a?"env":l?"credentials":"none",tokenPrefix:a??(u?l:void 0),agentOsId:t??c??null,credentialsPath:i}},{id:"runner_token_agent_os_match",label:"Saved runner token matches configured agentOsId",status:!l||!t||!c||c===t?"pass":"warn",summary:!l||!c?"No saved token agentOsId to compare":t?c===t?"Saved token scoped to configured agentOsId":`Saved token is for ${c}, config expects ${t}`:"Config agentOsId unset \u2014 token scope not validated against config",remediation:l&&t&&c&&c!==t?"`kynver runner credential --agent-os-id <configured-id>` to mint a workspace-bound token.":void 0,details:{configuredAgentOsId:t??null,savedAgentOsId:c??null}},{id:"runner_api_key_for_refresh",label:"API key available for token refresh",status:n.hasApiKey||process.env.KYNVER_API_KEY?.trim()?"pass":"warn",summary:n.hasApiKey||process.env.KYNVER_API_KEY?"KYNVER API key present for runner credential mint/refresh":"No API key \u2014 401 callback recovery cannot auto-mint a replacement token",remediation:n.hasApiKey||process.env.KYNVER_API_KEY?void 0:"Run `kynver login --api-key \u2026`.",details:{credentialsPath:i,hasApiKey:n.hasApiKey||!!process.env.KYNVER_API_KEY}}]}}function LI(e){let r=e.commandOnPath("vercel"),t=r.ok,n=!!(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()),o=!!process.env.VERCEL_TOKEN?.trim();return{id:"vercel_deploy_evidence",label:"Vercel deploy evidence",checks:[{id:"vercel_global_cli_absent",label:"Global Vercel CLI not installed",status:t?"warn":"pass",summary:t?`Global Vercel CLI found (${r.stdout||"on PATH"}) \u2014 uninstall after operator approval`:"No global Vercel CLI on PATH",remediation:t?"Uninstall global Vercel CLI (`npm uninstall -g vercel`) \u2014 use GitHub commit status or scoped VERCEL_TOKEN + REST API instead.":void 0,details:{path:t&&r.stdout||null}},{id:"github_token_for_vercel_status",label:"GitHub token for Vercel status",status:n?"pass":"warn",summary:n?"GITHUB_TOKEN/GH_TOKEN present for GitHub Vercel StatusContext evidence":"No GITHUB_TOKEN \u2014 merge-gate Vercel evidence requires GitHub commit status API",remediation:n?void 0:"Export GITHUB_TOKEN (or GH_TOKEN) for PR head commit status lookups."},{id:"vercel_api_token_optional",label:"Vercel API token (optional fallback)",status:o?"pass":"warn",summary:o?"VERCEL_TOKEN configured for optional REST API deployment lookup":"VERCEL_TOKEN unset \u2014 GitHub status is the default path; API fallback disabled",remediation:o?void 0:"Set ephemeral/scoped VERCEL_TOKEN only when GitHub status is insufficient; avoid persistent ~/.vercel auth on runner hosts."}]}}function BI(e){let r=e.harnessRoot(),t=oy.join(r,"runs"),n=oy.join(r,"worktrees"),o=ke(r),s=ke(t),i=ke(n),a=e.pathExists(t),l=e.pathExists(n);return{id:"harness_dirs",label:"Harness / daemon directories",checks:[{id:"harness_root",label:"Harness root resolved",status:"pass",summary:o,details:{harnessRoot:o}},{id:"harness_runs_dir",label:"Runs directory ready",status:a&&e.pathWritable(t)?"pass":"warn",summary:a?e.pathWritable(t)?`Writable ${s}`:`Exists but not writable: ${s}`:`Will be created on first run: ${s}`,remediation:a&&!e.pathWritable(t)?`Fix permissions on ${s} or set KYNVER_HARNESS_ROOT to a writable path.`:void 0,details:{runsDir:s,exists:a,writable:e.pathWritable(t)}},{id:"harness_worktrees_dir",label:"Worktrees directory ready",status:l&&e.pathWritable(n)?"pass":"warn",summary:l?e.pathWritable(n)?`Writable ${i}`:`Exists but not writable: ${i}`:`Will be created on first worker: ${i}`,remediation:l&&!e.pathWritable(n)?`Fix permissions on ${i}.`:void 0,details:{worktreesDir:i,exists:l,writable:e.pathWritable(n)}}]}}function HI(e){let r=e.loadConfig(),t=e.envSnapshot(),n=t.kynverApiUrl??r.apiBaseUrl?.trim()??t.openclawCronFireBaseUrl,o=!t.kynverApiUrl&&!r.apiBaseUrl&&!!t.openclawCronFireBaseUrl,s=t.openclawCronSecret||t.kynverRuntimeSecret,i=t.kynverRunnerTokenPrefix?.startsWith("krc1."),l=e.readCredentials().runnerTokenPrefix?.startsWith("krc1.");return{id:"callback_auth",label:"Callback auth / config",checks:[{id:"callback_base_url",label:"Callback base URL configured",status:n?o?"warn":"pass":"fail",summary:n?o?`Using legacy OPENCLAW_CRON_FIRE_BASE_URL (${n})`:n:"No KYNVER_API_URL, config apiBaseUrl, or legacy OpenClaw base URL",remediation:n?o?"Migrate to KYNVER_API_URL or `kynver setup --api-base-url` and drop OPENCLAW_CRON_FIRE_BASE_URL.":void 0:"Set KYNVER_API_URL or run `kynver setup --api-base-url https://\u2026`.",details:{source:t.kynverApiUrl?"KYNVER_API_URL":r.apiBaseUrl?"config.apiBaseUrl":t.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL":"none",baseUrl:n??null}},{id:"callback_auth_mode",label:"Callback auth uses scoped runner token",status:i||l?"pass":s?"warn":"fail",summary:i?"KYNVER_RUNNER_TOKEN scoped token will be sent as X-Kynver-Runner-Token":l?"Saved krc1.* token in ~/.kynver/credentials":s?"Deployment-level KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET in use (legacy headers)":"No callback secret configured",remediation:i||l?void 0:"Mint a scoped token: `kynver runner credential --agent-os-id <id>`. Avoid shared OPENCLAW_CRON_SECRET on user runners.",details:{mode:i||l?"scoped":s?"legacy_global_secret":"missing",legacyHeadersWhenNotScoped:["X-OpenClaw-Cron-Secret","X-Kynver-Runtime-Secret"]}}]}}function FI(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=ke(o),a=ke(s),l=r.opusHarnessRoot?ke(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,f=n.runnerTokenPrefix,p=n.runnerTokenAgentOsId,m=!!f&&(!u||!p||p===u),h=!!d?.startsWith("krc1.")||m&&!!f?.startsWith("krc1.");return{id:"openclaw_hotspots",label:"OpenClaw dependency hotspots",checks:[{id:"hotspot_legacy_harness_root",label:"Legacy ~/.openclaw/harness still active",status:c?"warn":"pass",summary:c?`Harness root is legacy ${a}`:r.opusHarnessRoot?`OPUS_HARNESS_ROOT override in use (${l})`:`Using ${i}`,remediation:c?"Set KYNVER_HARNESS_ROOT=~/.kynver/harness (or run setup), migrate artifacts, retire OPUS_HARNESS_ROOT.":r.opusHarnessRoot?"Prefer KYNVER_HARNESS_ROOT over OPUS_HARNESS_ROOT.":void 0,details:{harnessRoot:i,legacyRoot:a,opusHarnessRoot:l}},{id:"hotspot_openclaw_env_secrets",label:"OpenClaw deployment secrets in runner env",status:r.openclawCronSecret||r.openclawCronFireBaseUrl?"warn":"pass",summary:r.openclawCronSecret||r.openclawCronFireBaseUrl?[r.openclawCronSecret?"OPENCLAW_CRON_SECRET set":null,r.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL set":null].filter(Boolean).join("; "):"No OpenClaw cron env overrides on this runner",remediation:r.openclawCronSecret||r.openclawCronFireBaseUrl?"Move to KYNVER_API_URL + scoped runner tokens; unset OpenClaw cron env on user-hosted runners.":void 0},ry(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:h,deploymentSchedulerProvider:t.deploymentSchedulerProvider==="qstash"||t.deploymentSchedulerProvider==="kynver-cron"||t.deploymentSchedulerProvider==="openclaw-cron"?t.deploymentSchedulerProvider:void 0}),{id:"hotspot_lease_source_names",label:"Harness lease/completion source names",status:"pass",summary:"Runtime uses kynver-harness:* lease owners and completion source kynver-harness (OpenClaw names retired in runtime)",details:{leaseOwnerPattern:"kynver-harness:<runId>",completionSource:"kynver-harness",note:"OpenClaw adapter remains optional in packages/kynver-openclaw-agent-os only"}}]}}function sy(e=Qk){let r=[MI(e),UI(e),WI(e),LI(e),BI(e),HI(e),ny(e),FI(e)],t=DI(r),n=t.fail===0,o=n?t.warn>0?`Ready with ${t.warn} warning(s) \u2014 review remediation before retiring OpenClaw as primary runtime agent.`:"Ready \u2014 Kynver runtime can serve as primary runtime agent on this host.":`${t.fail} blocking check(s) \u2014 fix failures before OpenClaw takeover.`;return{command:"doctor runtime-takeover",ready:n,summary:o,counts:t,sections:r}}function iy(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Un();if(!n.ok){console.error(n.reason??"defaultRepo remediation failed"),n.remediation&&console.error(n.remediation),process.exitCode=1;return}n.remediated?r=`Remediated defaultRepo \u2192 ${n.resolved?.defaultRepo??"unknown"}`:r=`defaultRepo already persisted (${n.resolved?.defaultRepo??"unknown"})`}let t=sy();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function ay(e){let r=v(),t=(e.agentOsId?String(e.agentOsId):r.agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=V(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await J(e.secret?String(e.secret):void 0,t,{baseUrl:n}),s=new URLSearchParams;if(typeof e.since=="string"&&e.since.trim()&&s.set("since",e.since.trim()),e.limit!=null&&String(e.limit).trim()){let c=Number(e.limit);Number.isFinite(c)&&c>0&&s.set("limit",String(Math.floor(c)))}let i=s.toString()?`?${s.toString()}`:"",a=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/command-center/dashboard-contract${i}`,l=await ks(a,o);l.ok||(console.error(`dashboard-contract GET failed: HTTP ${l.status}`),l.response&&console.error(JSON.stringify(l.response,null,2)),process.exit(1)),console.log(JSON.stringify(l.response,null,2))}He();var _c=["Vercel/hosted: set KYNVER_SCHEDULER_PROVIDER=qstash","Vercel/hosted: ensure QSTASH_TOKEN (and QStash signing keys) are configured","Vercel/hosted: unset OPENCLAW_CRON_STORE_PATH if present"],xc=["User runner: unset KYNVER_SCHEDULER_PROVIDER (scheduling is deployment-owned)","User runner: unset OPENCLAW_CRON_STORE_PATH, OPENCLAW_CRON_SECRET, OPENCLAW_CRON_FIRE_BASE_URL",'User runner: after deployment cutover, run `kynver scheduler attest-cutover` (or set deploymentSchedulerProvider to "qstash" in ~/.kynver/config.json)',"Verify: kynver doctor runtime-takeover \u2014 hotspot_openclaw_scheduler should pass"];function KI(e=process.env){return{kynverSchedulerProvider:e.KYNVER_SCHEDULER_PROVIDER?.trim()||null,kynverCronStorePath:e.KYNVER_CRON_STORE_PATH?.trim()||e.OPENCLAW_CRON_STORE_PATH?.trim()||null,kynverCronSecret:!!(e.KYNVER_CRON_SECRET?.trim()||e.OPENCLAW_CRON_SECRET?.trim()),kynverCronFireBaseUrl:e.KYNVER_CRON_FIRE_BASE_URL?.trim()||e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null,openclawCronStorePath:e.OPENCLAW_CRON_STORE_PATH?.trim()||null,openclawCronSecret:!!e.OPENCLAW_CRON_SECRET?.trim(),openclawCronFireBaseUrl:e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}}function Ec(e,r=KI()){let t=[];return r.kynverSchedulerProvider==="openclaw-cron"&&t.push("Runner still has KYNVER_SCHEDULER_PROVIDER=openclaw-cron"),r.kynverCronStorePath&&r.kynverSchedulerProvider!=="kynver-cron"&&t.push("Runner has KYNVER_CRON_STORE_PATH but KYNVER_SCHEDULER_PROVIDER is not kynver-cron \u2014 use `kynver daemon` cron tick or unset the store for QStash-only runners"),r.openclawCronStorePath&&!r.kynverCronStorePath&&t.push("Runner still has legacy OPENCLAW_CRON_STORE_PATH (prefer KYNVER_CRON_STORE_PATH)"),e.deploymentSchedulerProvider==="openclaw-cron"&&t.push("~/.kynver/config.json deploymentSchedulerProvider is still openclaw-cron"),{ok:t.length===0,blockers:t,runnerEnv:r,deploymentSchedulerProvider:e.deploymentSchedulerProvider??null,deploymentSteps:[..._c],runnerSteps:[...xc]}}function ly(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import $I from"node:path";import{homedir as jI}from"node:os";var cy=$I.join(jI(),".kynver","config.json");function uy(e=!1){let r=v(),t=Ec(r),n={...t,configPath:q(cy),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
53
|
-
`),console.log("Deployment (Vercel):");for(let o of
|
|
54
|
-
User runner:`);for(let o of
|
|
40
|
+
`),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 zf(ei.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
41
|
+
`),o}var Rx=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function bx(e){return!Rx.has(e.skipReason)||lr(e.indexed,e.now)?!1:Zf({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(eg({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function vx(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(ar.has(r.run.status)||e.liveness&&Ul(r,e.liveness)||e.liveness&&ie(Dl(r,e.liveness))&&!lr(r))?n:t}function Sx(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:vx(e)}function wx(e,r){if(e.harnessRoot?.trim())return ri.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${ri.sep}runs${ri.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function rg(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 l=Sx(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(lr(r,a))return"active_worker";let c=Dl(r,e.liveness),u=wx(e,r),d=m=>u&&bx({indexed:r,harnessRoot:u,skipReason:m,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:m;if(qf(r,c)){let m=d("completion_blocked");if(m)return m}if(Tl(r,e.liveness?.gitStatusCache)){let m=d("dirty_worktree");if(m)return m}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let m=d("pr_or_unmerged_commits");if(m)return m}if(Jf(r,e.liveness,a)||!ie(c))return"run_still_active";if(go(c)){let m=d("pr_or_unmerged_commits");if(m)return m}if(Ae(c.changedFiles).length>0){let m=d("dirty_worktree");if(m)return m}if(vt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Zr(c.finalResult)}).blocked){let m=d("landing_blocked");if(m)return m}if(i&&e.worktreePath){let m=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(m)return m.detail?{reason:m.reason,detail:m.detail}:m.reason}return null}function Wl(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(ri.resolve(o))||r&&lr(r)?"active_worker":r&&Tl(r,e.gitStatusCache)?"dirty_worktree":null}function tg(e){return Wl(e)}var ng=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function og(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)ng.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||ng.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as lg,readdirSync as cg,statSync as xx}from"node:fs";import ug from"node:path";T();_e();import sg from"node:path";w();function _x(e,r){return Zs(e,r)}function ig(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of jo(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=C(sg.join(yn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=sg.resolve(l.worktreePath);_x(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Uf(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function ag(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function Ex(e,r){try{let t=xx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Px(e,r){let t=ug.join(e,"runs",r,"run.json");return lg(t)?C(t,null):null}function dg(e){try{return cg(e).length===0}catch{return!1}}function pg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(ag(n,r,t,i.liveRunKeys)||!dg(n))return"run_still_active";let a=Px(r,t);return a&&!ar.has(a.status)&&!Xr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function mg(e){if(!lg(e.worktreesDir))return[];let r=[],t;try{t=cg(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=ug.join(e.worktreesDir,o);dg(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Ex(s,e.now)})}return r}we();import{existsSync as Bl,rmSync as Cg}from"node:fs";import{execFileSync as Ax}from"node:child_process";import{existsSync as fg,readdirSync as Ix,statSync as Ox}from"node:fs";import Nx from"node:path";var Tx=2500;function Dx(e,r=Tx){if(!fg(e))return 0;try{let n=Ax("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 cr(e,r=5e4){if(!fg(e))return 0;let t=Dx(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Ix(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=Nx.join(i,l),u;try{u=Ox(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as Lx,rmSync as Bx}from"node:fs";_e();import{lstatSync as Mx,readdirSync as Ux}from"node:fs";function gg(e){try{let r=Mx(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 hg(e,r=32){let t=gg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Ux(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=gg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Wx}from"node:child_process";import Rg from"node:path";import Ie from"node:path";function kg(e,r,t,n){let o=Ie.resolve(e),s=`${Ie.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ie.relative(t,i);if(a.startsWith("..")||Ie.isAbsolute(a))return"path_outside_harness";let l=a.split(Ie.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ie.resolve(r))?"path_outside_harness":null}function ti(e,r,t){return kg(e,r,t,"node_modules")}function ni(e,r,t){return kg(e,r,t,".next")}function oi(e,r,t){let n=Ie.resolve(e),o=Ie.relative(t,n);return o.startsWith("..")||Ie.isAbsolute(o)||o.split(Ie.sep).length<3||!n.startsWith(Ie.resolve(r))?"path_outside_harness":null}function yg(e,r,t){let n=Ie.resolve(e);return ti(n,r,t)===null||ni(n,r,t)===null||oi(n,r,t)===null}function vg(){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 bg(e){let r=Wx("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Sg(e,r,t){if(!yg(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=bg(["chown","-R",`${n}:${o}`,Rg.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=bg(["rm","-rf",Rg.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 Ll="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 Hx(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function wg(e,r,t={}){if(!Lx(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?kr(n):null,i=e.bytes??cr(e.path)??void 0,a=t.removePath??Bx,l=t.hasForeignOwnedEntry??hg;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!Hx(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=vg();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Ll}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let p=Sg(e.path,n,o);if(p.ok&&p.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(p.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(m){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${m.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${p.error}; ${Ll}`}}}function Hl(e){let r=e.harnessRoot;return!r||!Tf(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Fl(e,r){let t=Hl(e);if(t)return t;let n=wg(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function _g(e,r){return Fl(e,r)}function xg(e,r){return Fl(e,r)}function Eg(e,r){return Fl(e,r)}function Pg(e,r){let t=Hl(e);if(t)return t;if(!Bl(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??cr(e.path);return Cg(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 Ag(e,r){let t=Hl(e);if(t)return t;if(!Bl(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??cr(e.path);return n&&pe(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Bl(e.path)&&Cg(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 si,readdirSync as ii,statSync as Fx}from"node:fs";import ze from"node:path";function Kl(e,r){try{let t=Fx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Og(e,r){let t=ze.relative(r,e);return t===""||!t.startsWith("..")&&!ze.isAbsolute(t)}function Ig(e,r,t,n){let o=[];for(let s of Nl){if(s===".next")continue;let i=ze.join(e,s);if(!si(i))continue;let a=ze.resolve(i);t.has(a)||Og(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:Kl(a,r.now)}))}return o}function Ng(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Ig(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!si(e.worktreesDir))return r;for(let n of ii(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=ze.join(e.worktreesDir,n.name);for(let s of ii(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=ze.join(o,s.name);r.push(...Ig(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Tg(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;si(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:Kl(a,e.now)})))}if(!t||!si(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(ze.resolve(i.worktreePath));for(let i of ii(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=ze.join(e.worktreesDir,i.name),l;try{l=ii(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=ze.resolve(ze.join(a,c.name));o.has(u)||s.has(u)||Og(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Kl(u,e.now)}))}}return n}import{existsSync as Ug,readdirSync as Dg,statSync as Kx}from"node:fs";import Xt from"node:path";var $x=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function jx(e,r){try{let t=Kx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Vx(e,r){let t=Xt.relative(r,e);return t===""||!t.startsWith("..")&&!Xt.isAbsolute(t)}function Gx(e,r,t,n,o,s){if(!Ug(n))return;let i=Xt.resolve(n);r.has(i)||Vx(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:jx(i,t.now)}))}function Mg(e,r,t,n,o){for(let s of $x)Gx(e,r,t,Xt.join(n,s.dirName),s.kind,o)}function Wg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Mg(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Ug(e.worktreesDir))return r;for(let n of Dg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Xt.join(e.worktreesDir,n.name),s;try{s=Dg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Xt.join(o,i.name);Mg(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as Lg,statSync as Yx}from"node:fs";import Xe from"node:path";function Jx(e,r){try{let t=Yx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function qx(e){let r=[],t=null;for(let n of e.split(`
|
|
42
|
+
`)){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 zx(e,r){let t=Xe.relative(Xe.resolve(r),Xe.resolve(e));return t!==""&&!t.startsWith("..")&&!Xe.isAbsolute(t)}var Xx=200;function Bg(e){if(!e.includeOrphans||!Lg(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Xe.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Xe.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=pe(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=qx(a);for(let c of l){if(i>=Xx)break;let u=Xe.resolve(c.path);if(u===Xe.resolve(s)||!zx(u,e.worktreesDir)||t.has(u)||o.has(u)||!Lg(u))continue;let f=Xe.relative(e.worktreesDir,u).split(Xe.sep),p=f[0],m=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:p,worker:m,repo:s,ageMs:Jx(u,e.now)})}}return n}T();w();import ko from"node:path";function Hg(e,r){let t=ko.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?ko.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Fg(e){let r=new Map;for(let t of jo(e))for(let n of Object.keys(t.workers||{})){let o=ko.join(yn(e,t.id),"workers",v(n),"worker.json"),s=C(o,void 0);s?.worktreePath&&r.set(ko.resolve(s.worktreePath),{harnessRoot:e,worktreePath:ko.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function yo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function et(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Vl(e={}){let r=e.execute===!0||e.execute!==!1&&yo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!yo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??et("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??et("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??et("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??et("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??et("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||yo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=yo("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),f=e.accountBytes!==!1&&!yo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),p=et("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),m=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&p>0?p:null,h=et("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(h)&&h>0?Math.floor(h):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(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:f,storagePerRunEntryCap:m,byteAccountingEntryCap:k}}function Vg(e){let r=process.env.KYNVER_CLEANUP_SCOPE==="all",t=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=r?Number.isFinite(t)&&t>0?t:6048e5:Number.isFinite(t)&&t>0?t:0;return Vl({runIdFilter:r?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:r?216e5:void 0,runDirectoriesAgeMs:r?36e5:void 0,includeOrphans:r?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}we();import{existsSync as Gg}from"node:fs";import Gl from"node:path";w();var Qx=1800*1e3;function Yg(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Qx;if(!Gg(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Gl.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=C(Gl.join(c,"worker.json"),void 0);if(u&&Ml(u,r,t))return"active_worker"}let n=Gl.join(e.worktreePath,".git");if(!Gg(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
43
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(Ae(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}_e();import{existsSync as Zx,readdirSync as Jg,statSync as eE}from"node:fs";import rE from"node:path";function qg(e={}){let r=ce(e.harnessRoot??Re()),t=kr(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!Zx(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=Jg(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=rE.join(t,u.name);try{let f=eE(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of Jg(d,{withFileTypes:!0}))f.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let f=e.perRunEntryCap??5e4;if(f<=0)s=null;else{let p=cr(d,f);p===null?s=null:s+=p}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}_e();import{existsSync as tE}from"node:fs";import{homedir as nE}from"node:os";import zg from"node:path";var oE=["/var/tmp/kynver-harness",zg.join(nE(),".openclaw","harness")];function Yl(e,r,t){if(!t?.trim())return;let n=ce(t.trim());e.has(n)||(e.add(n),r.push(n))}function sE(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 Xg(e={}){let r=new Set,t=[];Yl(r,t,e.harnessRoot??Re());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Yl(r,t,o);if(sE(e))for(let o of oE){let s=zg.resolve(o);!r.has(s)&&tE(s)&&Yl(r,t,s)}return t}kn();function iE(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function aE(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Qg(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=aE("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Ke({...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 Zg(e,r){if(!r.pressured)return e;let t=e.execute||!iE("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}}hn();import{unlinkSync as lE}from"node:fs";function ai(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function eh(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function cE(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function li(e={}){let r=e.execute===!0||ai("KYNVER_WSL_CRASH_DUMP_EXECUTE")||ai("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||ai("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??eh("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=gr({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=cE(o.dumps,n,t),i=[],a=[],l=0;for(let c of s){if(!r){a.push({path:c.path,reason:"dry_run"});continue}try{lE(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function rh(e){return e?ai("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>eh("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}hn();function Oe(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}we();var ci=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=ne(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 uE}from"node:child_process";import{existsSync as dE}from"node:fs";import pE from"node:path";var mE=5e3;function fE(e,r){if(!dE(pE.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=uE("git",r,{cwd:e,encoding:"utf8",timeout:mE}),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 th(e){let r=fE(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
44
|
+
`).map(t=>t.trim()).filter(Boolean)}var ui=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=th(t)??[];return this.cache.set(t,o),o}};var di=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Xr(r);return this.cache.set(r.id,n),n}};function gE(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function nh(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:gE(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 hE(e={}){let r=e.harnessRoot?ce(e.harnessRoot):Re(),t=Xg({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function kE(e){return typeof e=="string"?{reason:e}:e}function Qt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function pi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:cr(e.path,t)}}function oh(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 yE(e,r){return e.kind==="remove_next_cache"?xg(e,r):_g(e,r)}function RE(e,r,t){return e.kind==="remove_next_cache"?ni(e.path,r,t):ti(e.path,r,t)}function bE(e){let r=new Map;for(let t of e)for(let[n,o]of Fg(t))r.set(n,o);return r}function sh(e,r){return e.runId&&e.worker?Ne.join(r,e.runId,e.worker):Ne.resolve(e.path,"..")}function Jl(e={}){let r=Vl(e),t=Qg();r=Zg(r,t);let n=hE(e);Oe("scan",`${n.scanRoots.length} harness root(s)`);let o=ig(n.scanRoots,n.now),s=r.finalizeStaleRuns?uo().map(P=>({runId:P.runId,from:P.from,to:P.to})):[];s.length>0&&Oe("finalize",`${s.length} stale run(s) marked terminal`),Oe("index","building worktree index");let i=bE(n.scanRoots);Oe("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new di,gitStatusCache:new ui,gitRevCache:new ci},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let P of n.scanRoots){if(f())break;Oe("root",P);let B=Ne.join(P,"worktrees"),Ir=Hg(i,P),Q={harnessRoot:P,worktreesDir:B,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Ir,now:n.now},ur=r.scanDependencyCaches?Wg(Q):[];Oe("dependency",r.scanDependencyCaches?`${ur.length} cache candidate(s) at ${P}`:"skipped (worktree-only sweep)");let ot=0;for(let he of ur){if(f())break;ot+=1,ot%50===0&&Oe("dependency",`${ot}/${ur.length} evaluated`);let G=Ne.resolve(he.path);if(u.has(G))continue;u.add(G);let W={...he,path:G},ke=RE(W,P,B);if(ke){Qt(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}let ve=sh(W,B),dr=Ir.get(Ne.resolve(ve))??null,Se=Wl({indexed:dr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){Qt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(yE(pi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of Ng(Q)){if(f())break;let G=Ne.resolve(he.path);if(u.has(G))continue;u.add(G);let W={...he,path:G},ke=oi(W.path,P,B);if(ke){Qt(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}let ve=sh(W,B),dr=Ir.get(Ne.resolve(ve))??null,Se=tg({indexed:dr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){Qt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Eg(pi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let We=[...Tg(Q),...Bg(Q)];Oe("worktrees",`${We.length} candidate(s) at ${P}`);let st=new Set,Le=0;for(let he of We){if(f())break;Le+=1,Le%50===0&&Oe("worktrees",`${Le}/${We.length} evaluated`);let G=Ne.resolve(he.path);if(st.has(G))continue;st.add(G);let W={...he,path:G},ke=Ir.get(Ne.resolve(W.path))??null,ve=ke?null:Yg({worktreePath:W.path,harnessRoot:P,runId:W.runId,workerName:W.worker,now:n.now}),dr=rg({indexed:ke,worktreePath:Ne.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:ve,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:P,writeSalvageEvidence:r.execute});if(dr){let{reason:Se,detail:Ao}=kE(dr);Qt(l,W.path,Se,Ao),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Ag(pi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of mg({harnessRoot:P,worktreesDir:B,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let G=Ne.resolve(he.path);if(u.has(G))continue;u.add(G);let W={...he,path:G},ke=W.runId??Ne.basename(G),ve=pg({harnessRoot:P,runId:ke,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ve){Qt(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}c.push(Pg(pi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let p=0,m=0,h=0,k=0,g=0,y=0;for(let P of c)P.bytes&&(p+=P.bytes),!P.skipped&&!P.executed&&P.bytes&&(h+=P.bytes),P.executed?(g+=1,k+=P.bytes??0,P.kind==="remove_run_directory"&&(m+=1)):P.skipped&&(y+=1,P.skipReason==="dry_run"&&P.bytes&&(h+=P.bytes));let I=r.accountBytes?qg({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,_=gr(),E=r.execute&&rh(_),U=E?li({execute:!0}):null,Y=_?{observed:!0,execute:E,dumpCount:_.dumpCount,totalBytes:_.totalBytes,removedCount:U?.removed.length??0,removedBytes:U?.removedBytes??0,executables:_.executables,path:_.path,reason:_.reason}:void 0;U&&U.removed.length>0&&(k+=U.removedBytes,g+=U.removed.length,Oe("wsl-crashes",`removed ${U.removed.length} dump(s), ${U.removedBytes} bytes`)),Oe("complete",`${c.length} action(s), ${y} skipped, ${g} removed`);let $=og(c,l),F=nh({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:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:oh(c,l)},...I?{storage:I}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{}});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:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:oh(c,l)},...I?{storage:I}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:F}}function ih(e){let r=Vg(e);return Jl({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function ah(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as AE}from"node:fs/promises";import{homedir as IE}from"node:os";import rt from"node:path";Ho();import{existsSync as lh,readFileSync as vE}from"node:fs";import mi from"node:path";var uh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},dh=Object.keys(uh),ql={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},SE={"@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 ch(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 fi(e,r){let t=ch(e),n=ch(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 ph(e,r){return fi(e,r)>=0}function wE(e){let r=null;for(let t of e)(!r||fi(t,r)>0)&&(r=t);return r}function CE(e){try{let r=JSON.parse(vE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function _E(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=mi.resolve(o);if(lh(mi.join(s,"packages/kynver-runtime/package.json"))&&lh(mi.join(s,"package.json")))return s}return pt({cwd:e})?.repo??null}function mh(e={}){let r=e.cwd??process.cwd(),t=_E(r,e.repoRoot);if(!t)return{};let n={};for(let o of dh){let s=mi.join(t,SE[o]),i=CE(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function xE(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function EE(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&ph(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${xE(r).join("; ")}.`),i.push("Do not publish npm packages or wait on an operator release."),i):(n?i.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):i.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&i.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&s&&i.push(`Repo checkout reports ${s}; rebuild/link repo source if you develop from the monorepo.`),i)}function PE(e){if(e.length===0)return{version:null,source:"unknown"};let r=wE(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 fh(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=dh.map(i=>{let a=uh[i],l=[],c=r(e.installed?.[i],"installed"),u=r(e.repo?.[i],"repo"),d=r(e.self?.[i],"self");c&&l.push(c),u&&l.push(u),d&&l.push(d);let{version:f,source:p}=PE(l),m=u?.version??null,h=f?ph(f,a):!1,k=h?[]:EE({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:p,repoVersion:m}),g=h?`${ql[i]} ${f} meets memory-cost minimum ${a} (${p}).`:`${ql[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${p})`:" (no version detected)")+".";return{packageName:i,displayName:ql[i],minimumVersion:a,effectiveVersion:f,effectiveSource:p,ok:h,summary:g,remediation:k}}),n=t.filter(i=>!i.ok),o=n.length===0,s=o?"All managed AgentOS packages meet memory-cost minimum versions.":`Memory-cost package guard blocked ${n.length} stale package(s): ${n.map(i=>`${i.packageName} < ${i.minimumVersion}`).join("; ")}.`;return{ok:o,summary:s,packages:t}}var zl=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(`
|
|
45
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function gh(e={}){let r=fh(e);if(!r.ok)throw new zl(r);return r}var OE=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function Zt(e){let r=e?.trim();return r||null}function NE(e){return[...new Set(e.filter(r=>!!r))]}function TE(){let e=IE(),r=Zt(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Zt(process.env.OPENCLAW_NPM_ROOT)??rt.join(e,".openclaw","npm"),t=Zt(process.env.KYNVER_NPM_GLOBAL_ROOT)??Zt(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Zt(process.env.NPM_CONFIG_PREFIX)?rt.join(Zt(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):rt.join(e,".npm-global","lib","node_modules"));return NE([rt.join(r,"lib","node_modules"),rt.join(r,"node_modules"),t.endsWith("node_modules")?t:rt.join(t,"lib","node_modules")])}async function DE(e){try{let r=JSON.parse(await AE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function ME(e){let r=TE(),t=new Set,n=[];for(let o of r){let s=rt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function gi(e=new Date().toISOString()){let r={};for(let t of OE){let n=null;for(let o of ME(t)){let s=await DE(o);s&&(!n||fi(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as UE}from"node:child_process";var WE=1e4,LE=4*1024*1024,hh=(e,r,t)=>{try{let n=UE(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??WE,maxBuffer:LE});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function hi(e,r,t){return`${e} ${r} ${t}`}function Ro(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function kh(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var BE=8e3,HE=30,FE=100,KE=400,$E=3600*1e3,Xl=0;function Zl(){return Date.now()<Xl}function jE(e){let r=`${e.stdout}
|
|
46
|
+
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function yh(e){jE(e)&&(Xl=Math.max(Xl,Date.now()+$E))}function Ql(e,r){if(Zl())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return yh(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function VE(e,r,t,n){if(Zl())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return yh(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function ec(e){return Zl()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function en(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function GE(e){return Array.isArray(e)?e.map(r=>en(r)).filter(r=>r!==null).slice(0,HE).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function YE(e,r,t){let n=Ql(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:GE(n.statuses)}:null}var Rh={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:ec,collect(e,r){let t=kh(e);if(!t)return null;let n=VE(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=en(n.author),s=en(n.mergeCommit),i=en(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,BE):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>en(u)).filter(u=>u!==null).slice(0,FE).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null})):[],c=Array.isArray(n.files)?n.files.map(u=>en(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,KE):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},bh={provider:"github",kind:"commit_status",version:"1",isAvailable:ec,collect(e,r){let t=Ro(e);return t?YE(r,t.repo,t.sha):null}},vh={provider:"github",kind:"branch_reachability",version:"1",isAvailable:ec,collect(e,r){let t=Ro(e);if(!t)return null;let n=Ql(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=Ql(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var JE=5,qE=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,zE=/https:\/\/[^\s]+/,Sh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=Ro(e);if(!t)return null;let n=r("vercel",["list","--prod","--meta",`githubCommitSha=${t.sha}`]);if(!n.ok)return null;let o=[];for(let s of n.stdout.split(`
|
|
47
|
+
`)){let i=s.match(zE)?.[0];if(!i)continue;let a=s.match(qE)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=JE)break}return{found:o.length>0,deployments:o}}};var rc=[];function ki(e){rc.some(r=>r.provider===e.provider&&r.kind===e.kind)||rc.push(e)}function wh(e,r){return rc.find(t=>t.provider===e&&t.kind===r)??null}function Ch(){ki(Rh),ki(bh),ki(vh),ki(Sh)}var XE=1,QE=25e3;function _h(e,r={}){Ch();let t=r.run??hh,n=r.now??(()=>new Date),o=r.maxSubjects??XE,s=Date.now()+(r.deadlineMs??QE),i=new Set,a=e.filter(p=>{let m=hi(p.provider,p.kind,p.subject);return i.has(m)?!1:(i.add(m),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((p,m)=>a[(l+m)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},f=new Map;for(let p of u){let m=hi(p.provider,p.kind,p.subject),h=n(),k=r.cache?.get(m,h)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...p,reason:"budget_exhausted"});continue}let g=wh(p.provider,p.kind);if(!g){d.skipped.push({...p,reason:"no_recipe"});continue}let y=`${g.provider} ${g.kind}`,I=f.get(y);if(I===void 0&&(I=g.isAvailable(t),f.set(y,I)),!I){d.skipped.push({...p,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(p,m,n())===!1){d.skipped.push({...p,reason:"budget_exhausted"});continue}d.attempted+=1;let _=g.collect(p.subject,t);if(_==null){d.skipped.push({...p,reason:"collect_failed"});continue}d.collected+=1;let E={provider:p.provider,kind:p.kind,subject:p.subject,payload:_,observedAt:n().toISOString(),collectorVersion:g.version};d.items.push(E),r.cache?.set(m,E,n())}return d}T();w();import nP from"node:path";T();w();import xh from"node:path";var ZE="provider-evidence-wanted.json",eP="provider-evidence-cache.json",rP=600*1e3;function Eh(e){return xh.join(x(e),ZE)}function tP(e){return xh.join(x(e),eP)}function Ph(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Ah(e){let r=C(Eh(e),null);return Ph(r?.wanted)}function Ih(e,r){se(Eh(e),{savedAt:new Date().toISOString(),wanted:r})}function Oh(e,r={}){let t=r.ttlMs??rP,n=tP(e),s={...C(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(se(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Nh(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Ph(r):null}var oP="provider-evidence-shared-cache.json",sP=6e4,iP=1,aP=1;function tc(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function lP(){return nP.join(Z().harnessRoot,oP)}function cP(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?iP:aP;return tc(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,tc("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Th(){return tc("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",sP)}function uP(e){return Math.floor(e.getTime()/6e4)*6e4}function dP(e){return`${e.provider}:${e.kind}`}function Dh(e,r={}){let t=Oh(e,{ttlMs:r.ttlMs??Th()}),n=r.file??lP(),o=C(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Th(),l=!1;return{get(u,d){let f=t.get(u,d);if(f)return f;let p=s[u];if(!p)return null;let m=Date.parse(p.observedAt);return!Number.isFinite(m)||d.getTime()-m>a?(delete s[u],l=!0,null):(t.set(u,p,d),p)},set(u,d,f){t.set(u,d,f),s[u]=d,l=!0},reserve(u,d,f){let p=cP(u.provider);if(p===0)return!0;let m=dP(u),h=uP(f),k=i[m];return!k||k.windowStartMs!==h?(i[m]={windowStartMs:h,used:1},l=!0,!0):k.used>=p?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(se(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}function mP(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function fP(e,r){let t=L(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=C(pP.join(x(t.id),"workers",v(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||xt(a))continue;if(Vr(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=M(a);if(!ie(l))continue;let c=bt({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await ro({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function gP(e,r,t,n,o){let s=V(n.baseUrl?String(n.baseUrl):void 0),i=await J(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await gi(),c=Rs(r),u=null;try{let h=Ah(r);if(h.length>0){let k=Dh(r);u=_h(h,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=ys(r),f=await Hr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:no(r),resourceGate:t,boxResourceSnapshot:Qs(t,{harnessRunId:r,boxKind:Fe(b())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Ge({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),p=Nh(f.response);if(p)try{Ih(r,p)}catch{}let m=rp(f);if(m)try{ep(r,m)}catch{}return{ok:f.ok,httpStatus:f.status,response:f.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function nc(e){let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";no(r);let o=await Gf(t,e),s=Vf(o),i=nr({runId:r,configuredMaxWorkersOverride:s}),a=ah()?ih(r):void 0,l=await gP(t,r,i,e,a),c=Em(r,l),u=await Is(r,e),d=await fP(r,e),f=nr({runId:r,configuredMaxWorkersOverride:s}),p=mo(),m=await jf(r,e),h=xf(f,l),k=h.maxStarts,g=mP()?await fo({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},y=null,I=0,_=_f(l),E=k;if(n&&E>0&&_.length>0){let Y=Math.min(E,_.length),$=await vl({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},Y),F=qt($);I+=F,E=Math.max(0,E-F),y={exactTargetTaskIds:_,exact:$,startedCount:I}}if(n&&E>0){let Y=await vl({...e,run:r,agentOsId:t},E),$=qt(Y);I+=$,y=y&&typeof y=="object"?{...y,broad:Y,startedCount:I}:Y}else!n||k<=0?y||(y={ok:!0,skipped:!0,reason:n?f.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:h,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):y&&typeof y=="object"&&(y={...y,broadSkipped:!0,startedCount:I});let U=!h.underutilized&&k===0&&d.length===0&&I===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:u,completedWorkers:d,staleReconcile:p,harnessCleanup:a,planProgressSync:m,completionAckSync:c,operatorTick:l,sweep:g,dispatchAdvice:h,dispatch:y,idle:U}}O();import DP from"node:os";import{readFileSync as hP}from"node:fs";import{homedir as kP,platform as yP}from"node:os";import RP from"node:path";import{execFileSync as bP}from"node:child_process";function Mh(e,r=Date.now()){try{let t=JSON.parse(e),n=t.claudeAiOauth?.accessToken,o=t.claudeAiOauth?.expiresAt;return typeof n!="string"||!n||typeof o=="number"&&o-r<6e4?null:n}catch{return null}}function vP(){if(yP()==="darwin")try{let e=bP("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Mh(e.trim())}catch{return null}try{let e=hP(RP.join(kP(),".claude",".credentials.json"),"utf8");return Mh(e)}catch{return null}}function Uh(e=process.env,r={}){let t=e.ANTHROPIC_API_KEY?.trim();if(t)return{kind:"api_key",key:t};let n=e.KYNVER_CHAT_USE_CLAUDE_OAUTH;if(r.oauthOptIn===!0||n==="1"||n==="true"||n==="yes"){let s=vP();if(s)return{kind:"oauth",token:s}}return null}var SP="You are Claude Code, Anthropic's official CLI for Claude.";function wP(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function CP(e,r){let t=r;switch(t.type){case"message_start":return e.inputTokens=t.message?.usage?.input_tokens??0,"";case"content_block_start":{let n=t.index??e.blocks.length;return e.blocks[n]={type:t.content_block?.type==="tool_use"?"tool_use":"text",text:"",id:t.content_block?.id,name:t.content_block?.name,inputJson:""},""}case"content_block_delta":{let n=e.blocks[t.index??e.blocks.length-1];return n?t.delta?.type==="text_delta"&&t.delta.text?(n.text+=t.delta.text,t.delta.text):(t.delta?.type==="input_json_delta"&&t.delta.partial_json&&(n.inputJson+=t.delta.partial_json),""):""}case"message_delta":return t.delta?.stop_reason&&(e.stopReason=t.delta.stop_reason),typeof t.usage?.output_tokens=="number"&&(e.outputTokens=t.usage.output_tokens),"";default:return""}}function _P(e){let r=[];for(let t of e.blocks)if(t)if(t.type==="tool_use"){let n={};try{n=t.inputJson?JSON.parse(t.inputJson):{}}catch{n={}}r.push({type:"tool_use",id:t.id??"",name:t.name??"",input:n})}else t.text&&r.push({type:"text",text:t.text});return{content:r,stop_reason:e.stopReason??"end_turn",usage:{input_tokens:e.inputTokens,output_tokens:e.outputTokens}}}async function*xP(e){let r=e.getReader(),t=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await r.read();if(o)break;n+=t.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
|
|
48
|
+
`))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{r.releaseLock()}}function EP(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function Wh(e){let{creds:r,model:t,payload:n}=e,o={"Content-Type":"application/json","anthropic-version":"2023-06-01"},s=n.system;r.kind==="api_key"?o["x-api-key"]=r.key:(o.Authorization=`Bearer ${r.token}`,o["anthropic-beta"]="oauth-2025-04-20",s=[{type:"text",text:SP},{type:"text",text:n.system}]);let i=await fetch(`${EP()}/v1/messages`,{method:"POST",headers:o,signal:e.signal,body:JSON.stringify({model:t,max_tokens:n.maxTokens,system:s,messages:n.messages,...Array.isArray(n.tools)&&n.tools.length>0?{tools:n.tools}:{},...n.temperature!==void 0?{temperature:n.temperature}:{},stream:!0})});if(!i.ok||!i.body){let l=await i.text().catch(()=>"");throw new Error(`Anthropic stream failed: HTTP ${i.status}${l?` \u2014 ${l.slice(0,300)}`:""}`)}let a=wP();for await(let l of xP(i.body)){let c=CP(a,l);c&&e.onDelta(c)}return _P(a)}var rn=class{constructor(r,t=150){this.flushFn=r;this.floorMs=t}flushFn;floorMs;buffer="";timer=null;closed=!1;push(r){this.closed||!r||(this.buffer+=r,this.timer||(this.timer=setTimeout(()=>{this.timer=null,this.flushNow()},this.floorMs)))}flushNow(){if(!this.buffer)return;let r=this.buffer;this.buffer="",this.flushFn(r)}close(){this.closed||(this.closed=!0,this.timer&&(clearTimeout(this.timer),this.timer=null),this.flushNow())}};import{spawn as OP}from"node:child_process";var PP=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),AP=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),IP=["--secret","--api-key","--keeper-child"];function Lh(e){if(!Array.isArray(e)||e.length===0||e.some(n=>typeof n!="string"))return{ok:!1,mutating:!1,reason:"argv must be a non-empty string array"};for(let n of e){if(IP.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
49
|
+
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:PP.has(t)?{ok:!0,mutating:!1}:AP.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var NP=10*6e4,TP=5e3,Bh=2e5;async function Hh(e,r,t={}){let n=Lh(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??NP,i=new rn(r);return new Promise(a=>{let l=0,c=!1,u=OP(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=p=>{if(l>=Bh)return;let m=p.toString("utf8").slice(0,Bh-l);l+=m.length,i.push(m)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),TP).unref()},s);u.on("error",p=>{clearTimeout(f),i.push(`spawn failed: ${p.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",p=>{clearTimeout(f),i.close(),a({exitCode:p,timedOut:c})})})}var MP=25e3,UP=32e3,WP=5e3,LP=6e4,Fh=5*6e4,BP=5e3,HP="claude-sonnet-4-6";async function FP(e,r,t){let n=t.KYNVER_RUNTIME_CHAT_BRIDGE_URL?.trim();if(n)return n;if(!e)return null;let o=new AbortController,s=setTimeout(()=>o.abort(),BP);try{let i=await fetch(`${e.replace(/\/$/,"")}/api/runtime/chat-bridge`,{headers:{Authorization:`Bearer ${r}`},signal:o.signal});if(!i.ok)return null;let a=await i.json().catch(()=>null);return typeof a?.bridgeUrl=="string"&&a.bridgeUrl.trim()?a.bridgeUrl.trim():null}catch{return null}finally{clearTimeout(s)}}async function Kh(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=oe();if(!t||!n)return null;let o=await FP(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:DP.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||HP,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function KP(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),UP),o=setInterval(()=>{r()&&t.abort()},500);try{let s=await fetch(`${e.bridgeUrl}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,waitMs:MP}),signal:t.signal});if(s.status===204)return null;if(s.status===401||s.status===403)return"auth_error";if(!s.ok)throw new Error(`claim failed: HTTP ${s.status}`);return(await s.json().catch(()=>null))?.turn??null}catch(s){if(r())return null;throw s}finally{clearTimeout(n),clearInterval(o)}}async function tt(e,r,t){return(await fetch(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(r)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,events:t})})).ok}async function $P(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Hh(n,s=>{tt(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await tt(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await tt(e,r.turnId,[{seq:t++,kind:"final",message:{exitCode:o.exitCode,timedOut:o.timedOut}}]).catch(()=>{}),console.error(JSON.stringify({event:"command_turn_done",turnId:r.turnId,argv:n.slice(0,4),exitCode:o.exitCode,timedOut:o.timedOut,refused:o.refused??null}))}async function jP(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||tt(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new rn(s),a=Uh(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await tt(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Wh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await tt(e,r.turnId,[{seq:t++,kind:"final",message:l}]),console.error(JSON.stringify({event:"chat_turn_done",turnId:r.turnId,model:e.model}))}catch(l){i.close(),n||await tt(e,r.turnId,[{seq:t++,kind:"error",error:l instanceof Error?l.message:String(l)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",turnId:r.turnId,error:l instanceof Error?l.message:String(l)}))}}async function oc(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function $h(e){let r=await Kh();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!oe()||!b().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Fh}));!r&&!e.shouldStop();){if(!oe()||!b().agentOsId?.trim()||(await oc(Fh,e.shouldStop),e.shouldStop()))return;r=await Kh()}if(!(!r||e.shouldStop())){for(console.error(JSON.stringify({event:"chat_claim_loop_start",bridgeUrl:r.bridgeUrl,agentOsId:r.agentOsId,boxId:r.boxId,model:r.model,useClaudeOauth:r.useClaudeOauth}));!e.shouldStop();)try{let t=await KP(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await oc(LP,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await $P(r,t):await jP(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await oc(WP,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var VP=6e4,GP=5*6e4,YP=10,JP=250;async function sc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(JP,t);await mr(n),t-=n}}async function yi(e){Ut();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):VP,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Hn();a.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:a.resolved?.defaultRepo??null,configPath:a.configPath}));let l=Nd(b());l.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:l.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:l.box.boxKind,workerCapSource:l.workerCapSource,maxConcurrentWorkers:l.maxConcurrentWorkers}));let c=sr(),u=$h({shouldStop:()=>s}).catch(f=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:f instanceof Error?f.message:String(f)}))}),d=!1;for(;!s;)try{Md({agentOsId:t,runId:r,instructionBundleVersion:Lr()});let f=await ga(e.secret?String(e.secret):void 0,t);if(!f.ok){d||(d=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:f.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await sc(o,()=>s);continue}d&&(d=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Id({agentOsId:t,baseUrl:ld(e.baseUrl?String(e.baseUrl):void 0),secret:f.secret});let p=await nc({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...p})),c.tickEnabled){let g=ys(r);if(g&&!g.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:g.holderBoxId}));else{let y=await Wt({env:c,agentOsIdFilter:t});y.enabled&&(y.fired>0||y.errors>0||y.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...y}))}}p.idle?i++:i=0;let m=Math.floor(Mt("daemon.maxIdleStreak",YP)),h=Math.floor(Mt("daemon.idleIntervalMs",GP)),k=i>=m?h:o;await sc(k,()=>s)}catch(f){console.error(JSON.stringify({event:"daemon_tick_error",error:f.message})),await sc(o,()=>s)}await u,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as qP}from"node:child_process";w();var zP=15*6e4,jh=2*6e4,Vh=1e4,XP=5e3,QP=5*6e4,ZP=30*6e4,Gh=5e3;function eA(e,r=process.env){let t=typeof e=="string"?Number.parseInt(e,10):NaN;if(Number.isFinite(t)&&t>0)return t;let n=Number.parseInt(r.KYNVER_DAEMON_STALL_MS??"",10);return Number.isFinite(n)&&n>0?n:zP}function Ri(e,r=process.env){if(e.keeperChild===!0||e.keeperChild==="true"||e.noSupervise===!0||e.noSupervise==="true"||e.supervised==="false")return!1;let t=(r.KYNVER_DAEMON_SUPERVISED??"").trim().toLowerCase();return!(t==="0"||t==="false"||t==="no"||t==="off")}function rA(e,r=XP,t=QP){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function tA(e,r,t=ZP){return r-e>=t}function nt(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function nA(e){let r=[];for(let t=0;t<e.length;t+=1){let n=e[t];if(!(n==="--supervised"||n==="--no-supervise"||n==="--keeper-child")){if(n==="--stall-ms"){t+1<e.length&&!e[t+1].startsWith("--")&&(t+=1);continue}n.startsWith("--stall-ms=")||n.startsWith("--supervised=")||r.push(n)}}return r.push("--keeper-child"),r}async function bi(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=eA(e.stallMs),o=nA(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,nt("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),nt("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,p=null;for(a=qP(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),nt("child_spawned",{pid:a.pid??null}),a.on("exit",(k,g)=>{d=!0,f=k,p=g});!d&&!i&&(await mr(Gh),!(d||i));){if(Date.now()-u<jh)continue;let k=Ud(t),g=k&&k.pid===a.pid?k:null;if(g&&Wd(g,n)){nt("stall_detected",{pid:a.pid??null,lastBeatAt:g.observedAt,stallMs:n}),a.kill("SIGTERM"),await mr(Vh),d||a.kill("SIGKILL");break}if(!g&&Date.now()-u>n+jh){nt("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await mr(Vh),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await mr(Gh);if(i)break;let m=Date.now();tA(u,m)&&(l=0),l+=1;let h=rA(l);nt("child_exited",{code:f,signal:p,uptimeMs:m-u,consecutiveFailures:l,respawnInMs:h}),await mr(h)}nt("stopped",{agentOsId:t})}we();T();import{existsSync as dA,mkdirSync as pA}from"node:fs";import mA from"node:path";T();Tr();import{existsSync as oA,readFileSync as sA}from"node:fs";import Yh from"node:path";X();w();function iA(e){if(!e||!oA(e))return 0;try{return sA(e,"utf8").trim().length}catch{return 0}}function aA(e,r){let t=Yh.join(x(e.id),"workers",v(r),"worker.json"),n=C(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=M(n,{base:e.base,baseCommit:e.baseCommit}),s=iA(n.heartbeatPath)===0,i=!o.finalResult&&!o.alive,a=typeof n.completionBlocker=="string"&&n.completionBlocker.length>0;return{worker:r,workerStatus:n.status,attention:o.attention.state,attentionReason:o.attention.reason,missingHeartbeat:s,missingFinalResult:i,landingBlocked:_t(o),completionBlocked:a}}function lA(e){return e.openWorkerCount>0?"active_workers":e.workers.some(r=>r.completionBlocked)?"completion_blocked":e.workers.some(r=>r.landingBlocked)?"landing_blocked":null}function cA(e){let r={blocked:5,needs_attention:4,stale:3,done:2,ok:1},t="ok",n;for(let o of e){let s=o.attention;(r[s]??0)>=(r[t]??0)&&(t=s,n=o.attentionReason)}return{attention:t,attentionReason:n}}function uA(e){let r=0;for(let t of fe(e)){let n=Yh.join(x(e.id),"workers",v(t),"worker.json"),o=C(n,void 0);if(!o)continue;let s=M(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function bo(){return mo(),z().map(e=>{let t=fe(e).map(d=>aA(e,d)),n=t.filter(d=>d.missingHeartbeat).map(d=>d.worker),o=t.filter(d=>d.missingFinalResult).map(d=>d.worker),s=t.filter(d=>d.landingBlocked).map(d=>d.worker),i=t.filter(d=>d.completionBlocked).map(d=>d.worker),{attention:a,attentionReason:l}=cA(t),c=uA(e),u=wn(e.status,t.map(d=>({attention:d.attention,status:d.workerStatus})));return{id:e.id,name:e.name,status:e.status,effectiveStatus:u,repo:e.repo,createdAt:e.createdAt,openWorkerCount:c,attention:a,attentionReason:l,finalizeBlockedReason:lA({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Jh(){console.log(JSON.stringify(bo(),null,2))}w();function fA(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=$e();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function vi(e){let r=Am(fA(e));tu(r);let t=e.id?Hs(String(e.id)):Xc(String(e.name||"run")),n=x(t);dA(n)&&gA(`run already exists: ${t}`),pA(n,{recursive:!0});let o=String(e.base||"origin/main"),s=pe(r,["rev-parse",o]).trim(),i={id:t,name:String(e.name||t),repo:r,base:o,baseCommit:s,status:"created",createdAt:new Date().toISOString(),workers:{}};se(mA.join(n,"run.json"),i);let a={runId:t,runDir:n,repo:r,base:o,baseCommit:s};return console.log(JSON.stringify(a,null,2)),a}function qh(){Jh()}function gA(e){console.error(e),process.exit(1)}T();import{existsSync as wi}from"node:fs";async function Si(e=sr()){let r=await Br(e.storePath).catch(()=>[]),t=await ks(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=gs(e),s="disabled";return o?s="kynver-cron-daemon":process.env.QSTASH_TOKEN?.trim()&&(s="qstash"),{primary:s,env:{storePath:e.storePath,statePath:e.statePath,tickEnabled:e.tickEnabled,fireBaseUrl:e.fireBaseUrl,missedRunPolicy:e.missedRunPolicy,maxCatchUpPerTick:e.maxCatchUpPerTick,maxRetries:e.maxRetries},jobCount:r.length,stateJobCount:Object.keys(t.jobs).length,credentialsReady:n,daemonPrimary:o}}import{homedir as hA}from"node:os";import kA from"node:path";Rr();var Pr="watchdog:board-sweep",yA="*/5 * * * *",RA=["Set KYNVER_SCHEDULER_PROVIDER=kynver-cron on the hosted Kynver deployment (Vercel).","Set KYNVER_CRON_SECRET to the same value written to ~/.kynver/.env by this installer.","Unset KYNVER_CRON_STORE_PATH on Vercel \u2014 the connected box owns the local store.","Keep QSTASH_TOKEN only if other non-watchdog schedules still use QStash (analyst/market jobs)."];function zh(e){let r=e.storePath?.trim()||vr(),t=e.envFilePath?.trim()||be,n=kA.join(hA(),".kynver","config.json"),o=`/api/agent-os/by-id/${e.agentOsId}/scheduler/fire`,s=[];e.apiBaseUrl?.trim()||s.push("apiBaseUrl \u2014 run `kynver setup --api-base-url \u2026`"),e.agentOsId?.trim()||s.push("agentOsId \u2014 run `kynver setup --agent-os-id \u2026`");let i={KYNVER_API_URL:e.apiBaseUrl,KYNVER_CRON_SECRET:e.cronSecret,KYNVER_CRON_STORE_PATH:r,KYNVER_CRON_TICK_ENABLED:"1",KYNVER_CRON_DAEMON_PRESENT:"1"},a=["OPENCLAW_CRON_STORE_PATH","OPENCLAW_CRON_SECRET","OPENCLAW_CRON_FIRE_BASE_URL"],l={deploymentSchedulerProvider:"kynver-cron",apiBaseUrl:e.apiBaseUrl,agentOsId:e.agentOsId,...e.defaultDaemonRunId?{defaultDaemonRunId:e.defaultDaemonRunId}:{}};return{envFilePath:t,configPath:n,storePath:r,envUpdates:i,envRemovals:a,configUpdates:l,deploymentSteps:RA,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:yA,dedupeKey:Pr,callbackPath:o}}}Rr();async function tn(e){let r=e.envFilePath??be,t=[],n=sr(),o=await Si(n),s=Pt(r);t.push({id:"config_agent_os",ok:!!e.config.agentOsId?.trim(),summary:e.config.agentOsId?`agentOsId configured (${e.config.agentOsId})`:"agentOsId missing in ~/.kynver/config.json",remediation:"Run `kynver setup --agent-os-id <id>`."}),t.push({id:"config_api_base",ok:!!(e.config.apiBaseUrl?.trim()||n.fireBaseUrl),summary:n.fireBaseUrl?`fire base URL resolved (${n.fireBaseUrl})`:"KYNVER_API_URL / apiBaseUrl not configured",remediation:"Run `kynver setup --api-base-url https://\u2026`."}),t.push({id:"deployment_provider",ok:e.config.deploymentSchedulerProvider==="kynver-cron",summary:`deploymentSchedulerProvider=${e.config.deploymentSchedulerProvider??"(unset)"}`,remediation:'Run `kynver cron install` or set deploymentSchedulerProvider to "kynver-cron".'}),t.push({id:"cron_secret",ok:!!n.secret,summary:n.secret?"KYNVER_CRON_SECRET present":"KYNVER_CRON_SECRET missing",remediation:"Run `kynver cron install` to generate and persist the shared secret."}),t.push({id:"env_file",ok:wi(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:wi(r)?`~/.kynver/.env present (${s.size} keys)`:"~/.kynver/.env missing",remediation:"Run `kynver cron install` to write ~/.kynver/.env."}),t.push({id:"cron_store",ok:wi(n.storePath),summary:wi(n.storePath)?`cron store present (${n.storePath})`:`cron store missing (${n.storePath})`,remediation:"Run `kynver cron install` to initialize the local store."});let a=(await Br(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===Pr);t.push({id:"watchdog_local",ok:!!a,summary:a?`watchdog entry in local store (${a.providerScheduleId})`:"watchdog entry not mirrored in local cron store",remediation:"Run `kynver cron install` (with API access) to register and mirror watchdog."}),t.push({id:"daemon_primary",ok:o.daemonPrimary,summary:o.daemonPrimary?"cron tick enabled with credentials (daemon-primary)":`cron primary=${o.primary}; tickEnabled=${o.env.tickEnabled}`,remediation:"Ensure KYNVER_CRON_TICK_ENABLED=1 and run `kynver daemon` (or enable the systemd user unit)."});let l=s.has("OPENCLAW_CRON_STORE_PATH")||s.has("OPENCLAW_CRON_SECRET")||s.has("OPENCLAW_CRON_FIRE_BASE_URL");return t.push({id:"legacy_openclaw_env",ok:!l,summary:l?"legacy OPENCLAW_CRON_* keys still present in ~/.kynver/.env":"no legacy OPENCLAW_CRON_* keys in env file",remediation:"Re-run `kynver cron install` to retire legacy aliases."}),{ok:t.every(u=>u.ok),checks:t}}O();He();w();import{existsSync as ik}from"node:fs";import{createHash as bA}from"node:crypto";function Xh(e){let r=JSON.stringify({cb:e.callbackPath,cron:e.cron??null,runAt:e.runAt??null,kind:e.kind,target:e.target,dedupeKey:e.dedupeKey??null});return`kc-cron:${bA("sha1").update(r).digest("hex").slice(0,16)}`}async function ic(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function Qh(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await ic(s,t),a=await i.text(),l=null;try{l=JSON.parse(a)}catch{l=null}if(!i.ok)throw new Error(`list scheduler jobs failed (${i.status}): ${l?.error??a.slice(0,200)}`);return l?.items??[]}async function Zh(e,r,t,n,o={}){let s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/watchdog/ensure`,i={};n&&(i.cron=n),o.requireProvider&&(i.requireProvider=o.requireProvider);let a=await ic(s,t,{method:"POST",body:JSON.stringify(i)}),l=await a.text(),c=null;try{c=JSON.parse(l)}catch{c=null}if(!a.ok||!c?.job)throw new Error(`ensure watchdog failed (${a.status}): ${c?.error??l.slice(0,200)}`);return{job:c.job,route:c.route??`/api/agent-os/by-id/${r}/scheduler/fire`,dedupeKey:c.dedupeKey??Pr,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function ek(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await ic(o,n,{method:"POST",body:"{}"});if(!s.ok){let i=await s.text();throw new Error(`cancel job ${t} failed (${s.status}): ${i.slice(0,200)}`)}}function rk(e,r,t=Pr){return{kind:"watchdog",scheduleKind:"cron",cron:r,callbackPath:`/api/agent-os/by-id/${e}/scheduler/fire`,payload:{source:"agent-os.watchdog-schedule",agentOsId:e},target:{agentOsId:e},description:"Watchdog board sweep (repair loop)",dedupeKey:t}}function tk(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Pr&&r.provider==="qstash"&&r.status!=="cancelled")}function vA(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Pr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function nk(e){return vA(e)?{allowed:!0}:{allowed:!1,reason:"Cannot cancel QStash watchdog until hosted KYNVER_SCHEDULER_PROVIDER=kynver-cron is live and a kynver-cron watchdog row exists. Set Vercel env, redeploy, re-run `kynver cron install`, then `--confirm-qstash-removal`."}}Rr();Rr();import{randomBytes as SA}from"node:crypto";function wA(){return SA(32).toString("base64url")}function ok(e=be){let r=Ra();if(r)return{secret:r,generated:!1,source:"env"};let n=Pt(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:wA(),generated:!0,source:"generated"}}ts();os();T();function sk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=Z().runsDir;return ik(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Ci(e={}){let r=e.execute!==!1,t=b(),n=Qe(e.apiBaseUrl?.trim()||t.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||""),o=e.agentOsId?.trim()||t.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||"",s=ok(),i=zh({config:t,apiBaseUrl:n,agentOsId:o,cronSecret:s.secret,defaultDaemonRunId:e.runId?.trim()||t.defaultDaemonRunId,installSystemd:e.installSystemd===!0}),a=[...i.prerequisites],l={ok:!1,dryRun:!r,plan:i,secretGenerated:s.generated,configPath:q(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=es(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:q(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=sk(u,e.runId);d&&(u.defaultDaemonRunId=d),ue(u),process.env.KYNVER_API_URL=n,process.env.KYNVER_CRON_SECRET=s.secret,process.env.KYNVER_CRON_STORE_PATH=i.storePath,process.env.KYNVER_CRON_TICK_ENABLED="1";let f=await qd(i.storePath);l.storeInitialized=f.created||ik(i.storePath);let p=oe();if(p)try{let m=await Wr(o,{baseUrl:n,apiKey:p});Ur(o,m)}catch{}if(!e.skipWatchdog)if(!p)l.watchdog={error:"KYNVER_API_KEY required to register watchdog on server"},a.push("login \u2014 run `kynver login --api-key \u2026` to register watchdog remotely");else try{let m=await Zh(n,o,p,void 0,{requireProvider:"kynver-cron"}),h=rk(o,m.requestedCron,m.dedupeKey),k={providerScheduleId:Xh(h),spec:h,registeredAt:new Date().toISOString(),paused:!1};await Jd(k,i.storePath),l.watchdog={remoteJobId:m.job.id,provider:m.selectedProvider??m.job.provider,localProviderScheduleId:k.providerScheduleId};let g=await Qh(n,o,p),y=tk(g),I=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],_=[];if(y.length)if(e.confirmQstashRemoval){let E=nk(g);if(!E.allowed)a.push(E.reason);else for(let U of y)await ek(n,o,U.id,p),_.push(U.id)}else a.push(`${y.length} QStash watchdog job(s) still active \u2014 complete Vercel cutover (KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET), re-run install, then --confirm-qstash-removal`);l.qstashWatchdog={found:y.map(E=>({id:E.id,provider:E.provider,status:E.status})),removed:_,manualSteps:I}}catch(m){l.watchdog={error:m.message},a.push(`watchdog registration failed: ${m.message}`)}if(e.installSystemd){let m=sk({...t,...i.configUpdates},e.runId);if(!m)l.systemd={supported:i.systemdSupported,unitPath:null,written:!1,enabled:!1,started:!1,note:"No harness run found \u2014 run `kynver run create` first or pass --run <runId>."},a.push("harness run \u2014 create a run before installing systemd unit");else{try{L(m)}catch{a.push(`harness run ${m} not found`)}if(l.systemd=ns({envFilePath:i.envFilePath,agentOsId:o,runId:m,kynverBin:At()},r),r&&l.systemd.enabled){let h=b();ue({...h,daemonSupervisionOwner:"systemd"})}}}if(!e.skipTestFire&&a.length===0){let m=await Wt({agentOsIdFilter:o});l.testFire={fired:m.fired,errors:m.errors},m.errors>0&&a.push(`test fire reported ${m.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await tn({config:b(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var CA=["deployment_provider","cron_secret","env_file","cron_store"];function ak(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function _A(e){let r=ak(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=ak(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function xA(e){if(!_A(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await tn({config:e})).checks.filter(n=>CA.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function EA(e){let r=["Run `kynver cron install` on this box."];for(let t of e)t.remediation&&r.push(` \u2022 ${t.id}: ${t.remediation}`);return r}function ac(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function lk(e){if(ac(e.args.skipCron))return{action:"skipped"};let r=await xA(e.config);if(!r.expectsKynverCron||r.ready)return{action:"ready"};console.log(""),console.log(" Local Kynver Cron is not ready \u2014 running `kynver cron install`\u2026");let t=ac(e.args.installSystemd)||ac(e.args["install-systemd"]),n=await Ci({execute:!0,skipTestFire:!0,agentOsId:e.agentOsId,runId:e.runId,installSystemd:t});if(n.ok)return console.log(" Kynver Cron configured for this box."),console.log(""),{action:"installed",installOk:!0};console.log(""),console.log(" Cron install did not fully complete (daemon will still start):");for(let o of n.blockers)console.log(` ! ${o}`);if(n.plan.deploymentSteps.length){console.log(""),console.log(" Hosted deployment (complete on Vercel, then re-run install):");for(let o of n.plan.deploymentSteps)console.log(` - ${o}`)}for(let o of EA(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}O();Ee();fn();function ck(e=b(),r=process.env){let t=xe(r,e),n=[...t.warnings],o=e.maxConcurrentWorkers,s=!1,i={...e};if(e.boxKind?.trim()||(i.boxKind=t.boxKind,s=!0,n.push(`persisted boxKind=${t.boxKind} to ~/.kynver/config.json \u2014 set explicitly via kynver setup --box-kind`)),ft(t.boxKind,o??0))o=4,i.maxConcurrentWorkers=4,i.maxConcurrentWorkersSource="setup-auto",s=!0,n.push(`clamped Forge maxConcurrentWorkers to ${4} (was ${e.maxConcurrentWorkers}; workspace aggregate caps are Ghost-only)`);else if(o!=null){let a=rr(t.boxKind,o);a!==o&&(o=a,i.maxConcurrentWorkers=a,s=!0,n.push(`clamped maxConcurrentWorkers to ${a} for ${t.boxKind} pool`))}return s&&ue(i),{repaired:s,boxKind:t.boxKind,maxConcurrentWorkers:o??4,warnings:n}}os();ts();O();Rr();Tn();ss();Dn();T();async function uk(e){let r=is(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&Nn(t.hostKind)))return{action:"keeper",owner:"keeper"};try{L(e.runId)}catch{return{action:"systemd_skipped",owner:"keeper",blockers:[`harness run ${e.runId} not found \u2014 cannot install systemd unit`]}}let o=ns({envFilePath:be,agentOsId:e.agentOsId,runId:e.runId,kynverBin:At()},!0),s=[];if(!o.supported)return s.push(o.note??"systemd user units not supported on this host"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};if(!o.enabled)return s.push(o.note??"systemd unit write/enable failed"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};let i=b();return ue({...i,daemonSupervisionOwner:"systemd"}),console.log(""),console.log(" Daemon supervision: systemd user unit enabled (`kynver daemon` with Restart=always)."),o.unitPath&&console.log(` unit: ${o.unitPath}`),console.log(""),{action:"systemd_installed",owner:"systemd",systemd:o}}function dk(e){return e.action==="systemd_installed"}function pk(e="kynver-cron-daemon"){return["Daemon delegated to systemd user unit.","The unit runs `kynver daemon` with systemd Restart=always.",`Status: systemctl --user status ${e}`,`Stop: systemctl --user stop ${e}`]}function AA(e,r){return e.filter(n=>n.repo===r&&!ar.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function mk(e){Ut();let r=b();(!oe()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await fs(e),r=b());let t=(typeof e.agentOsId=="string"?e.agentOsId.trim():"")||r.agentOsId?.trim()||"";t||(console.error("No AgentOS workspace configured \u2014 run `kynver bootstrap` (or pass --agent-os-id)."),process.exit(1)),Un(t).ok||(console.error(us(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(ue({...r,chatUseClaudeOauth:!0}),r=b(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let o=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||$e()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=ck(r);if(s.repaired){r=b();for(let c of s.warnings)console.log(` ${c}`)}let i=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";i||(i=AA(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=vi({...e,repo:o,name:"agent"}).runId),await lk({config:r,agentOsId:t,runId:i,args:e});let a=await uk({config:b(),agentOsId:t,runId:i,args:e});if(dk(a)){console.log("");for(let c of pk())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${PA.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${o}`),console.log(` run: ${i}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let l={...e,run:i,agentOsId:t};if(Ri(l)){await bi(l,IA(i,t,e));return}await yi(l)}function IA(e,r,t){if(!Un(r).ok)throw new Error(us(r));let o=["daemon","--run",e,"--agent-os-id",r];return typeof t.intervalMs=="string"&&t.intervalMs.trim()&&o.push("--interval-ms",t.intervalMs.trim()),(t.execute===!1||t.execute==="false")&&o.push("--execute","false"),typeof t.stallMs=="string"&&t.stallMs.trim()&&o.push("--stall-ms",t.stallMs.trim()),o}T();T();X();import{existsSync as OA,rmSync as NA}from"node:fs";import lc from"node:path";function TA(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function DA(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function MA(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=[...DA(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=lc.resolve(n.worktreePath),i=[];for(let c of o){let u=TA(c),d=lc.resolve(s,u);if(!d.startsWith(s+lc.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!OA(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};NA(d,{recursive:!0,force:!0}),i.push(u)}let a=Array.isArray(n.disposableArtifactsRemoved)?n.disposableArtifactsRemoved.filter(c=>typeof c=="string"):[];n.disposableArtifactsRemoved=[...new Set([...a,...i])],K(n.runId,n);let l=M(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function fk(e){let r=MA(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import aI from"node:path";Pn();Fo();Pn();var UA=/--max-old-space-size=(\d+)/;function WA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function cc(){return WA(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function uc(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(UA.test(t))return r;let o=`--max-old-space-size=${cc()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function nn(e=cc()){return`--max-old-space-size=${e}`}rs();O();Pn();Fo();import{spawnSync as LA}from"node:child_process";function xi(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function hk(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?xi(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?xi(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??xi(e.perWorkerMemBytes,1610612736),reserveBytes:t??xi(e.memReserveBytes,2147483648)}}var Ei=0;function mc(){Ei+=1}function fc(){Ei=Math.max(0,Ei-1)}function on(e={}){let r={...hk(),...e},t=e.memAvailableBytes??gn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Ei,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function BA(e){e<=0||LA(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function gc(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=on({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)BA(Math.min(r,n-Date.now())),o=on({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as sI}from"node:child_process";w();import{closeSync as $A,existsSync as hc,mkdirSync as jA,openSync as VA,readdirSync as yk,readFileSync as GA,unlinkSync as yc,writeFileSync as YA}from"node:fs";import Rc from"node:path";import{mkdirSync as HA}from"node:fs";import{tmpdir as FA}from"node:os";import Pi from"node:path";function KA(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function kk(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?Pi.resolve(e):KA()?Pi.join(FA(),"kynver","state","heavy-verification"):Pi.join(Js(),"heavy-verification")}function vo(){return Pi.join(kk(),"slots")}function sn(){let e=vo();return HA(e,{recursive:!0}),e}var an=120*6e4,kc=1;function JA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function wo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function So(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?JA(e,kc):kc}function qA(e){return`slot-${e}`}function Rk(e,r=vo()){return Rc.join(r,`${e}.json`)}function bc(e){if(!hc(e))return null;try{let r=JSON.parse(GA(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 Ai(e,r=an){if(!e||!H(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function zA(e,r){let t=bc(e);if(Ai(t,r))try{yc(e)}catch{}}function XA(e){return jA(e,{recursive:!0}),e}function Oi(e={}){let r=XA(e.slotsDir??sn()),t=e.staleMs??an,n=0;for(let o of yk(r)){if(!o.endsWith(".json"))continue;let s=Rc.join(r,o),i=hc(s);zA(s,t),i&&!hc(s)&&(n+=1)}return n}function bk(e={}){let r=e.slotsDir??sn(),t=e.staleMs??an;Oi({slotsDir:r,staleMs:t});let n=[];for(let o of yk(r)){if(!o.endsWith(".json"))continue;let s=bc(Rc.join(r,o));s&&!Ai(s,t)&&n.push(s)}return n}function Ii(e={}){return bk(e).length}function ln(e,r={}){if(wo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:So(),reason:null};let t=r.slotsDir??sn(),n=r.staleMs??an,o=r.maxSlots??So();Oi({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=qA(i),l=Rk(a,t),c=bc(l);if(c&&Ai(c,n))try{yc(l)}catch{}else if(c&&!Ai(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=VA(l,"wx");YA(d,JSON.stringify(u,null,2),"utf8"),$A(d);let f=Ii({slotsDir:t,staleMs:n});return{admitted:!0,slotId:a,activeSlots:f,maxSlots:o,reason:null}}catch(d){if(d.code==="EEXIST")continue;throw d}}let s=Ii({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function Co(e,r={}){if(!e)return;let t=Rk(e,r.slotsDir??vo());try{yc(t)}catch{}}function _o(e,r={}){if(wo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:So(),reason:null};let t=r.slotsDir??sn(),n=r.staleMs??an,o=r.maxSlots??So();Oi({slotsDir:t,staleMs:n});let s=Ii({slotsDir:t,staleMs:n}),i=s<o;return{admitted:i,slotId:null,activeSlots:s,maxSlots:o,reason:i?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}import{spawnSync as QA}from"node:child_process";function ZA(e){e<=0||QA(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function vc(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=ln(e,n);for(;!s.admitted&&Date.now()<o;)ZA(Math.min(t,o-Date.now())),s=ln(e,n);return s}var eI=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,rI=/\b(npm run build\b|next build\b)\b/i,tI=/\b(vercel (build|deploy|--prod))\b/i,nI=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function Sc(e){let r=e.trim();return r?nI.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:tI.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:rI.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:eI.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var Ni="heavy_verification_token_required";function wc(e,r={}){let t=Sc(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{..._o(e),slotId:null}};if(wo())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{..._o(e),slotId:null}};let n=r.waitMs??0,o=n>0?vc(e,n,r.pollMs):ln(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Ni,commandClass:t.commandClass,reason:t.reason??o.reason??Ni,verificationGate:o}}_e();import Cc from"node:path";function oI(e){let r=kr(Re()),t=Cc.relative(r,Cc.resolve(e));return t.length>0&&!t.startsWith("..")&&!Cc.isAbsolute(t)}function vk(e){return oI(e)?(typeof process.getuid=="function"?process.getuid():null)===0?{ok:!1,reason:"Refusing build/install as root inside a harness worktree \u2014 generated caches become root-owned and block daemon cleanup. Run kynver daemon and workers as the harness owner (never sudo kynver)."}:{ok:!0}:{ok:!0}}rs();function iI(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Sk(e,r){let t=sI(e[0],e.slice(1),{cwd:r.cwd,env:r.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:r.shell,timeout:r.timeoutMs});return{exitCode:t.status??1,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}function _c(e){let r=e.waitForAdmissionMs??6e5,t=wc(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:nn(),admission:on(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?gc(r):on();if(!s.admitted)return Co(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:nn(),admission:s,verificationGate:n,command:e.command};let i=vk(e.cwd);if(!i.ok)return Co(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:nn(),admission:s,verificationGate:n,command:e.command};let a=uc({...process.env,...e.env}),l=nn(),c=In();mc();try{let u;if(c){let d=aa({cwd:e.cwd,command:["/usr/bin/env",...iI(a),"/bin/bash","-lc",e.command]});u=Sk(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=Sk([e.command],{cwd:e.cwd,env:a,shell:!0,timeoutMs:e.timeoutMs});return{ok:u.exitCode===0,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,admitted:!0,wrappedWithSystemd:c,nodeOptionsFlag:l,admission:s,verificationGate:n,gateOutcome:t.outcome,command:e.command}}finally{fc(),Co(o)}}var xc=["npm run typecheck","npm run test"];function Ti(e,r=xc,t={}){let n=[],o=!0;for(let s of r){let i=_c({cwd:e,command:s,waitForAdmissionMs:t.waitForAdmissionMs,timeoutMs:t.timeoutMs});n.push({command:s,result:i}),i.ok||(o=!1)}return{passed:o,steps:n}}w();function wk(e){let r=e.indexOf(":");if(r<=0)throw new Error(`invalid --evidence ${e} (expected type:value)`);return{type:e.slice(0,r),value:e.slice(r+1)}}async function Ck(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let I of i)s.push(wk(String(I)));else typeof i=="string"&&s.push(wk(i));let a=V(e.baseUrl?String(e.baseUrl):void 0),l=await J(e.secret?String(e.secret):void 0,t,{baseUrl:a}),c=`${a}/api/agent-os/by-id/${encodeURIComponent(t)}/plans/${encodeURIComponent(r)}/progress-events`,u=b(),f=`provider:${Ss(u.workerProvider,ir)}`,m=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),h={rowKey:e.row?String(e.row):void 0,rowId:e.rowId?String(e.rowId):void 0,taskId:e.task?String(e.task):void 0,reviewTaskId:e.reviewTask?String(e.reviewTask):void 0,roleLane:n,status:o,note:e.note?String(e.note):void 0,remainingWork:e.remaining?String(e.remaining):void 0,evidence:s.length?s:void 0,executorRef:e.executorRef?String(e.executorRef):f};m!==void 0&&(h.proposed=m);let k=await fetch(c,{method:"POST",headers:De(l),body:JSON.stringify(h)}),g=await k.text(),y=null;try{y=JSON.parse(g)}catch{y=g}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:y},null,2)),process.exit(1)),console.log(JSON.stringify(y,null,2))}function lI(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=aI.resolve(r),n=Ti(t),o=e.json===!0||e.json==="true",s={passed:n.passed,worktree:t,steps:n.steps};console.log(o?JSON.stringify(s,null,2):n.passed?"local plan verify passed":"local plan verify failed"),n.passed||process.exit(1)}async function _k(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){lI(e);return}let n=b().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=V(e.baseUrl?String(e.baseUrl):void 0),s=process.env.KYNVER_API_KEY,i={"Content-Type":"application/json"};s&&(i.Authorization=`Bearer ${s}`);let a=`${o}/api/agent-os/${encodeURIComponent(n)}/plans/${encodeURIComponent(r)}/verify`,l=await fetch(a,{method:"POST",headers:i,body:JSON.stringify({worktreePath:e.worktree?String(e.worktree):void 0,taskId:e.task?String(e.task):void 0,humanOverride:e.humanOverride===!0||e.humanOverride==="true"})}),c=await l.text(),u=null;try{u=JSON.parse(c)}catch{u=c}l.ok||(console.error(JSON.stringify({httpStatus:l.status,response:u},null,2)),process.exit(1)),console.log(JSON.stringify(u,null,2))}import cI from"node:path";w();function xk(e){let r=cI.resolve(N(e.worktree?String(e.worktree):void 0,"worktree")),t=e.json===!0||e.json==="true"||e.emitJson===!0||e.emitJson==="true",n=[],o=e.command;if(Array.isArray(o))for(let a of o)n.push(String(a));else typeof o=="string"&&n.push(o);let s=Ti(r,n.length?n:xc,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
|
|
50
|
+
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as uI}from"node:fs";w();var dI=["create","add_version","update_metadata"],pI=["approval_guard","auth","network","server","tool_interruption"];function mI(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:uI(r,"utf8"),bodyPathHint:r};let t=e.body?String(e.body):void 0;if(t)return{body:t};throw new Error("requires --body-file PATH or --body TEXT")}async function Ek(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!dI.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=b(),o=N(e.slug?String(e.slug):n.agentOsSlug,"slug (or agentOsSlug in ~/.kynver/config.json)"),s=N(e.title?String(e.title):void 0,"title"),{body:i,bodyPathHint:a}=mI(e);a&&so(a)&&console.warn(JSON.stringify({warning:"/tmp-only body path is not durable; AgentOS persistence requires outbox or successful API write",bodyPathHint:a}));let l={operation:t,agentOsSlug:o,title:s,body:i,bodyPathHint:a,summary:e.summary?String(e.summary):void 0,planId:e.plan?String(e.plan):void 0,planSlug:e.planSlug?String(e.planSlug):void 0,changeSummary:e.changeSummary?String(e.changeSummary):void 0,author:e.author?String(e.author):void 0,model:e.model?String(e.model):void 0,maxRetries:e.maxRetries?Number(e.maxRetries):void 0,immediateFailure:fI(e)},c=await ao(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function fI(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!pI.includes(r))throw new Error(`invalid --failure-kind ${r}`);let t=e.failureMessage?String(e.failureMessage):`immediate failure (${r})`;return{kind:r,message:t}}async function Pk(){let e=Jt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Ak(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await fl({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function Ik(e){let r=e.execute===!0||e.execute==="true",t=e.skipFinalize===!0||e.skipFinalize==="true",n=e.accountBytes===!0||e.accountBytes==="true",o=e.compact===!0||e.compact==="true",s=e.nodeModulesAgeMs,i=s!=null&&s!=="",a=i?Number(s):void 0,l=e.worktreesAgeMs?Number(e.worktreesAgeMs):0,c=e.includeOrphans===!0||e.includeOrphans==="true",u=e.harnessRoot?String(e.harnessRoot):void 0,d=Jl({execute:r,finalizeStaleRuns:!t,accountBytes:n,scanDependencyCaches:i,nodeModulesAgeMs:a!==void 0&&Number.isFinite(a)?a:i?216e5:void 0,worktreesAgeMs:Number.isFinite(l)?l:0,includeOrphans:c,harnessRoot:u});o&&d.compactSummary?console.log(JSON.stringify(d.compactSummary,null,2)):console.log(JSON.stringify(d,null,2)),r&&d.totals.removedPaths===0&&d.actions.length===0&&(process.exitCode=0)}hn();function Ok(e){let r=e.execute===!0||e.execute==="true",t=e.json===!0||e.json==="true",n=e["purge-all"]===!0||e["purge-all"]==="true",o=e["keep-newest"]?Number(e["keep-newest"]):void 0;if(r||n){let a=li({execute:r,purgeAll:n,keepNewest:o}),l={...a,observation:a.observation?{...a.observation,dumps:a.observation.dumps.map(c=>({name:c.name,bytes:c.bytes,executableHint:c.executableHint,mtimeMs:c.mtimeMs}))}:null};console.log(JSON.stringify(l,null,t?2:0));return}let s=gr(),i=s?{...s,dumps:s.dumps.map(a=>({name:a.name,bytes:a.bytes,executableHint:a.executableHint,mtimeMs:a.mtimeMs}))}:{skipped:!0,reason:"not_wsl"};console.log(JSON.stringify(i,null,t?2:0))}function Ar(e,r=2400){if(e==null)return;let n=(typeof e=="string"?e:JSON.stringify(e,null,2)).trim();if(n)return n.length<=r?n:`${n.slice(0,r-1).trimEnd()}\u2026`}function Di(e){let r=[],t=typeof e.monitorId=="string"?e.monitorId:void 0;if(r.push(t?`Harness monitor tick \xB7 ${e.runId} (${t})`:`Harness monitor tick \xB7 ${e.runId}`),!e.workers.length)return r.push("No workers in scope for this poll."),{primary:r.join(`
|
|
51
|
+
`),diagnostic:Ar(e)};for(let i of e.workers){let a=i.autoComplete.eligible?"eligible for auto-complete":"not auto-completing",l=i.autoComplete.blockers.length>0?` (${i.autoComplete.blockers.slice(0,2).join("; ")})`:"";r.push(`\u2022 ${i.worker}: ${i.workerStatus}, ${i.health}${i.healthReason?` \u2014 ${i.healthReason}`:""}; ${a}${l}`),i.taskStatus&&r.push(` Board task: ${i.taskStatus}${i.leaseOwner?` (lease: ${i.leaseOwner})`:""}`)}let n=e.autoCompleted?.filter(i=>i.outcome==="completed"&&i.ok)??[],o=e.autoCompleted?.filter(i=>!i.ok&&i.outcome!=="skipped")??[];n.length&&r.push(`Auto-completed: ${n.map(i=>i.worker).join(", ")} \u2014 AgentOS completion should be posted.`),o.length&&r.push(`Auto-complete blocked: ${o.map(i=>`${i.worker}${i.reason?` (${i.reason})`:""}`).join("; ")}`),e.leaseRenewal?.failed?.length&&r.push(`Lease renew failed for: ${e.leaseRenewal.failed.map(i=>i.worker).join(", ")}`);let s=e.workers.length>0&&e.workers.every(i=>i.autoComplete.terminalVerified)&&(e.autoCompleted?.every(i=>i.ok||i.outcome==="skipped")??!0);return r.push(s?"Next: monitor loop should stop \u2014 all workers terminal and handled.":"Next: monitor will poll again until workers are terminal-verified or max time elapses."),{primary:r.join(`
|
|
52
|
+
`),diagnostic:Ar(e)}}import SI from"node:path";T();X();w();X();w();function Nk(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Fa(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=n.leaseToken?.trim()??"";if(n.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>Ct?{health:"stale",reason:`heartbeat older than ${Math.floor(Ct/1e3)}s`}:t.alive&&r.pid&&!H(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}_e();w();import{existsSync as Tk,mkdirSync as RI,readdirSync as bI,unlinkSync as vI}from"node:fs";import Ec from"node:path";function Dk(){let{harnessRoot:e}=ht(),r=Ec.join(e,"monitors");return RI(r,{recursive:!0}),r}function cn(e,r){return r?`${v(e)}--${v(r)}`:v(e)}function Pc(e){return Ec.join(Dk(),`${e}.json`)}function un(e){return C(Pc(e),void 0)}function dn(e){se(Pc(e.monitorId),e)}function Mk(e){let r=Pc(e);return Tk(r)?(vI(r),!0):!1}function Uk(){let e=Dk();if(!Tk(e))return[];let r=[];for(let t of bI(e)){if(!t.endsWith(".json"))continue;let n=C(Ec.join(e,t),void 0);n?.monitorId&&r.push({monitorId:n.monitorId,runId:n.runId,workerName:n.workerName,agentOsId:n.agentOsId,pid:n.pid,alive:n.pid?H(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}X();function Ac(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),Ds(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),_t(t)&&n.push(t.attention.reason||"landing gate blocked");let o=ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}function Wk(e,r){return C(SI.join(x(e),"workers",v(r),"worker.json"),void 0)}function Lk(e,r){let t=L(e),n=Object.keys(t.workers||{});if(!r)return n;let o=v(r);return n.filter(s=>v(s)===o)}function Bk(e,r){let t=L(e.runId),n=M(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=Nk({worker:e,status:n,taskLease:o}),i=Ac({worker:e,status:n});return{runId:e.runId,worker:e.name,health:s.health,healthReason:s.reason,workerStatus:n.status,attentionState:n.attention.state,attentionReason:n.attention.reason,alive:n.alive,taskId:e.taskId,leaseOwner:o?.leaseOwner??void 0,taskStatus:o?.status,autoComplete:i,status:n}}async function xo(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=L(r),s=Lk(r,t),i=[];for(let m of s){let h=Wk(r,m);h&&i.push(h)}let a=n||i.map(m=>m.agentOsId).find(m=>typeof m=="string"&&m.trim())||void 0,l=i.map(m=>m.taskId).filter(m=>!!m),c=await $t({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(m=>Bk(m,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Is(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let m of u){if(!m.autoComplete.eligible){f.push({worker:m.worker,outcome:"skipped",ok:!1,reason:m.autoComplete.blockers.join("; ")||"not eligible"});continue}let h=await jt({run:r,name:m.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:m.worker,outcome:h.outcome,ok:h.outcome==="completed",reason:h.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function Hk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Lk(r,t),o=[];for(let s of n){let i=Wk(r,s);i&&o.push(Bk(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Ic(){return Uk()}function Fk(e){let r=String(e.run||"");N(r,"--run");let t=cn(r,e.name?String(e.name):void 0),n=un(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&H(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),dn(n),Mk(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Oc(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=me(r,t),o=L(r),s=M(n,{base:o.base,baseCommit:o.baseCommit}),i=Ac({worker:n,status:s});if(!i.eligible){console.log(JSON.stringify({runId:r,worker:t,outcome:"blocked",blockers:i.blockers,terminalVerified:i.terminalVerified},null,2)),process.exitCode=1;return}let a=await jt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var wI=5e3,CI=360*60*1e3;async function Kk(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):wI,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):CI,o=Date.now();for(;Date.now()-o<=n;){let s=r?un(r):void 0;if(s?.stoppedAt)break;let i=await xo({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Di({monitorId:r,phase:"tick",...i});if(console.log(a.primary),a.diagnostic&&console.error(`[monitor diagnostic] ${a.diagnostic}`),i.workers.length>0&&i.workers.every(c=>c.autoComplete.terminalVerified&&(c.autoComplete.eligible||c.autoComplete.blockers.some(u=>u.includes("already acknowledged"))))&&i.autoCompleted.every(c=>c.ok||c.outcome==="skipped")){r&&s&&(s.stoppedAt=new Date().toISOString(),dn(s));break}Or(t)}}w();_e();import{spawn as _I}from"node:child_process";import{closeSync as $k,existsSync as xI,openSync as EI}from"node:fs";import PI from"node:path";function jk(e){let r=e.nodeExecutable??process.execPath,t=$s({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!xI(n))return;let o=cn(e.runId,e.workerName),{harnessRoot:s}=ht(),i=PI.join(s,"monitors",`${o}.log`),a;try{a=EI(i,"a")}catch{a=void 0}let l=e.pollMs??5e3,c=[...t.argsPrefix,"monitor","run-loop","--run",e.runId,"--monitor-id",o,"--poll-ms",String(l),"--auto-complete","true","--renew-leases","true"];e.workerName&&c.push("--name",e.workerName),e.agentOsId&&c.push("--agent-os-id",e.agentOsId),e.baseUrl&&c.push("--base-url",e.baseUrl),e.secret&&c.push("--secret",e.secret);let u=["ignore",a??"ignore",a??"ignore"];try{let d=_I(t.command,c,de({detached:!0,stdio:u,env:process.env}));a!==void 0&&$k(a),d.unref();let f={monitorId:o,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:d.pid,startedAt:new Date().toISOString(),pollMs:l,logPath:i};return dn(f),{monitorId:o,pid:d.pid,logPath:i,session:f}}catch{if(a!==void 0)try{$k(a)}catch{}return}}w();async function Vk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=cn(r,t),o=un(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=jk({runId:r,workerName:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0});if(!s)throw new Error("failed to spawn monitor sidecar (cli.js missing or spawn error)");return{monitorId:n,session:s.session,spawned:!0,pid:s.pid}}async function Gk(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await xo({...e,autoComplete:!1}):Hk(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Ic()},null,2))}function Yk(e){console.log(JSON.stringify(Fk(e),null,2))}function Jk(){console.log(JSON.stringify({monitors:Ic()},null,2))}async function qk(e){await Kk(e)}async function zk(e){let r=await xo(e);console.log(JSON.stringify(r,null,2))}import{existsSync as AI,readFileSync as II}from"node:fs";import{dirname as Nc,join as Qk}from"node:path";import{fileURLToPath as Xk}from"node:url";function OI(e){let r=Nc(Xk(e));for(let t=0;t<6;t+=1){if(AI(Qk(r,"package.json")))return r;let n=Nc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Nc(Xk(e))}`)}function Zk(e=import.meta.url){let r=Qk(OI(e),"package.json"),t=JSON.parse(II(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Mi=Zk();function NI(e){return e.some(r=>r==="--version"||r==="-v")}function TI(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function ey(e,r=import.meta.url,t){return NI(e)?(TI(Zk(r),t),!0):!1}function DI(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 MI(e={}){let[r,t]=await Promise.all([gi(),Promise.resolve(mh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Mi;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:DI(r),repo:t,self:n}}async function ry(e={}){let r=await MI(e);return gh(r)}function ty(e,r){return e?e==="daemon"||e==="start"||e==="worker"||e==="monitor"||e==="run"&&(r==="dispatch"||r==="sweep"||r==="reconcile"||r==="unblock")||e==="cron"&&r==="tick":!1}w();function UI(e){let r=e.trim();return r?bo().find(n=>n.name===r&&n.status!=="completed")??null:null}function ny(e){let r=String(N(String(e.name||""),"--name")),t=UI(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}T();X();w();O();import WI from"node:path";function Eo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function LI(e){let r=V(e.baseUrl?String(e.baseUrl):void 0),t=e.agentOsId?String(e.agentOsId).trim():null,n=e.dryRun===!0||e.dryRun==="true",o=[],s=[],i=[];for(let a of z())for(let l of Object.keys(a.workers??{})){let c=WI.join(x(a.id),"workers",v(l),"worker.json"),u=C(c,void 0);if(!u){s.push(Eo(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",f=u.agentOsId??"",p=u.leaseOwner??"";if(!u.dispatched||!d||!f||!p){s.push(Eo(a.id,l,d,f,p,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Eo(a.id,l,d,f,p,"completion already reported"));continue}let m=M(u);if(m.finalResult){s.push(Eo(a.id,l,d,f,p,"has final result \u2014 let pipeline tick complete it"));continue}if(m.alive){s.push(Eo(a.id,l,d,f,p,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let h=await J(e.secret?String(e.secret):void 0,f,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(f)}/tasks/${encodeURIComponent(d)}/release`,g=await re(k,h,{agentOsId:f,leaseOwner:p},{agentOsId:f,baseUrl:r});g.ok===!0||g.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"skipped",reason:`release returned ok:false (likely owner mismatch or already released): HTTP ${g.status}`})}catch(h){i.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:p,action:"error",reason:h.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function oy(e){let r=await LI(e),t={ok:r.errors.length===0,dryRun:r.dryRun,released:r.released.length,skipped:r.skipped.length,errors:r.errors.length,details:r};console.log(JSON.stringify(t,null,2)),r.errors.length>0&&process.exit(1)}import my from"node:path";He();O();import{accessSync as BI,constants as HI,existsSync as Tc,readFileSync as FI}from"node:fs";import{homedir as Ui}from"node:os";import Wi from"node:path";import{spawnSync as KI}from"node:child_process";_e();function sy(e,r){try{let t=KI(e,r,{encoding:"utf8"}),n=(t.stdout||"").trim(),o=(t.stderr||"").trim();return{ok:t.status===0,stdout:n,stderr:o,error:t.error?.message}}catch(t){return{ok:!1,stdout:"",stderr:"",error:t.message}}}function iy(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function $I(e){if(!Tc(e))return!1;try{return BI(e,HI.W_OK),!0}catch{return!1}}var ay={packageVersion:()=>Mi,commandOnPath:e=>sy(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>sy(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Wi.join(Ui(),".kynver","config.json"),credentialsFilePath:()=>Wi.join(Ui(),".kynver","credentials"),readCredentials:()=>{let e=Wi.join(Ui(),".kynver","credentials");if(!Tc(e))return{hasApiKey:!1};try{let r=JSON.parse(FI(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:iy(r.runnerToken),runnerTokenAgentOsId:r.runnerTokenAgentOsId}}catch{return{hasApiKey:!1}}},envSnapshot:()=>({kynverApiUrl:process.env.KYNVER_API_URL?.trim()||void 0,openclawCronFireBaseUrl:process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||void 0,kynverRunnerTokenPrefix:iy(process.env.KYNVER_RUNNER_TOKEN),kynverRuntimeSecret:!!process.env.KYNVER_RUNTIME_SECRET?.trim(),openclawCronSecret:!!process.env.OPENCLAW_CRON_SECRET?.trim(),kynverHarnessRoot:process.env.KYNVER_HARNESS_ROOT?.trim()||void 0,opusHarnessRoot:process.env.OPUS_HARNESS_ROOT?.trim()||void 0,kynverSchedulerProvider:process.env.KYNVER_SCHEDULER_PROVIDER?.trim()||void 0,openclawCronStorePath:!!(process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim()),kynverCronDaemonPrimary:gs(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>Re(),legacyOpenclawHarnessRoot:()=>Wi.join(Ui(),".openclaw","harness"),pathExists:e=>Tc(e),pathWritable:e=>$I(e)};function ly(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function jI(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function cy(e){return!!e.openclawCronStorePath}function VI(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function uy(e,r){let t={schedulerProvider:e.kynverSchedulerProvider??null,deploymentSchedulerProvider:r.deploymentSchedulerProvider??null,openclawCronStorePath:!!e.openclawCronStorePath,kynverCronDaemonPrimary:!!e.kynverCronDaemonPrimary},n=!!r.agentOsId?.trim()&&!!r.apiBaseUrl?.trim()&&r.hasScopedRunnerToken;if(VI(e,r)&&!ly(e,r)){let u=e.kynverSchedulerProvider==="qstash"?"KYNVER_SCHEDULER_PROVIDER=qstash on this host":"deploymentSchedulerProvider=qstash in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler cut over to QStash (${u})`,details:t}}if(jI(e,r)&&!ly(e,r)){if(cy(e)&&e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=e.kynverSchedulerProvider==="kynver-cron"?"KYNVER_SCHEDULER_PROVIDER=kynver-cron on this host":"deploymentSchedulerProvider=kynver-cron in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler owned by Kynver Cron (${u})`,details:t}}if(cy(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}Rr();Tn();Dn();ss();function dy(e,r={}){let t=It(),n=as(e,t),o=[],s=r.envFilePath??be,a=Pt(s).get("KYNVER_CRON_DAEMON_PRESENT")==="1";if(o.push({id:"daemon_supervision_owner",ok:!!e.daemonSupervisionOwner,summary:e.daemonSupervisionOwner?`daemonSupervisionOwner=${e.daemonSupervisionOwner} (${t})`:"daemonSupervisionOwner unset \u2014 run `kynver setup` to persist Kynver-owned restart policy",remediation:e.daemonSupervisionOwner?void 0:"Run `kynver setup` (or `kynver bootstrap`) on this box."}),o.push({id:"daemon_present_signal",ok:a,summary:a?`KYNVER_CRON_DAEMON_PRESENT=1 (persisted in ${s})`:`KYNVER_CRON_DAEMON_PRESENT not set in persisted env (${s})`,remediation:a?void 0:"Run `kynver setup` or `kynver start` once to write ~/.kynver/.env supervision keys."}),n==="systemd"){let c=ua();o.push({id:"systemd_user_unit",ok:c,summary:c?"systemd user unit present (~/.config/systemd/user/kynver-cron-daemon.service)":"daemonSupervisionOwner=systemd but user unit missing",remediation:c?void 0:"Run `kynver start --install-systemd` or `kynver cron install --install-systemd`."})}let l=la(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Tn();Dn();function py(e){let r=e.loadConfig(),t=It(),n=as(r,t),s=dy(r).map(i=>({id:i.id,label:i.id.replace(/_/g," "),status:i.ok?"pass":i.id==="daemon_supervision_owner"||i.id==="daemon_present_signal"?"warn":"fail",summary:i.summary,remediation:i.remediation}));return s.push({id:"daemon_keeper_default",label:"Kynver keeper owns in-process restarts",status:n==="keeper"||n==="systemd"?"pass":"warn",summary:n==="systemd"?"systemd persists the keeper parent \u2014 Hermes/OpenClaw cron is not required to restart the daemon":"`kynver start` / `kynver daemon` run the keeper by default (opt out with --no-supervise only when an external supervisor owns restarts)",details:{owner:n,hostKind:t}}),{id:"daemon_supervision",label:"Daemon restart supervision",checks:s}}function GI(e){let r={pass:0,warn:0,fail:0};for(let t of e)for(let n of t.checks)r[n.status]+=1;return r}function YI(e){let r=e.packageVersion(),t=e.commandOnPath("kynver"),n=t.ok&&t.stdout.length>0,o=n?t.stdout.split(/\r?\n/)[0]?.trim():void 0,s=o?q(o):void 0,i=[{id:"cli_running_version",label:"Running @kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${r}`,details:{version:r}},{id:"cli_on_path",label:"kynver executable on PATH",status:n?"pass":"warn",summary:n?`Found ${s}`:"kynver not found on PATH (invoked via node/npx?)",remediation:n?void 0:"Install globally (`npm i -g @kynver-app/runtime`) or invoke via `npx @kynver-app/runtime`.",details:{path:s}}];if(n&&o){let a=e.kynverVersion(o),l=a.stdout.replace(/^kynver\s+/i,"").trim()||void 0,c=a.ok&&(!l||l===r);i.push({id:"cli_installed_version",label:"Installed kynver CLI version matches running package",status:c?"pass":"warn",summary:a.ok&&l?c?`Installed ${l}`:`Installed ${l} differs from running ${r}`:a.error?`Could not read installed version (${a.error})`:a.stderr||"Could not read installed version",remediation:c?void 0:"Reinstall or rebuild @kynver-app/runtime so PATH kynver matches the harness worktree version.",details:{installedVersion:l,runningVersion:r,path:s}})}return{id:"cli_package",label:"CLI / package",checks:i}}function JI(e){let r=e.configFilePath(),t=q(r),n=e.pathExists(r),o=e.loadConfig(),s=[{id:"config_file",label:"~/.kynver/config.json present",status:n?"pass":"fail",summary:n?`Found ${t}`:`Missing ${t}`,remediation:n?void 0:"Run `kynver setup --api-base-url <url> --agent-os-id <id> --repo <path>`.",details:{configPath:t}}];if(n){let i=o.apiBaseUrl?.trim(),a=o.agentOsId?.trim(),l=$e({config:o}),c=l?Bn(l):null,u=yd(l);s.push({id:"config_api_base_url",label:"Default API base URL",status:i?"pass":"warn",summary:i??"Not set in config (KYNVER_API_URL / --base-url required per command)",remediation:i?void 0:"Set `apiBaseUrl` via `kynver setup --api-base-url https://\u2026`.",details:{apiBaseUrl:i??null}},{id:"config_agent_os_id",label:"Default AgentOS id",status:a?"pass":"warn",summary:a??"Not set (pass --agent-os-id on daemon/dispatch/worker commands)",remediation:a?void 0:"Set `agentOsId` via `kynver setup --agent-os-id <uuid>`.",details:{agentOsId:a??null,agentOsSlug:o.agentOsSlug??null}},{id:"config_default_repo",label:"Default repo path",status:u.status,summary:l?l.persistedInConfig?`${c.defaultRepo} (config)`:`${c.defaultRepo} (${l.source}, not persisted in ~/.kynver/config.json)`:"Not set in ~/.kynver/config.json (`kynver run create` requires --repo)",remediation:u.remediation,details:{defaultRepo:c?.defaultRepo??null,source:c?.source??null,persistedInConfig:c?.persistedInConfig??!1,harnessRoot:o.harnessRoot?ye(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function qI(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=q(s),a=o.kynverRunnerTokenPrefix,l=n.runnerTokenPrefix,c=n.runnerTokenAgentOsId,u=!!l&&(!t||!c||c===t),d=!!a?.startsWith("krc1.")||u&&l?.startsWith("krc1.");return{id:"runner_token",label:"Runner token readiness",checks:[{id:"runner_token_scoped",label:"Scoped runner token (krc1.*) ready",status:d?"pass":"fail",summary:d?a?"KYNVER_RUNNER_TOKEN is set (scoped prefix shown)":`Saved scoped token for agentOsId ${c??t??"(unknown)"}`:"No scoped runner token for the configured AgentOS workspace",remediation:d?void 0:"Run `kynver login` then `kynver runner credential --agent-os-id <id>` (or `kynver setup` with API key).",details:{source:a?"env":l?"credentials":"none",tokenPrefix:a??(u?l:void 0),agentOsId:t??c??null,credentialsPath:i}},{id:"runner_token_agent_os_match",label:"Saved runner token matches configured agentOsId",status:!l||!t||!c||c===t?"pass":"warn",summary:!l||!c?"No saved token agentOsId to compare":t?c===t?"Saved token scoped to configured agentOsId":`Saved token is for ${c}, config expects ${t}`:"Config agentOsId unset \u2014 token scope not validated against config",remediation:l&&t&&c&&c!==t?"`kynver runner credential --agent-os-id <configured-id>` to mint a workspace-bound token.":void 0,details:{configuredAgentOsId:t??null,savedAgentOsId:c??null}},{id:"runner_api_key_for_refresh",label:"API key available for token refresh",status:n.hasApiKey||process.env.KYNVER_API_KEY?.trim()?"pass":"warn",summary:n.hasApiKey||process.env.KYNVER_API_KEY?"KYNVER API key present for runner credential mint/refresh":"No API key \u2014 401 callback recovery cannot auto-mint a replacement token",remediation:n.hasApiKey||process.env.KYNVER_API_KEY?void 0:"Run `kynver login --api-key \u2026`.",details:{credentialsPath:i,hasApiKey:n.hasApiKey||!!process.env.KYNVER_API_KEY}}]}}function zI(e){let r=e.commandOnPath("vercel"),t=r.ok,n=!!(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()),o=!!process.env.VERCEL_TOKEN?.trim();return{id:"vercel_deploy_evidence",label:"Vercel deploy evidence",checks:[{id:"vercel_global_cli_absent",label:"Global Vercel CLI not installed",status:t?"warn":"pass",summary:t?`Global Vercel CLI found (${r.stdout||"on PATH"}) \u2014 uninstall after operator approval`:"No global Vercel CLI on PATH",remediation:t?"Uninstall global Vercel CLI (`npm uninstall -g vercel`) \u2014 use GitHub commit status or scoped VERCEL_TOKEN + REST API instead.":void 0,details:{path:t&&r.stdout||null}},{id:"github_token_for_vercel_status",label:"GitHub token for Vercel status",status:n?"pass":"warn",summary:n?"GITHUB_TOKEN/GH_TOKEN present for GitHub Vercel StatusContext evidence":"No GITHUB_TOKEN \u2014 merge-gate Vercel evidence requires GitHub commit status API",remediation:n?void 0:"Export GITHUB_TOKEN (or GH_TOKEN) for PR head commit status lookups."},{id:"vercel_api_token_optional",label:"Vercel API token (optional fallback)",status:o?"pass":"warn",summary:o?"VERCEL_TOKEN configured for optional REST API deployment lookup":"VERCEL_TOKEN unset \u2014 GitHub status is the default path; API fallback disabled",remediation:o?void 0:"Set ephemeral/scoped VERCEL_TOKEN only when GitHub status is insufficient; avoid persistent ~/.vercel auth on runner hosts."}]}}function XI(e){let r=e.harnessRoot(),t=my.join(r,"runs"),n=my.join(r,"worktrees"),o=ye(r),s=ye(t),i=ye(n),a=e.pathExists(t),l=e.pathExists(n);return{id:"harness_dirs",label:"Harness / daemon directories",checks:[{id:"harness_root",label:"Harness root resolved",status:"pass",summary:o,details:{harnessRoot:o}},{id:"harness_runs_dir",label:"Runs directory ready",status:a&&e.pathWritable(t)?"pass":"warn",summary:a?e.pathWritable(t)?`Writable ${s}`:`Exists but not writable: ${s}`:`Will be created on first run: ${s}`,remediation:a&&!e.pathWritable(t)?`Fix permissions on ${s} or set KYNVER_HARNESS_ROOT to a writable path.`:void 0,details:{runsDir:s,exists:a,writable:e.pathWritable(t)}},{id:"harness_worktrees_dir",label:"Worktrees directory ready",status:l&&e.pathWritable(n)?"pass":"warn",summary:l?e.pathWritable(n)?`Writable ${i}`:`Exists but not writable: ${i}`:`Will be created on first worker: ${i}`,remediation:l&&!e.pathWritable(n)?`Fix permissions on ${i}.`:void 0,details:{worktreesDir:i,exists:l,writable:e.pathWritable(n)}}]}}function QI(e){let r=e.loadConfig(),t=e.envSnapshot(),n=t.kynverApiUrl??r.apiBaseUrl?.trim()??t.openclawCronFireBaseUrl,o=!t.kynverApiUrl&&!r.apiBaseUrl&&!!t.openclawCronFireBaseUrl,s=t.openclawCronSecret||t.kynverRuntimeSecret,i=t.kynverRunnerTokenPrefix?.startsWith("krc1."),l=e.readCredentials().runnerTokenPrefix?.startsWith("krc1.");return{id:"callback_auth",label:"Callback auth / config",checks:[{id:"callback_base_url",label:"Callback base URL configured",status:n?o?"warn":"pass":"fail",summary:n?o?`Using legacy OPENCLAW_CRON_FIRE_BASE_URL (${n})`:n:"No KYNVER_API_URL, config apiBaseUrl, or legacy OpenClaw base URL",remediation:n?o?"Migrate to KYNVER_API_URL or `kynver setup --api-base-url` and drop OPENCLAW_CRON_FIRE_BASE_URL.":void 0:"Set KYNVER_API_URL or run `kynver setup --api-base-url https://\u2026`.",details:{source:t.kynverApiUrl?"KYNVER_API_URL":r.apiBaseUrl?"config.apiBaseUrl":t.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL":"none",baseUrl:n??null}},{id:"callback_auth_mode",label:"Callback auth uses scoped runner token",status:i||l?"pass":s?"warn":"fail",summary:i?"KYNVER_RUNNER_TOKEN scoped token will be sent as X-Kynver-Runner-Token":l?"Saved krc1.* token in ~/.kynver/credentials":s?"Deployment-level KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET in use (legacy headers)":"No callback secret configured",remediation:i||l?void 0:"Mint a scoped token: `kynver runner credential --agent-os-id <id>`. Avoid shared OPENCLAW_CRON_SECRET on user runners.",details:{mode:i||l?"scoped":s?"legacy_global_secret":"missing",legacyHeadersWhenNotScoped:["X-OpenClaw-Cron-Secret","X-Kynver-Runtime-Secret"]}}]}}function ZI(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=ye(o),a=ye(s),l=r.opusHarnessRoot?ye(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,f=n.runnerTokenPrefix,p=n.runnerTokenAgentOsId,m=!!f&&(!u||!p||p===u),h=!!d?.startsWith("krc1.")||m&&!!f?.startsWith("krc1.");return{id:"openclaw_hotspots",label:"OpenClaw dependency hotspots",checks:[{id:"hotspot_legacy_harness_root",label:"Legacy ~/.openclaw/harness still active",status:c?"warn":"pass",summary:c?`Harness root is legacy ${a}`:r.opusHarnessRoot?`OPUS_HARNESS_ROOT override in use (${l})`:`Using ${i}`,remediation:c?"Set KYNVER_HARNESS_ROOT=~/.kynver/harness (or run setup), migrate artifacts, retire OPUS_HARNESS_ROOT.":r.opusHarnessRoot?"Prefer KYNVER_HARNESS_ROOT over OPUS_HARNESS_ROOT.":void 0,details:{harnessRoot:i,legacyRoot:a,opusHarnessRoot:l}},{id:"hotspot_openclaw_env_secrets",label:"OpenClaw deployment secrets in runner env",status:r.openclawCronSecret||r.openclawCronFireBaseUrl?"warn":"pass",summary:r.openclawCronSecret||r.openclawCronFireBaseUrl?[r.openclawCronSecret?"OPENCLAW_CRON_SECRET set":null,r.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL set":null].filter(Boolean).join("; "):"No OpenClaw cron env overrides on this runner",remediation:r.openclawCronSecret||r.openclawCronFireBaseUrl?"Move to KYNVER_API_URL + scoped runner tokens; unset OpenClaw cron env on user-hosted runners.":void 0},uy(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:h,deploymentSchedulerProvider:t.deploymentSchedulerProvider==="qstash"||t.deploymentSchedulerProvider==="kynver-cron"||t.deploymentSchedulerProvider==="openclaw-cron"?t.deploymentSchedulerProvider:void 0}),{id:"hotspot_lease_source_names",label:"Harness lease/completion source names",status:"pass",summary:"Runtime uses kynver-harness:* lease owners and completion source kynver-harness (OpenClaw names retired in runtime)",details:{leaseOwnerPattern:"kynver-harness:<runId>",completionSource:"kynver-harness",note:"OpenClaw adapter remains optional in packages/kynver-openclaw-agent-os only"}}]}}function fy(e=ay){let r=[YI(e),JI(e),qI(e),zI(e),XI(e),QI(e),py(e),ZI(e)],t=GI(r),n=t.fail===0,o=n?t.warn>0?`Ready with ${t.warn} warning(s) \u2014 review remediation before retiring OpenClaw as primary runtime agent.`:"Ready \u2014 Kynver runtime can serve as primary runtime agent on this host.":`${t.fail} blocking check(s) \u2014 fix failures before OpenClaw takeover.`;return{command:"doctor runtime-takeover",ready:n,summary:o,counts:t,sections:r}}function gy(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Hn();if(!n.ok){console.error(n.reason??"defaultRepo remediation failed"),n.remediation&&console.error(n.remediation),process.exitCode=1;return}n.remediated?r=`Remediated defaultRepo \u2192 ${n.resolved?.defaultRepo??"unknown"}`:r=`defaultRepo already persisted (${n.resolved?.defaultRepo??"unknown"})`}let t=fy();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function hy(e){let r=b(),t=(e.agentOsId?String(e.agentOsId):r.agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=V(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await J(e.secret?String(e.secret):void 0,t,{baseUrl:n}),s=new URLSearchParams;if(typeof e.since=="string"&&e.since.trim()&&s.set("since",e.since.trim()),e.limit!=null&&String(e.limit).trim()){let c=Number(e.limit);Number.isFinite(c)&&c>0&&s.set("limit",String(Math.floor(c)))}let i=s.toString()?`?${s.toString()}`:"",a=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/command-center/dashboard-contract${i}`,l=await bs(a,o);l.ok||(console.error(`dashboard-contract GET failed: HTTP ${l.status}`),l.response&&console.error(JSON.stringify(l.response,null,2)),process.exit(1)),console.log(JSON.stringify(l.response,null,2))}He();var Dc=["Vercel/hosted: set KYNVER_SCHEDULER_PROVIDER=qstash","Vercel/hosted: ensure QSTASH_TOKEN (and QStash signing keys) are configured","Vercel/hosted: unset OPENCLAW_CRON_STORE_PATH if present"],Mc=["User runner: unset KYNVER_SCHEDULER_PROVIDER (scheduling is deployment-owned)","User runner: unset OPENCLAW_CRON_STORE_PATH, OPENCLAW_CRON_SECRET, OPENCLAW_CRON_FIRE_BASE_URL",'User runner: after deployment cutover, run `kynver scheduler attest-cutover` (or set deploymentSchedulerProvider to "qstash" in ~/.kynver/config.json)',"Verify: kynver doctor runtime-takeover \u2014 hotspot_openclaw_scheduler should pass"];function eO(e=process.env){return{kynverSchedulerProvider:e.KYNVER_SCHEDULER_PROVIDER?.trim()||null,kynverCronStorePath:e.KYNVER_CRON_STORE_PATH?.trim()||e.OPENCLAW_CRON_STORE_PATH?.trim()||null,kynverCronSecret:!!(e.KYNVER_CRON_SECRET?.trim()||e.OPENCLAW_CRON_SECRET?.trim()),kynverCronFireBaseUrl:e.KYNVER_CRON_FIRE_BASE_URL?.trim()||e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null,openclawCronStorePath:e.OPENCLAW_CRON_STORE_PATH?.trim()||null,openclawCronSecret:!!e.OPENCLAW_CRON_SECRET?.trim(),openclawCronFireBaseUrl:e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}}function Uc(e,r=eO()){let t=[];return r.kynverSchedulerProvider==="openclaw-cron"&&t.push("Runner still has KYNVER_SCHEDULER_PROVIDER=openclaw-cron"),r.kynverCronStorePath&&r.kynverSchedulerProvider!=="kynver-cron"&&t.push("Runner has KYNVER_CRON_STORE_PATH but KYNVER_SCHEDULER_PROVIDER is not kynver-cron \u2014 use `kynver daemon` cron tick or unset the store for QStash-only runners"),r.openclawCronStorePath&&!r.kynverCronStorePath&&t.push("Runner still has legacy OPENCLAW_CRON_STORE_PATH (prefer KYNVER_CRON_STORE_PATH)"),e.deploymentSchedulerProvider==="openclaw-cron"&&t.push("~/.kynver/config.json deploymentSchedulerProvider is still openclaw-cron"),{ok:t.length===0,blockers:t,runnerEnv:r,deploymentSchedulerProvider:e.deploymentSchedulerProvider??null,deploymentSteps:[...Dc],runnerSteps:[...Mc]}}function ky(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import rO from"node:path";import{homedir as tO}from"node:os";var yy=rO.join(tO(),".kynver","config.json");function Ry(e=!1){let r=b(),t=Uc(r),n={...t,configPath:q(yy),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
53
|
+
`),console.log("Deployment (Vercel):");for(let o of Dc)console.log(` - ${o}`);console.log(`
|
|
54
|
+
User runner:`);for(let o of Mc)console.log(` - ${o}`);if(console.log(`
|
|
55
55
|
This host:`),console.log(` config: ${n.configPath}`),console.log(` deploymentSchedulerProvider: ${t.deploymentSchedulerProvider??"(unset)"}`),console.log(` KYNVER_SCHEDULER_PROVIDER: ${t.runnerEnv.kynverSchedulerProvider??"(unset)"}`),console.log(` KYNVER_CRON_STORE_PATH: ${t.runnerEnv.kynverCronStorePath??"(unset)"}`),console.log(` OPENCLAW_CRON_STORE_PATH (legacy): ${t.runnerEnv.openclawCronStorePath??"(unset)"}`),t.blockers.length){console.log(`
|
|
56
56
|
Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
|
|
57
|
-
No local blockers detected on this runner.`)}function
|
|
57
|
+
No local blockers detected on this runner.`)}function by(e=!1){let r=b(),t=Uc(r);if(!t.ok){let s={ok:!1,attested:!1,blockers:t.blockers,remediation:"Clear local OpenClaw scheduler blockers before attesting qstash cutover."};if(e)console.log(JSON.stringify(s,null,2));else{console.error("Cannot attest scheduler cutover \u2014 local blockers remain:");for(let i of t.blockers)console.error(` ! ${i}`)}process.exitCode=1;return}let n=ky(r);ue(n);let o={ok:!0,attested:!0,configPath:q(yy),deploymentSchedulerProvider:"qstash",config:Nt(n),note:"Recorded deploymentSchedulerProvider=qstash in ~/.kynver/config.json. Confirm Vercel has KYNVER_SCHEDULER_PROVIDER=qstash and QSTASH_TOKEN before relying on hosted schedules."};if(e){console.log(JSON.stringify(o,null,2));return}console.log(o.note),console.log(` config: ${o.configPath}`)}async function vy(e){let r=await Si();if(e){console.log(JSON.stringify(r,null,2));return}console.log(`Kynver Cron primary: ${r.primary}`),console.log(` store: ${r.env.storePath} (${r.jobCount} jobs)`),console.log(` tick state: ${r.env.statePath} (${r.stateJobCount} tracked)`),console.log(` tick enabled: ${r.env.tickEnabled}`),console.log(` fire base URL: ${r.env.fireBaseUrl??"(unset)"}`),console.log(` credentials ready: ${r.credentialsReady}`),console.log(` daemon-owned primary: ${r.daemonPrimary}`)}async function Sy(e){let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await Wt({agentOsIdFilter:r??null});if(e.json===!0){console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({event:"kynver_cron_tick",...t}))}O();function nO(e,r){if(e===void 0)return r;if(e===!0)return!0;if(e===!1)return!1;let t=String(e).trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r}async function wy(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await Ci({execute:r?!1:nO(e.execute,!0),json:e.json===!0,installSystemd:e.installSystemd===!0||e["install-systemd"]===!0,confirmQstashRemoval:e.confirmQstashRemoval===!0||e["confirm-qstash-removal"]===!0,skipWatchdog:e.skipWatchdog===!0||e["skip-watchdog"]===!0,skipTestFire:e.skipTestFire===!0||e["skip-test-fire"]===!0,agentOsId:typeof e.agentOsId=="string"?e.agentOsId:void 0,apiBaseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0,runId:typeof e.run=="string"?e.run:void 0});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}if(console.log(t.dryRun?`Kynver Cron install (dry-run)
|
|
58
58
|
`:`Kynver Cron install
|
|
59
59
|
`),console.log(` config: ${t.configPath}`),console.log(` env file: ${t.plan.envFilePath}`),console.log(` store: ${t.plan.storePath}`),t.secretGenerated&&console.log(" generated new KYNVER_CRON_SECRET"),t.envFile&&console.log(` env merge: ${t.envFile.changed?"updated":"unchanged"} (${t.envFile.keysWritten.join(", ")||"no key changes"})`),t.watchdog?.remoteJobId?console.log(` watchdog: job ${t.watchdog.remoteJobId} provider=${t.watchdog.provider} local=${t.watchdog.localProviderScheduleId}`):t.watchdog?.error&&console.log(` watchdog: ERROR ${t.watchdog.error}`),t.qstashWatchdog?.found.length){console.log(` qstash watchdog leftovers: ${t.qstashWatchdog.found.length}`);for(let n of t.qstashWatchdog.found)console.log(` - ${n.id} (${n.status})`);t.qstashWatchdog.removed.length&&console.log(` removed: ${t.qstashWatchdog.removed.join(", ")}`)}t.systemd&&console.log(` systemd: ${t.systemd.note??(t.systemd.started?"running":"not started")}`),t.testFire&&!t.testFire.skipped&&console.log(` test fire: fired=${t.testFire.fired} errors=${t.testFire.errors}`),console.log(`
|
|
60
60
|
Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
|
|
61
|
-
Blockers:`);for(let n of t.blockers)console.log(` ! ${n}`);process.exitCode=1;return}console.log("\nInstall complete \u2014 run `kynver cron verify` to re-check.")}async function
|
|
62
|
-
`);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}O();import
|
|
63
|
-
`)}function
|
|
64
|
-
`);for(let n of e.workers)t.push(
|
|
65
|
-
`)}function
|
|
66
|
-
`)),process.exit(e)}async function
|
|
61
|
+
Blockers:`);for(let n of t.blockers)console.log(` ! ${n}`);process.exitCode=1;return}console.log("\nInstall complete \u2014 run `kynver cron verify` to re-check.")}async function Cy(e){let r=b(),t=await tn({config:r});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}console.log(`Kynver Cron verify: ${t.ok?"PASS":"FAIL"}
|
|
62
|
+
`);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}O();import sO from"node:os";O();Ee();Et();w();var Po={slug:"landing-maintainer",originCron:"maintain-8-blocker-and-pr-landing-workers",defaultRepo:"Totalsolutionsync/Kynver",landScript:"scripts/agent-os-land-pr.mjs",landScriptArgs:["--skip-not-ready"]};import{spawnSync as oO}from"node:child_process";import _y from"node:path";function xy(e,r,t){let o=[_y.join(r,Po.landScript),String(e),...Po.landScriptArgs];if(!t)return{action:{kind:"land_pr",prNumber:e,reason:"dry-run"},executed:!1,exitCode:0,stdout:`dry-run: node ${o.join(" ")}`,stderr:""};let s=oO("node",o,{cwd:r,encoding:"utf8",timeout:600*1e3});return{action:{kind:"land_pr",prNumber:e,reason:"landing wrapper invoked"},executed:!0,exitCode:s.status,stdout:s.stdout??"",stderr:s.stderr??""}}function Ey(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?_y.resolve(r):$e()?.repo??process.cwd()}async function Py(e){let r=String(N(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Po.defaultRepo).trim(),n=e.fleet===!0||e.fleet==="true",o=e.execute===!0||e.execute==="true",s=e.run?String(e.run):void 0,i=nr({runId:s??"fleet-lane-tick"}),a={...Qs(i,{harnessRunId:s,boxKind:Fe(b()),hostLabel:sO.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=V(e.baseUrl?String(e.baseUrl):void 0),c=await J(e.secret?String(e.secret):void 0,r,{baseUrl:l}),u=`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/tick`,f=(await Hr(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,p=[],m=Ey(e),h=Array.isArray(f?.localActions)?f.localActions:[],k=a.boxId;for(let g of h){if(g.kind==="land_pr"&&typeof g.prNumber=="number"){let y=xy(g.prNumber,m,o);if(p.push({action:y.action,executed:y.executed,exitCode:y.exitCode}),o&&y.executed){let I=y.exitCode===0,_=typeof g.prUrl=="string"&&g.prUrl.trim()?g.prUrl.trim():`https://github.com/${t}/pull/${g.prNumber}`;try{await Hr(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:_,holderBoxId:k,merged:I})}catch{}}continue}p.push({action:g,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:f,localOutcomes:p}}async function Ay(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await Py(e);if(e.json===!0||e.json==="true"){console.log(JSON.stringify(n,null,2));return}console.log(["fleet landing-maintainer tick",`repo=${n.repo}`,`fleet=${n.fleet}`,`execute=${n.execute}`,`localOutcomes=${n.localOutcomes.length}`].join(" "));for(let o of n.localOutcomes)console.log(` ${o.action.kind} pr=${o.action.prNumber??"-"} executed=${o.executed}`)}O();T();Tr();Et();import cO from"node:path";w();yr();Cn();T();w();import iO from"node:path";function Iy(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Oy(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!Iy(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function Wc(e){return typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!H(e.pid)?!1:zo(e)}function aO(e,r){let t=e.completionBlocker?.trim();if(t&&!Iy(t))return{attention:"blocked",attentionReason:t,status:"blocked"};if(r.heartbeatBlocker)return{attention:"blocked",attentionReason:r.heartbeatBlocker,status:"blocked"};if(Oy(e))return{attention:"done",attentionReason:"completion acknowledged",status:"done"};let n=Wc(e);return n?{attention:"ok",status:e.status?.trim()||"running"}:e.status==="done"?{attention:"done",status:"done"}:n?{attention:"ok",status:e.status?.trim()||"unknown"}:{attention:"needs_attention",attentionReason:"process not alive",status:"exited"}}function lO(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||Oy(e)?!1:Wc(e)}function Lc(e,r){let t=C(iO.join(x(e.id),"workers",v(r),"worker.json"),void 0);if(!t)return null;let n=ae(t.heartbeatPath),{attention:o,attentionReason:s,status:i}=aO(t,n),a=Wc(t),l=lO(t);return{runId:e.id,runName:e.name,worker:r,status:i,attention:o,attentionReason:s,alive:a,isActive:l,taskId:t.taskId?.trim()||null,planId:t.planId?.trim()||null,leaseOwner:t.leaseOwner?.trim()||null,pid:t.pid,model:t.model,currentTask:n.lastHeartbeatSummary,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,completionBlocker:t.completionBlocker?.trim()||null}}function Bc(e,r){let t={};for(let n of e){let o=r(n).trim()||"unknown";t[o]=(t[o]??0)+1}return t}function Ny(e){return e.filter(r=>r.attention==="blocked"||r.attention==="needs_attention"||r.attention==="stale").map(r=>({runId:r.runId,worker:r.worker,taskId:r.taskId,reason:r.completionBlocker??r.heartbeatBlocker??r.attentionReason??r.attention}))}function Ty(e){return e.filter(r=>r.isActive&&r.taskId).map(r=>r.taskId.trim())}function uO(){let e=[];for(let r of z())for(let t of fe(r)){let n=Lc(r,t);n&&e.push(n)}return e}function dO(e){let r=e.trim().toLowerCase();if(!r)return null;for(let t of z())for(let n of fe(t)){let s=C(cO.join(x(t.id),"workers",v(n),"worker.json"),void 0)?.taskId?.trim();if(s&&(s.toLowerCase()===r||s.toLowerCase().endsWith(r)))return Lc(t,n)}return null}function Hc(e){if(e.mode==="full")return{mode:"full",runs:bo()};let r=b(),{harnessRoot:t}=Z(),n=z(),o=uO(),s=o.filter(l=>l.isActive).length,i=nr({runId:n[0]?.id??"fleet",activeWorkers:s}),a={generatedAt:new Date().toISOString(),mode:e.mode,harnessRoot:t,agentOsId:r.agentOsId?.trim()||null,resourceGate:i,runCount:n.length,runStatusCounts:Bc(n,l=>l.status),workerCount:o.length,workerStatusCounts:Bc(o,l=>l.status),workerAttentionCounts:Bc(o,l=>l.attention),activeTaskIds:Ty(o),blocked:Ny(o).slice(0,25),workers:o};if(e.mode==="task"){let l=e.taskId?.trim()??"",c=l?dO(l):null;return{...a,mode:"task",taskId:l,taskFound:!!c,workers:c?[c]:[]}}if(e.mode==="workers"){let l=o.filter(c=>c.alive||c.attention==="blocked"||c.attention==="needs_attention"||c.attention==="stale");return{...a,mode:"workers",workers:l,blocked:Ny(l).slice(0,25),activeTaskIds:Ty(l)}}return a}function Fc(e,r=72){let t=e.trim();return t.length<=r?t:`${t.slice(0,r-1)}\u2026`}function pO(e){let r=[`${e.runId}/${e.worker}`,e.taskId?`task=${e.taskId}`:"task=\u2014",e.leaseOwner?`lease=${e.leaseOwner}`:"lease=\u2014",`${e.status}/${e.attention}`];return e.currentTask&&r.push(`tool=${Fc(e.currentTask,48)}`),r.join(" \xB7 ")}function mO(e){let r=e.resourceGate,t=[];if(t.push("Kynver factory status"),t.push(`Slots: ${r.activeWorkers}/${r.maxConcurrentWorkers} active \xB7 ${r.slotsAvailable} available`+(r.reason?` (${r.reason})`:"")),t.push(`Runs: ${e.runCount} \xB7 Workers: ${e.workerCount}`),e.activeTaskIds.length>0&&t.push(`Active tasks: ${e.activeTaskIds.slice(0,12).join(", ")}`),e.blocked.length>0){t.push(`Blocked (${e.blocked.length}):`);for(let n of e.blocked.slice(0,8)){let o=n.taskId?` task=${n.taskId}`:"";t.push(` \xB7 ${n.runId}/${n.worker}${o}: ${Fc(n.reason)}`)}e.blocked.length>8&&t.push(` \xB7 \u2026and ${e.blocked.length-8} more (use kynver status --workers)`)}else t.push("Blocked: none");return t.push("Drilldown: kynver status --workers | --task <id> | --json | --full"),t.join(`
|
|
63
|
+
`)}function fO(e){let r=e.resourceGate,t=[];if(t.push(`Worker slots ${r.activeWorkers}/${r.maxConcurrentWorkers} \xB7 available ${r.slotsAvailable}`),e.workers.length===0)return t.push("No active or attention workers."),t.join(`
|
|
64
|
+
`);for(let n of e.workers)t.push(pO(n));return t.join(`
|
|
65
|
+
`)}function gO(e){if(!e.taskId)return"missing --task <id>";if(!e.taskFound||e.workers.length===0)return`No harness worker found for task ${e.taskId}`;let r=e.workers[0];return[`task ${e.taskId}`,`${r.runId}/${r.worker}`,r.status,r.attention,r.leaseOwner?`lease=${r.leaseOwner}`:null,r.model?`model=${r.model}`:null,r.currentTask?`tool=${Fc(r.currentTask)}`:null,r.completionBlocker??r.heartbeatBlocker??r.attentionReason??null].filter(n=>!!n).join(" \xB7 ")}function Dy(e){return e.mode==="workers"?fO(e):e.mode==="task"?gO(e):mO(e)}function hO(e){return e.full===!0||e.full==="true"?"full":e.json===!0||e.json==="true"?"json":e.workers===!0||e.workers==="true"?"workers":typeof e.task=="string"&&e.task.trim()?"task":"compact"}function My(e){let r=hO(e);if(r==="full"){let n=Hc({mode:"full"});console.log(JSON.stringify(n,null,2));return}let t=Hc({mode:r,taskId:typeof e.task=="string"?e.task:void 0});if(r==="json"){console.log(JSON.stringify(t,null,2));return}console.log(Dy(t))}function Kc(e){return e==="help"||e==="--help"||e==="-h"}function Ly(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),$c(1)}function $c(e=0){(e===0?console.log:console.error)(["Usage:"," kynver login [--api-key KEY] [--api-base-url URL] (omit --api-key to authorize in the browser)"," kynver bootstrap [--api-base-url URL] [--api-key KEY] [--repo PATH] (login + setup + runner credential in one shot)"," kynver start [--repo PATH] [--api-base-url URL] [--run RUN_ID] [--interval-ms MS] [--chat-oauth] [--install-systemd] (bring your agent online: bootstrap if needed + run + keeper-supervised daemon; --install-systemd enables Linux user unit)"," kynver runner credential [--agent-os-id ID] [--base-url URL]"," kynver setup [--api-base-url URL] [--agent-os-id ID] [--agent-os-slug SLUG] [--box-kind forge|ghost] [--repo PATH] [--discover-repo] [--max-workers N] [--provider claude|cursor] [--chat-oauth]"," kynver daemon --run RUN_ID --agent-os-id AOS_ID [--execute] [--interval-ms MS] [--stall-ms MS] [--no-supervise]"," kynver status [--compact] [--workers] [--task TASK_ID] [--json] [--full] # factory-wide harness summary"," kynver run list"," kynver run resolve --name RUN_NAME"," kynver run status --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--target-task-id TASK_ID] [--executor harness] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--model claude-opus-4-8] [--disk-path /] [--reconcile-stale-blockers]"," kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]",' kynver worker start --run RUN_ID --name worker --task "..." [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID] [--wait] [--emit-json]'," kynver worker list --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver worker status --run RUN_ID --name worker"," kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]"," kynver worker stop --run RUN_ID --name worker"," kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"," kynver worker discard-disposable --run RUN_ID --name worker --path scripts/helper.mjs[,other]"," kynver worker auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--poll-ms 5000] [--max-total-ms 21600000] [--complete-attempts 3] [--complete-backoff-ms 5000] [--base-url URL] [--secret SECRET]"," kynver run reconcile"," kynver run unblock [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET] [--dry-run]"," kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]"," kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override] [--local]"," kynver harness verify --worktree PATH [--command CMD] [--json] [--wait-for-admission-ms MS] [--timeout-ms MS]"," kynver plan persist --operation create|add_version|update_metadata --title TITLE (--body-file PATH | --body TEXT) [--slug SLUG] [--plan PLAN_ID] [--summary TEXT] [--failure-kind approval_guard|auth|network|server|tool_interruption]"," kynver plan outbox list"," kynver plan outbox drain [--max N] [--id OUTBOX_ID]"," kynver cleanup [--execute] [--compact] [--node-modules-age-ms MS] [--worktrees-age-ms MS] [--harness-root PATH] [--include-orphans] [--skip-finalize] [--account-bytes]"," kynver wsl-crashes [--json] [--execute] [--purge-all] [--keep-newest N]"," --include-orphans also scans whole worktree directories (<harnessRoot>/worktrees/<runId>/<workerId>/) that no run/worker.json references; orphans pass salvage gates (recent heartbeat, dirty git, ahead of origin/main) before removal."," Dry-run defaults to fast scan (no byte accounting). Pass --account-bytes for reclaimable byte totals. Pass --compact for a bounded operator summary (no full action list)."," kynver monitor start --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS]"," kynver monitor status [--run RUN_ID] [--name worker] [--tick]"," kynver monitor stop --run RUN_ID [--name worker]"," kynver monitor list"," kynver monitor tick --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--auto-complete] [--renew-leases]"," kynver monitor auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET]"," kynver monitor run-loop --run RUN_ID --monitor-id ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS] [--auto-complete] [--renew-leases]"," kynver config ensure-default-repo [--json]"," kynver doctor runtime-takeover [--remediate-default-repo]"," kynver scheduler cutover-check [--json]"," kynver scheduler attest-cutover [--json]"," kynver cron install [--dry-run] [--json] [--install-systemd] [--confirm-qstash-removal] [--skip-watchdog] [--skip-test-fire] [--agent-os-id ID] [--api-base-url URL] [--run RUN_ID]"," kynver cron verify [--json]"," kynver cron status [--json]"," kynver cron tick [--agent-os-id AOS_ID] [--json]"," kynver lane tick landing-maintainer [--fleet] [--repo OWNER/NAME] [--agent-os-id AOS_ID] [--execute] [--json]"," kynver board contract [--agent-os-id ID] [--base-url URL] [--since ISO] [--limit N]"].join(`
|
|
66
|
+
`)),process.exit(e)}async function yO(e=process.argv.slice(2)){if(ey(e,import.meta.url,"kynver"))return;if(e.length===0||Kc(e[0]))return $c(0);let r=e.shift(),t,n;if((r==="run"||r==="worker"||r==="plan"||r==="runner"||r==="harness"||r==="monitor"||r==="doctor"||r==="config"||r==="scheduler"||r==="cron"||r==="lane"||r==="board")&&(t=e.shift()),n=e,t&&Kc(t)||n.some(Kc))return $c(0);let o=ps(n),{runsDir:s,worktreesDir:i}=Z();if(Uy(s,{recursive:!0}),Uy(i,{recursive:!0}),r==="daemon"&&Ut(),ty(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=L(l).repo}catch{a=void 0}await ry({repoRoot:a,cwd:a})}if(r==="login")return void await pd(o);if(r==="bootstrap")return void await fs(o);if(r==="start")return void await mk(o);if(r==="runner"&&t==="credential")return void await dd(o);if(r==="setup")return void await ms(o);if(r==="status")return My(o);if(r==="daemon")return Ri(o)?void await bi(o):void await yi(o);if(r==="plan"&&t==="progress")return void await Ck(o);if(r==="plan"&&t==="verify")return void await _k(o);if(r==="harness"&&t==="verify")return xk(o);if(r==="plan"&&t==="persist")return void await Ek(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Pk();if(a==="drain")return void await Ak(ps(n));Ly("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return Ik(o);if(r==="wsl-crashes")return Ok(o);if(r==="config"&&t==="ensure-default-repo")return kd(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return gy(o);if(r==="scheduler"&&t==="cutover-check")return Ry(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return by(o.json===!0);if(r==="cron"&&t==="install")return void await wy(o);if(r==="cron"&&t==="verify")return void await Cy(o);if(r==="cron"&&t==="status")return void await vy(o.json===!0);if(r==="cron"&&t==="tick")return void await Sy(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await Ay(ps(n),a)}if(r==="board"&&t==="contract")return void await hy(o);if(r==="run"&&t==="create")return void vi(o);if(r==="run"&&t==="list")return qh();if(r==="run"&&t==="resolve")return ny(o);if(r==="run"&&t==="status")return Fm(o);if(r==="run"&&t==="dispatch")return void await zr(o);if(r==="run"&&t==="sweep")return void await fo(o);if(r==="run"&&t==="reconcile")return Kf();if(r==="run"&&t==="unblock")return void await oy(o);if(r==="worker"&&t==="start")return void await qm(o);if(r==="worker"&&t==="list")return Um(o);if(r==="worker"&&t==="status")return Dm(o);if(r==="worker"&&t==="tail")return Km(o);if(r==="worker"&&t==="stop")return $m(o);if(r==="worker"&&t==="complete")return void await nl(o);if(r==="worker"&&t==="discard-disposable")return fk(o);if(r==="worker"&&t==="auto-complete")return void await Vm(o);if(r==="monitor"&&t==="start"){let a=await Vk(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await Gk(o);if(r==="monitor"&&t==="stop")return Yk(o);if(r==="monitor"&&t==="list")return Jk();if(r==="monitor"&&t==="tick")return void await zk(o);if(r==="monitor"&&t==="auto-complete")return void await Oc(o);if(r==="monitor"&&t==="run-loop")return void await qk(o);Ly(r,t)}var RO=process.argv[1]&&Wy.native(process.argv[1])===Wy.native(kO(import.meta.url));RO&&yO().catch(e=>{console.error(e),process.exit(1)});export{yO as main,$c as usage};
|