@kynver-app/runtime 0.1.140 → 0.1.142
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/box-worker-cap.d.ts +9 -0
- package/dist/cli.js +55 -54
- package/dist/config.d.ts +5 -0
- package/dist/daemon-supervision/host.d.ts +4 -0
- package/dist/daemon-supervision/index.d.ts +5 -0
- package/dist/daemon-supervision/policy.d.ts +16 -0
- package/dist/daemon-supervision/setup.d.ts +14 -0
- package/dist/daemon-supervision/start.d.ts +26 -0
- package/dist/daemon-supervision/verify.d.ts +12 -0
- package/dist/doctor/runtime-takeover-daemon-supervision.d.ts +3 -0
- package/dist/index.js +69 -68
- package/dist/provider-evidence/collect.d.ts +8 -0
- package/dist/provider-evidence/recipes-github.d.ts +1 -0
- package/dist/provider-evidence/wanted-store.d.ts +9 -1
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/monitor.js +7 -7
- package/dist/server/worker-policy.js +1 -1
- package/dist/start-box-identity.d.ts +12 -0
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -1,66 +1,67 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`)}function b(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function
|
|
2
|
+
var Ay=Object.defineProperty;var T=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Iy=(e,r)=>{for(var t in r)Ay(e,t,{get:r[t],enumerable:!0})};import{existsSync as Oy,mkdirSync as Ny,readFileSync as Ni,readdirSync as JI,statSync as Wc,writeFileSync as Ty}from"node:fs";import Bc from"node:path";function pr(e){console.error(e),process.exit(1)}function pe(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function N(e,r){return e||pr(`missing ${r}`),e}function it(e){try{return JSON.parse(e)}catch{return null}}function C(e,r){try{return JSON.parse(Ni(e,"utf8"))}catch(t){if(arguments.length>1)return r;pr(`failed to read ${e}: ${t.message}`)}}function ie(e,r){Ny(Bc.dirname(e),{recursive:!0}),Ty(e,`${JSON.stringify(r,null,2)}
|
|
3
|
+
`)}function b(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Lc(e){return b(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function er(e){return String(e).replace(/\/+$/,"")}function _o(e){return String(e||"").replace(/\s+/g," ").trim()}function xo(e){try{return Wc(e).size}catch{return 0}}function Po(e){try{return Wc(e).mtime.toISOString()}catch{return null}}function Eo(e,r){return Oy(e)?Ni(e,"utf8").split(`
|
|
4
4
|
`).slice(-r).join(`
|
|
5
|
-
`):""}function
|
|
6
|
-
`).map(r=>r.trim()).filter(Boolean)}function re(e,r){try{let t=yc("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 kc(e,r,t){let n=re(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 yo(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=re(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 m=re(e,["rev-parse",n]);if(m.status!==0)return fi(n,m.error||m.stderr||m.stdout||`failed to resolve ${n}`,s.stdout.trim());i=m.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=kc(e,i,a),c=kc(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 Se=V(()=>{"use strict";w();it()});import{homedir as gi}from"node:os";import Ir from"node:path";function bc(e){return e==="~"?gi():e.startsWith("~/")||e.startsWith("~\\")?Ir.join(gi(),e.slice(2)):e}function at(e){return Ir.resolve(bc(e))}function Re(e){let r=bc(e),t=Ir.resolve(r),n=Ir.resolve(gi());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 Re(e)}var Ze=V(()=>{"use strict"});import{existsSync as ki,readFileSync as Sc}from"node:fs";import{homedir as Zk}from"node:os";import er from"node:path";import{fileURLToPath as ey}from"node:url";function ty(e){let r=er.join(e,"package.json");if(!ki(r))return null;try{let t=JSON.parse(Sc(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function ny(e){return ty(e)==="kynver"}function vc(e){let r=er.resolve(e);if(!ki(r))return null;let t=re(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?er.resolve(n):null}function oy(e=import.meta.url){let r=er.dirname(ey(e));for(let t=0;t<8;t+=1){let n=er.join(r,"package.json");if(ki(n))try{if(JSON.parse(Sc(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=er.dirname(r);if(o===r)break;r=o}return null}function hi(e,r,t,n){if(!t)return;let o=er.resolve(t);e.has(o)||ny(o)&&(e.add(o),r.push({repo:o,source:n}))}function wc(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];hi(t,n,vc(r),"cwd_git");let o=oy(e?.runtimeModuleUrl??import.meta.url);o&&hi(t,n,vc(o),"runtime_checkout");let s=Zk();for(let i of ry)hi(t,n,at(er.join(s,i)),"well_known_path");return n}function lt(e){return wc(e)[0]??null}function sy(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 Ro(e){let r=wc(e);return r.find(n=>!sy(n.repo))??r[0]??null}var ry,bo=V(()=>{"use strict";Se();Ze();ry=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function ct(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 Cc(e,r){return e[r]?.trim()||null}function We(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:ct(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Cc(e,"KYNVER_BOX_KIND");if(o)return{boxKind:ct(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Cc(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 Be(e={},r=process.env){return We(r,e).boxKind}var Ie=V(()=>{"use strict"});import{readFileSync as iy}from"node:fs";import _c from"node:os";function sn(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:_c.freemem()}if(process.platform==="linux")try{let t=iy("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return _c.freemem()}var vo=V(()=>{"use strict"});import{existsSync as ay,readFileSync as ly,statfsSync as cy}from"node:fs";function yi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ay(e))continue;let r=ly(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function xc(e={}){if(!(e.forceWsl===void 0?yi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ut,n=e.wslHostFreeWarnBytes??uy,o=e.wslHostFreeCriticalBytes??dy,s=e.statfs??cy,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,m=!u&&!d,f=(a/(1024*1024*1024)).toFixed(1),p=null;return m||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${py()}`),{ok:m,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function py(){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 uy,dy,ut,Ri=V(()=>{"use strict";uy=25*1024*1024*1024,dy=12*1024*1024*1024,ut="/mnt/c"});import{execFileSync as Pc}from"node:child_process";import{existsSync as wo,readFileSync as Ec,readdirSync as my,statSync as fy}from"node:fs";import bi from"node:path";function So(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Ac(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Pc("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()||ut;return r&&wo(bi.join(t,"Users",r))?r:null}function Ry(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()||ut,n=e.windowsUser??Ac();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function by(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 vy(){try{if(wo("/proc/sys/kernel/core_pattern"))return Ec("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Pc("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Sy(e){return!!(e&&/wsl-capture-crash/i.test(e))}function wy(e,r=ut){let t=bi.join(r,"Users",e,".wslconfig");if(!wo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Ec(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 Cy(e){if(!wo(e))return[];let r=my(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=bi.join(e,n.name);try{let s=fy(o),i=by(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?yi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ut,n=e.windowsUser??Ac(),o=e.warnBelowBytes??So("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",gy),s=e.criticalBelowBytes??So("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",hy),i=e.warnCount??So("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",ky),a=e.criticalCount??So("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",yy),l=(e.readCorePattern??vy)(),c=Sy(l),u=null;n&&(u=(e.readWslConfig??wy)(n,t));let d=u?.maxCrashDumpCount??null,m=d===-1,f=Ry({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!f)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:null,probeError:"windows_user_unresolved"};let p;try{p=(e.listDumps??Cy)(f)}catch(U){return{ok:!1,path:f,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:`WSL crash dump probe failed at ${f}: ${U.message}`,probeError:U.message}}let h=p.reduce((U,C)=>U+C.bytes,0),k=p.length,g=[...new Set(p.map(U=>U.executableHint).filter(U=>!!U))],R=h>=s,I=h>=o,P=k>=a,E=k>=i,j=!(R||P||I||E),F=null;if(!j){let U=R||P?"critical":"warning",C=(h/1024**3).toFixed(1),ae=g.length>0?g.join(", "):"unknown";F=`WSL crash dumps ${U}: ${k} file(s), ${C} GiB at ${f} (executables: ${ae}). `+_y({wslCaptureEnabled:c,dumpsDisabledInWslConfig:m})}return{ok:j,path:f,windowsUser:n,dumpCount:k,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:g,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:F,probeError:null}}function _y(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 gy,hy,ky,yy,an=V(()=>{"use strict";Ri();gy=5*1024*1024*1024,hy=10*1024*1024*1024,ky=2,yy=4});import{statfsSync as xy}from"node:fs";function Le(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Py,n=e.diskFreeCriticalBytes??Ey,o=e.diskMaxUsedPercent??Ay,s=e.diskHardMaxUsedPercent??Iy,i=xy(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,m=a<t*2,f=m&&c>o,p=m&&c>s,h=!u&&!d&&!f&&!p,k=e.skipWslHostCheck?null:xc(e.wslHost),g=e.skipWslCrashDumpCheck?null:fr(e.wslCrashDumps),R=h&&(k?k.ok:!0)&&(g?g.ok:!0),I=null;return R||(I=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,g&&!g.ok?g.reason:null].filter(Boolean).join("; ")),Oy({ok:R,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 Oy(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 Py,Ey,Ay,Iy,ln=V(()=>{"use strict";an();Ri();Py=30*1024*1024*1024,Ey=15*1024*1024*1024,Ay=80,Iy=90});import{existsSync as Ic}from"node:fs";import{homedir as Nc}from"node:os";import gr from"node:path";function ie(e){let r=gr.resolve(at(e.trim()));for(;Ny.has(gr.basename(r));)r=gr.dirname(r);return r}function be(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ie(e);let r=v().harnessRoot?.trim();if(r)return ie(r);let t=gr.join(Nc(),".kynver","harness");return Ic(t)?t:Ic(Oc)?Oc:t}function we(e){return gr.join(ie(e),"runs")}function hr(e){return gr.join(ie(e),"worktrees")}function dt(){let e=be();return{harnessRoot:e,runsDir:we(e),worktreesDir:hr(e)}}function pt(e,r){return gr.join(e,b(r))}var Oc,Ny,Ce=V(()=>{"use strict";O();Ze();w();Oc=gr.join(Nc(),".openclaw","harness"),Ny=new Set(["runs","worktrees"])});import{existsSync as Ty,readdirSync as Dy,statSync as My}from"node:fs";import mt from"node:path";function te(){return dt()}function B(e){let{runsDir:r}=te();return _(mt.join(pt(r,b(e)),"run.json"))}function Y(){let{runsDir:e}=te();return Tc(e)}function Co(e){return Tc(we(e))}function Uy(e){try{return My(e).isDirectory()}catch{return!1}}function Tc(e){if(!Ty(e))return[];let r=[];for(let t of Dy(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=mt.join(e,t.name);if(!Uy(n))continue;let o=_(mt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function me(e,r){let{runsDir:t}=te();return _(mt.join(pt(t,b(e)),"workers",b(r),"worker.json"))}function Oe(e){let{runsDir:r}=te();de(mt.join(pt(r,e.id),"run.json"),e)}function H(e,r){let{runsDir:t}=te();de(mt.join(pt(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=te();return cn(r,e)}function cn(e,r){return pt(we(e),b(r))}var M=V(()=>{"use strict";Ce();w()});import{existsSync as Wy,readdirSync as By}from"node:fs";import Ly from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(b(n));let t=Ly.join(x(e.id),"workers");if(!Wy(t))return[...r];for(let n of By(t,{withFileTypes:!0}))n.isDirectory()&&r.add(b(n.name));return[...r]}var Or=V(()=>{"use strict";M();w()});function vi(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 Dc(e){let r=e.trim();if(!r)return null;let t=vi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=vi(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=vi(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Mc(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Dc(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Dc(t);return n||t}var Uc=V(()=>{"use strict"});import{existsSync as Hy,readFileSync as Fy}from"node:fs";function Wc(e){return e==="complete"}function ft(e){return Wc(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function ve(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Hy(e))return r;let t=Date.now()+$y,n=new Date(t).toISOString(),o=Fy(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=st(n);if(!o)continue;let s=mR(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=$c(a);l&&(r.currentTool=l)}let i=Kc(o);i&&gR(r,xi({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&fR(r,o)}return r}function hR(e){let r=Kc(e);if(!r)return;let t=xi({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=fo(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 jc(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] ${fo(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"?hR(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=$c(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${fo(String(e.result||""))}`.trim()}var xo=V(()=>{"use strict";Fc();w()});function yR(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Vc(e){let r=(e??"").trim();if(!r)return null;for(let t of kR)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${yR(r)}`};return null}var kR,Gc=V(()=>{"use strict";kR=[{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 Yc(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function RR(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 bR(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Yc(e.head)}function vR(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 gt(e){if(e.alive||RR(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Yc(e.headCommit)??bR(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:vR(s,r,t)}}var Po=V(()=>{"use strict"});function pn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function SR(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 wR(e){if(pn(e.headCommit)||pn(e.prUrl)||pn(e.artifactBundlePath)||pn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&pn(r.head))}function ht(e){return SR(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:wR(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 Jc(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Eo=V(()=>{"use strict"});function Pi(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 qc(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function kt(e){let r=e.trim();if(!r)return null;let t=Pi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Pi(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Pi(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=qc(l);for(let u of n){let d=qc(u);d>c&&(l=u,c=d)}return l}var Ao=V(()=>{"use strict"});function yt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function CR(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]}`:yt(e)}function Io(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function zc(e){let r=null;if(typeof e=="string"){let o=kt(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=yt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:yt(s.mergeCommit??s.merge_commit),reason:yt(s.reason)})}return n}function Xc(e,r){let t=[],n=Tr(yt(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 Qc(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(!CR(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(yt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Tr(r.targetPrUrls[0]):null):null;if(s){let d=Xc(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 p=zc(n).find(h=>h.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=zc(n),a=new Map(i.map(d=>[Io(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Io(Tr(d)??d)).filter(Boolean)),c=Xc(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(Io(d)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`};if(l.size===0)return{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let m=Io(Tr(d)??d),f=a.get(m);if(!f){u.push(m);continue}f.outcome!=="merged"&&!f.reason?.trim()&&u.push(m)}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 Zc(e){if(e.blocked)return e.detail??e.reason}var eu=V(()=>{"use strict";Ao()});function xR(e){let r=Date.now();if(e.completionBlocker&&!ru(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&ER(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=ht(o);if(s.blocked){let i=Jc(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Qc({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Zc(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(PR(e))return{state:"done",reason:"empty abandoned worker record"};let o=Vc(e.error);if(o)return{state:"blocked",reason:o.reason};let s=gt({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>_R)return{state:"needs_attention",reason:`no first stream event ${mi(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Rt?{state:"stale",reason:`no log/event/heartbeat activity for ${mi(n)}s`}:{state:"ok",reason:"recent activity"}}function ru(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function PR(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 ER(e){let r=null;if(typeof e=="string"?r=kt(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 AR(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??ft(t))}function T(e,r={}){let t=_o(e.stdoutPath),n=ve(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=AR(e,t.finalResult,n),i=o?!1:L(e.pid),a=go(e.stdoutPath),l=go(e.stderrPath),c=go(e.heartbeatPath),u=on(e.worktreePath),d=yo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=hc([t.lastEventAt,n.lastHeartbeatAt,ho(e.stdoutPath),ho(e.stderrPath),ho(e.heartbeatPath)]),f=t.error||!i&&!s&&ko(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,h=ru(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,g=xR({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:f,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}),R=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:R,attention:g,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:m,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:f,changedFiles: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 oe(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function bt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function mn(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 _R,Rt,J=V(()=>{"use strict";Nr();xo();Gc();Po();Se();Eo();eu();Ao();w();_R=18e4,Rt=6e5});import{readFileSync as IR}from"node:fs";function OR(e){if(!e||process.platform!=="linux")return null;try{return IR(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Oo(e){if(!e.pid||process.platform!=="linux")return!0;let r=OR(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 No(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!Oo(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var To=V(()=>{"use strict";J()});import nu from"node:os";import NR from"node:path";function tu(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function TR(e=v(),r,t){let n=tu(e.perWorkerMemBytes,fn),o=tu(e.memReserveBytes,gn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):hn)),i=Mo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??nu.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Ei(e,r={}){let t=r.perWorkerMemBytes??fn,n=r.memReserveBytes??gn,o=r.memUtilization??hn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Do)}function DR(){return sn()}function MR(e){let r=0;for(let t of fe(e)){let n=_(NR.join(x(e.id),"workers",b(t),"worker.json"),void 0);!n||!No(n)||r++}return r}function UR(){let e=0;for(let r of Y())e+=MR(r);return e}function rr(e){let r=e.config??v(),t=e.totalMemBytes??nu.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=TR(r,e.configuredMaxWorkersOverride,t),c=Be(r),u=e.freeMemBytes??DR(),d=e.activeWorkers??UR(),m=Math.max(0,Math.floor(t*s)-o),f=Math.max(0,Math.floor(m/n)),p=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,g=Math.max(0,Math.min(i??h,f)),R=Math.max(0,g-d),P=Math.min(R,p),D=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Le({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});D&&!D.ok&&(P=0);let j=null;return P<=0&&(D&&!D.ok?j=D.reason??"disk gate blocked worker admission":d>=g?j=`at worker limit (${d}/${g} running)`:p<=0?j="insufficient free memory \u2014 waiting for workers to finish":j="no worker slots available"),{ok:P>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:f,maxConcurrentWorkers:g,activeWorkers:d,slotsAvailable:P,reason:j,...D?{diskGate:D}:{}}}var fn,gn,hn,Do,vt=V(()=>{"use strict";vo();O();Ie();Uo();ln();M();Or();To();w();fn=500*1024*1024,gn=4*1024*1024*1024,hn=.85,Do=64});function Dr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Mo(e){let r=e.config??{},t=e.env??process.env,n=Dr(r.perWorkerMemBytes,fn),o=Dr(r.memReserveBytes,gn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):hn)),i=Ei(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,Do),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,Do),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function Ai(e={}){let r=e.totalMemBytes??0,t=Ei(r,{perWorkerMemBytes:Dr(e.config?.perWorkerMemBytes,fn),memReserveBytes:Dr(e.config?.memReserveBytes,gn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):hn}),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 Uo=V(()=>{"use strict";vt()});var su={};Vk(su,{runDeviceLogin:()=>Ii});import ou from"node:os";function WR(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?Xe(String(r)):void 0}async function BR(e){await new Promise(r=>setTimeout(r,e))}async function Ii(e){let r=WR(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=`${ou.hostname()} (${ou.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 BR(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?(kn(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 Oi=V(()=>{"use strict";O();w()});import{existsSync as au,mkdirSync as lu,readFileSync as cu,writeFileSync as uu}from"node:fs";import{homedir as LR,totalmem as HR}from"node:os";import Ni from"node:path";import FR from"node:os";function yn(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return KR.has(t)?{ok:!1,value:r,reason:"placeholder"}:$R.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function Lo(e){let r=yn(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 v(){if(!au(Wo))return{};try{return JSON.parse(cu(Wo,"utf8"))}catch{return{}}}function tr(e){lu(Bo,{recursive:!0}),uu(Wo,`${JSON.stringify(Ti(e),null,2)}
|
|
11
|
-
|
|
12
|
-
`,{mode:384})}function ne(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Rn().apiKey}function kn(e){du({...Rn(),apiKey:e})}function iu(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Rn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Mr(e,r){du({...Rn(),runnerToken:r,runnerTokenAgentOsId:e})}function K(e){let r=bn(e);return r||Ho("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function pu(e){return bn(e)}function bn(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?Xe(String(r)):void 0}function GR(e,r){let t=e||iu(r)||(r?void 0:iu(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 Di(e,r,t){let n=GR(e,r);if(n)return{ok:!0,secret:n};let o=ne(),s=bn(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 G(e,r,t){let n=await Di(e,r,t);if(n.ok)return n.secret;Ho(n.reason)}async function mu(e,r){let t=ne(),n=bn(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 fu(e,r,t){let n=ne(),o=bn(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||ne();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${K(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 gu(e){let r=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";r||Ho("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(St),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 Ho(e){console.error(e),process.exit(1)}function Fo(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 $o(e){let r=v(),t=Le({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=Ai({totalMemBytes:FR.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=VR(r,e),s=Ti({...r,...jR(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!yn(s.agentOsId).ok&&Ho(Lo(s.agentOsId)),tr(s);let i=We(process.env,s),a,l=ne(),c=s.agentOsId;if(l&&c)try{let u=await Ur(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});Mr(c,u),a="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{a="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:q(Wo),config:wt(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:a??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function hu(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){kn(r),console.log(JSON.stringify({ok:!0,credentialsPath:q(St)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(Oi(),su));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:q(St)},null,2))}var Bo,Wo,St,$R,KR,QO,ZO,O=V(()=>{"use strict";bo();Ze();w();Ie();Uo();ln();Bo=Ni.join(LR(),".kynver"),Wo=Ni.join(Bo,"config.json"),St=Ni.join(Bo,"credentials"),$R=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,KR=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);QO=500*1024*1024,ZO=4*1024*1024*1024});O();import{mkdirSync as Bk,realpathSync as Lk}from"node:fs";import{fileURLToPath as GA}from"node:url";O();w();Oi();import YR from"node:os";function JR(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?Xe(String(r)):void 0}async function qR(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 Ko(e){let r=JR(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)),ne()||(typeof e.apiKey=="string"?kn(e.apiKey):(await Ii({...e,apiBaseUrl:r})).ok||process.exit(1));let t=ne();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await qR(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 $o(o),console.log(""),console.log(` Bootstrap complete \u2014 ${YR.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online and configures local Kynver Cron when needed."),console.log(" Persistent background service (Linux): `kynver cron install --install-systemd` after your first start."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}O();import tE from"node:os";O();Ze();O();import XR from"node:path";import{homedir as QR}from"node:os";O();bo();Ze();import ku from"node:path";function zR(e){return ku.resolve(at(e.trim()))}function Ct(e,r,t){let n=e?.trim();return n?{repo:zR(n),source:r,persistedInConfig:t}:null}function yu(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function He(e={}){let r=e.env??process.env,t=e.config??v(),n=Ct(t.defaultRepo,"config",!0);if(n)return n;let o=Ct(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Ct(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||yu(lt({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Ru(e={}){let r=e.env??process.env,t=e.config??v(),n=Ct(t.defaultRepo,"config",!0);if(n)return n;let o=Ct(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Ct(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||yu(Ro({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function bu(e,r){let t={...r??v(),defaultRepo:Re(ku.resolve(e))};return tr(t),t}function vn(e){return{defaultRepo:q(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var Mi=XR.join(QR(),".kynver","config.json");function Sn(e){let r=v(),t=Ru({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(Mi),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(Mi),resolved:vn(t),config:wt(r)};let n=bu(t.repo,r),o=vn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(Mi),resolved:o,config:wt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function vu(e=!1){let r=Sn();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 Su(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 Ne(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 ZR,readFileSync as eb,renameSync as rb,writeFileSync as tb}from"node:fs";import{homedir as nb}from"node:os";import Cu from"node:path";function wu(e){return JSON.stringify(Ui(e))}function Ui(e){if(Array.isArray(e))return e.map(Ui);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=Ui(e[t]);return r}return e}function Wi(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 _u(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Cu.join(nb(),".kynver",`instruction-bundle-${r}.json`)}function xu(e,r){try{let t=_u(e);ZR(Cu.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;tb(n,JSON.stringify(r),"utf8"),rb(n,t)}catch{}}function Pu(e){try{let r=eb(_u(e),"utf8"),t=JSON.parse(r);return wn(t)?t:null}catch{return null}}var ob="embedded-1",sb=[{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"}],ib={"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`. 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(`
|
|
5
|
+
`):""}function Hc(e){return e?Ni(Bc.resolve(e),"utf8"):""}function Ir(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 Fc(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 Ti(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=T(()=>{"use strict"});function Wy(e){return My.has(e)?!0:Uy.some(r=>e.endsWith(r))}function rr(e){let r={...e};for(let t of Object.keys(r))Wy(t)&&delete r[t];return r}var Dy,My,Uy,at=T(()=>{"use strict";Dy=["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"],My=new Set(Dy),Uy=["_SECRET","_API_KEY"]});import{spawnSync as Kc}from"node:child_process";function me(e,r,t={}){let n=Kc("git",r,pe({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 jc(e){me(e,["rev-parse","--show-toplevel"])}function cn(e){return me(e,["status","--short"],{allowFailure:!0}).split(`
|
|
6
|
+
`).map(r=>r.trim()).filter(Boolean)}function re(e,r){try{let t=Kc("git",r,pe({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 $c(e,r,t){let n=re(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 Ao(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 Di(n,"missing worktree path");let s=re(e,["rev-parse","HEAD"]);if(s.status!==0)return Di(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=re(e,["rev-parse",n]);if(f.status!==0)return Di(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=$c(e,i,a),c=$c(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 Di(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var Ce=T(()=>{"use strict";w();at()});import{homedir as Mi}from"node:os";import Or from"node:path";function Vc(e){return e==="~"?Mi():e.startsWith("~/")||e.startsWith("~\\")?Or.join(Mi(),e.slice(2)):e}function lt(e){return Or.resolve(Vc(e))}function ve(e){let r=Vc(e),t=Or.resolve(r),n=Or.resolve(Mi());return t===n?"~":t.startsWith(`${n}${Or.sep}`)?`~/${Or.relative(n,t).split(Or.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Y(e){return ve(e)}var He=T(()=>{"use strict"});import{existsSync as Wi,readFileSync as Yc}from"node:fs";import{homedir as By}from"node:os";import tr from"node:path";import{fileURLToPath as Ly}from"node:url";function Fy(e){let r=tr.join(e,"package.json");if(!Wi(r))return null;try{let t=JSON.parse(Yc(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function $y(e){return Fy(e)==="kynver"}function Gc(e){let r=tr.resolve(e);if(!Wi(r))return null;let t=re(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?tr.resolve(n):null}function Ky(e=import.meta.url){let r=tr.dirname(Ly(e));for(let t=0;t<8;t+=1){let n=tr.join(r,"package.json");if(Wi(n))try{if(JSON.parse(Yc(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=tr.dirname(r);if(o===r)break;r=o}return null}function Ui(e,r,t,n){if(!t)return;let o=tr.resolve(t);e.has(o)||$y(o)&&(e.add(o),r.push({repo:o,source:n}))}function Jc(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Ui(t,n,Gc(r),"cwd_git");let o=Ky(e?.runtimeModuleUrl??import.meta.url);o&&Ui(t,n,Gc(o),"runtime_checkout");let s=By();for(let i of Hy)Ui(t,n,lt(tr.join(s,i)),"well_known_path");return n}function ct(e){return Jc(e)[0]??null}function jy(e){let r=tr.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 Io(e){let r=Jc(e);return r.find(n=>!jy(n.repo))??r[0]??null}var Hy,Oo=T(()=>{"use strict";Ce();He();Hy=["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 Pe(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 Pe(r,e).boxKind}var Ee=T(()=>{"use strict"});function Bi(e,r){return e==="forge"?4:Math.max(1,r)}function un(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 No=T(()=>{"use strict"});import{readFileSync as Vy}from"node:fs";import zc from"node:os";function dn(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=Vy("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return zc.freemem()}var To=T(()=>{"use strict"});import{existsSync as Gy,readFileSync as Yy,statfsSync as Jy}from"node:fs";function Li(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Gy(e))continue;let r=Yy(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Xc(e={}){if(!(e.forceWsl===void 0?Li():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||pt,n=e.wslHostFreeWarnBytes??qy,o=e.wslHostFreeCriticalBytes??zy,s=e.statfs??Jy,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,m=(a/(1024*1024*1024)).toFixed(1),p=null;return f||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Xy()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Xy(){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 qy,zy,pt,Hi=T(()=>{"use strict";qy=25*1024*1024*1024,zy=12*1024*1024*1024,pt="/mnt/c"});import{execFileSync as Qc}from"node:child_process";import{existsSync as Mo,readFileSync as Zc,readdirSync as Qy,statSync as Zy}from"node:fs";import Fi from"node:path";function Do(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function eu(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Qc("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&&Mo(Fi.join(t,"Users",r))?r:null}function oR(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??eu();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function sR(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 iR(){try{if(Mo("/proc/sys/kernel/core_pattern"))return Zc("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Qc("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function aR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function lR(e,r=pt){let t=Fi.join(r,"Users",e,".wslconfig");if(!Mo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Zc(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 cR(e){if(!Mo(e))return[];let r=Qy(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Fi.join(e,n.name);try{let s=Zy(o),i=sR(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?Li():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||pt,n=e.windowsUser??eu(),o=e.warnBelowBytes??Do("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",eR),s=e.criticalBelowBytes??Do("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",rR),i=e.warnCount??Do("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",tR),a=e.criticalCount??Do("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",nR),l=(e.readCorePattern??iR)(),c=aR(l),u=null;n&&(u=(e.readWslConfig??lR)(n,t));let d=u?.maxCrashDumpCount??null,f=d===-1,m=oR({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)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 p;try{p=(e.listDumps??cR)(m)}catch(W){return{ok:!1,path:m,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 ${m}: ${W.message}`,probeError:W.message}}let h=p.reduce((W,_)=>W+_.bytes,0),k=p.length,g=[...new Set(p.map(W=>W.executableHint).filter(W=>!!W))],y=h>=s,A=h>=o,x=k>=a,E=k>=i,V=!(y||x||A||E),$=null;if(!V){let W=y||x?"critical":"warning",_=(h/1024**3).toFixed(1),ce=g.length>0?g.join(", "):"unknown";$=`WSL crash dumps ${W}: ${k} file(s), ${_} GiB at ${m} (executables: ${ce}). `+uR({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:V,path:m,windowsUser:n,dumpCount:k,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:g,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:$,probeError:null}}function uR(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 eR,rR,tR,nR,pn=T(()=>{"use strict";Hi();eR=5*1024*1024*1024,rR=10*1024*1024*1024,tR=2,nR=4});import{statfsSync as dR}from"node:fs";function $e(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??pR,n=e.diskFreeCriticalBytes??mR,o=e.diskMaxUsedPercent??fR,s=e.diskHardMaxUsedPercent??gR,i=dR(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,m=f&&c>o,p=f&&c>s,h=!u&&!d&&!m&&!p,k=e.skipWslHostCheck?null:Xc(e.wslHost),g=e.skipWslCrashDumpCheck?null:gr(e.wslCrashDumps),y=h&&(k?k.ok:!0)&&(g?g.ok:!0),A=null;return y||(A=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,g&&!g.ok?g.reason:null].filter(Boolean).join("; ")),hR({ok:y,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:A,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 hR(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 pR,mR,fR,gR,mn=T(()=>{"use strict";pn();Hi();pR=30*1024*1024*1024,mR=15*1024*1024*1024,fR=80,gR=90});import{existsSync as ru}from"node:fs";import{homedir as nu}from"node:os";import hr from"node:path";function ae(e){let r=hr.resolve(lt(e.trim()));for(;kR.has(hr.basename(r));)r=hr.dirname(r);return r}function be(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ae(e);let r=R().harnessRoot?.trim();if(r)return ae(r);let t=hr.join(nu(),".kynver","harness");return ru(t)?t:ru(tu)?tu:t}function _e(e){return hr.join(ae(e),"runs")}function kr(e){return hr.join(ae(e),"worktrees")}function mt(){let e=be();return{harnessRoot:e,runsDir:_e(e),worktreesDir:kr(e)}}function ft(e,r){return hr.join(e,b(r))}var tu,kR,xe=T(()=>{"use strict";O();He();w();tu=hr.join(nu(),".openclaw","harness"),kR=new Set(["runs","worktrees"])});import{existsSync as yR,readdirSync as RR,statSync as vR}from"node:fs";import gt from"node:path";function te(){return mt()}function B(e){let{runsDir:r}=te();return C(gt.join(ft(r,b(e)),"run.json"))}function J(){let{runsDir:e}=te();return ou(e)}function Uo(e){return ou(_e(e))}function bR(e){try{return vR(e).isDirectory()}catch{return!1}}function ou(e){if(!yR(e))return[];let r=[];for(let t of RR(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=gt.join(e,t.name);if(!bR(n))continue;let o=C(gt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function fe(e,r){let{runsDir:t}=te();return C(gt.join(ft(t,b(e)),"workers",b(r),"worker.json"))}function De(e){let{runsDir:r}=te();ie(gt.join(ft(r,e.id),"run.json"),e)}function F(e,r){let{runsDir:t}=te();ie(gt.join(ft(t,e),"workers",r.name,"worker.json"),r)}function P(e){let{harnessRoot:r}=te();return fn(r,e)}function fn(e,r){return ft(_e(e),b(r))}var D=T(()=>{"use strict";xe();w()});import{existsSync as SR,readdirSync as wR}from"node:fs";import CR from"node:path";function ge(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(b(n));let t=CR.join(P(e.id),"workers");if(!SR(t))return[...r];for(let n of wR(t,{withFileTypes:!0}))n.isDirectory()&&r.add(b(n.name));return[...r]}var Nr=T(()=>{"use strict";D();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 su(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 iu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?su(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=su(t);return n||t}var au=T(()=>{"use strict"});import{existsSync as _R,readFileSync as xR}from"node:fs";function lu(e){return e==="complete"}function ht(e){return lu(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!_R(e))return r;let t=Date.now()+PR,n=new Date(t).toISOString(),o=xR(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let s of o){let i=it(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)),lu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=iu(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 PR,Tr=T(()=>{"use strict";au();w();PR=6e4});function AR(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function IR(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 OR(e){let r=AR(e[0]);return!!(r&&ER.has(r))}function Ki(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ji(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function NR(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function TR(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;cu.has(n)&&(t+=1);continue}r.push(n)}}return r}function DR(e){let r=!1,t=e.map((o,s)=>{let i=NR(o),a=e[s-1];return a&&cu.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=TR(t);if(n.length===2){let[o,s]=n;if(ji(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(Ki(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 Vi(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=IR(i.trim());if(!a.length||!OR(a))return i;let l=DR(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function uu(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 MR(e){let{pattern:r,target:t}=uu(e);return r?ji(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Ki(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function UR(e){let{pattern:r,target:t}=uu(e);if(!r)return null;if(ji(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Ki(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function WR(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 BR(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 Gi(e){let r=e.meta?.trim()||(e.command?BR(e.command):null)||null;if(r){let t=MR(r),n=WR(t);if(n)return n;let o=UR(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=Vi(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 ER,cu,du=T(()=>{"use strict";ER=new Set(["rg","ripgrep","grep"]),cu=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function gn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function $R(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 hn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function KR(e){let r=e.metadata;if(!hn(r))return null;let t=r.vulnerabilities;if(!hn(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 jR(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 VR(e,r){let t=e.error;if(hn(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?gn(o.split(`
|
|
8
|
+
`).find(Boolean)??o,160):"npm audit failed"}function GR(e){let r=`${e.stdout}
|
|
9
|
+
${e.stderr}`.trim(),t=$R(r);if(!t||!hn(t)){let o=gn(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(hn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${VR(t,e.stderr)}`};let n=KR(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:jR(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function YR(e){return LR.test(e)}function JR(e){return HR.test(e)}function qR(e){let r=Gi({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&&FR.test(n)){let i=gn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Vi(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=gn(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 Yi(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(YR(e.command)){let i=r.trim()||n.trim()||t.trim();return GR({exitCode:e.exitCode,stdout:i,stderr:t})}if(JR(e.command))return qR({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Gi({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=gn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var LR,HR,FR,pu=T(()=>{"use strict";du();LR=/\bnpm\s+audit\b/i,HR=/\b(rg|ripgrep)\b/i,FR=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as zR,readFileSync as XR}from"node:fs";function QR(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function mu(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 ZR(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 fu(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 ev(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Wo(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!zR(e))return r;let t=XR(e,"utf8").split(`
|
|
10
|
+
`).filter(Boolean);for(let n of t){let o=it(n);if(!o)continue;let s=QR(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=mu(a);l&&(r.currentTool=l)}let i=fu(o);i&&ev(r,Yi({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&ZR(r,o)}return r}function rv(e){let r=fu(e);if(!r)return;let t=Yi({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=_o(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 gu(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] ${_o(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"?rv(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=mu(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${_o(String(e.result||""))}`.trim()}var Bo=T(()=>{"use strict";pu();w()});function nv(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function hu(e){let r=(e??"").trim();if(!r)return null;for(let t of tv)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${nv(r)}`};return null}var tv,ku=T(()=>{"use strict";tv=[{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 yu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ov(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 sv(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:yu(e.head)}function iv(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||ov(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=yu(e.headCommit)??sv(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:iv(s,r,t)}}var Lo=T(()=>{"use strict"});function kn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function av(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 lv(e){if(kn(e.headCommit)||kn(e.prUrl)||kn(e.artifactBundlePath)||kn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&kn(r.head))}function yt(e){return av(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:lv(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 Ru(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Ho=T(()=>{"use strict"});function Ji(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 vu(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=Ji(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ji(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ji(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=vu(l);for(let u of n){let d=vu(u);d>c&&(l=u,c=d)}return l}var Fo=T(()=>{"use strict"});function bu(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 Su(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function cv(e){return new Set(e.map(r=>Su(bu(r)??r)).filter(Boolean))}function wu(e,r,t){let n=bu(e)??e;if(!n)return"unrelated";let o=Su(n);return cv(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Cu=T(()=>{"use strict"});function vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function uv(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]}`:vt(e)}function $o(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function _u(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=Dr(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 xu(e,r){let t=[],n=Dr(vt(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 Pu(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(!uv(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(vt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Dr(r.targetPrUrls[0]):null):null;if(s){let d=xu(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 p=_u(n).find(h=>h.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=_u(n),a=new Map(i.map(d=>[$o(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>$o(Dr(d)??d)).filter(Boolean)),c=xu(t,n);if(r.landingOnly)for(let d of c){let f=a.get($o(d)),m=wu(d,r.targetPrUrls,f);if(!(m==="contract"||m==="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=$o(Dr(d)??d),m=a.get(f);if(!m){u.push(f);continue}m.outcome!=="merged"&&!m.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 Eu(e){if(e.blocked)return e.detail??e.reason}var Au=T(()=>{"use strict";Fo();Cu()});function pv(e){let r=Date.now();if(e.completionBlocker&&!Iu(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&fv(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=Ru(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Pu({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Eu(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(mv(e))return{state:"done",reason:"empty abandoned worker record"};let o=hu(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>dv)return{state:"needs_attention",reason:`no first stream event ${Ti(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 ${Ti(n)}s`}:{state:"ok",reason:"recent activity"}}function Iu(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function mv(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 fv(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 gv(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=Wo(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=gv(e,t.finalResult,n),i=o?!1:H(e.pid),a=xo(e.stdoutPath),l=xo(e.stderrPath),c=xo(e.heartbeatPath),u=cn(e.worktreePath),d=Ao(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=Fc([t.lastEventAt,n.lastHeartbeatAt,Po(e.stdoutPath),Po(e.stderrPath),Po(e.heartbeatPath)]),m=t.error||!i&&!s&&Eo(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,h=Iu(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,g=pv({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:m,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:m,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 oe(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 yn(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 dv,bt,q=T(()=>{"use strict";Tr();Bo();ku();Lo();Ce();Ho();Au();Fo();w();dv=18e4,bt=6e5});import{readFileSync as hv}from"node:fs";function kv(e){if(!e||process.platform!=="linux")return null;try{return hv(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Ko(e){if(!e.pid||process.platform!=="linux")return!0;let r=kv(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 jo(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=M(e);return r.alive&&!Ko(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Vo=T(()=>{"use strict";q()});import Nu from"node:os";import yv from"node:path";function Ou(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Rv(e=R(),r,t){let n=Ou(e.perWorkerMemBytes,Rn),o=Ou(e.memReserveBytes,vn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):bn)),i=Yo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Nu.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function qi(e,r={}){let t=r.perWorkerMemBytes??Rn,n=r.memReserveBytes??vn,o=r.memUtilization??bn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Go)}function vv(){return dn()}function bv(e){let r=0;for(let t of ge(e)){let n=C(yv.join(P(e.id),"workers",b(t),"worker.json"),void 0);!n||!jo(n)||r++}return r}function Sv(){let e=0;for(let r of J())e+=bv(r);return e}function nr(e){let r=e.config??R(),t=e.totalMemBytes??Nu.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Rv(r,e.configuredMaxWorkersOverride,t),c=Fe(r),u=e.freeMemBytes??vv(),d=e.activeWorkers??Sv(),f=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(f/n)),p=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,g=Math.max(0,Math.min(i??h,m)),y=Math.max(0,g-d),x=Math.min(y,p),U=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:$e({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});U&&!U.ok&&(x=0);let V=null;return x<=0&&(U&&!U.ok?V=U.reason??"disk gate blocked worker admission":d>=g?V=`at worker limit (${d}/${g} running)`:p<=0?V="insufficient free memory \u2014 waiting for workers to finish":V="no worker slots available"),{ok:x>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:m,maxConcurrentWorkers:g,activeWorkers:d,slotsAvailable:x,reason:V,...U?{diskGate:U}:{}}}var Rn,vn,bn,Go,wt=T(()=>{"use strict";To();O();Ee();Jo();mn();D();Nr();Vo();w();Rn=500*1024*1024,vn=4*1024*1024*1024,bn=.85,Go=64});function Mr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Yo(e){let r=e.config??{},t=e.env??process.env,n=Mr(r.perWorkerMemBytes,Rn),o=Mr(r.memReserveBytes,vn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):bn)),i=qi(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,Go),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,Go),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function zi(e={}){let r=e.totalMemBytes??0,t=qi(r,{perWorkerMemBytes:Mr(e.config?.perWorkerMemBytes,Rn),memReserveBytes:Mr(e.config?.memReserveBytes,vn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):bn}),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 Jo=T(()=>{"use strict";wt()});import{existsSync as Tu,mkdirSync as wv,readFileSync as Du,writeFileSync as Cv}from"node:fs";import{homedir as _v}from"node:os";import Mu from"node:path";function Xi(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 xv(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
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 Ct(e=we){return Tu(e)?Xi(Du(e,"utf8")):new Map}function qo(e,r={}){let t=r.filePath??we,n=Tu(t)?Du(t,"utf8"):"",o=Xi(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=Xi(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=xv(o);return l&&(wv(Mu.dirname(t),{recursive:!0}),Cv(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var we,yr=T(()=>{"use strict";we=Mu.join(_v(),".kynver",".env")});var Qi,Sn=T(()=>{"use strict";Qi="1.5G"});import{spawnSync as Pv}from"node:child_process";function Cn(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:wn!==void 0?wn:process.platform!=="linux"?(wn=!1,!1):(wn=Pv("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,wn)}function Zi(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??Qi,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 wn,zo=T(()=>{"use strict";Sn()});import{realpathSync as Ev}from"node:fs";function _t(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 Ev.native(t)}catch{return t}}function Wu(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var Xo=T(()=>{"use strict"});import{existsSync as Av,mkdirSync as Iv,writeFileSync as Ov}from"node:fs";import{homedir as Nv}from"node:os";import Lu from"node:path";import{spawnSync as Bu}from"node:child_process";function Tv(){return Lu.join(Nv(),".config","systemd","user")}function Dv(e){let r=Wu(e.kynverBin?.trim()||_t());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 Qo(e,r){if(!Cn())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=Tv(),n=Lu.join(t,_n),o=Dv(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."};Iv(t,{recursive:!0});let s=Av(n);Ov(n,o,"utf8");let i=Bu("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=Bu("systemctl",["--user","enable","--now",_n],{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 ${_n}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}var _n,Zo=T(()=>{"use strict";zo();Xo();_n="kynver-cron-daemon.service"});import{existsSync as Mv,readFileSync as Uv}from"node:fs";function xt(){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(Mv("/proc/version")){let e=Uv("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}function xn(e){return e==="linux"}var Pn=T(()=>{"use strict"});function Hu(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}function Wv(e){return"keeper"}function Fu(e,r,t={}){if(Hu(t.installSystemd)||Hu(t["install-systemd"]))return xn(r)?"systemd":"keeper";let n=e.daemonSupervisionOwner;return n==="systemd"&&xn(r)?"systemd":n==="keeper"?"keeper":Wv(r)}function Bv(){return{KYNVER_CRON_DAEMON_PRESENT:"1"}}function ea(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 ra(e,r={},t){let n=t??xt(),o=Fu(e,n,r);return{hostKind:n,owner:o,envUpdates:Bv(),guidance:ea(n,o)}}var es=T(()=>{"use strict";Pn()});import{existsSync as Lv}from"node:fs";import $u from"node:path";import{homedir as Ku}from"node:os";function Hv(){return $u.join(Ku(),".config","systemd","user",_n)}function ta(){return Lv(Hv())}function rs(e,r={},t){let n=ra(e,r,t),o={};e.daemonSupervisionOwner||(o.daemonSupervisionOwner=n.owner);let s={...e,...o},i=!1;Object.keys(o).length>0&&(le(s),i=!0);let a=qo(n.envUpdates,{filePath:we});return{policy:n,configPath:Y($u.join(Ku(),".kynver","config.json")),envFilePath:Y(a.path),envChanged:a.changed,configUpdated:i}}function ts(e,r){return e.daemonSupervisionOwner==="systemd"&&ta()?"systemd":e.daemonSupervisionOwner??"keeper"}var En=T(()=>{"use strict";yr();He();O();Zo();es()});var Vu={};Iy(Vu,{runDeviceLogin:()=>na});import ju from"node:os";function Fv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||R().apiBaseUrl;return r?er(String(r)):void 0}async function $v(e){await new Promise(r=>setTimeout(r,e))}async function na(e){let r=Fv(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=`${ju.hostname()} (${ju.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 $v(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?(An(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 oa=T(()=>{"use strict";O();w()});import{existsSync as Yu,mkdirSync as Ju,readFileSync as qu,writeFileSync as zu}from"node:fs";import{homedir as Kv,totalmem as jv}from"node:os";import sa from"node:path";import Vv from"node:os";function In(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return Yv.has(t)?{ok:!1,value:r,reason:"placeholder"}:Gv.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function ss(e){let r=In(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 R(){if(!Yu(ns))return{};try{return JSON.parse(qu(ns,"utf8"))}catch{return{}}}function le(e){Ju(os,{recursive:!0}),zu(ns,`${JSON.stringify(ia(e),null,2)}
|
|
14
|
+
`,{mode:384})}function ia(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:ve(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:ve(e.defaultRepo.trim())}:{}}}function Et(e){return ia(e)}function Jv(e,r){let t=On(),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"?ct()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||Io()?.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:er(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function qv(e,r,t=jv()){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=Pe(process.env,{...e,...o?{boxKind:ut(o)}:{}}).boxKind,i=$e({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=zi({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:un(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 dt(s,l)?{maxConcurrentWorkers:Bi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}:{maxConcurrentWorkers:un(s,l),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}}return{maxConcurrentWorkers:Bi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function On(){if(!Yu(Pt))return{};try{return JSON.parse(qu(Pt,"utf8"))}catch{return{}}}function Xu(e){Ju(os,{recursive:!0}),zu(Pt,`${JSON.stringify(e,null,2)}
|
|
15
|
+
`,{mode:384})}function ne(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:On().apiKey}function An(e){Xu({...On(),apiKey:e})}function Gu(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=On();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Ur(e,r){Xu({...On(),runnerToken:r,runnerTokenAgentOsId:e})}function j(e){let r=Nn(e);return r||is("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Qu(e){return Nn(e)}function Nn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||R().apiBaseUrl;return r?er(String(r)):void 0}function zv(e,r){let t=e||Gu(r)||(r?void 0:Gu(R().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 aa(e,r,t){let n=zv(e,r);if(n)return{ok:!0,secret:n};let o=ne(),s=Nn(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 G(e,r,t){let n=await aa(e,r,t);if(n.ok)return n.secret;is(n.reason)}async function Zu(e,r){let t=ne(),n=Nn(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 ed(e,r,t){let n=ne(),o=Nn(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||ne();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${j(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 rd(e){let r=(e.agentOsId?String(e.agentOsId):R().agentOsId)||"";r||is("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:Y(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 is(e){console.error(e),process.exit(1)}function as(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 ls(e){let r=R(),t=$e({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=zi({totalMemBytes:Vv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=qv(r,e),s=ia({...r,...Jv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!In(s.agentOsId).ok&&is(ss(s.agentOsId)),le(s);let i=Pe(process.env,s),a=rs(s,e);a.configUpdated&&(s=R());let l,c=ne(),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:Y(ns),config:Et(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 td(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){An(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(Pt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(oa(),Vu));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(Pt)},null,2))}var os,ns,Pt,Gv,Yv,IT,OT,O=T(()=>{"use strict";Oo();He();w();Ee();No();Jo();mn();En();os=sa.join(Kv(),".kynver"),ns=sa.join(os,"config.json"),Pt=sa.join(os,"credentials"),Gv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,Yv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);IT=500*1024*1024,OT=4*1024*1024*1024});O();import{mkdirSync as wy,realpathSync as Cy}from"node:fs";import{fileURLToPath as KI}from"node:url";O();w();oa();import Xv from"node:os";function Qv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||R().apiBaseUrl;return r?er(String(r)):void 0}async function Zv(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 cs(e){let r=Qv(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)),ne()||(typeof e.apiKey=="string"?An(e.apiKey):(await na({...e,apiBaseUrl:r})).ok||process.exit(1));let t=ne();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await Zv(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 ls(o),console.log(""),console.log(` Bootstrap complete \u2014 ${Xv.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 ZE from"node:os";O();He();O();import rb from"node:path";import{homedir as tb}from"node:os";O();Oo();He();import nd from"node:path";function eb(e){return nd.resolve(lt(e.trim()))}function At(e,r,t){let n=e?.trim();return n?{repo:eb(n),source:r,persistedInConfig:t}:null}function od(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ke(e={}){let r=e.env??process.env,t=e.config??R(),n=At(t.defaultRepo,"config",!0);if(n)return n;let o=At(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=At(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||od(ct({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function sd(e={}){let r=e.env??process.env,t=e.config??R(),n=At(t.defaultRepo,"config",!0);if(n)return n;let o=At(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=At(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||od(Io({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function id(e,r){let t={...r??R(),defaultRepo:ve(nd.resolve(e))};return le(t),t}function Tn(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var la=rb.join(tb(),".kynver","config.json");function Dn(e){let r=R(),t=sd({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(la),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:Y(la),resolved:Tn(t),config:Et(r)};let n=id(t.repo,r),o=Tn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(la),resolved:o,config:Et(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function ad(e=!1){let r=Dn();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 ld(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 Me(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 nb,readFileSync as ob,renameSync as sb,writeFileSync as ib}from"node:fs";import{homedir as ab}from"node:os";import ud from"node:path";function cd(e){return JSON.stringify(ca(e))}function ca(e){if(Array.isArray(e))return e.map(ca);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ca(e[t]);return r}return e}function ua(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 Mn(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 dd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return ud.join(ab(),".kynver",`instruction-bundle-${r}.json`)}function pd(e,r){try{let t=dd(e);nb(ud.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;ib(n,JSON.stringify(r),"utf8"),sb(n,t)}catch{}}function md(e){try{let r=ob(dd(e),"utf8"),t=JSON.parse(r);return Mn(t)?t:null}catch{return null}}var lb="embedded-1",cb=[{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"}],ub={"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`. 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(`
|
|
13
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(`
|
|
14
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(`
|
|
15
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(`
|
|
16
|
-
`)},ab={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},_t={version:ob,generatedAt:"1970-01-01T00:00:00.000Z",personas:sb,instructions:ib,policyThresholds:ab};var Cn=_t,Eu="embedded";function Wr(){return Cn.version}function kr(){return Eu}function Au(e,r){Cn=e,Eu=r}function _n(e){let r=Cn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=_t.instructions[e];return typeof t=="string"?t:""}function xt(e,r){let t=Cn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=_t.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Iu(e){if(!e)return null;let r=e.trim().toLowerCase();return Cn.personas.find(t=>t.slug===r)??null}import{createPublicKey as cb,verify as ub}from"node:crypto";var lb={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Ou(e,r=process.env){let t=Wi(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=lb[e];return n?Wi(n):null}var db=Buffer.from("302a300506032b6570032100","hex");function pb(e){return cb({key:Buffer.concat([db,Buffer.from(e)]),format:"der",type:"spki"})}function mb(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(wu(e.bundle),"utf8");return ub(null,n,pb(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 Nu(e,r=process.env){if(!wn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Ou(e.publicKeyId,r);return t?mb(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var fb=15*6e4,gb=1e4,nr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Pn(e,r){console.error(JSON.stringify({event:e,...r}))}function Tu(e,r,t){let n=Nu(e);return n.ok?(Au(n.bundle,r),r==="server"&&xu(t,e),!0):(Pn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function xn(e){if(nr.diskCacheTried)return!1;nr.diskCacheTried=!0;let r=Pu(e);return r?Tu(r,"disk",e):!1}async function Du(e){let r=e.nowMs??Date.now(),t=()=>({source:kr(),version:Wr(),updated:!1});if(!e.force&&r-nr.lastAttemptAtMs<fb)return t();nr.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return kr()==="embedded"&&xn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),gb);try{let l=Ne(o);delete l["Content-Type"],nr.etag&&kr()==="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,Pn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),kr()==="embedded"&&xn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Pn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),kr()==="embedded"&&xn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Tu(u,"server",e.agentOsId)?kr()==="embedded"&&xn(e.agentOsId)?{...t(),updated:!0}:t():(nr.etag=c.headers.get("etag"),Pn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Wr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Pn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),kr()==="embedded"&&xn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ie();Uo();import hb from"node:os";function Mu(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Uu(e=v(),r=process.env){let t=We(r,e),n=Mo({config:e,totalMemBytes:hb.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 a=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",l="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";a?s.push(l):o.push(l)}let i=s.length===0;for(let a of o)Mu("warn",a);for(let a of s)Mu("error",a);return{ok:i,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:n.configuredMaxWorkers??n.autoCap,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as kb,readFileSync as yb,renameSync as Rb,writeFileSync as bb}from"node:fs";import{homedir as vb}from"node:os";import Wu from"node:path";function Bu(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Wu.join(vb(),".kynver",`daemon-heartbeat-${r}.json`)}function Lu(e){try{let r=Bu(e.agentOsId);kb(Wu.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}`;bb(n,JSON.stringify(t),"utf8"),Rb(n,r)}catch{}}function Hu(e){try{let r=yb(Bu(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Fu(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function Sb(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Pt(){process.platform==="win32"&&(Sb("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 wb}from"node:fs";import{homedir as Cb}from"node:os";import _b from"node:path";function $u(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 En(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function yr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||_b.join(Cb(),".kynver","agent-os-cron.json")}function xb(e=yr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function Pb(){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 Bi(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function or(){let e=yr(),r=xb(e),t=Pb(),n=Bi(),o=!!(t&&n),s=wb(e),i=o&&(s||$u("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:$u("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:En("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:En("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:En("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:En("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:En("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function jo(e=or()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Eb(e){return e.replace(/\/+$/,"")}async function Ku(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${Eb(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:Ne(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 Ab,existsSync as Li,openSync as Ib,readFileSync as Ob,unlinkSync as ju,writeFileSync as Nb}from"node:fs";var Tb=10*6e4;function Vu(e){if(!Li(e))return null;try{let r=JSON.parse(Ob(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Db(e){let r=Vu(e);if(!r||!L(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>Tb}function Gu(e){if(Li(e)&&!Db(e)){let r=Vu(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(Li(e))try{ju(e)}catch{}try{let r=Ib(e,"wx");return Nb(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Ab(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Yu(e){try{ju(e)}catch{}}var Mb=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function Ub(e){return Mb.test(e.trim())}function Wb(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])),m=Math.min(t,Number(c[2]));for(let f=d;f<=m;f+=l)n.add(f);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function An(e,r,t,n){let o=e.trim();return o==="*"?!0:Wb(o,t,n).has(r)}function Bb(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return An(n,r.getUTCMinutes(),0,59)&&An(o,r.getUTCHours(),0,23)&&An(s,r.getUTCDate(),1,31)&&An(i,r.getUTCMonth()+1,1,12)&&An(a,r.getUTCDay(),0,6)}var Lb=366*24*60;function Hb(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Ju(e,r){if(!Ub(e))return null;let t=Hb(r);t=new Date(t.getTime()+6e4);for(let n=0;n<Lb;n++){if(Bb(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function qu(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=Ju(e.cron.trim(),r);return t?t.toISOString():null}return null}function Hi(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Ju(e.cron.trim(),r);return t?t.toISOString():null}import{promises as Fb}from"node:fs";async function zu(e){try{return await Fb.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function $b(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Br(e=yr()){let r=await zu(e);return $b(r)}async function Xu(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 Qu(e,r=yr()){let t=await Br(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Xu(r,t)}async function Zu(e=yr()){return await zu(e)!==null?{created:!1}:(await Xu(e,[]),{created:!0})}import{randomBytes as Kb}from"node:crypto";import{promises as In}from"node:fs";import jb from"node:path";var Vo={version:1,jobs:{}};async function Vb(e){try{return await In.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Gb(e){if(!e)return{...Vo,jobs:{...Vo.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...Vo,jobs:{}}:r}catch{return{...Vo,jobs:{}}}}async function Go(e){let r=await Vb(e);return Gb(r)}async function Yb(e,r){await In.mkdir(jb.dirname(e),{recursive:!0});let t=Kb(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await In.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
17
|
-
`,"utf8");try{await In.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await In.unlink(n).catch(()=>{})}}async function ed(e,r){await Yb(e,r)}function rd(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 Jb(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function qb(e){return!!e.completedAt}function zb(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 Xb(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=qu(e.spec,t);return r.nextFireAt=n,n}function Qb(e,r,t,n){if(e.paused||qb(r)||Jb(r,t)||!zb(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function Zb(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Hi(e.spec,t))}async function Et(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=Gu(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(f=>f.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Go(r.statePath),l=[];for(let f of i){let p=rd(a,f.providerScheduleId);Xb(f,p,t),Qb(f,p,n,r)&&l.push({entry:f,job:p})}l.sort((f,p)=>{let h=Date.parse(f.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,m=r.maxCatchUpPerTick;for(let{entry:f,job:p}of l){if(r.missedRunPolicy==="skip"&&f.spec.scheduleKind==="cron"){let h=Date.parse(p.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){p.nextFireAt=Hi(f.spec,t),d++;continue}}if(m<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),Zb(f,p,t);try{let h=await Ku({entry:f,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,h.ok?(p.lastFiredAt=t.toISOString(),p.consecutiveFailures=0,f.spec.scheduleKind==="runAt"&&(p.completedAt=t.toISOString(),p.nextFireAt=null),c++,m--):(p.consecutiveFailures+=1,u++)}catch{p.inflightUntil=null,p.consecutiveFailures+=1,u++}}return await ed(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Yu(r.lockPath)}}w();M();import td from"node:path";var nd="mesh-cron-lease.json";function Yo(e){return _(td.join(x(e),nd),null)}function od(e,r){de(td.join(x(e),nd),{...r,updatedAt:new Date().toISOString()})}function sd(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 Ax from"node:path";M();To();w();import ev from"node:path";function rv(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 Jo(e){let r=B(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(ev.join(x(r.id),"workers",b(n),"worker.json"),void 0);!o?.taskId||!No(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...rv(o)})}return t}O();O();function id(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 ad(e,r){let t=id(r),n=new AbortController,o=setTimeout(()=>n.abort(),t);try{return await e(n.signal)}finally{clearTimeout(o)}}function ld(e,r){let t=id(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Lr(e,r,t,n){let o;try{o=await ad(i=>fetch(e,{method:"POST",headers:Ne(r),body:JSON.stringify(t),signal:i}),n?.timeoutMs)}catch(i){return ld(i,n?.timeoutMs)}let s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}}async function X(e,r,t,n){let o=await Lr(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await fu(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Lr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function qo(e,r,t){let n;try{n=await ad(s=>fetch(e,{method:"GET",headers:Ne(r),signal:s}),t?.timeoutMs)}catch(s){return ld(s,t?.timeoutMs)}let o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,response:o}}O();function cd(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function Fi(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function ud(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 tv=["implementation","review","landing"],nv=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function ov(e){return tv.includes(e)}function sv(e){return nv.includes(e)}function dd(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||ov(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:sv(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var pd=_t.personas.map(dd),iv=new Map(pd.map(e=>[e.slug,e]));function av(e){if(!e)return null;let r=e.trim().toLowerCase(),t=iv.get(r)??null,n=Iu(r);if(!n)return t;let o=dd(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function $i(e){return av(e)?.defaultRoleLane??null}function md(){return pd.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function fd(e){return(e??"").trim().toLowerCase()}function lv(e){switch(fd(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 cv(e){let r=fd(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=lv(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function gd(e){return cv(e)??"any"}ln();vt();M();M();function zo(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ki(e){return e.toLowerCase()}function uv(e){let r=zo(e,"roleLane");if(r)return r;let t=Ki(zo(e,"executorRef")),n=Ki(zo(e,"title")),o=Ki(zo(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=$i(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function hd(e){let r=uv(e);return r?{...e,roleLane:r}:e}O();var sr="cursor",dv=new Set(["claude","opus","anthropic"]),pv=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ji(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 dv.has(r)?!0:r.includes("claude")||r.includes("opus")}function Vi(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Hr(r))return!0;let t=ji(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=ji(e,"description");if(pv.some(s=>s.test(n)))return!0;let o=ji(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function mv(e,r){return{provider:sr,model:Gi,rule:`policy:cursor_default${r}`,requestedModel:e}}function kd(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(Vi(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 mv(r.model,o)}function Xo(e,r=sr){let t=e?.trim();return t?Hr(t)?sr:t==="codex"?"codex":t:r}var yd={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 At(e){return yd[e]}function Rd(){return Object.values(yd)}import{existsSync as gv}from"node:fs";import{homedir as hv}from"node:os";import Sd from"node:path";import{createHash as bd}from"node:crypto";import{statSync as fv}from"node:fs";import{spawnSync as vd}from"node:child_process";function Fe(e){try{let r=fv(e),t=`${e}|${r.size}|${r.mtimeMs}`;return bd("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function It(e){return bd("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function _e(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function $e(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=vd(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 Qo(e,r,t={}){let n=t.timeoutMs??8e3;try{return vd(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 kv="codex";function yv(){let e=hv();return[Sd.join(e,".codex","auth.json"),Sd.join(e,".config","codex","auth.json")]}function wd(e=new Date().toISOString()){let r=_e(kv,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:It("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=yv().find(s=>gv(s)),n=$e(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?Fe(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 Rv}from"node:fs";import{homedir as bv}from"node:os";import Yi from"node:path";function vv(){let e=process.env.HERMES_HOME?.trim(),r=e?Yi.resolve(e):Yi.join(bv(),".hermes");return Yi.join(r,"auth.json")}function Zo(e=new Date().toISOString()){let r=_e("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=$e(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=vv(),o=Rv(n),s=Qo(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?Fe(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 Ot(e=new Date().toISOString()){let r=wd(e);if(r.ready)return{...r,path:"codex_cli"};let t=Zo(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 Cd=["low","medium","high"],_d={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function xd(e,r){let t=At(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Sv(e,r){let t=At(e.providerId),n=At(r.providerId),o=Cd.indexOf(t.costTier)-Cd.indexOf(n.costTier);if(o!==0)return o;let s=_d[e.binding.authSource]-_d[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ji(e){let r=Rd().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&xd(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Sv)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return xd(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 wv}from"node:fs";import{homedir as Cv}from"node:os";import _v from"node:path";var xv="claude";function Pv(){let e=Cv();return[_v.join(e,".claude",".credentials.json")]}function Pd(e=new Date().toISOString()){let r=_e(xv,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:It("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=$e(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Pv().find(i=>wv(i)),o=Qo(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?Fe(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 Ev}from"node:fs";import{homedir as Av}from"node:os";import Iv from"node:path";var Ov="agent";function Nv(){let e=Av();return[Iv.join(e,".config","cursor","auth.json")]}function Ed(e=new Date().toISOString()){let r=_e(Ov,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:It("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=$e(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Nv().find(s=>Ev(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Fe(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 Tv,readFileSync as Dv}from"node:fs";import{homedir as Mv}from"node:os";import qi from"node:path";var Uv=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Wv(){let e=process.env.HERMES_HOME?.trim(),r=e?qi.resolve(e):qi.join(Mv(),".hermes");return qi.join(r,".env")}function Bv(e){try{let r=Dv(e,"utf8"),t=[];for(let n of Uv)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Ad(e=new Date().toISOString()){let r=_e("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=$e(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Wv(),o=Tv(n),s=o?Bv(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?Fe(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 Id(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ot(r),n={codex:t,cursor:Ed(r),claude:Pd(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:Ad(r),hermesOpenAiCodex:Zo(r),codexAdapterPath:t.path,readyCount:o}}var Lv=[/\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],Hv=[/\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 zi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Fv(e){let r=zi(e,"executorRef").toLowerCase(),t=zi(e,"title").toLowerCase(),n=zi(e,"description").toLowerCase(),o=`${r}
|
|
19
|
+
`)},db={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},It={version:lb,generatedAt:"1970-01-01T00:00:00.000Z",personas:cb,instructions:ub,policyThresholds:db};var Un=It,fd="embedded";function Br(){return Un.version}function Rr(){return fd}function gd(e,r){Un=e,fd=r}function Wn(e){let r=Un.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=It.instructions[e];return typeof t=="string"?t:""}function Ot(e,r){let t=Un.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=It.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function hd(e){if(!e)return null;let r=e.trim().toLowerCase();return Un.personas.find(t=>t.slug===r)??null}import{createPublicKey as mb,verify as fb}from"node:crypto";var pb={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function kd(e,r=process.env){let t=ua(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=pb[e];return n?ua(n):null}var gb=Buffer.from("302a300506032b6570032100","hex");function hb(e){return mb({key:Buffer.concat([gb,Buffer.from(e)]),format:"der",type:"spki"})}function kb(e,r){if(!Mn(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(cd(e.bundle),"utf8");return fb(null,n,hb(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 yd(e,r=process.env){if(!Mn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=kd(e.publicKeyId,r);return t?kb(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var yb=15*6e4,Rb=1e4,or={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Ln(e,r){console.error(JSON.stringify({event:e,...r}))}function Rd(e,r,t){let n=yd(e);return n.ok?(gd(n.bundle,r),r==="server"&&pd(t,e),!0):(Ln("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Bn(e){if(or.diskCacheTried)return!1;or.diskCacheTried=!0;let r=md(e);return r?Rd(r,"disk",e):!1}async function vd(e){let r=e.nowMs??Date.now(),t=()=>({source:Rr(),version:Br(),updated:!1});if(!e.force&&r-or.lastAttemptAtMs<yb)return t();or.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return Rr()==="embedded"&&Bn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Rb);try{let l=Me(o);delete l["Content-Type"],or.etag&&Rr()==="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,Ln("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),Rr()==="embedded"&&Bn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Ln("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),Rr()==="embedded"&&Bn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Rd(u,"server",e.agentOsId)?Rr()==="embedded"&&Bn(e.agentOsId)?{...t(),updated:!0}:t():(or.etag=c.headers.get("etag"),Ln("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Br(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Ln("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),Rr()==="embedded"&&Bn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ee();No();Jo();import vb from"node:os";function bd(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Sd(e=R(),r=process.env){let t=Pe(r,e),n=Yo({config:e,totalMemBytes:vb.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 a=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",l="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";a?s.push(l):o.push(l)}dt(t.boxKind,n.configuredMaxWorkers??n.autoCap)&&o.push(`Forge box maxConcurrentWorkers=${n.configuredMaxWorkers??n.autoCap} exceeds pool cap \u2014 run kynver setup --box-kind forge --max-workers 4`);let i=s.length===0;for(let a of o)bd("warn",a);for(let a of s)bd("error",a);return{ok:i,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:n.configuredMaxWorkers??n.autoCap,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as bb,readFileSync as Sb,renameSync as wb,writeFileSync as Cb}from"node:fs";import{homedir as _b}from"node:os";import wd from"node:path";function Cd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return wd.join(_b(),".kynver",`daemon-heartbeat-${r}.json`)}function _d(e){try{let r=Cd(e.agentOsId);bb(wd.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}`;Cb(n,JSON.stringify(t),"utf8"),wb(n,r)}catch{}}function xd(e){try{let r=Sb(Cd(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Pd(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function xb(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Nt(){process.platform==="win32"&&(xb("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 Pb}from"node:fs";import{homedir as Eb}from"node:os";import Ab from"node:path";function Ed(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 Hn(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||Ab.join(Eb(),".kynver","agent-os-cron.json")}function Ib(e=vr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function Ob(){let e=R();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 da(){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=Ib(e),t=Ob(),n=da(),o=!!(t&&n),s=Pb(e),i=o&&(s||Ed("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:Ed("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Hn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Hn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Hn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Hn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Hn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function us(e=sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Nb(e){return e.replace(/\/+$/,"")}async function Ad(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${Nb(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:Me(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 Tb,existsSync as pa,openSync as Db,readFileSync as Mb,unlinkSync as Id,writeFileSync as Ub}from"node:fs";var Wb=10*6e4;function Od(e){if(!pa(e))return null;try{let r=JSON.parse(Mb(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Bb(e){let r=Od(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>Wb}function Nd(e){if(pa(e)&&!Bb(e)){let r=Od(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(pa(e))try{Id(e)}catch{}try{let r=Db(e,"wx");return Ub(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Tb(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Td(e){try{Id(e)}catch{}}var Lb=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function Hb(e){return Lb.test(e.trim())}function Fb(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 m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function Fn(e,r,t,n){let o=e.trim();return o==="*"?!0:Fb(o,t,n).has(r)}function $b(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Fn(n,r.getUTCMinutes(),0,59)&&Fn(o,r.getUTCHours(),0,23)&&Fn(s,r.getUTCDate(),1,31)&&Fn(i,r.getUTCMonth()+1,1,12)&&Fn(a,r.getUTCDay(),0,6)}var Kb=366*24*60;function jb(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Dd(e,r){if(!Hb(e))return null;let t=jb(r);t=new Date(t.getTime()+6e4);for(let n=0;n<Kb;n++){if($b(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Md(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=Dd(e.cron.trim(),r);return t?t.toISOString():null}return null}function ma(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Dd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as Vb}from"node:fs";async function Ud(e){try{return await Vb.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Gb(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Lr(e=vr()){let r=await Ud(e);return Gb(r)}async function Wd(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 Bd(e,r=vr()){let t=await Lr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Wd(r,t)}async function Ld(e=vr()){return await Ud(e)!==null?{created:!1}:(await Wd(e,[]),{created:!0})}import{randomBytes as Yb}from"node:crypto";import{promises as $n}from"node:fs";import Jb from"node:path";var ds={version:1,jobs:{}};async function qb(e){try{return await $n.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function zb(e){if(!e)return{...ds,jobs:{...ds.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...ds,jobs:{}}:r}catch{return{...ds,jobs:{}}}}async function ps(e){let r=await qb(e);return zb(r)}async function Xb(e,r){await $n.mkdir(Jb.dirname(e),{recursive:!0});let t=Yb(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await $n.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
20
|
+
`,"utf8");try{await $n.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await $n.unlink(n).catch(()=>{})}}async function Hd(e,r){await Xb(e,r)}function Fd(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 Qb(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function Zb(e){return!!e.completedAt}function eS(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 rS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Md(e.spec,t);return r.nextFireAt=n,n}function tS(e,r,t,n){if(e.paused||Zb(r)||Qb(r,t)||!eS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function nS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=ma(e.spec,t))}async function Tt(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=Nd(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(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await ps(r.statePath),l=[];for(let m of i){let p=Fd(a,m.providerScheduleId);rS(m,p,t),tS(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let h=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:m,job:p}of l){if(r.missedRunPolicy==="skip"&&m.spec.scheduleKind==="cron"){let h=Date.parse(p.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){p.nextFireAt=ma(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),nS(m,p,t);try{let h=await Ad({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,h.ok?(p.lastFiredAt=t.toISOString(),p.consecutiveFailures=0,m.spec.scheduleKind==="runAt"&&(p.completedAt=t.toISOString(),p.nextFireAt=null),c++,f--):(p.consecutiveFailures+=1,u++)}catch{p.inflightUntil=null,p.consecutiveFailures+=1,u++}}return await Hd(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Td(r.lockPath)}}w();D();import $d from"node:path";var Kd="mesh-cron-lease.json";function ms(e){return C($d.join(P(e),Kd),null)}function jd(e,r){ie($d.join(P(e),Kd),{...r,updatedAt:new Date().toISOString()})}function Vd(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 BP from"node:path";D();Vo();w();import oS from"node:path";function sS(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 fs(e){let r=B(e),t=[];for(let n of Object.keys(r.workers||{})){let o=C(oS.join(P(r.id),"workers",b(n),"worker.json"),void 0);!o?.taskId||!jo(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...sS(o)})}return t}O();O();function Gd(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 Yd(e,r){let t=Gd(r),n=new AbortController,o=setTimeout(()=>n.abort(),t);try{return await e(n.signal)}finally{clearTimeout(o)}}function Jd(e,r){let t=Gd(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Hr(e,r,t,n){let o;try{o=await Yd(i=>fetch(e,{method:"POST",headers:Me(r),body:JSON.stringify(t),signal:i}),n?.timeoutMs)}catch(i){return Jd(i,n?.timeoutMs)}let s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}}async function X(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 ed(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 gs(e,r,t){let n;try{n=await Yd(s=>fetch(e,{method:"GET",headers:Me(r),signal:s}),t?.timeoutMs)}catch(s){return Jd(s,t?.timeoutMs)}let o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,response:o}}O();function qd(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function fa(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 iS=["implementation","review","landing"],aS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function lS(e){return iS.includes(e)}function cS(e){return aS.includes(e)}function Xd(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||lS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:cS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Qd=It.personas.map(Xd),uS=new Map(Qd.map(e=>[e.slug,e]));function dS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=uS.get(r)??null,n=hd(r);if(!n)return t;let o=Xd(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function ga(e){return dS(e)?.defaultRoleLane??null}function Zd(){return Qd.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function ep(e){return(e??"").trim().toLowerCase()}function pS(e){switch(ep(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 mS(e){let r=ep(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=pS(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function rp(e){return mS(e)??"any"}mn();wt();D();D();function hs(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function ha(e){return e.toLowerCase()}function fS(e){let r=hs(e,"roleLane");if(r)return r;let t=ha(hs(e,"executorRef")),n=ha(hs(e,"title")),o=ha(hs(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=ga(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function tp(e){let r=fS(e);return r?{...e,roleLane:r}:e}O();var ir="cursor",gS=new Set(["claude","opus","anthropic"]),hS=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ka(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 gS.has(r)?!0:r.includes("claude")||r.includes("opus")}function ya(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Fr(r))return!0;let t=ka(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=ka(e,"description");if(hS.some(s=>s.test(n)))return!0;let o=ka(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function kS(e,r){return{provider:ir,model:Ra,rule:`policy:cursor_default${r}`,requestedModel:e}}function np(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(ya(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 kS(r.model,o)}function ks(e,r=ir){let t=e?.trim();return t?Fr(t)?ir:t==="codex"?"codex":t:r}var op={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 Dt(e){return op[e]}function sp(){return Object.values(op)}import{existsSync as RS}from"node:fs";import{homedir as vS}from"node:os";import lp from"node:path";import{createHash as ip}from"node:crypto";import{statSync as yS}from"node:fs";import{spawnSync as ap}from"node:child_process";function je(e){try{let r=yS(e),t=`${e}|${r.size}|${r.mtimeMs}`;return ip("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Mt(e){return ip("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ae(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=ap(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 ys(e,r,t={}){let n=t.timeoutMs??8e3;try{return ap(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 bS="codex";function SS(){let e=vS();return[lp.join(e,".codex","auth.json"),lp.join(e,".config","codex","auth.json")]}function cp(e=new Date().toISOString()){let r=Ae(bS,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Mt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=SS().find(s=>RS(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 wS}from"node:fs";import{homedir as CS}from"node:os";import va from"node:path";function _S(){let e=process.env.HERMES_HOME?.trim(),r=e?va.resolve(e):va.join(CS(),".hermes");return va.join(r,"auth.json")}function Rs(e=new Date().toISOString()){let r=Ae("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=_S(),o=wS(n),s=ys(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 Ut(e=new Date().toISOString()){let r=cp(e);if(r.ready)return{...r,path:"codex_cli"};let t=Rs(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 up=["low","medium","high"],dp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function pp(e,r){let t=Dt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function xS(e,r){let t=Dt(e.providerId),n=Dt(r.providerId),o=up.indexOf(t.costTier)-up.indexOf(n.costTier);if(o!==0)return o;let s=dp[e.binding.authSource]-dp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ba(e){let r=sp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&pp(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(xS)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return pp(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 PS}from"node:fs";import{homedir as ES}from"node:os";import AS from"node:path";var IS="claude";function OS(){let e=ES();return[AS.join(e,".claude",".credentials.json")]}function mp(e=new Date().toISOString()){let r=Ae(IS,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Mt("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=OS().find(i=>PS(i)),o=ys(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 NS}from"node:fs";import{homedir as TS}from"node:os";import DS from"node:path";var MS="agent";function US(){let e=TS();return[DS.join(e,".config","cursor","auth.json")]}function fp(e=new Date().toISOString()){let r=Ae(MS,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Mt("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=US().find(s=>NS(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 WS,readFileSync as BS}from"node:fs";import{homedir as LS}from"node:os";import Sa from"node:path";var HS=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function FS(){let e=process.env.HERMES_HOME?.trim(),r=e?Sa.resolve(e):Sa.join(LS(),".hermes");return Sa.join(r,".env")}function $S(e){try{let r=BS(e,"utf8"),t=[];for(let n of HS)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function gp(e=new Date().toISOString()){let r=Ae("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=FS(),o=WS(n),s=o?$S(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 hp(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ut(r),n={codex:t,cursor:fp(r),claude:mp(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:gp(r),hermesOpenAiCodex:Rs(r),codexAdapterPath:t.path,readyCount:o}}var KS=[/\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 wa(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function VS(e){let r=wa(e,"executorRef").toLowerCase(),t=wa(e,"title").toLowerCase(),n=wa(e,"description").toLowerCase(),o=`${r}
|
|
18
21
|
${t}
|
|
19
|
-
${n}`;return Lv.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":Hv.some(s=>s.test(o))?"low":"elevated"}function $v(e){let r=At(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 Kv(e){let r=e.inventory??Id();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Fr(e){let r=$v({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 Od(e){let r=e.task??{},t=Fv(r),n=Kv({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ot())}),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=Ji({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=Ji({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"}})}it();w();import{closeSync as Nd,openSync as Td}from"node:fs";import{spawn as qv}from"node:child_process";var jv=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Vv(e){return e.replace(jv,"")}var Gv=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Xi(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var Yv=new Set(["cursor"]);function Jv(e){let r=e.trim().toLowerCase();return Yv.has(r)?"auto":null}function Qi(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Vv(t).trim()||r;return Gv.test(o)||!Xi(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 Nt(e,r){let t=(e??"").trim();return t?Xi(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 Zi(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Jv(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")`}:Xi(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 Tt="claude-sonnet-4-6",Dd={name:"claude",defaultModel:Tt,preflightModel(e){return Qi(e,Tt)},start(e){let r=Qi(e.model,Tt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Td(e.stdoutPath,"a"),o=Td(e.stderrPath,"a"),s=["ignore",n,o],i=qv("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:Qe(process.env)}));if(Nd(n),Nd(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}}};it();w();import{closeSync as Bd,existsSync as Zv,openSync as Ld}from"node:fs";import{spawn as Hd}from"node:child_process";it();w();import{closeSync as Md,openSync as Ud}from"node:fs";import{spawn as zv}from"node:child_process";var ea=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Xv(){return Qe({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Qv(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 Wd={name:"hermes-codex",defaultModel:ea,preflightModel(e){return Nt(e,ea)},start(e){let r=Nt(e.model,ea);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Ud(e.stdoutPath,"a"),o=Ud(e.stderrPath,"a"),s=["ignore",n,o],i=_e("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=Qv(t,e.prompt),l=zv(i,a,ue({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Xv()}));if(Md(n),Md(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 eS(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var $r=eS();function rS(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function tS(){return Qe({...process.env,CI:"1",NO_COLOR:"1"})}function nS(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function oS(e,r,t){if(!(process.platform!=="win32"&&Zv("/usr/bin/script")))return Hd(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Hd("script",["-qfc",o,"/dev/null"],t)}var Fd={name:"codex",defaultModel:$r,preflightModel(e){return Nt(e,$r)},start(e){if(Ot().path==="hermes_openai_codex")return Wd.start(e);let t=Nt(e.model,$r);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Ld(e.stdoutPath,"a"),s=Ld(e.stderrPath,"a"),i=["ignore",o,s],a=rS(),l=nS(n,e.prompt),c=oS(a,l,ue({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:tS()}));if(Bd(o),Bd(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 sS="claude-sonnet-4-6",Gi="composer-2.5";function es(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function $d(e){return e.toLowerCase()}function ta(e=v()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||sS}function ra(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 iS(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Gi,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Tt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Kd(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 aS(e){let r=$d(es(e,"executorRef")),t=es(e,"title").toLowerCase(),n=es(e,"priority")||"normal",o=$d(es(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 Kd(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Kd(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=ta();return{model:s,provider:ra(s),rule:"default:global"}}function rs(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=iS(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||ra(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=aS(e.task);r={...o,requestedModel:o.model}}else{let o=ta();r={model:o,provider:e.explicitProvider?.trim()||ra(o),rule:"default:global",requestedModel:o}}let t=kd({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||Vi(e.task)))return t;let n=Od({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 jd(e,r,t){return e||r||t||ta()||Tt}function Vd(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Gd(){return{maxTaskAttempts:Vd(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(xt("harness.maxTaskAttempts",4))),dispatchCooldownMs:Vd(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(xt("harness.dispatchCooldownMs",5e3)))}}O();import uS from"node:path";M();J();w();var na="kynver-harness:",Yd="@runner:";function oa(e){return e?.trim()?e.trim():null}function lS(e){let r=oa(e);if(!r?.startsWith(na))return null;let t=r.slice(na.length),n=t.indexOf(Yd);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function sa(e,r){let t=e.trim(),n=r.trim();return`${na}${t}${Yd}${n}`}function ia(e,r){let t=oa(r);return t?lS(e)===t:!1}function ts(e){let r=oa(e.workerLeaseOwner);return r&&ia(r,e.runId)?r:sa(e.runId,e.runnerId)}import Jd from"node:os";Ie();Ie();import cS from"node:os";function ns(e,r){let t=(r??cS.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Rr(e){return e?.trim()?e.trim():null}function Ke(e={}){let r=e.env??process.env;return{runnerId:Rr(r.KYNVER_RUNTIME_ID)??Rr(r.OPENCLAW_RUNTIME_ID)??Rr(r.HOSTNAME)??Jd.hostname(),hostname:Rr(r.HOSTNAME)??Jd.hostname(),profile:Rr(r.KYNVER_RUNNER_PROFILE)??Rr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Rr(r.KYNVER_HARNESS_REPO)??Rr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Wr()}}O();async function Dt(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=K(e.baseUrl);try{let o=await G(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(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}M();async function os(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 Dt({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)&&H(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function qd(e,r){return _(uS.join(x(e),"workers",b(r),"worker.json"),void 0)}async function ss(e,r){let t=B(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=K(r.baseUrl?String(r.baseUrl):void 0),s=await G(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):aa,a=Ke({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let m=qd(e,d);if(!m?.taskId||!m.agentOsId){u.push(d);continue}if(!L(m.pid)){u.push(d);continue}if(T(m).status==="done"){u.push(d);continue}let p=ts({runId:e,workerLeaseOwner:m.leaseOwner??null,runnerId:a}),h=await os({worker:m,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(m.taskId)}/renew-lease`,g=await X(k,s,{leaseOwner:h.leaseOwner??p,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(g.ok){l.push(d);continue}let R=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:R})}return{renewed:l,failed:c,skipped:u}}function zd(e,r){let t=B(e);for(let n of Object.keys(t.workers||{})){let o=qd(e,n);if(!(!o||o.taskId!==r||!L(o.pid)||T(o).status==="done"))return!0}return!1}Se();M();M();import{existsSync as Aw,mkdirSync as Iw}from"node:fs";import Ut from"node:path";var dS=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,pS="next-action-fix:";function is(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xd(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:is(e)}function mS(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(pS)||t.includes("repair")||t.includes("unblock"))}function fS(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(dS);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=is(String(n.targetPrUrl??n.target_pr_url??"")),s=is(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Xd(o):null,targetPrBranch:s}}catch{return r}}function Qd(e){if(!mS(e))return null;let r=fS(e.description),t=e.prUrl?Xd(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??is(e.branch)}:null}function Zd(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 ep(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(`
|
|
20
|
-
`),o],i=
|
|
21
|
-
`),a=
|
|
22
|
-
`);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.","Final response must include files changed, verification commands, and unresolved risks.",...
|
|
23
|
-
`),"",...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?[...
|
|
24
|
-
`)}w();O();w();
|
|
25
|
-
`).map(r=>r.trim()).find(Boolean)??""}function
|
|
26
|
-
`)}function ga(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Tn(e.snapshot.worktreePath,e.exec)??void 0};let r=ps({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 ha(e,r=ds){let t=e.prUrlHint??fp(e.status.finalResult)??null,n=hp(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!gp({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?ga({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return ga({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!GS(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=Rp(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,R=!1,I=n.headCommit??Tn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let P=ps({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!P.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${P.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};g=P.committed,R=P.pushed,I=P.headCommit??I}else{let P=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(P.status!==0&&!/already up to date/i.test(P.stderr||P.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${P.stderr||P.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};R=P.status===0}return{ok:!0,prUrl:a,headCommit:I,committed:g,pushed:R}}let l=us(n.worktreePath,i,n.branch,r);if(l)return ga({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,m=n.headCommit??void 0,f=ps({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!f.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${f.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=f.committed,d=f.pushed,!f.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${f.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}m=f.headCommit??m??Tn(n.worktreePath,r)??void 0;let p=m?vp(n.worktreePath,i,m,r):null;if(p)return{ok:!0,prUrl:p.prUrl,headCommit:m,committed:u,pushed:d,created:!1};let h=e.run.base?.trim()||"main",k=bp({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:YS(e.worker.name,e.worker.runId),body:JS(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!k.ok||!k.prUrl){if(pp(k.detail))return{ok:!0,headCommit:m??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:m??void 0,committed:u,pushed:d,created:k.created}}J();xo();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 Sp(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 wp(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Cp(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function xp(e){let r=Cp(e);if(!r)return[];let t=Cp(r.worktreeHandoff),n=wp(t?.disposableArtifactsRemoved);return n.length?n:wp(r.disposableArtifactsRemoved)}function _p(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Pp(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=>_p(o)));return t.every(o=>{let s=_p(Sp(o));return n.has(s)})}function fs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ep(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function qS(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 zS(e){let r=Ep(e.disposableArtifactsRemoved),t=xp(e.finalResult);return[...new Set([...r,...t])]}function Ap(e){let r=Ep(e.changedFiles),t=ms(r),n=zS(e),o=t.length===0||Pp(r,n);return fs(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`}:fs(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`}:fs(e.artifactBundlePath)||fs(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}:qS(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`}}M();J();w();import XS from"node:path";var QS=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Ip(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function ZS(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 ew(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:ZS(r);return{finalResult:r??t??"completed",summary:t}}function ka(e,r,t){if(Ip(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=ew(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),H(e.runId,e)}function rw(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 Op(e,r){let t=rw(r);if(t.size===0)return[];let n=B(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(XS.join(x(n.id),"workers",b(s),"worker.json"),void 0);if(!i?.taskId||Ip(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!QS.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});ka(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import tw from"node:path";var nw=/^[a-z0-9][a-z0-9._-]{0,127}$/i,ow=/^[a-z0-9][a-z0-9._-]{0,63}$/i,ya=new Set(["undefined","null"]),Np="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function gs(e){let r=e.trim();if(!nw.test(r))throw new Error(`invalid run id: ${e}`);return r}function sw(e){let r=e.trim();if(!ow.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Ra(e){return typeof e=="string"?e.trim():""}function Ve(e){let r=Ra(e.run),t=Ra(e.name);return(!r||ya.has(r))&&dr(`missing --run RUN_ID (${Np})`),(!t||ya.has(t))&&dr(`missing --name WORKER_NAME (${Np})`),{runId:gs(r),workerName:sw(t)}}function ba(e){let r=Ra(e.run);return(!r||ya.has(r))&&dr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),gs(r)}function Tp(e){let r=tw.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function Dp(e,r,t){let n=await fetch(e,{method:"POST",headers:Ne(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 iw(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Mp(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Dn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function aw(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function lw(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 Wp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function cw(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Mn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,H(e.runId,e))}function uw(e){e.completionBlocker&&(delete e.completionBlocker,H(e.runId,e))}function hs(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function dw(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function Wn(e){let{runId:r,workerName:t}=Ve(e),n=me(r,t),o=B(n.runId),s=T(n,hs(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!oe(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&&ma(n)&&uw(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let E=ha({worker:n,run:o,status:s});if(!E.ok)return Mn(n,E.reason),{ok:!1,reason:E.reason,nextAction:E.nextAction,completionBlocked:!0};(E.prUrl||E.headCommit)&&(s=T(n,hs(o)),s=dw(s,E))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let E=Ap({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!E.allowed){let D=E.detail??`worktree completion blocked (${E.state})`;return Mn(n,D),{ok:!1,reason:D,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=K(e.baseUrl?String(e.baseUrl):void 0),m=e.secret?String(e.secret):void 0,f=await G(m,i,{baseUrl:d});a&&(await os({worker:n,agentOsId:i,baseUrl:d,secret:f}),n=me(r,t));let p=`${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 Dp(p,f,k);if((g.status===401||g.status===403)&&!m){let E=await mu(i,{baseUrl:d});E&&E!==f&&(f=E,g=await Dp(p,f,k))}if(g.ok){let E=ap(g.parsed);if(!lp(E)){let C=`completion acknowledged but board not advanced: ${E.detail??(E.routeOutcome?`harness completion returned ${E.routeOutcome}`:"harness completion did not advance the linked task")}`;Mn(n,C);let ae={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:g.parsed};return pa(n,n.runId,ae),{ok:!1,httpStatus:g.status,response:g.parsed,reason:C,completionBlocked:!0}}Mn(n,void 0);let D=E.routeOutcome??"acknowledged",j={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:g.parsed};pa(n,n.runId,j),ka(n,s,{source:"harness-completion"});let F=s.prUrl;return{ok:!0,httpStatus:g.status,response:g.parsed,reason:D,...F?{prHandoff:{prUrl:F}}:{}}}let R=g.status===401||g.status===403,I=iw(g.parsed)??(R?"runner token unauthorized":"non-2xx response"),P=R?`completion replay rejected (${g.status}): ${I}`:`completion replay failed (${g.status}): ${I}`;return Mn(n,P),{ok:!1,httpStatus:g.status,response:g.parsed,completionBlocked:!0}}async function Sa(e){try{let{runId:r,workerName:t}=Ve(e),n=me(r,t),o=B(n.runId),s=T(n,hs(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!oe(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 Wn(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 Bp(e){let{runId:r,workerName:t}=Ve(e),n=me(r,t),o=B(n.runId),s=T(n,hs(o));de(Un.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function pw(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 va(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function mw(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=va(e.task??e.taskId);t&&(r.task=t);let n=va(e.worker??e.name);n&&(r.worker=n);let o=va(e.status);return o&&(r.status=o),r}function fw(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 Lp(e,r){let t=mw(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>fw(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=$p(n)),o}function Hp(e){let r=ba(e),t=e.full===!0||e.full==="true",n=Lp(t?Vr(r):jp(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:pw(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Fp(e){let{run:r,workerName:t,worker:n}=e,o=T(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=gt({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=Wp(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,m=Mp(n.completionResponse),f=Mp(m?.task),p=Dn(m?.outcome),h=Dn(m?.status),k=Array.isArray(m?.warnings)?m.warnings.filter(D=>typeof D=="string"&&D.trim().length>0):[],g=Dn(f?.prUrl)??Dn(m?.prUrl),R=Dn(n.completionReportedAt),I=aw({finished:oe(o),completionBlocker:c,completionOutcome:p,completionReportedAt:R}),P=lw({completionBlocker:c,completionOutcome:p,completionReportedAt:R,finished:oe(o)}),E=cw({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 D=n.instructionPolicyEvidence;if(!D||typeof D!="object")return null;let j=D.ruleSlugs;return Array.isArray(j)?j.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:R,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:p,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:P,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function gw(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&&!Wp(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function hw(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 Up(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 $p(e){let r=e.filter(Up),t=e.filter(n=>{if(Up(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 Kp(e,r,t){let n={runId:e.id,name:e.name,status:mn(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=$p(r)),n}function kw(e){return e.status==="done"&&e.attention==="done"}function Vr(e){let r=B(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(Un.join(x(r.id),"workers",b(s),"worker.json"),void 0);return i?Fp({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Kp(r,n,!1);return de(Un.join(x(r.id),"last-board.json"),o),o}function jp(e){let r=B(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(Un.join(x(r.id),"workers",b(i),"worker.json"),void 0);return a?gw(a)?hw(i,a):Fp({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!kw(i)),s=Kp(r,o,!0);return s.status=mn(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")},de(Un.join(x(r.id),"last-board-compact.json"),s),s}async function Vp(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Vr(t),s=K(e.baseUrl?String(e.baseUrl):void 0),i=await G(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(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 yw(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 ks(e){let r=ba(e),t=e.full===!0||e.full==="true",n=Lp(t?Vr(r):jp(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=yw(r)),console.log(JSON.stringify(n,null,2))}function Gp(e){let{runId:r,workerName:t}=Ve(e),n=me(r,t),o=ko(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
27
|
-
`).filter(Boolean)){let i=
|
|
28
|
-
`).trimEnd();return
|
|
29
|
-
`,{mode:384}),l}function
|
|
30
|
-
`,{mode:384})}function
|
|
31
|
-
`)}function
|
|
32
|
-
`)}var
|
|
33
|
-
`)}function aC(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 Jr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let Er=function(){return Z.filter(S=>S.started).length},cr=function(S,y){Fi({runId:s.id,agentOsId:i,phase:S,startedCount:Er(),outcomeCount:Z.length,cappedStarts:I,...y})},he=function(S){return S.landPrDispatch===!0?!0:S.task?.executor==="land_pr"};var t=Er,n=cr,o=he;let s=B(String(N(String(e.run||""),"--run"))),i=String(N(String(e.agentOsId||""),"--agent-os-id")),a=K(e.baseUrl?String(e.baseUrl):void 0),l=await G(e.secret?String(e.secret):void 0,i,{baseUrl:a}),u=!(e.execute===!0||e.execute==="true"),d=Ke({runId:s.id}),m=sa(s.id,d.runnerId),f=e.diskPath?Le({diskPath:String(e.diskPath)}):Le({diskPath:s.repo}),p=rr({runId:s.id}),h=aC(e),k=h.size>0,g=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,R=k?Math.min(g,h.size):g,I=u?R:Math.min(R,p.slotsAvailable);if(!u&&I<=0){let S={runId:s.id,agentOsId:i,dryRun:!1,skipped:!0,reason:p.reason??"no resource slots",resourceGate:p};if(r)return{ok:!0,...S};console.log(JSON.stringify(S,null,2));return}let P=Jo(s.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let S=`${a}/api/agent-os/by-id/${encodeURIComponent(i)}/lane-hygiene`;try{await X(S,l,{agentOsId:i,dryRun:!1,includeBoardReconcile:!0},{agentOsId:i,baseUrl:a})}catch(y){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${y.message}`)}}let E=`${a}/api/agent-os/by-id/${encodeURIComponent(i)}/tasks/dispatch-next`,D=S=>({agentOsId:i,dryRun:u,maxStarts:S,leaseOwner:m,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):aa,runnerDiskGate:f,runnerResourceGate:p,activeHarnessWorkers:P,runnerPresence:d,harnessBoardSnapshot:Vr(s.id),...e.lane?{lane:gd(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(y=>y.trim()).filter(Boolean)}:{}}),j=cd(),F=async S=>{let y=await X(E,l,D(S),{agentOsId:i,baseUrl:a,timeoutMs:j})??{ok:!1,status:0,response:null},A=y.response;return{dispatch:y,result:A?.result}},U=await F(k||u?I:1);if(!U.dispatch.ok||!U.result){let S={runId:s.id,agentOsId:i,action:"dispatch",httpStatus:U.dispatch.status,response:U.dispatch.response,authRefreshed:U.dispatch.refreshedAuth===!0,authRefreshFailure:U.dispatch.authRefreshFailure};if(r)return{ok:!1,...S};console.log(JSON.stringify(S,null,2)),process.exit(1)}let C=U.result;if(u){let S=xm(C),y=Pm(C),A={runId:s.id,agentOsId:i,dryRun:!0,wouldStart:C.started.map($=>({taskId:$.task.id,title:$.task.title,reason:$.reason})),skipped:C.skipped.map($=>({taskId:$.task.id,skipReason:$.skipReason,reason:$.reason})),diskGate:C.diskGate,resourceGate:C.resourceGate,inspected:C.inspected,pagesScanned:C.pagesScanned??null,candidatesExhausted:C.candidatesExhausted??null,capacityIdle:S?.capacityIdle===!0,admissionExhaustion:S,dispatchSkipDrain:y};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let ae=Gd(),Z=[],qe=[],tt=Number(C.inspected)||0,Me=!1;async function le(S,y,A){let $=await Ma({baseUrl:a,secret:l,agentOsId:i,taskId:String(S.id),leaseOwner:m,failureDetail:y}),se={taskId:S.id,started:!1,error:y,released:$.released,releaseResponse:$.releaseResponse,...A};return Z.push(se),cr("outcome",{lastOutcome:se}),!1}async function ee(S){let y=S.task,A=String(y.id);if(k&&!h.has(A))return le(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...h]});let $=y.prUrl?String(y.prUrl):"";if(!$)return le(y,"land_pr task missing prUrl");try{let se=await vm({prUrl:$,repo:Rm($),cwd:s.repo}),nt=await Sm({baseUrl:a,secret:l,agentOsId:i,runId:s.id,task:y,report:se});return nt.ok?(Z.push({taskId:A,started:!0,landPr:!0,outcome:se.outcome,completionStatus:nt.status}),!0):le(y,`land_pr completion POST failed (HTTP ${nt.status})`,{landPr:!0,outcome:se.outcome})}catch(se){return le(y,se.message)}}async function W(S){let y="duplicate_dispatch_prevented: live local worker already owns this task",A=await Ma({baseUrl:a,secret:l,agentOsId:i,taskId:String(S.id),leaseOwner:m,failureDetail:y}),$={taskId:S.id,started:!1,error:y,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return Z.push($),cr("outcome",{lastOutcome:$}),!1}async function ke(S){let y=S.task,A=oC(S),$=String(y.id);if(k&&!h.has($))return le(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...h]});let se=sC(y.personaSlug);if(se&&(!A?.personaInjectionReady||!A.personaMarkdown))return le(y,`persona_injection_required: missing anchored context-envelope persona block for "${se}"`);if(zd(s.id,$))return W(y);let nt=Number(y.attempt)||1;if(nt>ae.maxTaskAttempts)return le(y,`task attempt ${nt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${ae.maxTaskAttempts})`);let nn=y.leaseToken?String(y.leaseToken).trim():"";if(!nn)return le(y,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let $k=b(`t-${y.id}-a${y.attempt}`),ot=rs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:hd(y)});try{let di=y.planId?String(y.planId):void 0,po=Qd({title:y.title?String(y.title):void 0,description:y.description?String(y.description):null,executorRef:y.executorRef?String(y.executorRef):null,prUrl:y.prUrl?String(y.prUrl):null,branch:y.branch?String(y.branch):null}),Ue=wa(s,{name:$k,task:iC(y,i),ownedPaths:e.owned?String(e.owned).split(",").map(Kk=>Kk.trim()).filter(Boolean):[],model:ot.model,provider:ot.provider,routingRule:ot.rule,requestedModel:ot.requestedModel,agentOsId:i,taskId:String(y.id),planId:di,branch:po?.targetPrBranch??void 0,executorRef:y.executorRef?String(y.executorRef):void 0,parentTaskId:y.parentTaskId?String(y.parentTaskId):void 0,taskTitle:y.title?String(y.title):void 0,taskPrUrl:po?.targetPrUrl??(y.prUrl?String(y.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??se,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,leaseOwner:m,leaseToken:nn,dispatched:!0}),mo=await Cm({agentOsId:i,taskId:String(y.id),leaseOwner:m,expectedLeaseToken:nn,worker:Ue,baseUrl:a,secret:l});if(!mo.ok)return _m(s.id,Ue,mo.error??"dispatch_start_readback_failed"),le(y,mo.error??"dispatch_start_readback_failed",{readback:mo.detail??null});Ue.leaseToken!==nn&&(Ue.leaseToken=nn,Ue.leaseOwner=m,H(s.id,Ue));let dc={taskId:y.id,started:!0,worker:Ue.name,pid:Ue.pid,branch:Ue.branch,model:Ue.model,provider:ot.provider,routingRule:ot.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??se,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return Z.push(dc),cr("worker_started",{lastOutcome:dc}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${$}: operating-rules policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${$}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${$}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??$}`),!0}catch(di){return le(y,di.message)}}let ye=new Set;async function ze(S){let y=S.task,A=String(y.id);if(ye.has(A))return le(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let $=he(S)?await ee(S):await ke(S);return $||ye.add(A),$}for(let S of C.started)await ze(S);if(qe.push(...C.skipped??[]),k)for(let S of qe){let y=String(S.task.id);h.has(y)&&Z.push({taskId:y,started:!1,error:`exact_target_not_started:${S.skipReason}`,skipReason:S.skipReason,detail:S.reason??null,requestedTargetTaskIds:[...h]})}for(;!k&&Z.length<I;){let S=await F(1);if(!S.dispatch.ok||!S.result){let A=ud(S.dispatch.response),$=Er();Me=A&&$>0;let se={started:!1,error:"dispatch_next request failed during top-up",httpStatus:S.dispatch.status,response:S.dispatch.response,...Me?{nonFatal:!0,partialTopUp:!0}:{}};Z.push(se),cr("top_up_failed",{partialTopUpInterrupted:Me,lastOutcome:se});break}tt+=Number(S.result.inspected)||0,qe.push(...S.result.skipped??[]);let y=S.result.started??[];if(y.length===0)break;for(let A of y){if(Z.length>=I)break;await ze(A)}}let ce=Z.filter(S=>S.started).length,ur=xm(C),uo=Pm(C),ac=ce===0&&(ur?.capacityIdle===!0||Number(C.resourceGate?.slotsAvailable)>0);if(ac&&ur?.summary){let S=ur.skipReasonCounts?.retry_ceiling_exceeded??0,y=C.overAttemptIdleRecovery??ur.overAttemptIdleRecovery,A=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:S>0?"; over_attempt_recovery not attempted":"",$=uo?`; dispatch_skip_drain scanned=${uo.scanned??0} advanced=${uo.advanced??0}`:"";console.error(`[dispatch] ${ur.summary}${S>0?`; retry_ceiling_exceeded=${S}`:""}${A}${$}`)}let lc={runId:s.id,agentOsId:i,dryRun:!1,leaseOwner:m,startedCount:ce,capacityIdle:ac,admissionExhaustion:ur,dispatchSkipDrain:uo,outcomes:Z,skipped:qe.map(S=>({taskId:S.task.id,skipReason:S.skipReason})),inspected:tt,pagesScanned:C.pagesScanned??null,candidatesExhausted:C.candidatesExhausted??null,diskGate:C.diskGate,resourceGate:C.resourceGate,...Me?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:j},cc=S=>!S.started&&S.nonFatal!==!0,Fk=Z.some(cc),uc=Me&&ce>0?!0:!Fk;if(Fi({runId:s.id,agentOsId:i,phase:"complete",partial:Me,startedCount:ce,ok:uc}),r)return{ok:uc,...lc};console.log(JSON.stringify(lc,null,2)),Z.some(cc)&&process.exit(1)}catch(s){if(r)return{ok:!1,error:s.message};console.error(`run dispatch failed: ${s.message}`),process.exit(1)}}var lC=1;function Ht(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 cC(e){let{maxStarts:r,...t}=e;return t}async function Ba(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=cC(e);if(t.targetTaskId||t.targetTaskIds){let u=await Jr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Ht(u)}}let n=Math.min(r,lC),o=Math.max(0,r-n),s=await Jr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Ht(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Jr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Ht(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Em(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 uC(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Kn(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Am(e,r){let t=uC(r),n=Kn(t?.recommendedMaxStarts),o=Kn(t?.actionableReady),s=Kn(t?.queuedTasks),i=Kn(t?.boardAdvancedThisTick)??0,a=Kn(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 f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let m=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:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import $C from"node:path";M();Or();J();w();import dC from"node:path";var pC=new Set(["running","dispatching","pending","queued","needs_attention"]),ir=new Set(["completed","failed","cancelled","done"]);function qr(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=_(dC.join(x(e.id),"workers",b(i),"worker.json"),void 0);if(!a)continue;let l=T(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),bt(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function jn(){let e=[];for(let r of Y()){if(!pC.has(r.status))continue;let t=qr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Oe(r),e.push({runId:r.id,from:n,to:t})}return e}M();Or();J();w();Nr();xo();import{existsSync as Cr,lstatSync as SC,readdirSync as wC,readlinkSync as CC,renameSync as Ga,unlinkSync as _C}from"node:fs";import Ge from"node:path";Ce();w();import De from"node:path";var mC=`${De.sep}runs${De.sep}runs${De.sep}`;function Cs(e){return e.includes(mC)}function La(e,r){return De.join(we(ie(e)),b(r))}function Sr(e,r,t){return De.join(La(e,r),"workers",b(t))}function Im(e,r,t){let n=ie(e);return De.join(n,"runs","runs",b(r),"workers",b(t))}function Ha(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function zr(e){return{workerJsonPath:De.join(e,"worker.json"),stdoutPath:De.join(e,"stdout.jsonl"),stderrPath:De.join(e,"stderr.log"),heartbeatPath:De.join(e,"heartbeat.jsonl"),lastStatusPath:De.join(e,"last-status.json")}}function Om(e){let r=zr(Sr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Cs(e.statusPath)?e.statusPath:r}import{existsSync as wr,mkdirSync as fC,readdirSync as Tm,renameSync as gC,statSync as Fa}from"node:fs";import Q from"node:path";Nr();Ce();M();w();var Vn=900*1e3,hC=3600*1e3;function Dm(e,r){let t=Q.resolve(e),n=Q.resolve(we(r)),o=Q.relative(n,t);return o!==".."&&!o.startsWith("..")&&!Q.isAbsolute(o)}function $a(e){if(!wr(e))return[];try{return Tm(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Ka(e){let r=Q.join(e,"workers");if(!wr(r))return[];try{return Tm(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Mm(e){return Q.join(e,"archived-workers")}function kC(e,r){let t=Q.join(Mm(e),b(r));return wr(t)?`${t}-${Date.now()}`:t}function Nm(e,r,t){if(!wr(e))return!1;try{let n=r-Fa(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Um(e,r=Date.now(),t=Vn){if(!wr(e))return!1;let n=zr(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&L(o.pid))return!0;let s=ve(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Nm(n.stdoutPath,r,t)||Nm(n.heartbeatPath,r,t))}function yC(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-Fa(Q.join(e,"worker.json")).mtimeMs}catch{return 0}}function RC(e,r,t,n){if(Um(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=yC(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 Ft(e,r=Date.now(),t=Vn){for(let n of Ka(e))if(Um(Q.join(e,"workers",n),r,t))return!0;return!1}function bC(){return{repo:He()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function vC(e,r){let t=Q.join(we(e),b(r));if(!wr(t))return null;let n=Ka(t);if(n.length===0)return null;let o;try{o=Fa(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Sr(e,r,a);s[a]={workerDir:l,statusPath:Q.join(l,"worker.json")}}let i=Ft(t);return{id:r,name:r,...bC(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ja(e){let r=ie(e??be()),t=we(r),n=[];for(let o of $a(t)){let s=Q.join(t,o,"run.json");if(wr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=vC(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Oe(i),n.push({runId:o,action:"repaired_run_json",reason:Ft(Q.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Va(e,r={}){let t=ie(e??be()),n=we(t),o=r.now??Date.now(),s=r.archiveAgeMs??hC,i=[];ja(t);for(let a of $a(n)){let l=Q.join(n,a),c=Q.join(l,"run.json"),u=_(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...Ka(l)]),m=!1;for(let f of d){let p=Q.join(l,"workers",b(f)),h=Q.join(p,"worker.json"),k=_(h,void 0);if(!k){let I=Q.join(Mm(l),b(f));if(wr(I)&&(u.workers[b(f)]||u.workers[f])){delete u.workers[b(f)],delete u.workers[f],m=!0,i.push({runId:u.id,worker:f,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:I});continue}i.push({runId:u.id,worker:f,action:"skipped",reason:"worker.json missing"});continue}let g=RC(p,k,o,s);if(!g.eligible){i.push({runId:u.id,worker:f,action:"skipped",reason:g.reason});continue}let R=kC(l,f);fC(Q.dirname(R),{recursive:!0}),gC(p,R),delete u.workers[b(f)],delete u.workers[f],m=!0,i.push({runId:u.id,worker:f,action:"archived",reason:g.reason,archivePath:R})}m&&Oe(u)}return{workers:i}}function Wm(e,r=Date.now()){let t=new Set,n=we(e);for(let o of $a(n)){let s=Q.join(n,o);Ft(s,r)&&t.add(`${e}\0${o}`)}return t}M();w();function xC(e,r){let t=La(e,r),n;try{n=SC(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Ge.resolve(Ge.dirname(t),CC(t));if(Ft(o)||Ft(t))return null;let s=`${t}.materialize-${Date.now()}`;return Ga(o,s),_C(t),Ga(s,t),o}function PC(e){let r=[];for(let t of Ha()){let n=Ge.join(e.fromDir,t),o=Ge.join(e.toDir,t);!Cr(n)||Cr(o)||(Ga(n,o),r.push(t))}return r}function Bm(e,r){let t=zr(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 EC(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 AC(e){let r=zr(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=Cr(r.stdoutPath),o=Cr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?_o(r.stdoutPath):{finalResult:null},a=o?ve(r.heartbeatPath):ve(""),l=ft(a),c=EC({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:Ge.join(te().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}),Bm(u,e.canonicalDir),u}function IC(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Sr(r,e.id,o),a=Ge.join(i,"worker.json");(Cs(s.workerDir)||Cs(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Oe(e)),t}function OC(e){let r=[],t=Sr(e.harnessRoot,e.run.id,e.workerName),n=Im(e.harnessRoot,e.run.id,e.workerName),o=zr(t),s=PC({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=Om({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&Cr(o.workerJsonPath)&&(a=_(o.workerJsonPath,void 0)),!a){let l=AC({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return H(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=Cr(t),u=Ha().some(d=>Cr(Ge.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:Ge.join(te().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 H(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 Bm(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",H(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 NC(e,r){let t=Ge.join(x(e.id),"workers");if(!Cr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of wC(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Lm(){let{harnessRoot:e}=te(),r=ja(e),t=[];for(let n of Y()){let o=xC(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),IC(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 NC(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Sr(e,n.id,i),statusPath:Ge.join(Sr(e,n.id,i),"worker.json")}},Oe(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(...OC({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}Nr();Ao();J();M();Or();w();import{execFileSync as Hm}from"node:child_process";import Fm from"node:path";function Ya(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function TC(e){let r=Ya(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function DC(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function MC(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 UC(e){let r=null;if(typeof e=="string"?r=kt(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=Ya(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 WC(e){try{let n=Hm("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=Hm("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:Ya(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 BC(e){let r=ve(e.heartbeatPath);return e.completionSnapshot?.finalResult??ft(r)}function LC(e){let r=new Map,t=x(e.id);for(let n of fe(e)){let o=_(Fm.join(t,"workers",b(n),"worker.json"),void 0);if(o)for(let s of UC(BC(o))){let i=TC(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function HC(e,r){let t=ve(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,DC(r)].filter(Boolean).join(`
|
|
34
|
-
`);return MC(n)}function FC(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Ja(e={}){let r=e.lookupPr??WC,t=[],n=new Map;for(let o of Y()){let s=LC(o),i=x(o.id);for(let a of fe(o)){let l=Fm.join(i,"workers",b(a),"worker.json"),c=_(l,void 0);if(!c||!FC(c))continue;let u=T(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let f of HC(c,u.finalResult)){if(d=s.get(f)??null,!d){let p=o.repo||c.worktreePath,h=`${p}#${f}`,k=n.has(h)?n.get(h)??null:r({repoDir:p,prNumber:f});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 m=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=m,c.reconcileReason="local-only needs_attention superseded by merged PR",H(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 KC=900*1e3;function jC(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Gn(){let e=Lm();if(jC()){let s=Ja(),i=Va();return{workers:[],finalizedRuns:jn(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Y())for(let i of fe(s)){let a=$C.join(x(s.id),"workers",b(i),"worker.json"),l=_(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=T(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",H(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,H(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&&L(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,m=!Number.isFinite(u)||t-u>KC,f=Number.isFinite(d)&&t-d>Rt;if(m&&f){mr(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,H(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=Ja(),o=Va();return{workers:r,finalizedRuns:jn(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function $m(){let e=Gn(),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))}vt();O();Ie();import VC from"node:os";function _s(e,r={}){let t=(r.boxKind??Be(v())).trim().toLowerCase()||"forge",n=r.hostLabel??VC.hostname();return{boxId:r.boxId??ns(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}:{}}}M();Po();J();O();import GC from"node:path";M();J();w();async function Yn(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=B(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=K(e.baseUrl?String(e.baseUrl):void 0),s=await G(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Ke({runId:t.id}).runnerId,a=await Vp({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let m of Object.keys(t.workers||{})){let f=_(GC.join(x(t.id),"workers",b(m),"worker.json"),void 0);if(!f||!f.dispatched||!f.taskId)continue;let p=T(f);if(p.alive||p.finalResult||f.completionReportedAt)continue;let h=ts({runId:t.id,workerLeaseOwner:f.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(f.taskId))}/release`,g;try{g=await X(k,s,{agentOsId:n,leaseOwner:h},{agentOsId:n,baseUrl:o})}catch(R){g={ok:!1,error:R.message}}l.push({worker:m,taskId:f.taskId,pid:f.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 X(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(m){u={ok:!1,error:m.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();J();M();w();import YC from"node:path";O();async function Km(e){let r=K(e.baseUrl),t=await G(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 X(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 jm(e,r){let t=B(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=_(YC.join(x(t.id),"workers",b(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=T(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 Km({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,H(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}O();Ie();function JC(e=process.env){let r=v();return Be(r,e)!=="forge"}function Vm(e,r=process.env){if(JC(r))return e?.maxConcurrentWorkers??void 0}async function Gm(e,r){let t=K(r.baseUrl?String(r.baseUrl):void 0),n=await G(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await qo(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();Ie();Ce();import Ae from"node:path";Eo();import Es from"node:path";Se();J();var qa=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Ym(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of qa)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function xe(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!Ym(n)})}function Xr(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 Jn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?xe(e.changedFiles).length>0:!!(Xr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function qn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function za(e,r){if(e.status)return xe(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):on(e.worktreePath);return xe(t).length>0}function qC(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Xa(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=qC(e);if(o&&!L(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):on(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"}:yo(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??Xr(s)};return e.status=u,u}return qn(e)}J();J();Nr();w();function Qa(e,r=Date.now(),t=Vn){let n=ve(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function xs(e,r=Date.now(),t=Vn){return L(e.pid)?!0:Qa(e,r,t)}function zC(e,r){return r?r.runTerminalCache.derive(e.run):qr(e.run)}function ar(e,r=Date.now()){return xs(e.worker,r)}function Za(e,r){return ir.has(e.run.status)?!1:zC(e,r)!==null}function Jm(e,r,t=Date.now()){if(ar(e,t))return!0;if(ir.has(e.run.status)||Za(e,r))return!1;let n=qn(e);return oe(n)?!1:!!ar(e,t)}Eo();J();function qm(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ar(e))return!0;let n=r??qn(e);return!!(!oe(n)||Jn(n)||xe(n.changedFiles).length>0||ht({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Xr(n.finalResult)}).blocked)}Se();w();import{existsSync as Xm,mkdirSync as XC,writeFileSync as zm}from"node:fs";import Ps from"node:path";function Qm(e,r,t){return Ps.join(e,"salvage",b(r),b(t))}function Zm(e){return Xm(Ps.join(Qm(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function ef(e){let r=Qm(e.harnessRoot,e.indexed.runId,e.indexed.workerName);XC(r,{recursive:!0});let t=Ps.join(r,"salvage.patch"),n=!1;if(Xm(e.indexed.worktreePath)){let s=re(e.indexed.worktreePath,["diff","HEAD"]),i=re(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
35
|
-
`);a.trim()&&(
|
|
22
|
+
${n}`;return KS.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 GS(e){let r=Dt(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 YS(e){let r=e.inventory??hp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function $r(e){let r=GS({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 kp(e){let r=e.task??{},t=VS(r),n=YS({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ut())}),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=ba({inventory:n,riskClass:t});return $r(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 $r({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 $r({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 $r({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=ba({inventory:n,riskClass:t});if(a)return $r({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 $r({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 yp,openSync as Rp}from"node:fs";import{spawn as ZS}from"node:child_process";var JS=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function qS(e){return e.replace(JS,"")}var zS=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ca(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var XS=new Set(["cursor"]);function QS(e){let r=e.trim().toLowerCase();return XS.has(r)?"auto":null}function _a(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=qS(t).trim()||r;return zS.test(o)||!Ca(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 Wt(e,r){let t=(e??"").trim();return t?Ca(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 xa(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=QS(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")`}:Ca(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",vp={name:"claude",defaultModel:Bt,preflightModel(e){return _a(e,Bt)},start(e){let r=_a(e.model,Bt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Rp(e.stdoutPath,"a"),o=Rp(e.stderrPath,"a"),s=["ignore",n,o],i=ZS("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],pe({cwd:e.worktreePath,detached:!0,stdio:s,env:rr(process.env)}));if(yp(n),yp(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 Cp,existsSync as nw,openSync as _p}from"node:fs";import{spawn as xp}from"node:child_process";at();w();import{closeSync as bp,openSync as Sp}from"node:fs";import{spawn as ew}from"node:child_process";var Pa=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function rw(){return rr({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function tw(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 wp={name:"hermes-codex",defaultModel:Pa,preflightModel(e){return Wt(e,Pa)},start(e){let r=Wt(e.model,Pa);if(!r.ok)throw new Error(`hermes-codex 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=Ae("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=tw(t,e.prompt),l=ew(i,a,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:rw()}));if(bp(n),bp(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 ow(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Kr=ow();function sw(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function iw(){return rr({...process.env,CI:"1",NO_COLOR:"1"})}function aw(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function lw(e,r,t){if(!(process.platform!=="win32"&&nw("/usr/bin/script")))return xp(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return xp("script",["-qfc",o,"/dev/null"],t)}var Pp={name:"codex",defaultModel:Kr,preflightModel(e){return Wt(e,Kr)},start(e){if(Ut().path==="hermes_openai_codex")return wp.start(e);let t=Wt(e.model,Kr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=_p(e.stdoutPath,"a"),s=_p(e.stderrPath,"a"),i=["ignore",o,s],a=sw(),l=aw(n,e.prompt),c=lw(a,l,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:iw()}));if(Cp(o),Cp(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 cw="claude-sonnet-4-6",Ra="composer-2.5";function vs(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ep(e){return e.toLowerCase()}function Aa(e=R()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||cw}function Ea(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 uw(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ra,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 Ap(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 dw(e){let r=Ep(vs(e,"executorRef")),t=vs(e,"title").toLowerCase(),n=vs(e,"priority")||"normal",o=Ep(vs(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 Ap(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Ap(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=Aa();return{model:s,provider:Ea(s),rule:"default:global"}}function bs(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=uw(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Ea(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=dw(e.task);r={...o,requestedModel:o.model}}else{let o=Aa();r={model:o,provider:e.explicitProvider?.trim()||Ea(o),rule:"default:global",requestedModel:o}}let t=np({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||ya(e.task)))return t;let n=kp({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 Ip(e,r,t){return e||r||t||Aa()||Bt}function Op(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Np(){return{maxTaskAttempts:Op(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ot("harness.maxTaskAttempts",4))),dispatchCooldownMs:Op(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ot("harness.dispatchCooldownMs",5e3)))}}O();import fw from"node:path";D();q();w();var Ia="kynver-harness:",Tp="@runner:";function Oa(e){return e?.trim()?e.trim():null}function pw(e){let r=Oa(e);if(!r?.startsWith(Ia))return null;let t=r.slice(Ia.length),n=t.indexOf(Tp);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Na(e,r){let t=e.trim(),n=r.trim();return`${Ia}${t}${Tp}${n}`}function Ta(e,r){let t=Oa(r);return t?pw(e)===t:!1}function Ss(e){let r=Oa(e.workerLeaseOwner);return r&&Ta(r,e.runId)?r:Na(e.runId,e.runnerId)}import Dp from"node:os";Ee();Ee();import mw from"node:os";function ws(e,r){let t=(r??mw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function br(e){return e?.trim()?e.trim():null}function Ge(e={}){let r=e.env??process.env;return{runnerId:br(r.KYNVER_RUNTIME_ID)??br(r.OPENCLAW_RUNTIME_ID)??br(r.HOSTNAME)??Dp.hostname(),hostname:br(r.HOSTNAME)??Dp.hostname(),profile:br(r.KYNVER_RUNNER_PROFILE)??br(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:br(r.KYNVER_HARNESS_REPO)??br(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Br()}}O();async function Lt(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=j(e.baseUrl);try{let o=await G(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(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}D();async function Cs(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 Lt({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)&&F(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function Mp(e,r){return C(fw.join(P(e),"workers",b(r),"worker.json"),void 0)}async function _s(e,r){let t=B(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=j(r.baseUrl?String(r.baseUrl):void 0),s=await G(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Da,a=Ge({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Mp(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 p=Ss({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await Cs({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 X(k,s,{leaseOwner:h.leaseOwner??p,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 Up(e,r){let t=B(e);for(let n of Object.keys(t.workers||{})){let o=Mp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||M(o).status==="done"))return!0}return!1}Ce();D();D();import{existsSync as TC,mkdirSync as DC}from"node:fs";import Ft from"node:path";var gw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,hw="next-action-fix:";function xs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Wp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:xs(e)}function kw(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(hw)||t.includes("repair")||t.includes("unblock"))}function yw(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(gw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=xs(String(n.targetPrUrl??n.target_pr_url??"")),s=xs(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Wp(o):null,targetPrBranch:s}}catch{return r}}function Bp(e){if(!kw(e))return null;let r=yw(e.description),t=e.prUrl?Wp(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??xs(e.branch)}:null}function Lp(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 Hp(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=[...Wn(`worker.prompt.progress.${n}`).split(`
|
|
23
|
+
`),o],i=Wn(`worker.prompt.merge_gate.${n}`).split(`
|
|
24
|
+
`),a=Wn(`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.","Final response must include files changed, verification commands, and unresolved risks.",...Wn("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?[...Lp({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
27
|
+
`)}w();O();w();at();import{closeSync as Ua,existsSync as $p,mkdirSync as ww,openSync as Wa,statSync as Cw,unlinkSync as Fp}from"node:fs";import{spawn as _w}from"node:child_process";import xw from"node:os";import Ye from"node:path";import{existsSync as Kn,readdirSync as Rw}from"node:fs";import jr from"node:path";var vw=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function bw(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 Sw(e){let r=jr.join(e,"versions");if(!Kn(r))return null;let t=null,n=-1;for(let o of Rw(r,{withFileTypes:!0})){if(!o.isDirectory()||!vw.test(o.name))continue;let s=bw(o.name);s==null||s<=n||(n=s,t=jr.join(r,o.name))}return t}function Ps(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(Kn(t)&&Kn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Sw(r);if(!o)return null;let s=jr.join(o,"node.exe"),i=jr.join(o,"index.js");return!Kn(s)||!Kn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var Ma="composer-2.5",Pw=15e3,Ew=6e4,Aw=3e4;function Iw(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function Ow(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&$p(Ye.join(Ye.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ps(Ye.dirname(e)):t?{nodeExe:e,indexJs:Ye.join(Ye.dirname(e),"index.js"),versionDir:Ye.dirname(e)}:Ps();if(o)return Iw(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 Nw(){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=Ps(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($p(t))return t}return"agent"}function Tw(e,r){return rr({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:Ye.basename(e)||"agent.cmd"}:{}})}function Kp(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Ba(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 Dw(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Ye.join(xw.homedir(),".kynver","locks");return ww(e,{recursive:!0}),Ye.join(e,"cursor-agent-start.lock")}function Mw(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=Dw(),r=Ba("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",Ew),t=Ba("KYNVER_CURSOR_START_LOCK_STALE_MS",Aw),n=Date.now();for(;;)try{let o=Wa(e,"wx");return Ua(o),()=>{try{Fp(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Cw(e).mtimeMs>t){Fp(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Kp(250)}}var jp={name:"cursor",defaultModel:Ma,preflightModel(e){return xa(e,Ma)},start(e){let r=xa(e.model,Ma);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Wa(e.stdoutPath,"a"),o=Wa(e.stderrPath,"a"),s=["ignore",n,o],i=Nw(),a=Ow(i),l=Mw(),c;try{c=_w(a.executable,[...a.prefixArgs,"-p","--force","--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt],pe({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:Tw(i,a)})),Kp(Ba("KYNVER_CURSOR_START_LOCK_HOLD_MS",Pw))}finally{l(),Ua(n),Ua(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 Es={claude:vp,codex:Pp,cursor:jp},Vp=null;function Gp(e){if(Vp)return Vp;let r=e?.trim();if(r){let o=Es[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Es).join(", ")}`);return o}let t=ks(R().workerProvider),n=Es[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Es).join(", ")}`);return n}w();import{spawn as wC}from"node:child_process";import{existsSync as CC,openSync as _C,closeSync as Dm}from"node:fs";import Mm from"node:path";import{fileURLToPath as xC}from"node:url";D();function As(e){return!!e.completionReportedAt?.trim()}function La(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),F(r,e)}function Uw(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ha(e){return!!(Uw(e.completionBlocker)||e.completionOutcome==="rejected")}function Vr(e){return As(e)&&!Ha(e)}D();q();O();import Jn from"node:path";function Fa(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}var Ww=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function Yp(e){let r=Fa(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=jn(r.outcome),n=jn(r.detail)??jn(r.error),o=Fa(r.task),s=Fa(r.closedTask),i=o?jn(o.status):null,a=s?jn(s.status):null,l=t!==null&&Ww.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function Jp(e){return e.taskAdvanced}D();Lo();var Bw="expert-lane-pr-review:",Lw="plan-review-task",Hw="scheduledjob:";function qp(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function zp(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(Bw)||r===Lw||r.startsWith("daemon-review:"))return!0;if(r.startsWith(Hw)&&e.parentTaskId){let n=qp(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=qp(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var Xp=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,Fw=new Set(Zd()),$w=/no commits between/i;function Qp(e){return!!(e&&$w.test(e))}function he(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Zp(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:he(e.head)}function em(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?he(t[0]):null}function Kw(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 jw(e,r){if(r.changedFiles.length>0)return!1;let t=he(e.personaSlug)?.toLowerCase();if(t&&Fw.has(t))return!0;let n=he(e.routingRule)??"";return!!(n&&Xp.test(n))}function Vw(e,r){if(e.changedFiles.length>0)return!0;let t=he(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=Kw(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(he(e.headCommit)||Zp(e.gitAncestry))}function rm(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(zp({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=he(e.routingRule)??"";if(r&&Xp.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(jw(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(he(e.patchPath)||he(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(he(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(he(e.prUrl)??he(e.taskPrUrl)??he(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 Vw(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function tm(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:he(r?.headCommit)??Zp(e.gitAncestry),prUrl:he(r?.prUrl)??null}}import{spawnSync as Gw}from"node:child_process";function om(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return nm(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return nm(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 nm(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}Ce();function Yw(e,r,t){try{let n=Gw(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 Os={git:(e,r)=>re(e,r),gh:(e,r)=>Yw("gh",e,r)};function Jw(e){return e.split(`
|
|
28
|
+
`).map(r=>r.trim()).find(Boolean)??""}function sm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:om(t.stdout)}function Vn(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Is(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 Ns(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=Vn(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function im(e){let r=Is(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=qw(t.stdout)??Is(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 qw(e){let t=Jw(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}function am(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 zw(e){return e.gh(process.cwd(),["--version"]).status===0}function Xw(e,r){return`AgentOS harness: ${e} (${r})`}function Qw(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 $a(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Vn(e.snapshot.worktreePath,e.exec)??void 0};let r=Ns({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 Ka(e,r=Os){let t=e.prUrlHint??em(e.status.finalResult)??null,n=tm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!rm({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(!zw(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=sm(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,A=n.headCommit??Vn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let x=Ns({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!x.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${x.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};g=x.committed,y=x.pushed,A=x.headCommit??A}else{let x=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(x.status!==0&&!/already up to date/i.test(x.stderr||x.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${x.stderr||x.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};y=x.status===0}return{ok:!0,prUrl:a,headCommit:A,committed:g,pushed:y}}let l=Is(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,m=Ns({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=m.committed,d=m.pushed,!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.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=m.headCommit??f??Vn(n.worktreePath,r)??void 0;let p=f?am(n.worktreePath,i,f,r):null;if(p)return{ok:!0,prUrl:p.prUrl,headCommit:f,committed:u,pushed:d,created:!1};let h=e.run.base?.trim()||"main",k=im({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:Xw(e.worker.name,e.worker.runId),body:Qw(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!k.ok||!k.prUrl){if(Qp(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}}q();Bo();function Ts(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 lm(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 cm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function um(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function pm(e){let r=um(e);if(!r)return[];let t=um(r.worktreeHandoff),n=cm(t?.disposableArtifactsRemoved);return n.length?n:cm(r.disposableArtifactsRemoved)}function dm(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function mm(e,r){let t=Ts(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>dm(o)));return t.every(o=>{let s=dm(lm(o));return n.has(s)})}function Ds(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function fm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Zw(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 eC(e){let r=fm(e.disposableArtifactsRemoved),t=pm(e.finalResult);return[...new Set([...r,...t])]}function gm(e){let r=fm(e.changedFiles),t=Ts(r),n=eC(e),o=t.length===0||mm(r,n);return Ds(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`}:Ds(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`}:Ds(e.artifactBundlePath)||Ds(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}:Zw(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`}}D();q();w();import rC from"node:path";var tC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function hm(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function nC(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 oC(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:nC(r);return{finalResult:r??t??"completed",summary:t}}function ja(e,r,t){if(hm(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=oC(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),F(e.runId,e)}function sC(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 km(e,r){let t=sC(r);if(t.size===0)return[];let n=B(e),o=[];for(let s of Object.keys(n.workers||{})){let i=C(rC.join(P(n.id),"workers",b(s),"worker.json"),void 0);if(!i?.taskId||hm(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!tC.has(a))continue;let l=M(i,{base:n.base,baseCommit:n.baseCommit});ja(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import iC from"node:path";var aC=/^[a-z0-9][a-z0-9._-]{0,127}$/i,lC=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Va=new Set(["undefined","null"]),ym="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Ms(e){let r=e.trim();if(!aC.test(r))throw new Error(`invalid run id: ${e}`);return r}function cC(e){let r=e.trim();if(!lC.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Ga(e){return typeof e=="string"?e.trim():""}function Je(e){let r=Ga(e.run),t=Ga(e.name);return(!r||Va.has(r))&&pr(`missing --run RUN_ID (${ym})`),(!t||Va.has(t))&&pr(`missing --name WORKER_NAME (${ym})`),{runId:Ms(r),workerName:cC(t)}}function Ya(e){let r=Ga(e.run);return(!r||Va.has(r))&&pr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Ms(r)}function Rm(e){let r=iC.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function vm(e,r,t){let n=await fetch(e,{method:"POST",headers:Me(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 uC(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function bm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Gn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function dC(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function pC(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 wm(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function mC(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Yn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,F(e.runId,e))}function fC(e){e.completionBlocker&&(delete e.completionBlocker,F(e.runId,e))}function Us(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function gC(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function qn(e){let{runId:r,workerName:t}=Je(e),n=fe(r,t),o=B(n.runId),s=M(n,Us(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!oe(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&&Ha(n)&&fC(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let E=Ka({worker:n,run:o,status:s});if(!E.ok)return Yn(n,E.reason),{ok:!1,reason:E.reason,nextAction:E.nextAction,completionBlocked:!0};(E.prUrl||E.headCommit)&&(s=M(n,Us(o)),s=gC(s,E))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let E=gm({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 Yn(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=j(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await G(f,i,{baseUrl:d});a&&(await Cs({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=fe(r,t));let p=`${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 vm(p,m,k);if((g.status===401||g.status===403)&&!f){let E=await Zu(i,{baseUrl:d});E&&E!==m&&(m=E,g=await vm(p,m,k))}if(g.ok){let E=Yp(g.parsed);if(!Jp(E)){let _=`completion acknowledged but board not advanced: ${E.detail??(E.routeOutcome?`harness completion returned ${E.routeOutcome}`:"harness completion did not advance the linked task")}`;Yn(n,_);let ce={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:g.parsed};return La(n,n.runId,ce),{ok:!1,httpStatus:g.status,response:g.parsed,reason:_,completionBlocked:!0}}Yn(n,void 0);let U=E.routeOutcome??"acknowledged",V={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:g.parsed};La(n,n.runId,V),ja(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,A=uC(g.parsed)??(y?"runner token unauthorized":"non-2xx response"),x=y?`completion replay rejected (${g.status}): ${A}`:`completion replay failed (${g.status}): ${A}`;return Yn(n,x),{ok:!1,httpStatus:g.status,response:g.parsed,completionBlocked:!0}}async function qa(e){try{let{runId:r,workerName:t}=Je(e),n=fe(r,t),o=B(n.runId),s=M(n,Us(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!oe(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 qn(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 Cm(e){let{runId:r,workerName:t}=Je(e),n=fe(r,t),o=B(n.runId),s=M(n,Us(o));ie(Jn.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function hC(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 Ja(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function kC(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Ja(e.task??e.taskId);t&&(r.task=t);let n=Ja(e.worker??e.name);n&&(r.worker=n);let o=Ja(e.status);return o&&(r.status=o),r}function yC(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 _m(e,r){let t=kC(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>yC(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:Sr(n,"status"),attentionCounts:Sr(n,"attention"),lifecycleCounts:Sr(n,"lifecycleStage")}),e.controller&&(o.controller=Em(n)),o}function xm(e){let r=Ya(e),t=e.full===!0||e.full==="true",n=_m(t?Gr(r):Im(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:hC(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Pm(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=wm(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=bm(n.completionResponse),m=bm(f?.task),p=Gn(f?.outcome),h=Gn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(U=>typeof U=="string"&&U.trim().length>0):[],g=Gn(m?.prUrl)??Gn(f?.prUrl),y=Gn(n.completionReportedAt),A=dC({finished:oe(o),completionBlocker:c,completionOutcome:p,completionReportedAt:y}),x=pC({completionBlocker:c,completionOutcome:p,completionReportedAt:y,finished:oe(o)}),E=mC({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 V=U.ruleSlugs;return Array.isArray(V)?V.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:A,completionReportedAt:y,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:p,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:x,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function RC(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&&!wm(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function vC(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 Sr(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 Sm(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 Em(e){let r=e.filter(Sm),t=e.filter(n=>{if(Sm(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 Am(e,r,t){let n={runId:e.id,name:e.name,status:yn(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:Sr(r,"status"),attentionCounts:Sr(r,"attention"),lifecycleCounts:Sr(r,"lifecycleStage")},n.controller=Em(r)),n}function bC(e){return e.status==="done"&&e.attention==="done"}function Gr(e){let r=B(e),n=Object.keys(r.workers||{}).map(s=>{let i=C(Jn.join(P(r.id),"workers",b(s),"worker.json"),void 0);return i?Pm({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Am(r,n,!1);return ie(Jn.join(P(r.id),"last-board.json"),o),o}function Im(e){let r=B(e),n=Object.keys(r.workers||{}).map(i=>{let a=C(Jn.join(P(r.id),"workers",b(i),"worker.json"),void 0);return a?RC(a)?vC(i,a):Pm({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!bC(i)),s=Am(r,o,!0);return s.status=yn(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Sr(n,"status"),allAttentionCounts:Sr(n,"attention")},ie(Jn.join(P(r.id),"last-board-compact.json"),s),s}async function Om(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Gr(t),s=j(e.baseUrl?String(e.baseUrl):void 0),i=await G(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(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 SC(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 Ws(e){let r=Ya(e),t=e.full===!0||e.full==="true",n=_m(t?Gr(r):Im(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=SC(r)),console.log(JSON.stringify(n,null,2))}function Nm(e){let{runId:r,workerName:t}=Je(e),n=fe(r,t),o=Eo(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?gu(i):s;a&&console.log(a)}}function Tm(e){let{runId:r,workerName:t}=Je(e),n=fe(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"),Ir(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();var PC=5e3,EC=360*60*1e3,AC=3,IC=5e3;function OC(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 Ht(e){let r=OC(e),t=r.pollMs??PC,n=r.maxTotalMs??EC,o=r.completeAttempts??AC,s=r.completeBackoffMs??IC,i=fe(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=fe(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(oe(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`};Ir(t)}let l,c;for(let u=1;u<=o;u++){let d=await qn({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&&Ir(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function Um(e){try{let r=await Ht(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 NC(){return Mm.join(xC(new URL(".",import.meta.url)),"cli.js")}function Wm(e){let r=e.cliPath??NC();if(!CC(r))return;let t=Mm.join(e.workerDir,"auto-complete.log"),n;try{n=_C(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=wC(s,i,pe({detached:!0,stdio:o,env:process.env}));return n!==void 0&&Dm(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{Dm(n)}catch{}return}}Ce();function Bm(e,r,t){me(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=re(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=re(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 za(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||ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:bs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=Gp(o.provider),i=o.model;if(s.preflightModel){let W=s.preflightModel(r.model);if(!W.ok)throw new Error(`model preflight failed for provider "${s.name}": ${W.note??"invalid model/provider combination"}`);W.normalized&&console.error(`[supervisor] ${n}: ${W.note}`),i=W.model}let{worktreesDir:a}=te(),l=Ft.join(P(e.id),"workers",n);DC(l,{recursive:!0});let c=Ft.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(TC(c))throw new Error(`worktree path already exists: ${c}`);me(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?Bm(e.repo,c,u):me(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Ft.join(l,"stdout.jsonl"),m=Ft.join(l,"stderr.log"),p=Ft.join(l,"heartbeat.jsonl"),h=Hp({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:p,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:m,heartbeatPath:p,prompt:h})}catch(W){throw me(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),me(e.repo,["branch","-D",d],{allowFailure:!0}),W}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 A=Ip(y.model,i,s.defaultModel),x=R(),E=Pe(process.env,x),U=Ge().runnerId,V=ws(E.boxKind),$={name:n,runId:e.id,status:"running",pid:y.pid,model:A,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:p,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:V,runtimeId:U,startedAt:new Date().toISOString()};if(F(e.id,$),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Ft.join(l,"worker.json")}},e.status="running",De(e),$.agentOsId&&$.taskId){let W;try{W=Wm({runId:e.id,workerName:n,workerDir:l,agentOsId:$.agentOsId})}catch(_){let ce=`completion sidecar failed to spawn: ${_.message}`;$.completionBlocker=ce,F(e.id,$)}if(W)W.pid&&($.completionSidecarPid=W.pid,F(e.id,$));else{let _="completion sidecar failed to spawn (CLI not found or spawn error)";$.completionBlocker=_,$.completionSidecarSpawnFailedAt=new Date().toISOString(),F(e.id,$)}}return $}async function Lm(e){let r=B(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):Hc(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=za(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 Ht({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 Hm}from"node:crypto";function wr(e){let r=e.replace(/\r\n/g,`
|
|
31
|
+
`).trimEnd();return Hm("sha256").update(r,"utf8").digest("hex")}function $t(e){if(e==null)return null;let r=e.trim();return r?Hm("sha256").update(r,"utf8").digest("hex"):null}O();var z=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function zn(e,r){return e===401||e===403?new z("auth",r,e):e>=500?new z("server",r,e):new z("permanent",r,e)}function Xa(e){let r=e instanceof Error?e.message:String(e);return/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|fetch failed|network/i.test(r)?new z("network",r):new z("tool_interruption",r)}function Fm(e){return e!=="permanent"}function Ls(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Hs(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function $m(e,r,t={}){let n=j(t.baseUrl),o=t.apiKey??ne(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:Ls(o)}),l=await Hs(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw zn(a.status,c)}return l}catch(a){throw a instanceof z?a:Xa(a)}}async function Km(e,r={}){let t=j(r.baseUrl),n=r.apiKey??ne(),o=r.fetchFn??fetch,s=e.agentOsSlug;try{if(e.operation==="create"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans`,m={title:e.title,summary:e.summary??null,slug:e.planSlug??null,sourceRefs:Bs(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Bs(e)}},p=await o(f,{method:"POST",headers:Ls(n),body:JSON.stringify(m)}),h=await Hs(p);if(!p.ok){let g=typeof h=="object"&&h&&"error"in h?String(h.error):`create plan failed (${p.status})`;throw zn(p.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 z("permanent","planId is required for this operation");if(e.operation==="update_metadata"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}`,m={title:e.title,summary:e.summary??null,sourceRefs:Bs(e)},p=await o(f,{method:"PATCH",headers:Ls(n),body:JSON.stringify(m)}),h=await Hs(p);if(!p.ok){let g=typeof h=="object"&&h&&"error"in h?String(h.error):`update plan failed (${p.status})`;throw zn(p.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:Bs(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Ls(n),body:JSON.stringify(l)}),u=await Hs(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw zn(c.status,f)}let d=u;return{planId:d.version.planId,versionId:d.version.id,versionNumber:d.version.versionNumber}}catch(i){throw i instanceof z?i:Xa(i)}}function Bs(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as MC}from"node:crypto";function Fs(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:$t(e.summary),bodyHash:wr(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return MC("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as jm}from"node:fs";import{homedir as UC}from"node:os";import Kt from"node:path";function $s(){let e=process.env.KYNVER_STATE_ROOT;return e?Kt.resolve(e):Kt.join(UC(),".kynver","state")}function Ks(){return Kt.join($s(),"plan-outbox")}function WC(){return Kt.join($s(),"plan-outbox-archive")}function Yr(){let e=Ks(),r=WC();return jm(e,{recursive:!0}),jm(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function Xn(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=Kt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(Kt.join("/var","folders"))}import{existsSync as Qa,readFileSync as Gm,renameSync as Vm,readdirSync as BC,writeFileSync as Za,unlinkSync as TL}from"node:fs";import Ue from"node:path";import{randomUUID as LC}from"node:crypto";var HC=12;function jt(){let{outboxDir:e}=Yr(),r=BC(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=rl(Ue.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function el(e){for(let r of jt())if(r.idempotencyKey===e)return r;return null}function rl(e){if(!Qa(e))return null;try{return JSON.parse(Gm(e,"utf8"))}catch{return null}}function Ym(e){let{outboxDir:r}=Yr(),t=Ue.join(r,e.bodyPath);return Gm(t,"utf8")}function tl(e,r){let{outboxDir:t}=Yr(),n=new Date().toISOString(),o=r.existing?.id??LC(),s=r.existing?.bodyPath??`${o}.body.md`,i=Ue.join(t,`${o}.json`),a=Ue.join(t,s);r.existing||Za(a,e.body,"utf8");let l={id:o,idempotencyKey:Fs(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:wr(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??HC,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return Za(i,`${JSON.stringify(l,null,2)}
|
|
32
|
+
`,{mode:384}),l}function Jm(e){let{outboxDir:r}=Yr(),t=Ue.join(r,`${e.id}.json`);Za(t,`${JSON.stringify(e,null,2)}
|
|
33
|
+
`,{mode:384})}function qm(e){let{outboxDir:r,archiveDir:t}=Yr(),n=Ue.join(r,`${e.id}.json`),o=Ue.join(r,e.bodyPath),s=Ue.join(t,`${e.id}.json`),i=Ue.join(t,e.bodyPath);Qa(n)&&Vm(n,s),Qa(o)&&Vm(o,i)}function Qn(e){let{outboxDir:r}=Yr();return{jsonPath:Ue.join(r,`${e.id}.json`),bodyPath:Ue.join(r,e.bodyPath)}}function zm(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 Xm(e,r,t={}){let n=await $m(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new z("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=$t(r.summary),a=$t(o.summary);if(i!==a)throw new z("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new z("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new z("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=wr(l);if(r.bodyHash&&c!==r.bodyHash)throw new z("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 Qm(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:wr(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var Zm="persisted and read back",FC="queued for retry",nl="failed and needs action";async function Zn(e,r={}){e.bodyPathHint&&Xn(e.bodyPathHint);let t=Fs(e),n=el(t);if(n?.readbackEvidence)return{userStatus:Zm,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return ef(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??Km,s=r.verifyReadback??Xm;try{let i=await o(e,r),a={...e,planId:i.planId},l=Qm(a,i),c=await s(e.agentOsSlug,$C(e,l),r);return n&&qm(n),{userStatus:Zm,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof z?i:new z("tool_interruption",i instanceof Error?i.message:String(i));if(!Fm(a.kind)){let l=tl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=Qn(l),u=rf(l,a.message);return{userStatus:nl,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return ef(e,a.message,a.kind,n)}}function $C(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function ef(e,r,t,n){let o=tl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=Qn(o);if(o.retryCount>=o.maxRetries){let i=rf(o,r);return{userStatus:nl,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:FC,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function rf(e,r){let t={...e,queueStatus:"failed",userStatus:nl,lastError:r,updatedAt:new Date().toISOString()};return Jm(t),t}import KC from"node:path";async function ol(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=Ym(s),a=zm(s,i),l=await Zn(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 sl(e){let r=KC.join(Ks(),`${e}.json`);return rl(r)}function il(e){let r=Qn(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 al(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 ll(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await X(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 nf}from"node:child_process";import{spawnSync as jC}from"node:child_process";function tf(){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=jC("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 of=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),VC=new Set(["CLEAN","HAS_HOOKS"]);function ul(e){return e?.trim()?["--repo",e.trim()]:[]}function sf(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function af(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 eo(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function GC(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&&of.has(i))){if(i){n.push(`${eo(s)}=${i}`);continue}if(!(l&&of.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${eo(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${eo(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${eo(s)}=${a}`);continue}t.push(`${eo(s)}=PENDING`)}}}return{pending:t,failed:n}}function YC(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 JC=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,qC=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,zC=/^docs[(:]/i,XC=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function QC(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=zC.test(r)||XC.test(t),o=JC.test(t),s=qC.test(t);return n||o||s||e.vercelCheckSuccess===!0}function ZC(e){if(!QC({title:e.title,body:e.body,vercelCheckSuccess:YC(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 e_(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(!VC.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=GC(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(", ")}`);ZC(e)}function r_(e){try{return e_(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function t_(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 n_(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 o_(e,r){if(!r?.trim())return;let t=nf("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}`)&&nf("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function lf(e){let r=e.cwd??process.cwd(),t=e.exec??Os,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=tf();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=af(t,r,["pr","view",n,...ul(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=r_(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,...ul(e.repo),"--squash"]);if(l.status!==0){let u=cl(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=cl(t,r,a,e.repo);c||(c=cl(t,r,a,e.repo));try{let u=n_(t,r,e.repo);t_(t,r,u,s.headRefName),o_(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 cl(e,r,t,n){try{let o=af(e,r,["pr","view",t,...ul(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}O();async function cf(e){let r=await G(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 X(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function uf(){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 s_="dispatch_start_readback_failed:";function Jr(e){return`${s_} ${e.trim()}`}function i_(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 a_(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:Jr("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:Jr(`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:Jr(`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:Jr(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=i_(o);return a?{ok:!1,error:Jr(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:Jr(`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:Jr("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function df(e){let r=await Lt({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return a_({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}w();D();function pf(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 F(e,n),n}D();var Da=3600*1e3;function mf(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function ff(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function l_(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,m=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,p=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof m?.promptMarkdown=="string"?m.promptMarkdown:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:m,memoryQualityPromptMarkdown:p,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:f}}function c_(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function u_(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("",uf());let n=al(e);if(n?.outboxId){let o=sl(n.outboxId);o?t.push("",il(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
36
|
+
`)}function d_(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 qr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let Ar=function(){return Z.filter(S=>S.started).length},ur=function(S,v){fa({runId:s.id,agentOsId:i,phase:S,startedCount:Ar(),outcomeCount:Z.length,cappedStarts:A,...v})},ke=function(S){return S.landPrDispatch===!0?!0:S.task?.executor==="land_pr"};var t=Ar,n=ur,o=ke;let s=B(String(N(String(e.run||""),"--run"))),i=String(N(String(e.agentOsId||""),"--agent-os-id")),a=j(e.baseUrl?String(e.baseUrl):void 0),l=await G(e.secret?String(e.secret):void 0,i,{baseUrl:a}),u=!(e.execute===!0||e.execute==="true"),d=Ge({runId:s.id}),f=Na(s.id,d.runnerId),m=e.diskPath?$e({diskPath:String(e.diskPath)}):$e({diskPath:s.repo}),p=nr({runId:s.id}),h=d_(e),k=h.size>0,g=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,y=k?Math.min(g,h.size):g,A=u?y:Math.min(y,p.slotsAvailable);if(!u&&A<=0){let S={runId:s.id,agentOsId:i,dryRun:!1,skipped:!0,reason:p.reason??"no resource slots",resourceGate:p};if(r)return{ok:!0,...S};console.log(JSON.stringify(S,null,2));return}let x=fs(s.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let S=`${a}/api/agent-os/by-id/${encodeURIComponent(i)}/lane-hygiene`;try{await X(S,l,{agentOsId:i,dryRun:!1,includeBoardReconcile:!0},{agentOsId:i,baseUrl:a})}catch(v){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${v.message}`)}}let E=`${a}/api/agent-os/by-id/${encodeURIComponent(i)}/tasks/dispatch-next`,U=S=>({agentOsId:i,dryRun:u,maxStarts:S,leaseOwner:f,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Da,runnerDiskGate:m,runnerResourceGate:p,activeHarnessWorkers:x,runnerPresence:d,harnessBoardSnapshot:Gr(s.id),...e.lane?{lane:rp(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(v=>v.trim()).filter(Boolean)}:{}}),V=qd(),$=async S=>{let v=await X(E,l,U(S),{agentOsId:i,baseUrl:a,timeoutMs:V})??{ok:!1,status:0,response:null},I=v.response;return{dispatch:v,result:I?.result}},W=await $(k||u?A:1);if(!W.dispatch.ok||!W.result){let S={runId:s.id,agentOsId:i,action:"dispatch",httpStatus:W.dispatch.status,response:W.dispatch.response,authRefreshed:W.dispatch.refreshedAuth===!0,authRefreshFailure:W.dispatch.authRefreshFailure};if(r)return{ok:!1,...S};console.log(JSON.stringify(S,null,2)),process.exit(1)}let _=W.result;if(u){let S=mf(_),v=ff(_),I={runId:s.id,agentOsId:i,dryRun:!0,wouldStart:_.started.map(K=>({taskId:K.task.id,title:K.task.title,reason:K.reason})),skipped:_.skipped.map(K=>({taskId:K.task.id,skipReason:K.skipReason,reason:K.reason})),diskGate:_.diskGate,resourceGate:_.resourceGate,inspected:_.inspected,pagesScanned:_.pagesScanned??null,candidatesExhausted:_.candidatesExhausted??null,capacityIdle:S?.capacityIdle===!0,admissionExhaustion:S,dispatchSkipDrain:v};if(r)return{ok:!0,...I};console.log(JSON.stringify(I,null,2));return}let ce=Np(),Z=[],Qe=[],nt=Number(_.inspected)||0,Be=!1;async function ue(S,v,I){let K=await ll({baseUrl:a,secret:l,agentOsId:i,taskId:String(S.id),leaseOwner:f,failureDetail:v}),se={taskId:S.id,started:!1,error:v,released:K.released,releaseResponse:K.releaseResponse,...I};return Z.push(se),ur("outcome",{lastOutcome:se}),!1}async function ee(S){let v=S.task,I=String(v.id);if(k&&!h.has(I))return ue(v,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...h]});let K=v.prUrl?String(v.prUrl):"";if(!K)return ue(v,"land_pr task missing prUrl");try{let se=await lf({prUrl:K,repo:sf(K),cwd:s.repo}),ot=await cf({baseUrl:a,secret:l,agentOsId:i,runId:s.id,task:v,report:se});return ot.ok?(Z.push({taskId:I,started:!0,landPr:!0,outcome:se.outcome,completionStatus:ot.status}),!0):ue(v,`land_pr completion POST failed (HTTP ${ot.status})`,{landPr:!0,outcome:se.outcome})}catch(se){return ue(v,se.message)}}async function L(S){let v="duplicate_dispatch_prevented: live local worker already owns this task",I=await ll({baseUrl:a,secret:l,agentOsId:i,taskId:String(S.id),leaseOwner:f,failureDetail:v}),K={taskId:S.id,started:!1,error:v,alreadyRunning:!0,nonFatal:!0,released:I.released,releaseResponse:I.releaseResponse};return Z.push(K),ur("outcome",{lastOutcome:K}),!1}async function ye(S){let v=S.task,I=l_(S),K=String(v.id);if(k&&!h.has(K))return ue(v,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...h]});let se=c_(v.personaSlug);if(se&&(!I?.personaInjectionReady||!I.personaMarkdown))return ue(v,`persona_injection_required: missing anchored context-envelope persona block for "${se}"`);if(Up(s.id,K))return L(v);let ot=Number(v.attempt)||1;if(ot>ce.maxTaskAttempts)return ue(v,`task attempt ${ot} exceeds KYNVER_MAX_TASK_ATTEMPTS (${ce.maxTaskAttempts})`);let ln=v.leaseToken?String(v.leaseToken).trim():"";if(!ln)return ue(v,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Py=b(`t-${v.id}-a${v.attempt}`),st=bs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:tp(v)});try{let Oi=v.planId?String(v.planId):void 0,wo=Bp({title:v.title?String(v.title):void 0,description:v.description?String(v.description):null,executorRef:v.executorRef?String(v.executorRef):null,prUrl:v.prUrl?String(v.prUrl):null,branch:v.branch?String(v.branch):null}),Le=za(s,{name:Py,task:u_(v,i),ownedPaths:e.owned?String(e.owned).split(",").map(Ey=>Ey.trim()).filter(Boolean):[],model:st.model,provider:st.provider,routingRule:st.rule,requestedModel:st.requestedModel,agentOsId:i,taskId:String(v.id),planId:Oi,branch:wo?.targetPrBranch??void 0,executorRef:v.executorRef?String(v.executorRef):void 0,parentTaskId:v.parentTaskId?String(v.parentTaskId):void 0,taskTitle:v.title?String(v.title):void 0,taskPrUrl:wo?.targetPrUrl??(v.prUrl?String(v.prUrl):void 0),repairTargetPrUrl:wo?.targetPrUrl,repairTargetBranch:wo?.targetPrBranch??void 0,instructionPolicyMarkdown:I?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyEvidence:I?.instructionPolicyEvidence??null,memoryQualityCapture:I?.memoryQualityCapture??null,memoryQualityPromptMarkdown:I?.memoryQualityPromptMarkdown??null,personaMarkdown:I?.personaMarkdown??null,personaSlug:I?.personaSlug??se,personaEvidence:I?.personaEvidence??null,contextEnvelopeMarkdown:I?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:I?.contextEnvelopeEvidence??null,leaseOwner:f,leaseToken:ln,dispatched:!0}),Co=await df({agentOsId:i,taskId:String(v.id),leaseOwner:f,expectedLeaseToken:ln,worker:Le,baseUrl:a,secret:l});if(!Co.ok)return pf(s.id,Le,Co.error??"dispatch_start_readback_failed"),ue(v,Co.error??"dispatch_start_readback_failed",{readback:Co.detail??null});Le.leaseToken!==ln&&(Le.leaseToken=ln,Le.leaseOwner=f,F(s.id,Le));let Uc={taskId:v.id,started:!0,worker:Le.name,pid:Le.pid,branch:Le.branch,model:Le.model,provider:st.provider,routingRule:st.rule,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(I?.instructionPolicyEvidence?.ruleSlugs)?I.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:I?.personaSlug??se,personaOperatingRuleCount:I?.personaEvidence?.operatingRuleCount??null};return Z.push(Uc),ur("worker_started",{lastOutcome:Uc}),I?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${K}: operating-rules policy injected fingerprint=${I.instructionPolicyFingerprint}`),I?.personaSlug&&console.error(`[dispatch] task ${K}: persona context injected slug=${I.personaSlug}`),I?.contextEnvelopeReady&&console.error(`[dispatch] task ${K}: context envelope injected anchor=${I.contextEnvelopeEvidence?.anchorTaskId??K}`),!0}catch(Oi){return ue(v,Oi.message)}}let Re=new Set;async function Ze(S){let v=S.task,I=String(v.id);if(Re.has(I))return ue(v,"dispatch_retry_loop_prevented: task already failed to start this tick");let K=ke(S)?await ee(S):await ye(S);return K||Re.add(I),K}for(let S of _.started)await Ze(S);if(Qe.push(..._.skipped??[]),k)for(let S of Qe){let v=String(S.task.id);h.has(v)&&Z.push({taskId:v,started:!1,error:`exact_target_not_started:${S.skipReason}`,skipReason:S.skipReason,detail:S.reason??null,requestedTargetTaskIds:[...h]})}for(;!k&&Z.length<A;){let S=await $(1);if(!S.dispatch.ok||!S.result){let I=zd(S.dispatch.response),K=Ar();Be=I&&K>0;let se={started:!1,error:"dispatch_next request failed during top-up",httpStatus:S.dispatch.status,response:S.dispatch.response,...Be?{nonFatal:!0,partialTopUp:!0}:{}};Z.push(se),ur("top_up_failed",{partialTopUpInterrupted:Be,lastOutcome:se});break}nt+=Number(S.result.inspected)||0,Qe.push(...S.result.skipped??[]);let v=S.result.started??[];if(v.length===0)break;for(let I of v){if(Z.length>=A)break;await Ze(I)}}let de=Z.filter(S=>S.started).length,dr=mf(_),So=ff(_),Nc=de===0&&(dr?.capacityIdle===!0||Number(_.resourceGate?.slotsAvailable)>0);if(Nc&&dr?.summary){let S=dr.skipReasonCounts?.retry_ceiling_exceeded??0,v=_.overAttemptIdleRecovery??dr.overAttemptIdleRecovery,I=v?.attempted===!0?`; over_attempt_recovery minted=${v.minted??0} started=${v.started??0}`:S>0?"; over_attempt_recovery not attempted":"",K=So?`; dispatch_skip_drain scanned=${So.scanned??0} advanced=${So.advanced??0}`:"";console.error(`[dispatch] ${dr.summary}${S>0?`; retry_ceiling_exceeded=${S}`:""}${I}${K}`)}let Tc={runId:s.id,agentOsId:i,dryRun:!1,leaseOwner:f,startedCount:de,capacityIdle:Nc,admissionExhaustion:dr,dispatchSkipDrain:So,outcomes:Z,skipped:Qe.map(S=>({taskId:S.task.id,skipReason:S.skipReason})),inspected:nt,pagesScanned:_.pagesScanned??null,candidatesExhausted:_.candidatesExhausted??null,diskGate:_.diskGate,resourceGate:_.resourceGate,...Be?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:V},Dc=S=>!S.started&&S.nonFatal!==!0,xy=Z.some(Dc),Mc=Be&&de>0?!0:!xy;if(fa({runId:s.id,agentOsId:i,phase:"complete",partial:Be,startedCount:de,ok:Mc}),r)return{ok:Mc,...Tc};console.log(JSON.stringify(Tc,null,2)),Z.some(Dc)&&process.exit(1)}catch(s){if(r)return{ok:!1,error:s.message};console.error(`run dispatch failed: ${s.message}`),process.exit(1)}}var p_=1;function Vt(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 m_(e){let{maxStarts:r,...t}=e;return t}async function dl(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=m_(e);if(t.targetTaskId||t.targetTaskIds){let u=await qr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Vt(u)}}let n=Math.min(r,p_),o=Math.max(0,r-n),s=await qr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Vt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await qr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Vt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function gf(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 f_(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function ro(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function hf(e,r){let t=f_(r),n=ro(t?.recommendedMaxStarts),o=ro(t?.actionableReady),s=ro(t?.queuedTasks),i=ro(t?.boardAdvancedThisTick)??0,a=ro(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=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:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import G_ from"node:path";D();Nr();q();w();import g_ from"node:path";var h_=new Set(["running","dispatching","pending","queued","needs_attention"]),ar=new Set(["completed","failed","cancelled","done"]);function zr(e){let r=ge(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=C(g_.join(P(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 to(){let e=[];for(let r of J()){if(!h_.has(r.status))continue;let t=zr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,De(r),e.push({runId:r.id,from:n,to:t})}return e}D();Nr();q();w();Tr();Bo();import{existsSync as xr,lstatSync as x_,readdirSync as P_,readlinkSync as E_,renameSync as Rl,unlinkSync as A_}from"node:fs";import qe from"node:path";xe();w();import We from"node:path";var k_=`${We.sep}runs${We.sep}runs${We.sep}`;function js(e){return e.includes(k_)}function pl(e,r){return We.join(_e(ae(e)),b(r))}function Cr(e,r,t){return We.join(pl(e,r),"workers",b(t))}function kf(e,r,t){let n=ae(e);return We.join(n,"runs","runs",b(r),"workers",b(t))}function ml(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Xr(e){return{workerJsonPath:We.join(e,"worker.json"),stdoutPath:We.join(e,"stdout.jsonl"),stderrPath:We.join(e,"stderr.log"),heartbeatPath:We.join(e,"heartbeat.jsonl"),lastStatusPath:We.join(e,"last-status.json")}}function yf(e){let r=Xr(Cr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!js(e.statusPath)?e.statusPath:r}import{existsSync as _r,mkdirSync as y_,readdirSync as vf,renameSync as R_,statSync as fl}from"node:fs";import Q from"node:path";Tr();xe();D();w();var no=900*1e3,v_=3600*1e3;function bf(e,r){let t=Q.resolve(e),n=Q.resolve(_e(r)),o=Q.relative(n,t);return o!==".."&&!o.startsWith("..")&&!Q.isAbsolute(o)}function gl(e){if(!_r(e))return[];try{return vf(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function hl(e){let r=Q.join(e,"workers");if(!_r(r))return[];try{return vf(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Sf(e){return Q.join(e,"archived-workers")}function b_(e,r){let t=Q.join(Sf(e),b(r));return _r(t)?`${t}-${Date.now()}`:t}function Rf(e,r,t){if(!_r(e))return!1;try{let n=r-fl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function wf(e,r=Date.now(),t=no){if(!_r(e))return!1;let n=Xr(e),o=C(n.workerJsonPath,void 0);if(o?.status==="running"&&H(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Rf(n.stdoutPath,r,t)||Rf(n.heartbeatPath,r,t))}function S_(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-fl(Q.join(e,"worker.json")).mtimeMs}catch{return 0}}function w_(e,r,t,n){if(wf(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=S_(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 Gt(e,r=Date.now(),t=no){for(let n of hl(e))if(wf(Q.join(e,"workers",n),r,t))return!0;return!1}function C_(){return{repo:Ke()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function __(e,r){let t=Q.join(_e(e),b(r));if(!_r(t))return null;let n=hl(t);if(n.length===0)return null;let o;try{o=fl(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Cr(e,r,a);s[a]={workerDir:l,statusPath:Q.join(l,"worker.json")}}let i=Gt(t);return{id:r,name:r,...C_(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function kl(e){let r=ae(e??be()),t=_e(r),n=[];for(let o of gl(t)){let s=Q.join(t,o,"run.json");if(_r(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=__(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}De(i),n.push({runId:o,action:"repaired_run_json",reason:Gt(Q.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function yl(e,r={}){let t=ae(e??be()),n=_e(t),o=r.now??Date.now(),s=r.archiveAgeMs??v_,i=[];kl(t);for(let a of gl(n)){let l=Q.join(n,a),c=Q.join(l,"run.json"),u=C(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...hl(l)]),f=!1;for(let m of d){let p=Q.join(l,"workers",b(m)),h=Q.join(p,"worker.json"),k=C(h,void 0);if(!k){let A=Q.join(Sf(l),b(m));if(_r(A)&&(u.workers[b(m)]||u.workers[m])){delete u.workers[b(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:A});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let g=w_(p,k,o,s);if(!g.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:g.reason});continue}let y=b_(l,m);y_(Q.dirname(y),{recursive:!0}),R_(p,y),delete u.workers[b(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:g.reason,archivePath:y})}f&&De(u)}return{workers:i}}function Cf(e,r=Date.now()){let t=new Set,n=_e(e);for(let o of gl(n)){let s=Q.join(n,o);Gt(s,r)&&t.add(`${e}\0${o}`)}return t}D();w();function I_(e,r){let t=pl(e,r),n;try{n=x_(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=qe.resolve(qe.dirname(t),E_(t));if(Gt(o)||Gt(t))return null;let s=`${t}.materialize-${Date.now()}`;return Rl(o,s),A_(t),Rl(s,t),o}function O_(e){let r=[];for(let t of ml()){let n=qe.join(e.fromDir,t),o=qe.join(e.toDir,t);!xr(n)||xr(o)||(Rl(n,o),r.push(t))}return r}function _f(e,r){let t=Xr(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 N_(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 T_(e){let r=Xr(e.canonicalDir),t=C(r.lastStatusPath,void 0),n=xr(r.stdoutPath),o=xr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Wo(r.stdoutPath):{finalResult:null},a=o?Se(r.heartbeatPath):Se(""),l=ht(a),c=N_({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(te().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}),_f(u,e.canonicalDir),u}function D_(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Cr(r,e.id,o),a=qe.join(i,"worker.json");(js(s.workerDir)||js(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,De(e)),t}function M_(e){let r=[],t=Cr(e.harnessRoot,e.run.id,e.workerName),n=kf(e.harnessRoot,e.run.id,e.workerName),o=Xr(t),s=O_({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=yf({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=C(i,void 0);if(!a&&xr(o.workerJsonPath)&&(a=C(o.workerJsonPath,void 0)),!a){let l=T_({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return F(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=xr(t),u=ml().some(d=>xr(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(te().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 F(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 _f(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",F(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 U_(e,r){let t=qe.join(P(e.id),"workers");if(!xr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of P_(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function xf(){let{harnessRoot:e}=te(),r=kl(e),t=[];for(let n of J()){let o=I_(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),D_(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 U_(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Cr(e,n.id,i),statusPath:qe.join(Cr(e,n.id,i),"worker.json")}},De(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(...M_({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}Tr();Fo();q();D();Nr();w();import{execFileSync as Pf}from"node:child_process";import Ef from"node:path";function vl(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function W_(e){let r=vl(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function B_(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function L_(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 H_(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=vl(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 F_(e){try{let n=Pf("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=Pf("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:vl(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 $_(e){let r=Se(e.heartbeatPath);return e.completionSnapshot?.finalResult??ht(r)}function K_(e){let r=new Map,t=P(e.id);for(let n of ge(e)){let o=C(Ef.join(t,"workers",b(n),"worker.json"),void 0);if(o)for(let s of H_($_(o))){let i=W_(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function j_(e,r){let t=Se(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,B_(r)].filter(Boolean).join(`
|
|
37
|
+
`);return L_(n)}function V_(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function bl(e={}){let r=e.lookupPr??F_,t=[],n=new Map;for(let o of J()){let s=K_(o),i=P(o.id);for(let a of ge(o)){let l=Ef.join(i,"workers",b(a),"worker.json"),c=C(l,void 0);if(!c||!V_(c))continue;let u=M(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of j_(c,u.finalResult)){if(d=s.get(m)??null,!d){let p=o.repo||c.worktreePath,h=`${p}#${m}`,k=n.has(h)?n.get(h)??null:r({repoDir:p,prNumber:m});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",F(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 Y_=900*1e3;function J_(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function oo(){let e=xf();if(J_()){let s=bl(),i=yl();return{workers:[],finalizedRuns:to(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of J())for(let i of ge(s)){let a=G_.join(P(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",F(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,F(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>Y_,m=Number.isFinite(d)&&t-d>bt;if(f&&m){fr(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,F(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=bl(),o=yl();return{workers:r,finalizedRuns:to(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Af(){let e=oo(),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))}wt();O();Ee();import q_ from"node:os";function Vs(e,r={}){let t=(r.boxKind??Fe(R())).trim().toLowerCase()||"forge",n=r.hostLabel??q_.hostname();return{boxId:r.boxId??ws(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}:{}}}D();Lo();q();O();import z_ from"node:path";D();q();w();async function so(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=B(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=j(e.baseUrl?String(e.baseUrl):void 0),s=await G(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Ge({runId:t.id}).runnerId,a=await Om({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=C(z_.join(P(t.id),"workers",b(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let p=M(m);if(p.alive||p.finalResult||m.completionReportedAt)continue;let h=Ss({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,g;try{g=await X(k,s,{agentOsId:n,leaseOwner:h},{agentOsId:n,baseUrl:o})}catch(y){g={ok:!1,error:y.message}}l.push({worker:f,taskId:m.taskId,pid:m.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 X(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();q();D();w();import X_ from"node:path";O();async function If(e){let r=j(e.baseUrl),t=await G(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 X(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 Of(e,r){let t=B(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=C(X_.join(P(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 If({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,F(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}O();Ee();function Q_(e=process.env){let r=R();return Fe(r,e)!=="forge"}function Nf(e,r=process.env){if(Q_(r))return e?.maxConcurrentWorkers??void 0}async function Tf(e,r){let t=j(r.baseUrl?String(r.baseUrl):void 0),n=await G(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await gs(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();xe();import Te from"node:path";Ho();import Js from"node:path";Ce();q();var Sl=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Df(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Sl)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Ie(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!Df(n)})}function Qr(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 io(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ie(e.changedFiles).length>0:!!(Qr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function ao(e){return e.status||(e.status=M(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function wl(e,r){if(e.status)return Ie(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):cn(e.worktreePath);return Ie(t).length>0}function Z_(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Cl(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=Z_(e);if(o&&!H(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):cn(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"}:Ao(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??Qr(s)};return e.status=u,u}return ao(e)}q();q();Tr();w();function _l(e,r=Date.now(),t=no){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Gs(e,r=Date.now(),t=no){return H(e.pid)?!0:_l(e,r,t)}function ex(e,r){return r?r.runTerminalCache.derive(e.run):zr(e.run)}function lr(e,r=Date.now()){return Gs(e.worker,r)}function xl(e,r){return ar.has(e.run.status)?!1:ex(e,r)!==null}function Mf(e,r,t=Date.now()){if(lr(e,t))return!0;if(ar.has(e.run.status)||xl(e,r))return!1;let n=ao(e);return oe(n)?!1:!!lr(e,t)}Ho();q();function Uf(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(lr(e))return!0;let n=r??ao(e);return!!(!oe(n)||io(n)||Ie(n.changedFiles).length>0||yt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Qr(n.finalResult)}).blocked)}Ce();w();import{existsSync as Bf,mkdirSync as rx,writeFileSync as Wf}from"node:fs";import Ys from"node:path";function Lf(e,r,t){return Ys.join(e,"salvage",b(r),b(t))}function Hf(e){return Bf(Ys.join(Lf(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Ff(e){let r=Lf(e.harnessRoot,e.indexed.runId,e.indexed.workerName);rx(r,{recursive:!0});let t=Ys.join(r,"salvage.patch"),n=!1;if(Bf(e.indexed.worktreePath)){let s=re(e.indexed.worktreePath,["diff","HEAD"]),i=re(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
38
|
+
`);a.trim()&&(Wf(t,a.endsWith(`
|
|
36
39
|
`)?a:`${a}
|
|
37
|
-
`),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
|
|
38
|
-
`),o}var QC=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function ZC(e){return!QC.has(e.skipReason)||ar(e.indexed,e.now)?!1:Zm({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(ef({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function e_(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?ir.has(r.run.status)||e.liveness&&Za(r,e.liveness)||e.liveness&&oe(Xa(r,e.liveness))&&!ar(r)?o:n:t?o:n}function r_(e,r){if(e.harnessRoot?.trim())return Es.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Es.sep}runs${Es.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function rf(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=e_(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=Xa(r,e.liveness),u=r_(e,r),d=p=>u&&ZC({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(qm(r,c)){let p=d("completion_blocked");if(p)return p}if(za(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let m=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(m!=null&&m>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(Jm(r,e.liveness,a)||!oe(c))return"run_still_active";if(Jn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(xe(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(ht({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Xr(c.finalResult)}).blocked){let p=d("landing_blocked");if(p)return p}if(i&&e.worktreePath){let p=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(p)return p.detail?{reason:p.reason,detail:p.detail}:p.reason}return null}function el(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(Es.resolve(o))||r&&ar(r)?"active_worker":r&&za(r,e.gitStatusCache)?"dirty_worktree":null}function tf(e){return el(e)}var nf=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function of(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)nf.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||nf.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as cf,readdirSync as uf,statSync as o_}from"node:fs";import df from"node:path";M();Ce();import sf from"node:path";w();function n_(e,r){return xs(e,r)}function af(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Co(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(sf.join(cn(o,s.id),"workers",b(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=sf.resolve(l.worktreePath);n_(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Wm(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function lf(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function s_(e,r){try{let t=o_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function i_(e,r){let t=df.join(e,"runs",r,"run.json");return cf(t)?_(t,null):null}function pf(e){try{return uf(e).length===0}catch{return!1}}function mf(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(lf(n,r,t,i.liveRunKeys)||!pf(n))return"run_still_active";let a=i_(r,t);return a&&!ir.has(a.status)&&!qr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function ff(e){if(!cf(e.worktreesDir))return[];let r=[],t;try{t=uf(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=df.join(e.worktreesDir,o);pf(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:s_(s,e.now)})}return r}Se();import{existsSync as tl,rmSync as _f}from"node:fs";import{execFileSync as a_}from"node:child_process";import{existsSync as gf,readdirSync as l_,statSync as c_}from"node:fs";import u_ from"node:path";var d_=2500;function p_(e,r=d_){if(!gf(e))return 0;try{let n=a_("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(!gf(e))return 0;let t=p_(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=l_(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=u_.join(i,l),u;try{u=c_(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as h_,rmSync as k_}from"node:fs";Ce();import{lstatSync as m_,readdirSync as f_}from"node:fs";function hf(e){try{let r=m_(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 kf(e,r=32){let t=hf(e);if(!t)return!1;if(t.foreign)return!0;try{let n=f_(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=hf(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as g_}from"node:child_process";import bf from"node:path";import Pe from"node:path";function yf(e,r,t,n){let o=Pe.resolve(e),s=`${Pe.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Pe.relative(t,i);if(a.startsWith("..")||Pe.isAbsolute(a))return"path_outside_harness";let l=a.split(Pe.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Pe.resolve(r))?"path_outside_harness":null}function As(e,r,t){return yf(e,r,t,"node_modules")}function Is(e,r,t){return yf(e,r,t,".next")}function Os(e,r,t){let n=Pe.resolve(e),o=Pe.relative(t,n);return o.startsWith("..")||Pe.isAbsolute(o)||o.split(Pe.sep).length<3||!n.startsWith(Pe.resolve(r))?"path_outside_harness":null}function Rf(e,r,t){let n=Pe.resolve(e);return As(n,r,t)===null||Is(n,r,t)===null||Os(n,r,t)===null}function Sf(){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 vf(e){let r=g_("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function wf(e,r,t){if(!Rf(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=vf(["chown","-R",`${n}:${o}`,bf.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=vf(["rm","-rf",bf.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 rl="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 y_(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Cf(e,r,t={}){if(!h_(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??k_,l=t.hasForeignOwnedEntry??kf;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!y_(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Sf();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${rl}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let f=wf(e.path,n,o);if(f.ok&&f.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(f.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(p){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${p.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${f.error}; ${rl}`}}}function nl(e){let r=e.harnessRoot;return!r||!Dm(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function ol(e,r){let t=nl(e);if(t)return t;let n=Cf(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function xf(e,r){return ol(e,r)}function Pf(e,r){return ol(e,r)}function Ef(e,r){return ol(e,r)}function Af(e,r){let t=nl(e);if(t)return t;if(!tl(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 _f(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 If(e,r){let t=nl(e);if(t)return t;if(!tl(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&&pe(n,["worktree","remove","--force",e.path],{allowFailure:!0}),tl(e.path)&&_f(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 Ns,readdirSync as Ts,statSync as R_}from"node:fs";import Ye from"node:path";function sl(e,r){try{let t=R_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Nf(e,r){let t=Ye.relative(r,e);return t===""||!t.startsWith("..")&&!Ye.isAbsolute(t)}function Of(e,r,t,n){let o=[];for(let s of qa){if(s===".next")continue;let i=Ye.join(e,s);if(!Ns(i))continue;let a=Ye.resolve(i);t.has(a)||Nf(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:sl(a,r.now)}))}return o}function Tf(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Of(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ns(e.worktreesDir))return r;for(let n of Ts(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Ye.join(e.worktreesDir,n.name);for(let s of Ts(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Ye.join(o,s.name);r.push(...Of(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Df(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;Ns(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:sl(a,e.now)})))}if(!t||!Ns(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Ye.resolve(i.worktreePath));for(let i of Ts(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Ye.join(e.worktreesDir,i.name),l;try{l=Ts(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Ye.resolve(Ye.join(a,c.name));o.has(u)||s.has(u)||Nf(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:sl(u,e.now)}))}}return n}import{existsSync as Wf,readdirSync as Mf,statSync as b_}from"node:fs";import $t from"node:path";var v_=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function S_(e,r){try{let t=b_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function w_(e,r){let t=$t.relative(r,e);return t===""||!t.startsWith("..")&&!$t.isAbsolute(t)}function C_(e,r,t,n,o,s){if(!Wf(n))return;let i=$t.resolve(n);r.has(i)||w_(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:S_(i,t.now)}))}function Uf(e,r,t,n,o){for(let s of v_)C_(e,r,t,$t.join(n,s.dirName),s.kind,o)}function Bf(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Uf(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Wf(e.worktreesDir))return r;for(let n of Mf(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=$t.join(e.worktreesDir,n.name),s;try{s=Mf(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=$t.join(o,i.name);Uf(r,t,e,a,{runId:n.name,worker:i.name})}}return r}Se();import{existsSync as Lf,statSync as __}from"node:fs";import Je from"node:path";function x_(e,r){try{let t=__(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function P_(e){let r=[],t=null;for(let n of e.split(`
|
|
39
|
-
`)){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
|
|
40
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(
|
|
41
|
-
`).map(t=>t.trim()).filter(Boolean)}var Ws=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=ng(t)??[];return this.cache.set(t,o),o}};var Bs=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=qr(r);return this.cache.set(r.id,n),n}};function Y_(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function og(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:Y_(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 J_(e={}){let r=e.harnessRoot?ie(e.harnessRoot):be(),t=Qf({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function q_(e){return typeof e=="string"?{reason:e}:e}function Kt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Ls(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:lr(e.path,t)}}function sg(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 z_(e,r){return e.kind==="remove_next_cache"?Pf(e,r):xf(e,r)}function X_(e,r,t){return e.kind==="remove_next_cache"?Is(e.path,r,t):As(e.path,r,t)}function Q_(e){let r=new Map;for(let t of e)for(let[n,o]of $f(t))r.set(n,o);return r}function ig(e,r){return e.runId&&e.worker?Ae.join(r,e.runId,e.worker):Ae.resolve(e.path,"..")}function dl(e={}){let r=ll(e),t=Zf();r=eg(r,t);let n=J_(e);Ee("scan",`${n.scanRoots.length} harness root(s)`);let o=af(n.scanRoots,n.now),s=r.finalizeStaleRuns?jn().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ee("finalize",`${s.length} stale run(s) marked terminal`),Ee("index","building worktree index");let i=Q_(n.scanRoots);Ee("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Bs,gitStatusCache:new Ws,gitRevCache:new Us},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,m=()=>c.length>=d;for(let C of n.scanRoots){if(m())break;Ee("root",C);let ae=Ae.join(C,"worktrees"),Z=Ff(i,C),qe={harnessRoot:C,worktreesDir:ae,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Z,now:n.now},tt=r.scanDependencyCaches?Bf(qe):[];Ee("dependency",r.scanDependencyCaches?`${tt.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Me=0;for(let he of tt){if(m())break;Me+=1,Me%50===0&&Ee("dependency",`${Me}/${tt.length} evaluated`);let ee=Ae.resolve(he.path);if(u.has(ee))continue;u.add(ee);let W={...he,path:ee},ke=X_(W,C,ae);if(ke){Kt(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}let ye=ig(W,ae),ze=Z.get(Ae.resolve(ye))??null,ce=el({indexed:ze,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ce){Kt(l,W.path,ce),c.push({...W,executed:!1,skipped:!0,skipReason:ce});continue}c.push(z_(Ls(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of Tf(qe)){if(m())break;let ee=Ae.resolve(he.path);if(u.has(ee))continue;u.add(ee);let W={...he,path:ee},ke=Os(W.path,C,ae);if(ke){Kt(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}let ye=ig(W,ae),ze=Z.get(Ae.resolve(ye))??null,ce=tf({indexed:ze,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ce){Kt(l,W.path,ce),c.push({...W,executed:!1,skipped:!0,skipReason:ce});continue}c.push(Ef(Ls(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Er=[...Df(qe),...Hf(qe)];Ee("worktrees",`${Er.length} candidate(s) at ${C}`);let cr=new Set,le=0;for(let he of Er){if(m())break;le+=1,le%50===0&&Ee("worktrees",`${le}/${Er.length} evaluated`);let ee=Ae.resolve(he.path);if(cr.has(ee))continue;cr.add(ee);let W={...he,path:ee},ke=Z.get(Ae.resolve(W.path))??null,ye=ke?null:Jf({worktreePath:W.path,harnessRoot:C,runId:W.runId,workerName:W.worker,now:n.now}),ze=rf({indexed:ke,worktreePath:Ae.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(ze){let{reason:ce,detail:ur}=q_(ze);Kt(l,W.path,ce,ur),c.push({...W,executed:!1,skipped:!0,skipReason:ce});continue}c.push(If(Ls(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!m()&&r.runDirectoriesAgeMs>=0)for(let he of ff({harnessRoot:C,worktreesDir:ae,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(m())break;let ee=Ae.resolve(he.path);if(u.has(ee))continue;u.add(ee);let W={...he,path:ee},ke=W.runId??Ae.basename(ee),ye=mf({harnessRoot:C,runId:ke,runPath:ee,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){Kt(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}c.push(Af(Ls(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let f=0,p=0,h=0,k=0,g=0,R=0;for(let C of c)C.bytes&&(f+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(h+=C.bytes),C.executed?(g+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(p+=1)):C.skipped&&(R+=1,C.skipReason==="dry_run"&&C.bytes&&(h+=C.bytes));let I=r.accountBytes?zf({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,P=fr(),E=r.execute&&tg(P),D=E?Ms({execute:!0}):null,j=P?{observed:!0,execute:E,dumpCount:P.dumpCount,totalBytes:P.totalBytes,removedCount:D?.removed.length??0,removedBytes:D?.removedBytes??0,executables:P.executables,path:P.path,reason:P.reason}:void 0;D&&D.removed.length>0&&(k+=D.removedBytes,g+=D.removed.length,Ee("wsl-crashes",`removed ${D.removed.length} dump(s), ${D.removedBytes} bytes`)),Ee("complete",`${c.length} action(s), ${R} skipped, ${g} removed`);let F=of(c,l),U=og({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:f,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:R,skipReasons:sg(c,l)},...I?{storage:I}:{},...F.length>0?{preservedLivePaths:F}:{},...p>0?{removedRunDirectories:p}:{},...j?{wslCrashDumps:j}:{}});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:f,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:R,skipReasons:sg(c,l)},...I?{storage:I}:{},...F.length>0?{preservedLivePaths:F}:{},...p>0?{removedRunDirectories:p}:{},...j?{wslCrashDumps:j}:{},compactSummary:U}}function ag(e){let r=Gf(e);return dl({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function lg(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as ax}from"node:fs/promises";import{homedir as lx}from"node:os";import Zr from"node:path";bo();import{existsSync as cg,readFileSync as Z_}from"node:fs";import Hs from"node:path";var dg={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},pg=Object.keys(dg),pl={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},ex={"@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 ug(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 Fs(e,r){let t=ug(e),n=ug(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 mg(e,r){return Fs(e,r)>=0}function rx(e){let r=null;for(let t of e)(!r||Fs(t,r)>0)&&(r=t);return r}function tx(e){try{let r=JSON.parse(Z_(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function nx(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=Hs.resolve(o);if(cg(Hs.join(s,"packages/kynver-runtime/package.json"))&&cg(Hs.join(s,"package.json")))return s}return lt({cwd:e})?.repo??null}function fg(e={}){let r=e.cwd??process.cwd(),t=nx(r,e.repoRoot);if(!t)return{};let n={};for(let o of pg){let s=Hs.join(t,ex[o]),i=tx(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function ox(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function sx(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&mg(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${ox(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 ix(e){if(e.length===0)return{version:null,source:"unknown"};let r=rx(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 gg(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=pg.map(i=>{let a=dg[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:m,source:f}=ix(l),p=u?.version??null,h=m?mg(m,a):!1,k=h?[]:sx({packageName:i,minimumVersion:a,effectiveVersion:m,effectiveSource:f,repoVersion:p}),g=h?`${pl[i]} ${m} meets memory-cost minimum ${a} (${f}).`:`${pl[i]} is below memory-cost minimum ${a}`+(m?` (effective ${m} via ${f})`:" (no version detected)")+".";return{packageName:i,displayName:pl[i],minimumVersion:a,effectiveVersion:m,effectiveSource:f,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 ml=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(`
|
|
42
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function
|
|
43
|
-
|
|
44
|
-
`)
|
|
45
|
-
`))
|
|
46
|
-
`)||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")}:jx.has(t)?{ok:!0,mutating:!1}:Vx.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var Jx=10*6e4,qx=5e3,Wg=2e5;async function Bg(e,r,t={}){let n=Ug(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??Jx,i=new Yt(r);return new Promise(a=>{let l=0,c=!1,u=Yx(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=f=>{if(l>=Wg)return;let p=f.toString("utf8").slice(0,Wg-l);l+=p.length,i.push(p)};u.stdout?.on("data",d),u.stderr?.on("data",d);let m=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),qx).unref()},s);u.on("error",f=>{clearTimeout(m),i.push(`spawn failed: ${f.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",f=>{clearTimeout(m),i.close(),a({exitCode:f,timedOut:c})})})}var Xx=25e3,Qx=32e3,Zx=5e3,eP=6e4,Lg=5*6e4,rP=5e3,tP="claude-sonnet-4-6";async function nP(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(),rP);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 Hg(e=process.env){let r=v(),t=r.agentOsId?.trim(),n=ne();if(!t||!n)return null;let o=await nP(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:zx.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||tP,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function oP(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),Qx),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:Xx}),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 et(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 sP(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Bg(n,s=>{et(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await et(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await et(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 iP(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||et(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Yt(s),a=Dg(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await et(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Mg({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await et(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 et(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 kl(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Fg(e){let r=await Hg();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!ne()||!v().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Lg}));!r&&!e.shouldStop();){if(!ne()||!v().agentOsId?.trim()||(await kl(Lg,e.shouldStop),e.shouldStop()))return;r=await Hg()}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 oP(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await kl(eP,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await sP(r,t):await iP(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await kl(Zx,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var aP=6e4,lP=5*6e4,cP=10,uP=250;async function yl(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(uP,t);await pr(n),t-=n}}async function js(e){Pt();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)):aP,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Sn();a.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:a.resolved?.defaultRepo??null,configPath:a.configPath}));let l=Uu(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=Fg({shouldStop:()=>s}).catch(m=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:m instanceof Error?m.message:String(m)}))}),d=!1;for(;!s;)try{Lu({agentOsId:t,runId:r,instructionBundleVersion:Wr()});let m=await Di(e.secret?String(e.secret):void 0,t);if(!m.ok){d||(d=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:m.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await yl(o,()=>s);continue}d&&(d=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Du({agentOsId:t,baseUrl:pu(e.baseUrl?String(e.baseUrl):void 0),secret:m.secret});let f=await hl({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),c.tickEnabled){let g=Yo(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 R=await Et({env:c,agentOsIdFilter:t});R.enabled&&(R.fired>0||R.errors>0||R.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...R}))}}f.idle?i++:i=0;let p=Math.floor(xt("daemon.maxIdleStreak",cP)),h=Math.floor(xt("daemon.idleIntervalMs",lP)),k=i>=p?h:o;await yl(k,()=>s)}catch(m){console.error(JSON.stringify({event:"daemon_tick_error",error:m.message})),await yl(o,()=>s)}await u,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as dP}from"node:child_process";w();var pP=15*6e4,$g=2*6e4,Kg=1e4,mP=5e3,fP=5*6e4,gP=30*6e4,jg=5e3;function hP(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:pP}function Vs(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=mP,t=fP){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function yP(e,r,t=gP){return r-e>=t}function rt(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function RP(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 Gs(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=hP(e.stallMs),o=RP(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,rt("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),rt("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,m=null,f=null;for(a=dP(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),rt("child_spawned",{pid:a.pid??null}),a.on("exit",(k,g)=>{d=!0,m=k,f=g});!d&&!i&&(await pr(jg),!(d||i));){if(Date.now()-u<$g)continue;let k=Hu(t),g=k&&k.pid===a.pid?k:null;if(g&&Fu(g,n)){rt("stall_detected",{pid:a.pid??null,lastBeatAt:g.observedAt,stallMs:n}),a.kill("SIGTERM"),await pr(Kg),d||a.kill("SIGKILL");break}if(!g&&Date.now()-u>n+$g){rt("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await pr(Kg),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await pr(jg);if(i)break;let p=Date.now();yP(u,p)&&(l=0),l+=1;let h=kP(l);rt("child_exited",{code:m,signal:f,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:h}),await pr(h)}rt("stopped",{agentOsId:t})}Se();M();import{existsSync as PP,mkdirSync as EP}from"node:fs";import AP from"node:path";M();Or();import{existsSync as bP,readFileSync as vP}from"node:fs";import Vg from"node:path";J();w();function SP(e){if(!e||!bP(e))return 0;try{return vP(e,"utf8").trim().length}catch{return 0}}function wP(e,r){let t=Vg.join(x(e.id),"workers",b(r),"worker.json"),n=_(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=T(n,{base:e.base,baseCommit:e.baseCommit}),s=SP(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:bt(o),completionBlocked:a}}function CP(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 _P(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 fe(e)){let n=Vg.join(x(e.id),"workers",b(t),"worker.json"),o=_(n,void 0);if(!o)continue;let s=T(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function Zn(){return Gn(),Y().map(e=>{let t=fe(e).map(d=>wP(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}=_P(t),c=xP(e),u=mn(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:CP({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Gg(){console.log(JSON.stringify(Zn(),null,2))}w();function IP(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=He();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Ys(e){let r=Tp(IP(e));Rc(r);let t=e.id?gs(String(e.id)):fc(String(e.name||"run")),n=x(t);PP(n)&&OP(`run already exists: ${t}`),EP(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:{}};de(AP.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 Yg(){Gg()}function OP(e){console.error(e),process.exit(1)}M();import{existsSync as zs}from"node:fs";async function Js(e=or()){let r=await Br(e.storePath).catch(()=>[]),t=await Go(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=jo(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 UP}from"node:os";import WP from"node:path";import{existsSync as Jg,mkdirSync as NP,readFileSync as qg,writeFileSync as TP}from"node:fs";import{homedir as DP}from"node:os";import zg from"node:path";var _r=zg.join(DP(),".kynver",".env");function Rl(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 MP(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
47
|
-
`){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(`
|
|
48
|
-
`)}
|
|
49
|
-
`)}function dh(e,r){if(!ro())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=zP(),n=uh.join(t,wl),o=XP(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."};YP(t,{recursive:!0});let s=GP(n);JP(n,o,"utf8");let i=ch("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=ch("systemctl",["--user","enable","--now",wl],{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 ${wl}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}M();function ph(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return mh(t)?Y().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Qs(e={}){let r=e.execute!==!1,t=v(),n=Xe(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=ih(),i=Qg({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=Xg(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=ph(u,e.runId);d&&(u.defaultDaemonRunId=d),tr(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 m=await Zu(i.storePath);l.storeInitialized=m.created||mh(i.storePath);let f=ne();if(f)try{let p=await Ur(o,{baseUrl:n,apiKey:f});Mr(o,p)}catch{}if(!e.skipWatchdog)if(!f)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 p=await rh(n,o,f,void 0,{requireProvider:"kynver-cron"}),h=nh(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:Zg(h),spec:h,registeredAt:new Date().toISOString(),paused:!1};await Qu(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let g=await eh(n,o,f),R=oh(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."],P=[];if(R.length)if(e.confirmQstashRemoval){let E=sh(g);if(!E.allowed)a.push(E.reason);else for(let D of R)await th(n,o,D.id,f),P.push(D.id)}else a.push(`${R.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:R.map(E=>({id:E.id,provider:E.provider,status:E.status})),removed:P,manualSteps:I}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=ph({...t,...i.configUpdates},e.runId);if(!p)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{B(p)}catch{a.push(`harness run ${p} not found`)}l.systemd=dh({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:Xs()},r)}}if(!e.skipTestFire&&a.length===0){let p=await Et({agentOsIdFilter:o});l.testFire={fired:p.fired,errors:p.errors},p.errors>0&&a.push(`test fire reported ${p.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await Jt({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 QP=["deployment_provider","cron_secret","env_file","cron_store"];function fh(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function ZP(e){let r=fh(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=fh(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function eE(e){if(!ZP(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Jt({config:e})).checks.filter(n=>QP.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function rE(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 Cl(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function gh(e){if(Cl(e.args.skipCron))return{action:"skipped"};let r=await eE(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=Cl(e.args.installSystemd)||Cl(e.args["install-systemd"]),n=await Qs({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 rE(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function nE(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 hh(e){Pt();let r=v();(!ne()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await Ko(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)),yn(t).ok||(console.error(Lo(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(tr({...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()||He()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";s||(s=nE(Y(),o)??"",s?console.log(` Reusing run ${s} for ${o}.`):s=Ys({...e,repo:o,name:"agent"}).runId),await gh({config:r,agentOsId:t,runId:s,args:e}),console.log(""),console.log(` ${tE.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${o}`),console.log(` run: ${s}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let i={...e,run:s,agentOsId:t};if(Vs(i)){await Gs(i,oE(s,t,e));return}await js(i)}function oE(e,r,t){if(!yn(r).ok)throw new Error(Lo(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}M();M();J();import{existsSync as sE,rmSync as iE}from"node:fs";import _l from"node:path";function aE(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function lE(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function cE(e){let{runId:r,workerName:t}=Ve(e),n=me(r,t),o=[...lE(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=_l.resolve(n.worktreePath),i=[];for(let c of o){let u=aE(c),d=_l.resolve(s,u);if(!d.startsWith(s+_l.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!sE(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};iE(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])],H(n.runId,n);let l=T(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function kh(e){let r=cE(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import ME from"node:path";vo();var uE=/--max-old-space-size=(\d+)/;function dE(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function xl(){return dE(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Pl(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(uE.test(t))return r;let o=`--max-old-space-size=${xl()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function qt(e=xl()){return`--max-old-space-size=${e}`}O();import{spawnSync as pE}from"node:child_process";vo();function Zs(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Rh(e=v()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Zs(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Zs(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Zs(e.perWorkerMemBytes,1610612736),reserveBytes:t??Zs(e.memReserveBytes,2147483648)}}var ei=0;function Il(){ei+=1}function Ol(){ei=Math.max(0,ei-1)}function zt(e={}){let r={...Rh(),...e},t=e.memAvailableBytes??sn(),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 mE(e){e<=0||pE(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Nl(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=zt({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)mE(Math.min(r,n-Date.now())),o=zt({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as TE}from"node:child_process";w();import{closeSync as kE,existsSync as Tl,mkdirSync as yE,openSync as RE,readdirSync as vh,readFileSync as bE,unlinkSync as Ml,writeFileSync as vE}from"node:fs";import Ul from"node:path";import{mkdirSync as fE}from"node:fs";import{tmpdir as gE}from"node:os";import ri from"node:path";function hE(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function bh(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?ri.resolve(e):hE()?ri.join(gE(),"kynver","state","heavy-verification"):ri.join(Ss(),"heavy-verification")}function to(){return ri.join(bh(),"slots")}function Xt(){let e=to();return fE(e,{recursive:!0}),e}var Qt=120*6e4,Dl=1;function SE(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function oo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function no(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?SE(e,Dl):Dl}function wE(e){return`slot-${e}`}function Sh(e,r=to()){return Ul.join(r,`${e}.json`)}function Wl(e){if(!Tl(e))return null;try{let r=JSON.parse(bE(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 ti(e,r=Qt){if(!e||!L(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function CE(e,r){let t=Wl(e);if(ti(t,r))try{Ml(e)}catch{}}function _E(e){return yE(e,{recursive:!0}),e}function oi(e={}){let r=_E(e.slotsDir??Xt()),t=e.staleMs??Qt,n=0;for(let o of vh(r)){if(!o.endsWith(".json"))continue;let s=Ul.join(r,o),i=Tl(s);CE(s,t),i&&!Tl(s)&&(n+=1)}return n}function wh(e={}){let r=e.slotsDir??Xt(),t=e.staleMs??Qt;oi({slotsDir:r,staleMs:t});let n=[];for(let o of vh(r)){if(!o.endsWith(".json"))continue;let s=Wl(Ul.join(r,o));s&&!ti(s,t)&&n.push(s)}return n}function ni(e={}){return wh(e).length}function Zt(e,r={}){if(oo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:no(),reason:null};let t=r.slotsDir??Xt(),n=r.staleMs??Qt,o=r.maxSlots??no();oi({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=wE(i),l=Sh(a,t),c=Wl(l);if(c&&ti(c,n))try{Ml(l)}catch{}else if(c&&!ti(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=RE(l,"wx");vE(d,JSON.stringify(u,null,2),"utf8"),kE(d);let m=ni({slotsDir:t,staleMs:n});return{admitted:!0,slotId:a,activeSlots:m,maxSlots:o,reason:null}}catch(d){if(d.code==="EEXIST")continue;throw d}}let s=ni({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function so(e,r={}){if(!e)return;let t=Sh(e,r.slotsDir??to());try{Ml(t)}catch{}}function io(e,r={}){if(oo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:no(),reason:null};let t=r.slotsDir??Xt(),n=r.staleMs??Qt,o=r.maxSlots??no();oi({slotsDir:t,staleMs:n});let s=ni({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 xE}from"node:child_process";function PE(e){e<=0||xE(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Bl(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=Zt(e,n);for(;!s.admitted&&Date.now()<o;)PE(Math.min(t,o-Date.now())),s=Zt(e,n);return s}var EE=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,AE=/\b(npm run build\b|next build\b)\b/i,IE=/\b(vercel (build|deploy|--prod))\b/i,OE=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function Ll(e){let r=e.trim();return r?OE.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:IE.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:AE.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:EE.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 si="heavy_verification_token_required";function Hl(e,r={}){let t=Ll(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...io(e),slotId:null}};if(oo())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...io(e),slotId:null}};let n=r.waitMs??0,o=n>0?Bl(e,n,r.pollMs):Zt(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:si,commandClass:t.commandClass,reason:t.reason??o.reason??si,verificationGate:o}}Ce();import Fl from"node:path";function NE(e){let r=hr(be()),t=Fl.relative(r,Fl.resolve(e));return t.length>0&&!t.startsWith("..")&&!Fl.isAbsolute(t)}function Ch(e){return NE(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}}function DE(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function _h(e,r){let t=TE(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 $l(e){let r=e.waitForAdmissionMs??6e5,t=Hl(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:qt(),admission:zt(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?Nl(r):zt();if(!s.admitted)return so(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:qt(),admission:s,verificationGate:n,command:e.command};let i=Ch(e.cwd);if(!i.ok)return so(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:qt(),admission:s,verificationGate:n,command:e.command};let a=Pl({...process.env,...e.env}),l=qt(),c=ro();Il();try{let u;if(c){let d=Sl({cwd:e.cwd,command:["/usr/bin/env",...DE(a),"/bin/bash","-lc",e.command]});u=_h(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=_h([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{Ol(),so(o)}}var Kl=["npm run typecheck","npm run test"];function ii(e,r=Kl,t={}){let n=[],o=!0;for(let s of r){let i=$l({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 xh(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 Ph(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(xh(String(I)));else typeof i=="string"&&s.push(xh(i));let a=K(e.baseUrl?String(e.baseUrl):void 0),l=await G(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(),m=`provider:${Xo(u.workerProvider,sr)}`,p=(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):m};p!==void 0&&(h.proposed=p);let k=await fetch(c,{method:"POST",headers:Ne(l),body:JSON.stringify(h)}),g=await k.text(),R=null;try{R=JSON.parse(g)}catch{R=g}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:R},null,2)),process.exit(1)),console.log(JSON.stringify(R,null,2))}function UE(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=ME.resolve(r),n=ii(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 Eh(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){UE(e);return}let n=v().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=K(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 WE from"node:path";w();function Ah(e){let r=WE.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=ii(r,n.length?n:Kl,{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 BE}from"node:fs";w();var LE=["create","add_version","update_metadata"],HE=["approval_guard","auth","network","server","tool_interruption"];function FE(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:BE(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 Ih(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!LE.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=v(),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}=FE(e);a&&Ln(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:$E(e)},c=await Fn(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function $E(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!HE.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 Oh(){let e=Lt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Nh(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await Oa({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function Th(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=dl({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)}an();function Dh(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=Ms({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=fr(),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 Pr(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 ai(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
|
-
`),
|
|
52
|
-
`),diagnostic:Pr(e)}}import zE from"node:path";M();J();w();J();w();function Mh(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!ia(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>Rt?{health:"stale",reason:`heartbeat older than ${Math.floor(Rt/1e3)}s`}:t.alive&&r.pid&&!L(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"}}Ce();w();import{existsSync as Uh,mkdirSync as YE,readdirSync as JE,unlinkSync as qE}from"node:fs";import jl from"node:path";function Wh(){let{harnessRoot:e}=dt(),r=jl.join(e,"monitors");return YE(r,{recursive:!0}),r}function en(e,r){return r?`${b(e)}--${b(r)}`:b(e)}function Vl(e){return jl.join(Wh(),`${e}.json`)}function rn(e){return _(Vl(e),void 0)}function tn(e){de(Vl(e.monitorId),e)}function Bh(e){let r=Vl(e);return Uh(r)?(qE(r),!0):!1}function Lh(){let e=Wh();if(!Uh(e))return[];let r=[];for(let t of JE(e)){if(!t.endsWith(".json"))continue;let n=_(jl.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?L(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}J();function Gl(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"),cs(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"),bt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=oe(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 Hh(e,r){return _(zE.join(x(e),"workers",b(r),"worker.json"),void 0)}function Fh(e,r){let t=B(e),n=Object.keys(t.workers||{});if(!r)return n;let o=b(r);return n.filter(s=>b(s)===o)}function $h(e,r){let t=B(e.runId),n=T(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=Mh({worker:e,status:n,taskLease:o}),i=Gl({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 ao(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=B(r),s=Fh(r,t),i=[];for(let p of s){let h=Hh(r,p);h&&i.push(h)}let a=n||i.map(p=>p.agentOsId).find(p=>typeof p=="string"&&p.trim())||void 0,l=i.map(p=>p.taskId).filter(p=>!!p),c=await Dt({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>$h(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await ss(r,{...e,agentOsId:a}));let m=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let p of u){if(!p.autoComplete.eligible){m.push({worker:p.worker,outcome:"skipped",ok:!1,reason:p.autoComplete.blockers.join("; ")||"not eligible"});continue}let h=await Mt({run:r,name:p.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});m.push({worker:p.worker,outcome:h.outcome,ok:h.outcome==="completed",reason:h.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:m}}function Kh(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Fh(r,t),o=[];for(let s of n){let i=Hh(r,s);i&&o.push($h(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Yl(){return Lh()}function jh(e){let r=String(e.run||"");N(r,"--run");let t=en(r,e.name?String(e.name):void 0),n=rn(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&L(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),tn(n),Bh(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Jl(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=me(r,t),o=B(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=Gl({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 Mt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var XE=5e3,QE=360*60*1e3;async function Vh(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):XE,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):QE,o=Date.now();for(;Date.now()-o<=n;){let s=r?rn(r):void 0;if(s?.stoppedAt)break;let i=await ao({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=ai({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(),tn(s));break}Ar(t)}}w();Ce();import{spawn as ZE}from"node:child_process";import{closeSync as Gh,existsSync as eA,openSync as rA}from"node:fs";import Yh from"node:path";import{fileURLToPath as tA}from"node:url";function nA(){return Yh.join(tA(new URL(".",import.meta.url)),"cli.js")}function Jh(e){let r=e.cliPath??nA();if(!eA(r))return;let t=en(e.runId,e.workerName),{harnessRoot:n}=dt(),o=Yh.join(n,"monitors",`${t}.log`),s;try{s=rA(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=ZE(i,l,ue({detached:!0,stdio:c,env:process.env}));s!==void 0&&Gh(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 tn(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{Gh(s)}catch{}return}}w();async function qh(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=en(r,t),o=rn(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=Jh({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 zh(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await ao({...e,autoComplete:!1}):Kh(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Yl()},null,2))}function Xh(e){console.log(JSON.stringify(jh(e),null,2))}function Qh(){console.log(JSON.stringify({monitors:Yl()},null,2))}async function Zh(e){await Vh(e)}async function ek(e){let r=await ao(e);console.log(JSON.stringify(r,null,2))}import{existsSync as oA,readFileSync as sA}from"node:fs";import{dirname as ql,join as tk}from"node:path";import{fileURLToPath as rk}from"node:url";function iA(e){let r=ql(rk(e));for(let t=0;t<6;t+=1){if(oA(tk(r,"package.json")))return r;let n=ql(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${ql(rk(e))}`)}function nk(e=import.meta.url){let r=tk(iA(e),"package.json"),t=JSON.parse(sA(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var li=nk();function aA(e){return e.some(r=>r==="--version"||r==="-v")}function lA(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function ok(e,r=import.meta.url,t){return aA(e)?(lA(nk(r),t),!0):!1}function cA(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 uA(e={}){let[r,t]=await Promise.all([$s(),Promise.resolve(fg({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:li;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:cA(r),repo:t,self:n}}async function sk(e={}){let r=await uA(e);return hg(r)}function ik(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 dA(e){let r=e.trim();return r?Zn().find(n=>n.name===r&&n.status!=="completed")??null:null}function ak(e){let r=String(N(String(e.name||""),"--name")),t=dA(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}M();J();w();O();import pA from"node:path";function lo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function mA(e){let r=K(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 Y())for(let l of Object.keys(a.workers??{})){let c=pA.join(x(a.id),"workers",b(l),"worker.json"),u=_(c,void 0);if(!u){s.push(lo(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",m=u.agentOsId??"",f=u.leaseOwner??"";if(!u.dispatched||!d||!m||!f){s.push(lo(a.id,l,d,m,f,"not a fully-leased dispatched worker"));continue}if(t&&m!==t)continue;if(u.completionReportedAt){s.push(lo(a.id,l,d,m,f,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(lo(a.id,l,d,m,f,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(lo(a.id,l,d,m,f,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:m,leaseOwner:f,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let h=await G(e.secret?String(e.secret):void 0,m,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(m)}/tasks/${encodeURIComponent(d)}/release`,g=await X(k,h,{agentOsId:m,leaseOwner:f},{agentOsId:m,baseUrl:r});g.ok===!0||g.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:m,leaseOwner:f,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:m,leaseOwner:f,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:m,leaseOwner:f,action:"error",reason:h.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function lk(e){let r=await mA(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 gk from"node:path";Ze();O();import{accessSync as fA,constants as gA,existsSync as zl,readFileSync as hA}from"node:fs";import{homedir as ci}from"node:os";import ui from"node:path";import{spawnSync as kA}from"node:child_process";Ce();function ck(e,r){try{let t=kA(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 uk(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function yA(e){if(!zl(e))return!1;try{return fA(e,gA.W_OK),!0}catch{return!1}}var dk={packageVersion:()=>li,commandOnPath:e=>ck(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>ck(e,["--version"]),loadConfig:()=>v(),configFilePath:()=>ui.join(ci(),".kynver","config.json"),credentialsFilePath:()=>ui.join(ci(),".kynver","credentials"),readCredentials:()=>{let e=ui.join(ci(),".kynver","credentials");if(!zl(e))return{hasApiKey:!1};try{let r=JSON.parse(hA(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:uk(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:uk(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:jo(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>be(),legacyOpenclawHarnessRoot:()=>ui.join(ci(),".openclaw","harness"),pathExists:e=>zl(e),pathWritable:e=>yA(e)};function pk(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function RA(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function mk(e){return!!e.openclawCronStorePath}function bA(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function fk(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(bA(e,r)&&!pk(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(RA(e,r)&&!pk(e,r)){if(mk(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(mk(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"}}}function vA(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 SA(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 wA(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=He({config:o}),c=l?vn(l):null,u=Su(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?Re(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function CA(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 _A(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 xA(e){let r=e.harnessRoot(),t=gk.join(r,"runs"),n=gk.join(r,"worktrees"),o=Re(r),s=Re(t),i=Re(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 PA(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 EA(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=Re(o),a=Re(s),l=r.opusHarnessRoot?Re(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,m=n.runnerTokenPrefix,f=n.runnerTokenAgentOsId,p=!!m&&(!u||!f||f===u),h=!!d?.startsWith("krc1.")||p&&!!m?.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},fk(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 hk(e=dk){let r=[SA(e),wA(e),CA(e),_A(e),xA(e),PA(e),EA(e)],t=vA(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 kk(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Sn();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=hk();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function yk(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=K(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await G(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 qo(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))}Ze();var Xl=["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"],Ql=["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 AA(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 Zl(e,r=AA()){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:[...Xl],runnerSteps:[...Ql]}}function Rk(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import IA from"node:path";import{homedir as OA}from"node:os";var bk=IA.join(OA(),".kynver","config.json");function vk(e=!1){let r=v(),t=Zl(r),n={...t,configPath:q(bk),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 Xl)console.log(` - ${o}`);console.log(`
|
|
54
|
-
User runner:`);for(let o of Ql)console.log(` - ${o}`);if(console.log(`
|
|
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 Wf(Ys.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
41
|
+
`),o}var tx=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function nx(e){return!tx.has(e.skipReason)||lr(e.indexed,e.now)?!1:Hf({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Ff({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function ox(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?ar.has(r.run.status)||e.liveness&&xl(r,e.liveness)||e.liveness&&oe(Cl(r,e.liveness))&&!lr(r)?o:n:t?o:n}function sx(e,r){if(e.harnessRoot?.trim())return Js.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Js.sep}runs${Js.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function $f(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=ox(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=Cl(r,e.liveness),u=sx(e,r),d=p=>u&&nx({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(Uf(r,c)){let p=d("completion_blocked");if(p)return p}if(wl(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(Mf(r,e.liveness,a)||!oe(c))return"run_still_active";if(io(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(Ie(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(yt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Qr(c.finalResult)}).blocked){let p=d("landing_blocked");if(p)return p}if(i&&e.worktreePath){let p=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(p)return p.detail?{reason:p.reason,detail:p.detail}:p.reason}return null}function 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(Js.resolve(o))||r&&lr(r)?"active_worker":r&&wl(r,e.gitStatusCache)?"dirty_worktree":null}function Kf(e){return Pl(e)}var jf=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Vf(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)jf.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||jf.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as qf,readdirSync as zf,statSync as lx}from"node:fs";import Xf from"node:path";D();xe();import Gf from"node:path";w();function ax(e,r){return Gs(e,r)}function Yf(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Uo(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=C(Gf.join(fn(o,s.id),"workers",b(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Gf.resolve(l.worktreePath);ax(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Cf(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Jf(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function cx(e,r){try{let t=lx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ux(e,r){let t=Xf.join(e,"runs",r,"run.json");return qf(t)?C(t,null):null}function Qf(e){try{return zf(e).length===0}catch{return!1}}function Zf(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Jf(n,r,t,i.liveRunKeys)||!Qf(n))return"run_still_active";let a=ux(r,t);return a&&!ar.has(a.status)&&!zr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function eg(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=Xf.join(e.worktreesDir,o);Qf(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:cx(s,e.now)})}return r}Ce();import{existsSync as Al,rmSync as dg}from"node:fs";import{execFileSync as dx}from"node:child_process";import{existsSync as rg,readdirSync as px,statSync as mx}from"node:fs";import fx from"node:path";var gx=2500;function hx(e,r=gx){if(!rg(e))return 0;try{let n=dx("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(!rg(e))return 0;let t=hx(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=px(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=fx.join(i,l),u;try{u=mx(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as vx,rmSync as bx}from"node:fs";xe();import{lstatSync as kx,readdirSync as yx}from"node:fs";function tg(e){try{let r=kx(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 ng(e,r=32){let t=tg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=yx(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=tg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Rx}from"node:child_process";import ig from"node:path";import Oe from"node:path";function og(e,r,t,n){let o=Oe.resolve(e),s=`${Oe.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Oe.relative(t,i);if(a.startsWith("..")||Oe.isAbsolute(a))return"path_outside_harness";let l=a.split(Oe.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Oe.resolve(r))?"path_outside_harness":null}function qs(e,r,t){return og(e,r,t,"node_modules")}function zs(e,r,t){return og(e,r,t,".next")}function Xs(e,r,t){let n=Oe.resolve(e),o=Oe.relative(t,n);return o.startsWith("..")||Oe.isAbsolute(o)||o.split(Oe.sep).length<3||!n.startsWith(Oe.resolve(r))?"path_outside_harness":null}function sg(e,r,t){let n=Oe.resolve(e);return qs(n,r,t)===null||zs(n,r,t)===null||Xs(n,r,t)===null}function lg(){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 ag(e){let r=Rx("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function cg(e,r,t){if(!sg(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=ag(["chown","-R",`${n}:${o}`,ig.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=ag(["rm","-rf",ig.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 El="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 Sx(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function ug(e,r,t={}){if(!vx(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??ng;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!Sx(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=lg();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${El}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=cg(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(p){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${p.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${El}`}}}function Il(e){let r=e.harnessRoot;return!r||!bf(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ol(e,r){let t=Il(e);if(t)return t;let n=ug(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function pg(e,r){return Ol(e,r)}function mg(e,r){return Ol(e,r)}function fg(e,r){return Ol(e,r)}function gg(e,r){let t=Il(e);if(t)return t;if(!Al(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 dg(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 hg(e,r){let t=Il(e);if(t)return t;if(!Al(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&&me(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Al(e.path)&&dg(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 Qs,readdirSync as Zs,statSync as wx}from"node:fs";import ze from"node:path";function Nl(e,r){try{let t=wx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function yg(e,r){let t=ze.relative(r,e);return t===""||!t.startsWith("..")&&!ze.isAbsolute(t)}function kg(e,r,t,n){let o=[];for(let s of Sl){if(s===".next")continue;let i=ze.join(e,s);if(!Qs(i))continue;let a=ze.resolve(i);t.has(a)||yg(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:Nl(a,r.now)}))}return o}function Rg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...kg(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Qs(e.worktreesDir))return r;for(let n of Zs(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=ze.join(e.worktreesDir,n.name);for(let s of Zs(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=ze.join(o,s.name);r.push(...kg(i,e,t,{runId:n.name,worker:s.name}))}}return r}function vg(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;Qs(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:Nl(a,e.now)})))}if(!t||!Qs(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 Zs(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=Zs(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)||yg(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Nl(u,e.now)}))}}return n}import{existsSync as wg,readdirSync as bg,statSync as Cx}from"node:fs";import Yt from"node:path";var _x=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function xx(e,r){try{let t=Cx(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Px(e,r){let t=Yt.relative(r,e);return t===""||!t.startsWith("..")&&!Yt.isAbsolute(t)}function Ex(e,r,t,n,o,s){if(!wg(n))return;let i=Yt.resolve(n);r.has(i)||Px(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:xx(i,t.now)}))}function Sg(e,r,t,n,o){for(let s of _x)Ex(e,r,t,Yt.join(n,s.dirName),s.kind,o)}function Cg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Sg(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!wg(e.worktreesDir))return r;for(let n of bg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Yt.join(e.worktreesDir,n.name),s;try{s=bg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Yt.join(o,i.name);Sg(r,t,e,a,{runId:n.name,worker:i.name})}}return r}Ce();import{existsSync as _g,statSync as Ax}from"node:fs";import Xe from"node:path";function Ix(e,r){try{let t=Ax(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ox(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 Nx(e,r){let t=Xe.relative(Xe.resolve(r),Xe.resolve(e));return t!==""&&!t.startsWith("..")&&!Xe.isAbsolute(t)}var Tx=200;function xg(e){if(!e.includeOrphans||!_g(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=me(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=Ox(a);for(let c of l){if(i>=Tx)break;let u=Xe.resolve(c.path);if(u===Xe.resolve(s)||!Nx(u,e.worktreesDir)||t.has(u)||o.has(u)||!_g(u))continue;let f=Xe.relative(e.worktreesDir,u).split(Xe.sep),m=f[0],p=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:p,repo:s,ageMs:Ix(u,e.now)})}}return n}D();w();import lo from"node:path";function Pg(e,r){let t=lo.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?lo.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Eg(e){let r=new Map;for(let t of Uo(e))for(let n of Object.keys(t.workers||{})){let o=lo.join(fn(e,t.id),"workers",b(n),"worker.json"),s=C(o,void 0);s?.worktreePath&&r.set(lo.resolve(s.worktreePath),{harnessRoot:e,worktreePath:lo.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function co(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Zr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Ml(e={}){let r=e.execute===!0||e.execute!==!1&&co("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!co("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Zr("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??Zr("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Zr("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Zr("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Zr("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||co("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=co("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&&!co("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Zr("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,h=Zr("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:p,byteAccountingEntryCap:k}}function Ng(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 Ml({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})}Ce();import{existsSync as Tg}from"node:fs";import Ul from"node:path";w();var Dx=1800*1e3;function Dg(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Dx;if(!Tg(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Ul.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=C(Ul.join(c,"worker.json"),void 0);if(u&&_l(u,r,t))return"active_worker"}let n=Ul.join(e.worktreePath,".git");if(!Tg(n))return null;let o=re(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(Ie(s).length>0)return"dirty_worktree";let i=re(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=re(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}xe();import{existsSync as Mx,readdirSync as Mg,statSync as Ux}from"node:fs";import Wx from"node:path";function Ug(e={}){let r=ae(e.harnessRoot??be()),t=kr(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!Mx(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=Mg(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=Wx.join(t,u.name);try{let f=Ux(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of Mg(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 m=cr(d,f);m===null?s=null:s+=m}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}xe();import{existsSync as Bx}from"node:fs";import{homedir as Lx}from"node:os";import Wg from"node:path";var Hx=["/var/tmp/kynver-harness",Wg.join(Lx(),".openclaw","harness")];function Wl(e,r,t){if(!t?.trim())return;let n=ae(t.trim());e.has(n)||(e.add(n),r.push(n))}function Fx(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 Bg(e={}){let r=new Set,t=[];Wl(r,t,e.harnessRoot??be());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Wl(r,t,o);if(Fx(e))for(let o of Hx){let s=Wg.resolve(o);!r.has(s)&&Bx(s)&&Wl(r,t,s)}return t}mn();function $x(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Kx(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Lg(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=Kx("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=$e({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function Hg(e,r){if(!r.pressured)return e;let t=e.execute||!$x("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}}pn();import{unlinkSync as jx}from"node:fs";function ei(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Fg(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Vx(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function ri(e={}){let r=e.execute===!0||ei("KYNVER_WSL_CRASH_DUMP_EXECUTE")||ei("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||ei("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Fg("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=Vx(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{jx(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 $g(e){return e?ei("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Fg("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}pn();function Ne(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}Ce();var ti=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=re(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 Gx}from"node:child_process";import{existsSync as Yx}from"node:fs";import Jx from"node:path";var qx=5e3;function zx(e,r){if(!Yx(Jx.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=Gx("git",r,{cwd:e,encoding:"utf8",timeout:qx}),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 Kg(e){let r=zx(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 ni=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Kg(t)??[];return this.cache.set(t,o),o}};var oi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=zr(r);return this.cache.set(r.id,n),n}};function Xx(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function jg(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:Xx(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 Qx(e={}){let r=e.harnessRoot?ae(e.harnessRoot):be(),t=Bg({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function Zx(e){return typeof e=="string"?{reason:e}:e}function Jt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function si(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:cr(e.path,t)}}function Vg(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 eP(e,r){return e.kind==="remove_next_cache"?mg(e,r):pg(e,r)}function rP(e,r,t){return e.kind==="remove_next_cache"?zs(e.path,r,t):qs(e.path,r,t)}function tP(e){let r=new Map;for(let t of e)for(let[n,o]of Eg(t))r.set(n,o);return r}function Gg(e,r){return e.runId&&e.worker?Te.join(r,e.runId,e.worker):Te.resolve(e.path,"..")}function Bl(e={}){let r=Ml(e),t=Lg();r=Hg(r,t);let n=Qx(e);Ne("scan",`${n.scanRoots.length} harness root(s)`);let o=Yf(n.scanRoots,n.now),s=r.finalizeStaleRuns?to().map(_=>({runId:_.runId,from:_.from,to:_.to})):[];s.length>0&&Ne("finalize",`${s.length} stale run(s) marked terminal`),Ne("index","building worktree index");let i=tP(n.scanRoots);Ne("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new oi,gitStatusCache:new ni,gitRevCache:new ti},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let _ of n.scanRoots){if(f())break;Ne("root",_);let ce=Te.join(_,"worktrees"),Z=Pg(i,_),Qe={harnessRoot:_,worktreesDir:ce,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Z,now:n.now},nt=r.scanDependencyCaches?Cg(Qe):[];Ne("dependency",r.scanDependencyCaches?`${nt.length} cache candidate(s) at ${_}`:"skipped (worktree-only sweep)");let Be=0;for(let ke of nt){if(f())break;Be+=1,Be%50===0&&Ne("dependency",`${Be}/${nt.length} evaluated`);let ee=Te.resolve(ke.path);if(u.has(ee))continue;u.add(ee);let L={...ke,path:ee},ye=rP(L,_,ce);if(ye){Jt(l,L.path,ye),c.push({...L,executed:!1,skipped:!0,skipReason:ye});continue}let Re=Gg(L,ce),Ze=Z.get(Te.resolve(Re))??null,de=Pl({indexed:Ze,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:L.ageMs,worktreePath:Re,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(de){Jt(l,L.path,de),c.push({...L,executed:!1,skipped:!0,skipReason:de});continue}c.push(eP(si(L,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let ke of Rg(Qe)){if(f())break;let ee=Te.resolve(ke.path);if(u.has(ee))continue;u.add(ee);let L={...ke,path:ee},ye=Xs(L.path,_,ce);if(ye){Jt(l,L.path,ye),c.push({...L,executed:!1,skipped:!0,skipReason:ye});continue}let Re=Gg(L,ce),Ze=Z.get(Te.resolve(Re))??null,de=Kf({indexed:Ze,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:L.ageMs,worktreePath:Re,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(de){Jt(l,L.path,de),c.push({...L,executed:!1,skipped:!0,skipReason:de});continue}c.push(fg(si(L,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Ar=[...vg(Qe),...xg(Qe)];Ne("worktrees",`${Ar.length} candidate(s) at ${_}`);let ur=new Set,ue=0;for(let ke of Ar){if(f())break;ue+=1,ue%50===0&&Ne("worktrees",`${ue}/${Ar.length} evaluated`);let ee=Te.resolve(ke.path);if(ur.has(ee))continue;ur.add(ee);let L={...ke,path:ee},ye=Z.get(Te.resolve(L.path))??null,Re=ye?null:Dg({worktreePath:L.path,harnessRoot:_,runId:L.runId,workerName:L.worker,now:n.now}),Ze=$f({indexed:ye,worktreePath:Te.resolve(L.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:L.ageMs,orphanSafety:Re,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:_,writeSalvageEvidence:r.execute});if(Ze){let{reason:de,detail:dr}=Zx(Ze);Jt(l,L.path,de,dr),c.push({...L,executed:!1,skipped:!0,skipReason:de});continue}c.push(hg(si(L,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let ke of eg({harnessRoot:_,worktreesDir:ce,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let ee=Te.resolve(ke.path);if(u.has(ee))continue;u.add(ee);let L={...ke,path:ee},ye=L.runId??Te.basename(ee),Re=Zf({harnessRoot:_,runId:ye,runPath:ee,ageMs:L.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(Re){Jt(l,L.path,Re),c.push({...L,executed:!1,skipped:!0,skipReason:Re});continue}c.push(gg(si(L,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,h=0,k=0,g=0,y=0;for(let _ of c)_.bytes&&(m+=_.bytes),!_.skipped&&!_.executed&&_.bytes&&(h+=_.bytes),_.executed?(g+=1,k+=_.bytes??0,_.kind==="remove_run_directory"&&(p+=1)):_.skipped&&(y+=1,_.skipReason==="dry_run"&&_.bytes&&(h+=_.bytes));let A=r.accountBytes?Ug({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,x=gr(),E=r.execute&&$g(x),U=E?ri({execute:!0}):null,V=x?{observed:!0,execute:E,dumpCount:x.dumpCount,totalBytes:x.totalBytes,removedCount:U?.removed.length??0,removedBytes:U?.removedBytes??0,executables:x.executables,path:x.path,reason:x.reason}:void 0;U&&U.removed.length>0&&(k+=U.removedBytes,g+=U.removed.length,Ne("wsl-crashes",`removed ${U.removed.length} dump(s), ${U.removedBytes} bytes`)),Ne("complete",`${c.length} action(s), ${y} skipped, ${g} removed`);let $=Vf(c,l),W=jg({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:m,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:Vg(c,l)},...A?{storage:A}:{},...$.length>0?{preservedLivePaths:$}:{},...p>0?{removedRunDirectories:p}:{},...V?{wslCrashDumps:V}:{}});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:m,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:Vg(c,l)},...A?{storage:A}:{},...$.length>0?{preservedLivePaths:$}:{},...p>0?{removedRunDirectories:p}:{},...V?{wslCrashDumps:V}:{},compactSummary:W}}function Yg(e){let r=Ng(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 Jg(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as dP}from"node:fs/promises";import{homedir as pP}from"node:os";import et from"node:path";Oo();import{existsSync as qg,readFileSync as nP}from"node:fs";import ii from"node:path";var Xg={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Qg=Object.keys(Xg),Ll={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},oP={"@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 ai(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 Zg(e,r){return ai(e,r)>=0}function sP(e){let r=null;for(let t of e)(!r||ai(t,r)>0)&&(r=t);return r}function iP(e){try{let r=JSON.parse(nP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function aP(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=ii.resolve(o);if(qg(ii.join(s,"packages/kynver-runtime/package.json"))&&qg(ii.join(s,"package.json")))return s}return ct({cwd:e})?.repo??null}function eh(e={}){let r=e.cwd??process.cwd(),t=aP(r,e.repoRoot);if(!t)return{};let n={};for(let o of Qg){let s=ii.join(t,oP[o]),i=iP(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function lP(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function cP(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&Zg(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${lP(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 uP(e){if(e.length===0)return{version:null,source:"unknown"};let r=sP(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 rh(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=Qg.map(i=>{let a=Xg[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:m}=uP(l),p=u?.version??null,h=f?Zg(f,a):!1,k=h?[]:cP({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),g=h?`${Ll[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${Ll[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:Ll[i],minimumVersion:a,effectiveVersion:f,effectiveSource:m,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 Hl=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 th(e={}){let r=rh(e);if(!r.ok)throw new Hl(r);return r}var mP=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function qt(e){let r=e?.trim();return r||null}function fP(e){return[...new Set(e.filter(r=>!!r))]}function gP(){let e=pP(),r=qt(process.env.KYNVER_OPENCLAW_NPM_ROOT)??qt(process.env.OPENCLAW_NPM_ROOT)??et.join(e,".openclaw","npm"),t=qt(process.env.KYNVER_NPM_GLOBAL_ROOT)??qt(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(qt(process.env.NPM_CONFIG_PREFIX)?et.join(qt(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):et.join(e,".npm-global","lib","node_modules"));return fP([et.join(r,"lib","node_modules"),et.join(r,"node_modules"),t.endsWith("node_modules")?t:et.join(t,"lib","node_modules")])}async function hP(e){try{let r=JSON.parse(await dP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function kP(e){let r=gP(),t=new Set,n=[];for(let o of r){let s=et.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function li(e=new Date().toISOString()){let r={};for(let t of mP){let n=null;for(let o of kP(t)){let s=await hP(o);s&&(!n||ai(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 yP}from"node:child_process";var RP=1e4,vP=4*1024*1024,nh=(e,r,t)=>{try{let n=yP(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??RP,maxBuffer:vP});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 ci(e,r,t){return`${e} ${r} ${t}`}function uo(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 oh(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 bP=8e3,SP=30,wP=100,CP=400,_P=600*1e3,Fl=0;function $l(){return Date.now()<Fl}function xP(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 sh(e){xP(e)&&(Fl=Math.max(Fl,Date.now()+_P))}function po(e,r){if($l())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return sh(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function PP(e,r){if($l())return null;let t=e("gh",["api",...r]);return t.ok?t.stdout:(sh(t),null)}function Kl(e){return $l()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function zt(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function EP(e){return Array.isArray(e)?e.map(r=>zt(r)).filter(r=>r!==null).slice(0,SP).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function ih(e,r,t){let n=po(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:EP(n.statuses)}:null}var ah={provider:"github",kind:"pr_snapshot",version:"1",isAvailable:Kl,collect(e,r){let t=oh(e);if(!t)return null;let n=po(r,[`repos/${t.repo}/pulls/${t.number}`]);if(!n)return null;let o=zt(n.head),s=typeof o?.sha=="string"?o.sha:null,i=zt(n.user),a=zt(zt(o?.repo)?.owner),l=typeof n.body=="string"?n.body.slice(0,bP):null,c=[],u={state:null,statuses:[]};if(s){let m=po(r,[`repos/${t.repo}/commits/${s}/check-runs?per_page=100`]);Array.isArray(m?.check_runs)&&(c=m.check_runs.map(p=>zt(p)).filter(p=>p!==null).slice(0,wP).map(p=>({name:p.name??null,status:p.status??null,conclusion:p.conclusion??null}))),u=ih(r,t.repo,s)??u}let d=PP(r,["--paginate",`repos/${t.repo}/pulls/${t.number}/files?per_page=100`,"--jq",".[].filename"]),f=d?d.split(`
|
|
47
|
+
`).map(m=>m.trim()).filter(Boolean).slice(0,CP):[];return{pull:{html_url:n.html_url??null,title:n.title??null,body:l,user:{login:i?.login??null},state:n.state??null,draft:n.draft??null,merged:n.merged??null,merged_at:n.merged_at??null,merge_commit_sha:n.merge_commit_sha??null,mergeable:n.mergeable??null,mergeable_state:n.mergeable_state??null,head:{sha:s,ref:o?.ref??null,repo:{owner:{login:a?.login??null}}}},checkRuns:c,combinedStatus:u,changedFiles:f}}},lh={provider:"github",kind:"commit_status",version:"1",isAvailable:Kl,collect(e,r){let t=uo(e);return t?ih(r,t.repo,t.sha):null}},ch={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Kl,collect(e,r){let t=uo(e);if(!t)return null;let n=po(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=po(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 AP=5,IP=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,OP=/https:\/\/[^\s]+/,uh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=uo(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(`
|
|
48
|
+
`)){let i=s.match(OP)?.[0];if(!i)continue;let a=s.match(IP)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=AP)break}return{found:o.length>0,deployments:o}}};var jl=[];function ui(e){jl.some(r=>r.provider===e.provider&&r.kind===e.kind)||jl.push(e)}function dh(e,r){return jl.find(t=>t.provider===e&&t.kind===r)??null}function ph(){ui(ah),ui(lh),ui(ch),ui(uh)}var NP=8,TP=25e3;function mh(e,r={}){ph();let t=r.run??nh,n=r.now??(()=>new Date),o=r.maxSubjects??NP,s=Date.now()+(r.deadlineMs??TP),i=new Set,a=e.filter(m=>{let p=ci(m.provider,m.kind,m.subject);return i.has(p)?!1:(i.add(p),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,p)=>a[(l+p)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},f=new Map;for(let m of u){let p=ci(m.provider,m.kind,m.subject),h=n(),k=r.cache?.get(p,h)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let g=dh(m.provider,m.kind);if(!g){d.skipped.push({...m,reason:"no_recipe"});continue}let y=`${g.provider} ${g.kind}`,A=f.get(y);if(A===void 0&&(A=g.isAvailable(t),f.set(y,A)),!A){d.skipped.push({...m,reason:"provider_unavailable"});continue}d.attempted+=1;let x=g.collect(m.subject,t);if(x==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:x,observedAt:n().toISOString(),collectorVersion:g.version};d.items.push(E),r.cache?.set(p,E,n())}return d}D();w();import fh from"node:path";var DP="provider-evidence-wanted.json",MP="provider-evidence-cache.json",UP=600*1e3;function gh(e){return fh.join(P(e),DP)}function WP(e){return fh.join(P(e),MP)}function hh(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 kh(e){let r=C(gh(e),null);return hh(r?.wanted)}function yh(e,r){ie(gh(e),{savedAt:new Date().toISOString(),wanted:r})}function Rh(e,r={}){let t=r.ttlMs??UP,n=WP(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&&(ie(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function vh(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?hh(r):null}async function LP(e,r){let t=B(e),n=[];for(let o of Object.keys(t.workers||{})){let s=C(BP.join(P(t.id),"workers",b(o),"worker.json"),void 0);if(!s?.taskId||s.localOnly)continue;if(Vr(s)){n.push({worker:o,ok:!0,taskId:s.taskId??null,skipped:!0});continue}let i=M(s);if(!oe(i))continue;let a=kt({alive:i.alive,finalResult:i.finalResult,changedFiles:i.changedFiles,gitAncestry:i.gitAncestry});if(!s.dispatched&&!i.finalResult&&!a?.salvageable)continue;let l=await qn({run:e,name:o,agentOsId:String(r.agentOsId||s.agentOsId||""),...r});n.push({worker:o,ok:l.ok,taskId:s.taskId??null})}return n}async function HP(e,r,t,n,o){let s=j(n.baseUrl?String(n.baseUrl):void 0),i=await G(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await li(),c=fs(r),u=null;try{let h=kh(r);if(h.length>0){let k=Rh(r);u=mh(h,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=ms(r),f=await Hr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Gr(r),resourceGate:t,boxResourceSnapshot:Vs(t,{harnessRunId:r,boxKind:Fe(R())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Ge({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=vh(f.response);if(m)try{yh(r,m)}catch{}let p=Vd(f);if(p)try{jd(r,p)}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 Vl(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";Ws({run:r});let o=await Tf(t,e),s=Nf(o),i=nr({runId:r,configuredMaxWorkersOverride:s}),a=Jg()?Yg(r):void 0,l=await HP(t,r,i,e,a),c=km(r,l),u=await _s(r,e),d=await LP(r,e),f=nr({runId:r,configuredMaxWorkersOverride:s}),m=oo(),p=await Of(r,e),h=hf(f,l),k=h.maxStarts,g=await so({run:r,agentOsId:t,pipeline:!0,...e}),y=null,A=0,x=gf(l),E=k;if(n&&E>0&&x.length>0){let V=Math.min(E,x.length),$=await dl({...e,run:r,agentOsId:t,targetTaskIds:x.join(",")},V),W=Vt($);A+=W,E=Math.max(0,E-W),y={exactTargetTaskIds:x,exact:$,startedCount:A}}if(n&&E>0){let V=await dl({...e,run:r,agentOsId:t},E),$=Vt(V);A+=$,y=y&&typeof y=="object"?{...y,broad:V,startedCount:A}:V}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,...x.length?{exactTargetTaskIds:x,exactOnly:!0}:{}}):y&&typeof y=="object"&&(y={...y,broadSkipped:!0,startedCount:A});let U=!h.underutilized&&k===0&&d.length===0&&A===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:u,completedWorkers:d,staleReconcile:m,harnessCleanup:a,planProgressSync:p,completionAckSync:c,operatorTick:l,sweep:g,dispatchAdvice:h,dispatch:y,idle:U}}O();import sE from"node:os";import{readFileSync as FP}from"node:fs";import{homedir as $P,platform as KP}from"node:os";import jP from"node:path";import{execFileSync as VP}from"node:child_process";function bh(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 GP(){if(KP()==="darwin")try{let e=VP("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return bh(e.trim())}catch{return null}try{let e=FP(jP.join($P(),".claude",".credentials.json"),"utf8");return bh(e)}catch{return null}}function Sh(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=GP();if(s)return{kind:"oauth",token:s}}return null}var YP="You are Claude Code, Anthropic's official CLI for Claude.";function JP(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function qP(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 zP(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(`
|
|
49
|
+
`))!==-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 QP(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:YP},{type:"text",text:n.system}]);let i=await fetch(`${QP()}/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=JP();for await(let l of XP(i.body)){let c=qP(a,l);c&&e.onDelta(c)}return zP(a)}var Xt=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 tE}from"node:child_process";var ZP=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),eE=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),rE=["--secret","--api-key","--keeper-child"];function Ch(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(rE.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
50
|
+
`)||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")}:ZP.has(t)?{ok:!0,mutating:!1}:eE.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var nE=10*6e4,oE=5e3,_h=2e5;async function xh(e,r,t={}){let n=Ch(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??nE,i=new Xt(r);return new Promise(a=>{let l=0,c=!1,u=tE(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=_h)return;let p=m.toString("utf8").slice(0,_h-l);l+=p.length,i.push(p)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),oE).unref()},s);u.on("error",m=>{clearTimeout(f),i.push(`spawn failed: ${m.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",m=>{clearTimeout(f),i.close(),a({exitCode:m,timedOut:c})})})}var iE=25e3,aE=32e3,lE=5e3,cE=6e4,Ph=5*6e4,uE=5e3,dE="claude-sonnet-4-6";async function pE(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(),uE);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 Eh(e=process.env){let r=R(),t=r.agentOsId?.trim(),n=ne();if(!t||!n)return null;let o=await pE(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:sE.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||dE,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function mE(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),aE),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:iE}),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 rt(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 fE(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await xh(n,s=>{rt(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await rt(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await rt(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 gE(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||rt(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Xt(s),a=Sh(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await rt(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 rt(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 rt(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 Gl(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Ah(e){let r=await Eh();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!ne()||!R().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Ph}));!r&&!e.shouldStop();){if(!ne()||!R().agentOsId?.trim()||(await Gl(Ph,e.shouldStop),e.shouldStop()))return;r=await Eh()}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 mE(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Gl(cE,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await fE(r,t):await gE(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Gl(lE,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var hE=6e4,kE=5*6e4,yE=10,RE=250;async function Yl(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(RE,t);await mr(n),t-=n}}async function di(e){Nt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||R().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):hE,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Dn();a.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:a.resolved?.defaultRepo??null,configPath:a.configPath}));let l=Sd(R());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=Ah({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{_d({agentOsId:t,runId:r,instructionBundleVersion:Br()});let f=await aa(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 Yl(o,()=>s);continue}d&&(d=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await vd({agentOsId:t,baseUrl:Qu(e.baseUrl?String(e.baseUrl):void 0),secret:f.secret});let m=await Vl({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...m})),c.tickEnabled){let g=ms(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 Tt({env:c,agentOsIdFilter:t});y.enabled&&(y.fired>0||y.errors>0||y.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...y}))}}m.idle?i++:i=0;let p=Math.floor(Ot("daemon.maxIdleStreak",yE)),h=Math.floor(Ot("daemon.idleIntervalMs",kE)),k=i>=p?h:o;await Yl(k,()=>s)}catch(f){console.error(JSON.stringify({event:"daemon_tick_error",error:f.message})),await Yl(o,()=>s)}await u,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as vE}from"node:child_process";w();var bE=15*6e4,Ih=2*6e4,Oh=1e4,SE=5e3,wE=5*6e4,CE=30*6e4,Nh=5e3;function _E(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:bE}function pi(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 xE(e,r=SE,t=wE){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function PE(e,r,t=CE){return r-e>=t}function tt(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function EE(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 mi(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||R().agentOsId||""),"--agent-os-id")),n=_E(e.stallMs),o=EE(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,tt("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),tt("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=vE(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),tt("child_spawned",{pid:a.pid??null}),a.on("exit",(k,g)=>{d=!0,f=k,m=g});!d&&!i&&(await mr(Nh),!(d||i));){if(Date.now()-u<Ih)continue;let k=xd(t),g=k&&k.pid===a.pid?k:null;if(g&&Pd(g,n)){tt("stall_detected",{pid:a.pid??null,lastBeatAt:g.observedAt,stallMs:n}),a.kill("SIGTERM"),await mr(Oh),d||a.kill("SIGKILL");break}if(!g&&Date.now()-u>n+Ih){tt("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await mr(Oh),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await mr(Nh);if(i)break;let p=Date.now();PE(u,p)&&(l=0),l+=1;let h=xE(l);tt("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:h}),await mr(h)}tt("stopped",{agentOsId:t})}Ce();D();import{existsSync as UE,mkdirSync as WE}from"node:fs";import BE from"node:path";D();Nr();import{existsSync as AE,readFileSync as IE}from"node:fs";import Th from"node:path";q();w();function OE(e){if(!e||!AE(e))return 0;try{return IE(e,"utf8").trim().length}catch{return 0}}function NE(e,r){let t=Th.join(P(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=OE(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 TE(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 DE(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 ME(e){let r=0;for(let t of ge(e)){let n=Th.join(P(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 mo(){return oo(),J().map(e=>{let t=ge(e).map(d=>NE(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}=DE(t),c=ME(e),u=yn(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:TE({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Dh(){console.log(JSON.stringify(mo(),null,2))}w();function LE(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ke();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function fi(e){let r=Rm(LE(e));jc(r);let t=e.id?Ms(String(e.id)):Lc(String(e.name||"run")),n=P(t);UE(n)&&HE(`run already exists: ${t}`),WE(n,{recursive:!0});let o=String(e.base||"origin/main"),s=me(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:{}};ie(BE.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 Mh(){Dh()}function HE(e){console.error(e),process.exit(1)}D();import{existsSync as hi}from"node:fs";async function gi(e=sr()){let r=await Lr(e.storePath).catch(()=>[]),t=await ps(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=us(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 FE}from"node:os";import $E from"node:path";yr();var Pr="watchdog:board-sweep",KE="*/5 * * * *",jE=["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 Uh(e){let r=e.storePath?.trim()||vr(),t=e.envFilePath?.trim()||we,n=$E.join(FE(),".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:jE,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:KE,dedupeKey:Pr,callbackPath:o}}}yr();async function Qt(e){let r=e.envFilePath??we,t=[],n=sr(),o=await gi(n),s=Ct(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:hi(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:hi(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:hi(n.storePath),summary:hi(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===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 Gh}from"node:fs";import{createHash as VE}from"node:crypto";function Wh(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:${VE("sha1").update(r).digest("hex").slice(0,16)}`}async function Jl(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function Bh(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await Jl(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 Lh(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 Jl(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 Hh(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await Jl(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 Fh(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 $h(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Pr&&r.provider==="qstash"&&r.status!=="cancelled")}function GE(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Pr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function Kh(e){return GE(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`."}}yr();yr();import{randomBytes as YE}from"node:crypto";function JE(){return YE(32).toString("base64url")}function jh(e=we){let r=da();if(r)return{secret:r,generated:!1,source:"env"};let n=Ct(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:JE(),generated:!0,source:"generated"}}Xo();Zo();D();function Vh(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return Gh(t)?J().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function ki(e={}){let r=e.execute!==!1,t=R(),n=er(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=Uh({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:Y(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=qo(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:Y(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=Vh(u,e.runId);d&&(u.defaultDaemonRunId=d),le(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 Ld(i.storePath);l.storeInitialized=f.created||Gh(i.storePath);let m=ne();if(m)try{let p=await Wr(o,{baseUrl:n,apiKey:m});Ur(o,p)}catch{}if(!e.skipWatchdog)if(!m)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 p=await Lh(n,o,m,void 0,{requireProvider:"kynver-cron"}),h=Fh(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:Wh(h),spec:h,registeredAt:new Date().toISOString(),paused:!1};await Bd(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let g=await Bh(n,o,m),y=$h(g),A=["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."],x=[];if(y.length)if(e.confirmQstashRemoval){let E=Kh(g);if(!E.allowed)a.push(E.reason);else for(let U of y)await Hh(n,o,U.id,m),x.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:x,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=Vh({...t,...i.configUpdates},e.runId);if(!p)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{B(p)}catch{a.push(`harness run ${p} not found`)}if(l.systemd=Qo({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:_t()},r),r&&l.systemd.enabled){let h=R();le({...h,daemonSupervisionOwner:"systemd"})}}}if(!e.skipTestFire&&a.length===0){let p=await Tt({agentOsIdFilter:o});l.testFire={fired:p.fired,errors:p.errors},p.errors>0&&a.push(`test fire reported ${p.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await Qt({config:R(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var qE=["deployment_provider","cron_secret","env_file","cron_store"];function Yh(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function zE(e){let r=Yh(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Yh(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function XE(e){if(!zE(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Qt({config:e})).checks.filter(n=>qE.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function QE(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 Jh(e){if(ql(e.args.skipCron))return{action:"skipped"};let r=await XE(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 ki({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 QE(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}O();Ee();No();function qh(e=R(),r=process.env){let t=Pe(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=un(t.boxKind,o);a!==o&&(o=a,i.maxConcurrentWorkers=a,s=!0,n.push(`clamped maxConcurrentWorkers to ${a} for ${t.boxKind} pool`))}return s&&le(i),{repaired:s,boxKind:t.boxKind,maxConcurrentWorkers:o??4,warnings:n}}Zo();Xo();O();yr();Pn();es();En();D();async function zh(e){let r=rs(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&xn(t.hostKind)))return{action:"keeper",owner:"keeper"};try{B(e.runId)}catch{return{action:"systemd_skipped",owner:"keeper",blockers:[`harness run ${e.runId} not found \u2014 cannot install systemd unit`]}}let o=Qo({envFilePath:we,agentOsId:e.agentOsId,runId:e.runId,kynverBin:_t()},!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=R();return le({...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 Xh(e){return e.action==="systemd_installed"}function Qh(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 eA(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 Zh(e){Nt();let r=R();(!ne()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await cs(e),r=R());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)),In(t).ok||(console.error(ss(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(le({...r,chatUseClaudeOauth:!0}),r=R(),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()||Ke()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=qh(r);if(s.repaired){r=R();for(let c of s.warnings)console.log(` ${c}`)}let i=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";i||(i=eA(J(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=fi({...e,repo:o,name:"agent"}).runId),await Jh({config:r,agentOsId:t,runId:i,args:e});let a=await zh({config:R(),agentOsId:t,runId:i,args:e});if(Xh(a)){console.log("");for(let c of Qh())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${ZE.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(pi(l)){await mi(l,rA(i,t,e));return}await di(l)}function rA(e,r,t){if(!In(r).ok)throw new Error(ss(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}D();D();q();import{existsSync as tA,rmSync as nA}from"node:fs";import zl from"node:path";function oA(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function sA(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function iA(e){let{runId:r,workerName:t}=Je(e),n=fe(r,t),o=[...sA(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=oA(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(!tA(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])],F(n.runId,n);let l=M(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function ek(e){let r=iA(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import NA from"node:path";Sn();To();Sn();var aA=/--max-old-space-size=(\d+)/;function lA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Xl(){return lA(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Ql(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(aA.test(t))return r;let o=`--max-old-space-size=${Xl()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function Zt(e=Xl()){return`--max-old-space-size=${e}`}zo();O();Sn();To();import{spawnSync as cA}from"node:child_process";function Ri(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function tk(e=R()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Ri(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Ri(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Ri(e.perWorkerMemBytes,1610612736),reserveBytes:t??Ri(e.memReserveBytes,2147483648)}}var vi=0;function rc(){vi+=1}function tc(){vi=Math.max(0,vi-1)}function en(e={}){let r={...tk(),...e},t=e.memAvailableBytes??dn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:vi,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function uA(e){e<=0||cA(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function nc(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=en({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)uA(Math.min(r,n-Date.now())),o=en({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as IA}from"node:child_process";w();import{closeSync as fA,existsSync as oc,mkdirSync as gA,openSync as hA,readdirSync as ok,readFileSync as kA,unlinkSync as ic,writeFileSync as yA}from"node:fs";import ac from"node:path";import{mkdirSync as dA}from"node:fs";import{tmpdir as pA}from"node:os";import bi from"node:path";function mA(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function nk(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?bi.resolve(e):mA()?bi.join(pA(),"kynver","state","heavy-verification"):bi.join($s(),"heavy-verification")}function fo(){return bi.join(nk(),"slots")}function rn(){let e=fo();return dA(e,{recursive:!0}),e}var tn=120*6e4,sc=1;function RA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ho(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function go(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?RA(e,sc):sc}function vA(e){return`slot-${e}`}function sk(e,r=fo()){return ac.join(r,`${e}.json`)}function lc(e){if(!oc(e))return null;try{let r=JSON.parse(kA(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 Si(e,r=tn){if(!e||!H(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function bA(e,r){let t=lc(e);if(Si(t,r))try{ic(e)}catch{}}function SA(e){return gA(e,{recursive:!0}),e}function Ci(e={}){let r=SA(e.slotsDir??rn()),t=e.staleMs??tn,n=0;for(let o of ok(r)){if(!o.endsWith(".json"))continue;let s=ac.join(r,o),i=oc(s);bA(s,t),i&&!oc(s)&&(n+=1)}return n}function ik(e={}){let r=e.slotsDir??rn(),t=e.staleMs??tn;Ci({slotsDir:r,staleMs:t});let n=[];for(let o of ok(r)){if(!o.endsWith(".json"))continue;let s=lc(ac.join(r,o));s&&!Si(s,t)&&n.push(s)}return n}function wi(e={}){return ik(e).length}function nn(e,r={}){if(ho())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:go(),reason:null};let t=r.slotsDir??rn(),n=r.staleMs??tn,o=r.maxSlots??go();Ci({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=vA(i),l=sk(a,t),c=lc(l);if(c&&Si(c,n))try{ic(l)}catch{}else if(c&&!Si(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=hA(l,"wx");yA(d,JSON.stringify(u,null,2),"utf8"),fA(d);let f=wi({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=wi({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function ko(e,r={}){if(!e)return;let t=sk(e,r.slotsDir??fo());try{ic(t)}catch{}}function yo(e,r={}){if(ho())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:go(),reason:null};let t=r.slotsDir??rn(),n=r.staleMs??tn,o=r.maxSlots??go();Ci({slotsDir:t,staleMs:n});let s=wi({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 wA}from"node:child_process";function CA(e){e<=0||wA(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function cc(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=nn(e,n);for(;!s.admitted&&Date.now()<o;)CA(Math.min(t,o-Date.now())),s=nn(e,n);return s}var _A=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,xA=/\b(npm run build\b|next build\b)\b/i,PA=/\b(vercel (build|deploy|--prod))\b/i,EA=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function uc(e){let r=e.trim();return r?EA.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:PA.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:xA.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:_A.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 _i="heavy_verification_token_required";function dc(e,r={}){let t=uc(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...yo(e),slotId:null}};if(ho())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...yo(e),slotId:null}};let n=r.waitMs??0,o=n>0?cc(e,n,r.pollMs):nn(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:_i,commandClass:t.commandClass,reason:t.reason??o.reason??_i,verificationGate:o}}xe();import pc from"node:path";function AA(e){let r=kr(be()),t=pc.relative(r,pc.resolve(e));return t.length>0&&!t.startsWith("..")&&!pc.isAbsolute(t)}function ak(e){return AA(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}}zo();function OA(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function lk(e,r){let t=IA(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 mc(e){let r=e.waitForAdmissionMs??6e5,t=dc(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Zt(),admission:en(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?nc(r):en();if(!s.admitted)return ko(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Zt(),admission:s,verificationGate:n,command:e.command};let i=ak(e.cwd);if(!i.ok)return ko(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:Zt(),admission:s,verificationGate:n,command:e.command};let a=Ql({...process.env,...e.env}),l=Zt(),c=Cn();rc();try{let u;if(c){let d=Zi({cwd:e.cwd,command:["/usr/bin/env",...OA(a),"/bin/bash","-lc",e.command]});u=lk(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=lk([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{tc(),ko(o)}}var fc=["npm run typecheck","npm run test"];function xi(e,r=fc,t={}){let n=[],o=!0;for(let s of r){let i=mc({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 ck(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 uk(e){let r=N(e.plan?String(e.plan):void 0,"plan"),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=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 A of i)s.push(ck(String(A)));else typeof i=="string"&&s.push(ck(i));let a=j(e.baseUrl?String(e.baseUrl):void 0),l=await G(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=R(),f=`provider:${ks(u.workerProvider,ir)}`,p=(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};p!==void 0&&(h.proposed=p);let k=await fetch(c,{method:"POST",headers:Me(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 TA(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=NA.resolve(r),n=xi(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 dk(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){TA(e);return}let n=R().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=j(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 DA from"node:path";w();function pk(e){let r=DA.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=xi(r,n.length?n:fc,{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(`
|
|
51
|
+
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as MA}from"node:fs";w();var UA=["create","add_version","update_metadata"],WA=["approval_guard","auth","network","server","tool_interruption"];function BA(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:MA(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 mk(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!UA.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=R(),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}=BA(e);a&&Xn(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:LA(e)},c=await Zn(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function LA(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!WA.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 fk(){let e=jt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function gk(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await ol({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function hk(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=Bl({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)}pn();function kk(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=ri({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 Er(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 Pi(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(`
|
|
52
|
+
`),diagnostic:Er(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(`
|
|
53
|
+
`),diagnostic:Er(e)}}import YA from"node:path";D();q();w();q();w();function yk(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Ta(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"}}xe();w();import{existsSync as Rk,mkdirSync as jA,readdirSync as VA,unlinkSync as GA}from"node:fs";import gc from"node:path";function vk(){let{harnessRoot:e}=mt(),r=gc.join(e,"monitors");return jA(r,{recursive:!0}),r}function on(e,r){return r?`${b(e)}--${b(r)}`:b(e)}function hc(e){return gc.join(vk(),`${e}.json`)}function sn(e){return C(hc(e),void 0)}function an(e){ie(hc(e.monitorId),e)}function bk(e){let r=hc(e);return Rk(r)?(GA(r),!0):!1}function Sk(){let e=vk();if(!Rk(e))return[];let r=[];for(let t of VA(e)){if(!t.endsWith(".json"))continue;let n=C(gc.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))}q();function kc(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"),As(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=oe(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(YA.join(P(e),"workers",b(r),"worker.json"),void 0)}function Ck(e,r){let t=B(e),n=Object.keys(t.workers||{});if(!r)return n;let o=b(r);return n.filter(s=>b(s)===o)}function _k(e,r){let t=B(e.runId),n=M(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=yk({worker:e,status:n,taskLease:o}),i=kc({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 Ro(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=B(r),s=Ck(r,t),i=[];for(let p of s){let h=wk(r,p);h&&i.push(h)}let a=n||i.map(p=>p.agentOsId).find(p=>typeof p=="string"&&p.trim())||void 0,l=i.map(p=>p.taskId).filter(p=>!!p),c=await Lt({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>_k(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await _s(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let p of u){if(!p.autoComplete.eligible){f.push({worker:p.worker,outcome:"skipped",ok:!1,reason:p.autoComplete.blockers.join("; ")||"not eligible"});continue}let h=await Ht({run:r,name:p.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:p.worker,outcome:h.outcome,ok:h.outcome==="completed",reason:h.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function xk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Ck(r,t),o=[];for(let s of n){let i=wk(r,s);i&&o.push(_k(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function yc(){return Sk()}function Pk(e){let r=String(e.run||"");N(r,"--run");let t=on(r,e.name?String(e.name):void 0),n=sn(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(),an(n),bk(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Rc(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=fe(r,t),o=B(r),s=M(n,{base:o.base,baseCommit:o.baseCommit}),i=kc({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 Ht({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var JA=5e3,qA=360*60*1e3;async function Ek(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):JA,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):qA,o=Date.now();for(;Date.now()-o<=n;){let s=r?sn(r):void 0;if(s?.stoppedAt)break;let i=await Ro({...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(),an(s));break}Ir(t)}}w();xe();import{spawn as zA}from"node:child_process";import{closeSync as Ak,existsSync as XA,openSync as QA}from"node:fs";import Ik from"node:path";import{fileURLToPath as ZA}from"node:url";function eI(){return Ik.join(ZA(new URL(".",import.meta.url)),"cli.js")}function Ok(e){let r=e.cliPath??eI();if(!XA(r))return;let t=on(e.runId,e.workerName),{harnessRoot:n}=mt(),o=Ik.join(n,"monitors",`${t}.log`),s;try{s=QA(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=zA(i,l,pe({detached:!0,stdio:c,env:process.env}));s!==void 0&&Ak(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 an(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{Ak(s)}catch{}return}}w();async function Nk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=on(r,t),o=sn(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=Ok({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 Tk(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Ro({...e,autoComplete:!1}):xk(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:yc()},null,2))}function Dk(e){console.log(JSON.stringify(Pk(e),null,2))}function Mk(){console.log(JSON.stringify({monitors:yc()},null,2))}async function Uk(e){await Ek(e)}async function Wk(e){let r=await Ro(e);console.log(JSON.stringify(r,null,2))}import{existsSync as rI,readFileSync as tI}from"node:fs";import{dirname as vc,join as Lk}from"node:path";import{fileURLToPath as Bk}from"node:url";function nI(e){let r=vc(Bk(e));for(let t=0;t<6;t+=1){if(rI(Lk(r,"package.json")))return r;let n=vc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${vc(Bk(e))}`)}function Hk(e=import.meta.url){let r=Lk(nI(e),"package.json"),t=JSON.parse(tI(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Ei=Hk();function oI(e){return e.some(r=>r==="--version"||r==="-v")}function sI(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Fk(e,r=import.meta.url,t){return oI(e)?(sI(Hk(r),t),!0):!1}function iI(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 aI(e={}){let[r,t]=await Promise.all([li(),Promise.resolve(eh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Ei;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:iI(r),repo:t,self:n}}async function $k(e={}){let r=await aI(e);return th(r)}function Kk(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 lI(e){let r=e.trim();return r?mo().find(n=>n.name===r&&n.status!=="completed")??null:null}function jk(e){let r=String(N(String(e.name||""),"--name")),t=lI(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}D();q();w();O();import cI from"node:path";function vo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function uI(e){let r=j(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 J())for(let l of Object.keys(a.workers??{})){let c=cI.join(P(a.id),"workers",b(l),"worker.json"),u=C(c,void 0);if(!u){s.push(vo(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",f=u.agentOsId??"",m=u.leaseOwner??"";if(!u.dispatched||!d||!f||!m){s.push(vo(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(vo(a.id,l,d,f,m,"completion already reported"));continue}let p=M(u);if(p.finalResult){s.push(vo(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(vo(a.id,l,d,f,m,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let h=await G(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 X(k,h,{agentOsId:f,leaseOwner:m},{agentOsId:f,baseUrl:r});g.ok===!0||g.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,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:m,action:"error",reason:h.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function Vk(e){let r=await uI(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 ey from"node:path";He();O();import{accessSync as dI,constants as pI,existsSync as bc,readFileSync as mI}from"node:fs";import{homedir as Ai}from"node:os";import Ii from"node:path";import{spawnSync as fI}from"node:child_process";xe();function Gk(e,r){try{let t=fI(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 Yk(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function gI(e){if(!bc(e))return!1;try{return dI(e,pI.W_OK),!0}catch{return!1}}var Jk={packageVersion:()=>Ei,commandOnPath:e=>Gk(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Gk(e,["--version"]),loadConfig:()=>R(),configFilePath:()=>Ii.join(Ai(),".kynver","config.json"),credentialsFilePath:()=>Ii.join(Ai(),".kynver","credentials"),readCredentials:()=>{let e=Ii.join(Ai(),".kynver","credentials");if(!bc(e))return{hasApiKey:!1};try{let r=JSON.parse(mI(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:Yk(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:Yk(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:us(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>be(),legacyOpenclawHarnessRoot:()=>Ii.join(Ai(),".openclaw","harness"),pathExists:e=>bc(e),pathWritable:e=>gI(e)};function qk(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function hI(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function zk(e){return!!e.openclawCronStorePath}function kI(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Xk(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(kI(e,r)&&!qk(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(hI(e,r)&&!qk(e,r)){if(zk(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(zk(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"}}}yr();Pn();En();es();function Qk(e,r={}){let t=xt(),n=ts(e,t),o=[],s=r.envFilePath??we,a=Ct(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=ta();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=ea(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Pn();En();function Zk(e){let r=e.loadConfig(),t=xt(),n=ts(r,t),s=Qk(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 yI(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 RI(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?Y(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 vI(e){let r=e.configFilePath(),t=Y(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=Ke({config:o}),c=l?Tn(l):null,u=ld(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?ve(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function bI(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=Y(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 SI(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 wI(e){let r=e.harnessRoot(),t=ey.join(r,"runs"),n=ey.join(r,"worktrees"),o=ve(r),s=ve(t),i=ve(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 CI(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 _I(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=ve(o),a=ve(s),l=r.opusHarnessRoot?ve(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,f=n.runnerTokenPrefix,m=n.runnerTokenAgentOsId,p=!!f&&(!u||!m||m===u),h=!!d?.startsWith("krc1.")||p&&!!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},Xk(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 ry(e=Jk){let r=[RI(e),vI(e),bI(e),SI(e),wI(e),CI(e),Zk(e),_I(e)],t=yI(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 ty(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Dn();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=ry();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function ny(e){let r=R(),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=j(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await G(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 gs(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 Sc=["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"],wc=["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 xI(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 Cc(e,r=xI()){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:[...Sc],runnerSteps:[...wc]}}function oy(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import PI from"node:path";import{homedir as EI}from"node:os";var sy=PI.join(EI(),".kynver","config.json");function iy(e=!1){let r=R(),t=Cc(r),n={...t,configPath:Y(sy),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
|
|
54
|
+
`),console.log("Deployment (Vercel):");for(let o of Sc)console.log(` - ${o}`);console.log(`
|
|
55
|
+
User runner:`);for(let o of wc)console.log(` - ${o}`);if(console.log(`
|
|
55
56
|
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
57
|
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
|
|
58
|
+
No local blockers detected on this runner.`)}function ay(e=!1){let r=R(),t=Cc(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=oy(r);le(n);let o={ok:!0,attested:!0,configPath:Y(sy),deploymentSchedulerProvider:"qstash",config:Et(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 ly(e){let r=await gi();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 cy(e){let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await Tt({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 AI(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 uy(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await ki({execute:r?!1:AI(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
59
|
`:`Kynver Cron install
|
|
59
60
|
`),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
61
|
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
|
|
62
|
+
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 dy(e){let r=R(),t=await Qt({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"}
|
|
63
|
+
`);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 OI from"node:os";O();Ee();wt();w();var bo={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 II}from"node:child_process";import py from"node:path";function my(e,r,t){let o=[py.join(r,bo.landScript),String(e),...bo.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=II("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 fy(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?py.resolve(r):Ke()?.repo??process.cwd()}async function gy(e){let r=String(N(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||bo.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={...Vs(i,{harnessRunId:s,boxKind:Fe(R()),hostLabel:OI.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=j(e.baseUrl?String(e.baseUrl):void 0),c=await G(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,m=[],p=fy(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=my(g.prNumber,p,o);if(m.push({action:y.action,executed:y.executed,exitCode:y.exitCode}),o&&y.executed){let A=y.exitCode===0,x=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:x,holderBoxId:k,merged:A})}catch{}}continue}m.push({action:g,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:f,localOutcomes:m}}async function hy(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await gy(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();D();Nr();wt();import MI from"node:path";w();Tr();Vo();D();w();import NI from"node:path";function ky(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function yy(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&&!ky(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function _c(e){return typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!H(e.pid)?!1:Ko(e)}function TI(e,r){let t=e.completionBlocker?.trim();if(t&&!ky(t))return{attention:"blocked",attentionReason:t,status:"blocked"};if(r.heartbeatBlocker)return{attention:"blocked",attentionReason:r.heartbeatBlocker,status:"blocked"};if(yy(e))return{attention:"done",attentionReason:"completion acknowledged",status:"done"};let n=_c(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 DI(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||yy(e)?!1:_c(e)}function xc(e,r){let t=C(NI.join(P(e.id),"workers",b(r),"worker.json"),void 0);if(!t)return null;let n=Se(t.heartbeatPath),{attention:o,attentionReason:s,status:i}=TI(t,n),a=_c(t),l=DI(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 Pc(e,r){let t={};for(let n of e){let o=r(n).trim()||"unknown";t[o]=(t[o]??0)+1}return t}function Ry(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 vy(e){return e.filter(r=>r.isActive&&r.taskId).map(r=>r.taskId.trim())}function UI(){let e=[];for(let r of J())for(let t of ge(r)){let n=xc(r,t);n&&e.push(n)}return e}function WI(e){let r=e.trim().toLowerCase();if(!r)return null;for(let t of J())for(let n of ge(t)){let s=C(MI.join(P(t.id),"workers",b(n),"worker.json"),void 0)?.taskId?.trim();if(s&&(s.toLowerCase()===r||s.toLowerCase().endsWith(r)))return xc(t,n)}return null}function Ec(e){if(e.mode==="full")return{mode:"full",runs:mo()};let r=R(),{harnessRoot:t}=te(),n=J(),o=UI(),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:Pc(n,l=>l.status),workerCount:o.length,workerStatusCounts:Pc(o,l=>l.status),workerAttentionCounts:Pc(o,l=>l.attention),activeTaskIds:vy(o),blocked:Ry(o).slice(0,25),workers:o};if(e.mode==="task"){let l=e.taskId?.trim()??"",c=l?WI(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:Ry(l).slice(0,25),activeTaskIds:vy(l)}}return a}function Ac(e,r=72){let t=e.trim();return t.length<=r?t:`${t.slice(0,r-1)}\u2026`}function BI(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=${Ac(e.currentTask,48)}`),r.join(" \xB7 ")}function LI(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}: ${Ac(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(`
|
|
64
|
+
`)}function HI(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(`
|
|
65
|
+
`);for(let n of e.workers)t.push(BI(n));return t.join(`
|
|
66
|
+
`)}function FI(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=${Ac(r.currentTask)}`:null,r.completionBlocker??r.heartbeatBlocker??r.attentionReason??null].filter(n=>!!n).join(" \xB7 ")}function by(e){return e.mode==="workers"?HI(e):e.mode==="task"?FI(e):LI(e)}function $I(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 Sy(e){let r=$I(e);if(r==="full"){let n=Ec({mode:"full"});console.log(JSON.stringify(n,null,2));return}let t=Ec({mode:r,taskId:typeof e.task=="string"?e.task:void 0});if(r==="json"){console.log(JSON.stringify(t,null,2));return}console.log(by(t))}function Ic(e){return e==="help"||e==="--help"||e==="-h"}function _y(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),Oc(1)}function Oc(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]'," 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(`
|
|
67
|
+
`)),process.exit(e)}async function jI(e=process.argv.slice(2)){if(Fk(e,import.meta.url,"kynver"))return;if(e.length===0||Ic(e[0]))return Oc(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&&Ic(t)||n.some(Ic))return Oc(0);let o=as(n),{runsDir:s,worktreesDir:i}=te();if(wy(s,{recursive:!0}),wy(i,{recursive:!0}),r==="daemon"&&Nt(),Kk(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=B(l).repo}catch{a=void 0}await $k({repoRoot:a,cwd:a})}if(r==="login")return void await td(o);if(r==="bootstrap")return void await cs(o);if(r==="start")return void await Zh(o);if(r==="runner"&&t==="credential")return void await rd(o);if(r==="setup")return void await ls(o);if(r==="status")return Sy(o);if(r==="daemon")return pi(o)?void await mi(o):void await di(o);if(r==="plan"&&t==="progress")return void await uk(o);if(r==="plan"&&t==="verify")return void await dk(o);if(r==="harness"&&t==="verify")return pk(o);if(r==="plan"&&t==="persist")return void await mk(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await fk();if(a==="drain")return void await gk(as(n));_y("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return hk(o);if(r==="wsl-crashes")return kk(o);if(r==="config"&&t==="ensure-default-repo")return ad(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return ty(o);if(r==="scheduler"&&t==="cutover-check")return iy(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return ay(o.json===!0);if(r==="cron"&&t==="install")return void await uy(o);if(r==="cron"&&t==="verify")return void await dy(o);if(r==="cron"&&t==="status")return void await ly(o.json===!0);if(r==="cron"&&t==="tick")return void await cy(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await hy(as(n),a)}if(r==="board"&&t==="contract")return void await ny(o);if(r==="run"&&t==="create")return void fi(o);if(r==="run"&&t==="list")return Mh();if(r==="run"&&t==="resolve")return jk(o);if(r==="run"&&t==="status")return Ws(o);if(r==="run"&&t==="dispatch")return void await qr(o);if(r==="run"&&t==="sweep")return void await so(o);if(r==="run"&&t==="reconcile")return Af();if(r==="run"&&t==="unblock")return void await Vk(o);if(r==="worker"&&t==="start")return void await Lm(o);if(r==="worker"&&t==="list")return xm(o);if(r==="worker"&&t==="status")return Cm(o);if(r==="worker"&&t==="tail")return Nm(o);if(r==="worker"&&t==="stop")return Tm(o);if(r==="worker"&&t==="complete")return void await qa(o);if(r==="worker"&&t==="discard-disposable")return ek(o);if(r==="worker"&&t==="auto-complete")return void await Um(o);if(r==="monitor"&&t==="start"){let a=await Nk(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await Tk(o);if(r==="monitor"&&t==="stop")return Dk(o);if(r==="monitor"&&t==="list")return Mk();if(r==="monitor"&&t==="tick")return void await Wk(o);if(r==="monitor"&&t==="auto-complete")return void await Rc(o);if(r==="monitor"&&t==="run-loop")return void await Uk(o);_y(r,t)}var VI=process.argv[1]&&Cy.native(process.argv[1])===Cy.native(KI(import.meta.url));VI&&jI().catch(e=>{console.error(e),process.exit(1)});export{jI as main,Oc as usage};
|