@kynver-app/runtime 0.1.156 → 0.1.166
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bounded-build/exec.d.ts +3 -0
- package/dist/bounded-build/index.d.ts +1 -1
- package/dist/byoc/context-hydration.d.ts +54 -0
- package/dist/byoc/execution-proof.d.ts +46 -0
- package/dist/byoc/index.d.ts +5 -0
- package/dist/byoc/job-envelope.d.ts +39 -0
- package/dist/byoc/m6-golden-path.d.ts +80 -0
- package/dist/byoc/mcp-tool-proof.d.ts +42 -0
- package/dist/cli.js +57 -53
- package/dist/config.d.ts +8 -0
- package/dist/doctor/doctor.types.d.ts +23 -0
- package/dist/doctor/runner-install-cli.d.ts +1 -0
- package/dist/doctor/runner-install.d.ts +2 -0
- package/dist/factory-status/collect.d.ts +3 -1
- package/dist/harness-verify.d.ts +2 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +74 -69
- package/dist/model-routing.d.ts +8 -0
- package/dist/orchestration-providers/adapter-contract.d.ts +50 -0
- package/dist/orchestration-providers/index.d.ts +1 -0
- package/dist/providers/claude.d.ts +2 -0
- package/dist/server/cleanup.js +13 -13
- package/dist/server/default-repo.js +1 -1
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/monitor.js +7 -7
- package/dist/server/orchestration.js +1 -1
- package/dist/server/worker-policy.js +1 -1
- package/dist/status.d.ts +4 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,66 +1,70 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function
|
|
2
|
+
var kR=Object.defineProperty;var U=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var yR=(e,r)=>{for(var t in r)kR(e,t,{get:r[t],enumerable:!0})};import{existsSync as RR,mkdirSync as bR,readFileSync as Xi,readdirSync as xN,statSync as pu,writeFileSync as vR}from"node:fs";import mu from"node:path";function kr(e){console.error(e),process.exit(1)}function pe(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function T(e,r){return e||kr(`missing ${r}`),e}function kt(e){try{return JSON.parse(e)}catch{return null}}function _(e,r){try{return JSON.parse(Xi(e,"utf8"))}catch(t){if(arguments.length>1)return r;kr(`failed to read ${e}: ${t.message}`)}}function se(e,r){bR(mu.dirname(e),{recursive:!0}),vR(e,`${JSON.stringify(r,null,2)}
|
|
3
|
+
`)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function fu(e){return v(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function er(e){return String(e).replace(/\/+$/,"")}function Yo(e){return String(e||"").replace(/\s+/g," ").trim()}function Jo(e){try{return pu(e).size}catch{return 0}}function qo(e){try{return pu(e).mtime.toISOString()}catch{return null}}function zo(e,r){return RR(e)?Xi(e,"utf8").split(`
|
|
4
4
|
`).slice(-r).join(`
|
|
5
|
-
`):""}function
|
|
6
|
-
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=lu("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 au(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function $o(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 Vi(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Vi(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=ne(e,["rev-parse",n]);if(f.status!==0)return Vi(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=au(e,i,a),c=au(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 Vi(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var we=U(()=>{"use strict";C();pt()});import{homedir as Gi}from"node:os";import Tr from"node:path";function uu(e){return e==="~"?Gi():e.startsWith("~/")||e.startsWith("~\\")?Tr.join(Gi(),e.slice(2)):e}function mt(e){return Tr.resolve(uu(e))}function Re(e){let r=uu(e),t=Tr.resolve(r),n=Tr.resolve(Gi());return t===n?"~":t.startsWith(`${n}${Tr.sep}`)?`~/${Tr.relative(n,t).split(Tr.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 He=U(()=>{"use strict"});import{existsSync as Ji,readFileSync as pu}from"node:fs";import{homedir as lR}from"node:os";import rr from"node:path";import{fileURLToPath as cR}from"node:url";function dR(e){let r=rr.join(e,"package.json");if(!Ji(r))return null;try{let t=JSON.parse(pu(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function pR(e){return dR(e)==="kynver"}function du(e){let r=rr.resolve(e);if(!Ji(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?rr.resolve(n):null}function mR(e=import.meta.url){let r=rr.dirname(cR(e));for(let t=0;t<8;t+=1){let n=rr.join(r,"package.json");if(Ji(n))try{if(JSON.parse(pu(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=rr.dirname(r);if(o===r)break;r=o}return null}function Yi(e,r,t,n){if(!t)return;let o=rr.resolve(t);e.has(o)||pR(o)&&(e.add(o),r.push({repo:o,source:n}))}function mu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Yi(t,n,du(r),"cwd_git");let o=mR(e?.runtimeModuleUrl??import.meta.url);o&&Yi(t,n,du(o),"runtime_checkout");let s=lR();for(let i of uR)Yi(t,n,mt(rr.join(s,i)),"well_known_path");return n}function ft(e){return mu(e)[0]??null}function fR(e){let r=rr.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 Ko(e){let r=mu(e);return r.find(n=>!fR(n.repo))??r[0]??null}var uR,jo=U(()=>{"use strict";we();He();uR=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function gt(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 fu(e,r){return e[r]?.trim()||null}function _e(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:gt(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=fu(e,"KYNVER_BOX_KIND");if(o)return{boxKind:gt(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=fu(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 _e(r,e).boxKind}var Pe=U(()=>{"use strict"});function qi(e,r){return e==="forge"?4:Math.max(1,r)}function tr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}function ht(e,r){return e==="forge"&&r>4}var gn=U(()=>{"use strict"});import{readFileSync as gR}from"node:fs";import gu from"node:os";function hn(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:gu.freemem()}if(process.platform==="linux")try{let t=gR("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return gu.freemem()}var Vo=U(()=>{"use strict"});import{existsSync as hR,readFileSync as kR,statfsSync as yR}from"node:fs";function zi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!hR(e))continue;let r=kR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function hu(e={}){if(!(e.forceWsl===void 0?zi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||kt,n=e.wslHostFreeWarnBytes??RR,o=e.wslHostFreeCriticalBytes??bR,s=e.statfs??yR,i;try{i=s(t)}catch(g){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${g.message}`,probeError:g.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. ${vR()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function vR(){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 RR,bR,kt,Xi=U(()=>{"use strict";RR=25*1024*1024*1024,bR=12*1024*1024*1024,kt="/mnt/c"});import{execFileSync as ku}from"node:child_process";import{existsSync as Yo,readFileSync as yu,readdirSync as SR,statSync as wR}from"node:fs";import Qi from"node:path";function Go(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Ru(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=ku("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()||kt;return r&&Yo(Qi.join(t,"Users",r))?r:null}function ER(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()||kt,n=e.windowsUser??Ru();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function AR(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(Yo("/proc/sys/kernel/core_pattern"))return yu("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return ku("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function OR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function NR(e,r=kt){let t=Qi.join(r,"Users",e,".wslconfig");if(!Yo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=yu(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 TR(e){if(!Yo(e))return[];let r=SR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Qi.join(e,n.name);try{let s=wR(o),i=AR(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 kr(e={}){if(!(e.forceWsl===void 0?zi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||kt,n=e.windowsUser??Ru(),o=e.warnBelowBytes??Go("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",CR),s=e.criticalBelowBytes??Go("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",xR),i=e.warnCount??Go("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",_R),a=e.criticalCount??Go("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",PR),l=(e.readCorePattern??IR)(),c=OR(l),u=null;n&&(u=(e.readWslConfig??NR)(n,t));let d=u?.maxCrashDumpCount??null,f=d===-1,m=ER({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??TR)(m)}catch($){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}: ${$.message}`,probeError:$.message}}let g=p.reduce(($,I)=>$+I.bytes,0),k=p.length,h=[...new Set(p.map($=>$.executableHint).filter($=>!!$))],y=g>=s,S=g>=o,P=k>=a,_=k>=i,Y=!(y||P||S||_),K=null;if(!Y){let $=y||P?"critical":"warning",I=(g/1024**3).toFixed(1),L=h.length>0?h.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${I} GiB at ${m} (executables: ${L}). `+DR({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:Y,path:m,windowsUser:n,dumpCount:k,totalBytes:g,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:h,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:K,probeError:null}}function DR(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 CR,xR,_R,PR,kn=U(()=>{"use strict";Xi();CR=5*1024*1024*1024,xR=10*1024*1024*1024,_R=2,PR=4});import{statfsSync as MR}from"node:fs";function $e(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??UR,n=e.diskFreeCriticalBytes??WR,o=e.diskMaxUsedPercent??BR,s=e.diskHardMaxUsedPercent??LR,i=MR(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,g=!u&&!d&&!m&&!p,k=e.skipWslHostCheck?null:hu(e.wslHost),h=e.skipWslCrashDumpCheck?null:kr(e.wslCrashDumps),y=g&&(k?k.ok:!0)&&(h?h.ok:!0),S=null;return y||(S=[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,h&&!h.ok?h.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:S,wslHost:k,wslCrashDumps:h?{ok:h.ok,path:h.path,dumpCount:h.dumpCount,totalBytes:h.totalBytes,executables:h.executables,wslCaptureEnabled:h.wslCaptureEnabled,dumpsDisabledInWslConfig:h.dumpsDisabledInWslConfig,reason:h.reason,probeError:h.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 UR,WR,BR,LR,yn=U(()=>{"use strict";kn();Xi();UR=30*1024*1024*1024,WR=15*1024*1024*1024,BR=80,LR=90});import{existsSync as bu}from"node:fs";import{homedir as Su}from"node:os";import yr from"node:path";function ce(e){let r=yr.resolve(mt(e.trim()));for(;FR.has(yr.basename(r));)r=yr.dirname(r);return r}function be(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ce(e);let r=b().harnessRoot?.trim();if(r)return ce(r);let t=yr.join(Su(),".kynver","harness");return bu(t)?t:bu(vu)?vu:t}function Ce(e){return yr.join(ce(e),"runs")}function Rr(e){return yr.join(ce(e),"worktrees")}function yt(){let e=be();return{harnessRoot:e,runsDir:Ce(e),worktreesDir:Rr(e)}}function Rt(e,r){return yr.join(e,v(r))}var vu,FR,xe=U(()=>{"use strict";N();He();C();vu=yr.join(Su(),".openclaw","harness"),FR=new Set(["runs","worktrees"])});import{existsSync as $R,readdirSync as KR,statSync as jR}from"node:fs";import bt from"node:path";function Z(){return yt()}function B(e){let{runsDir:r}=Z();return x(bt.join(Rt(r,v(e)),"run.json"))}function z(){let{runsDir:e}=Z();return wu(e)}function Jo(e){return wu(Ce(e))}function VR(e){try{return jR(e).isDirectory()}catch{return!1}}function wu(e){if(!$R(e))return[];let r=[];for(let t of KR(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=bt.join(e,t.name);if(!VR(n))continue;let o=x(bt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function ue(e,r){let{runsDir:t}=Z();return x(bt.join(Rt(t,v(e)),"workers",v(r),"worker.json"))}function Te(e){let{runsDir:r}=Z();se(bt.join(Rt(r,e.id),"run.json"),e)}function F(e,r){let{runsDir:t}=Z();se(bt.join(Rt(t,e),"workers",r.name,"worker.json"),r)}function E(e){let{harnessRoot:r}=Z();return Rn(r,e)}function Rn(e,r){return Rt(Ce(e),v(r))}var D=U(()=>{"use strict";xe();C()});import{existsSync as GR,readdirSync as YR}from"node:fs";import JR from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=JR.join(E(e.id),"workers");if(!GR(t))return[...r];for(let n of YR(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Dr=U(()=>{"use strict";D();C()});function Zi(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 Cu(e){let r=e.trim();if(!r)return null;let t=Zi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Zi(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Zi(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function xu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Cu(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Cu(t);return n||t}var _u=U(()=>{"use strict"});import{existsSync as qR,readFileSync as zR}from"node:fs";function Pu(e){return e==="complete"}function nr(e){return Pu(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function ae(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!qR(e))return r;let t=Date.now()+XR,n=new Date(t).toISOString(),o=zR(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=dt(n);if(!o)continue;let s=Sb(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=Nu(a);l&&(r.currentTool=l)}let i=Tu(o);i&&Cb(r,oa({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&wb(r,o)}return r}function xb(e){let r=Tu(e);if(!r)return;let t=oa({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Bo(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 Du(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] ${Bo(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"?xb(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=Nu(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Bo(String(e.result||""))}`.trim()}var Sn=U(()=>{"use strict";Ou();C()});function Pb(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function qo(e){let r=(e??"").trim();if(!r)return null;for(let t of _b)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Pb(r)}`};return null}var _b,sa=U(()=>{"use strict";_b=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Mu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Eb(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 Ab(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Mu(e.head)}function Ib(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function St(e){if(e.alive||Eb(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Mu(e.headCommit)??Ab(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:Ib(s,r,t)}}var zo=U(()=>{"use strict"});function wn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ob(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 Nb(e){if(wn(e.headCommit)||wn(e.prUrl)||wn(e.artifactBundlePath)||wn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&wn(r.head))}function wt(e){return Ob(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Nb(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 Uu(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Xo=U(()=>{"use strict"});function ia(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Wu(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Ct(e){let r=e.trim();if(!r)return null;let t=ia(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ia(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ia(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Wu(l);for(let u of n){let d=Wu(u);d>c&&(l=u,c=d)}return l}var Qo=U(()=>{"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 Lu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Tb(e){return new Set(e.map(r=>Lu(Bu(r)??r)).filter(Boolean))}function Hu(e,r,t){let n=Bu(e)??e;if(!n)return"unrelated";let o=Lu(n);return Tb(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Fu=U(()=>{"use strict"});function xt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Db(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Mr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:xt(e)}function Zo(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=Ct(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=Mr(String(s.prUrl??s.pr_url??"")),a=xt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:xt(s.mergeCommit??s.merge_commit),reason:xt(s.reason)})}return n}function Ku(e,r){let t=[],n=Mr(xt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Mr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function ju(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(!Db(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?Mr(xt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Mr(r.targetPrUrls[0]):null):null;if(s){let d=Ku(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let g of d)if(g!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${g} instead of canonical target ${s}`}}let p=$u(n).find(g=>g.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=>[Zo(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Zo(Mr(d)??d)).filter(Boolean)),c=Ku(t,n);if(r.landingOnly)for(let d of c){let f=a.get(Zo(d)),m=Hu(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=Zo(Mr(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 Vu(e){if(e.blocked)return e.detail??e.reason}var Gu=U(()=>{"use strict";Qo();Fu()});function Ub(e){let r=Date.now();if(e.completionBlocker&&!Yu(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Bb(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=wt(o);if(s.blocked){let i=Uu(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=ju({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Vu(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(Wb(e))return{state:"done",reason:"empty abandoned worker record"};let o=qo(e.error);if(o)return{state:"blocked",reason:o.reason};let s=St({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Mb)return{state:"needs_attention",reason:`no first stream event ${ji(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>_t?{state:"stale",reason:`no log/event/heartbeat activity for ${ji(n)}s`}:{state:"ok",reason:"recent activity"}}function Yu(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Wb(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 Bb(e){let r=null;if(typeof e=="string"?r=Ct(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 Lb(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??nr(t))}function M(e,r={}){let t=vt(e.stdoutPath),n=ae(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Lb(e,t.finalResult,n),i=o?!1:H(e.pid),a=Lo(e.stdoutPath),l=Lo(e.stderrPath),c=Lo(e.heartbeatPath),u=fn(e.worktreePath),d=$o(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=iu([t.lastEventAt,n.lastHeartbeatAt,Ho(e.stdoutPath),Ho(e.stderrPath),Ho(e.heartbeatPath)]),m=t.error||!i&&!s&&Fo(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Yu(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=Ub({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:g,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=g||h.state==="blocked"?"blocked":o||h.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:y,attention:h,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 ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Pt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Cn(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 Mb,_t,X=U(()=>{"use strict";br();Sn();sa();zo();we();Xo();Gu();Qo();C();Mb=18e4,_t=6e5});import{readFileSync as Hb}from"node:fs";function Fb(e){if(!e||process.platform!=="linux")return null;try{return Hb(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function es(e){if(!e.pid||process.platform!=="linux")return!0;let r=Fb(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 Et(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=M(e);return r.alive&&!es(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var xn=U(()=>{"use strict";X()});import qu from"node:os";import $b from"node:path";function Ju(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Kb(e=b(),r,t){let n=Ju(e.perWorkerMemBytes,_n),o=Ju(e.memReserveBytes,Pn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):En)),i=ts({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??qu.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function aa(e,r={}){let t=r.perWorkerMemBytes??_n,n=r.memReserveBytes??Pn,o=r.memUtilization??En,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,rs)}function jb(){return hn()}function Vb(e){let r=0;for(let t of fe(e)){let n=x($b.join(E(e.id),"workers",v(t),"worker.json"),void 0);!n||!Et(n)||r++}return r}function Gb(){let e=0;for(let r of z())e+=Vb(r);return e}function or(e){let r=e.config??b(),t=e.totalMemBytes??qu.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Kb(r,e.configuredMaxWorkersOverride,t),c=Fe(r),u=e.freeMemBytes??jb(),d=e.activeWorkers??Gb(),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)),g=a,k=tr(c,i??g),h=Math.max(0,Math.min(k,m)),y=Math.max(0,h-d),P=Math.min(y,p),A=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:$e({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});A&&!A.ok&&(P=0);let Y=null;return P<=0&&(A&&!A.ok?Y=A.reason??"disk gate blocked worker admission":d>=h?Y=`at worker limit (${d}/${h} running)`:p<=0?Y="insufficient free memory \u2014 waiting for workers to finish":Y="no worker slots available"),{ok:P>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:P,reason:Y,...A?{diskGate:A}:{}}}var _n,Pn,En,rs,At=U(()=>{"use strict";Vo();N();Pe();gn();ns();yn();D();Dr();xn();C();_n=500*1024*1024,Pn=4*1024*1024*1024,En=.85,rs=64});function Ur(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ts(e){let r=e.config??{},t=e.env??process.env,n=Ur(r.perWorkerMemBytes,_n),o=Ur(r.memReserveBytes,Pn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):En)),i=aa(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ur(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Ur(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,rs),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Ur(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,rs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function la(e={}){let r=e.totalMemBytes??0,t=aa(r,{perWorkerMemBytes:Ur(e.config?.perWorkerMemBytes,_n),memReserveBytes:Ur(e.config?.memReserveBytes,Pn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):En}),n=e.diskGateOk??!0,o=n?t:Math.max(1,Math.min(t,4));return{totalMemBytes:r,autoCap:t,recommendedMaxWorkers:o,diskPath:e.diskPath??"/",diskGateOk:n,diskFreeBytes:e.diskFreeBytes??null}}var ns=U(()=>{"use strict";At()});import{existsSync as zu,mkdirSync as Yb,readFileSync as Xu,writeFileSync as Jb}from"node:fs";import{homedir as qb}from"node:os";import Qu from"node:path";function ca(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 zb(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
5
|
+
`):""}function gu(e){return e?Xi(mu.resolve(e),"utf8"):""}function Ur(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function yr(e){return new Promise(r=>setTimeout(r,e))}function F(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Rr(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function hu(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 Qi(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var C=U(()=>{"use strict"});function _R(e){return wR.has(e)?!0:CR.some(r=>e.endsWith(r))}function rr(e){let r={...e};for(let t of Object.keys(r))_R(t)&&delete r[t];return r}var SR,wR,CR,yt=U(()=>{"use strict";SR=["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"],wR=new Set(SR),CR=["_SECRET","_API_KEY"]});import{spawnSync as yu}from"node:child_process";function me(e,r,t={}){let n=yu("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);kr(o)}return n.stdout||""}function Ru(e){me(e,["rev-parse","--show-toplevel"])}function Rn(e){return me(e,["status","--short"],{allowFailure:!0}).split(`
|
|
6
|
+
`).map(r=>r.trim()).filter(Boolean)}function oe(e,r){try{let t=yu("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 ku(e,r,t){let n=oe(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 Xo(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 Zi(n,"missing worktree path");let s=oe(e,["rev-parse","HEAD"]);if(s.status!==0)return Zi(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=oe(e,["rev-parse",n]);if(p.status!==0)return Zi(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.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=ku(e,i,a),c=ku(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 Zi(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var we=U(()=>{"use strict";C();yt()});import{homedir as ea}from"node:os";import Wr from"node:path";function bu(e){return e==="~"?ea():e.startsWith("~/")||e.startsWith("~\\")?Wr.join(ea(),e.slice(2)):e}function Rt(e){return Wr.resolve(bu(e))}function Re(e){let r=bu(e),t=Wr.resolve(r),n=Wr.resolve(ea());return t===n?"~":t.startsWith(`${n}${Wr.sep}`)?`~/${Wr.relative(n,t).split(Wr.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function B(e){return Re(e)}var Me=U(()=>{"use strict"});import{existsSync as ta,readFileSync as Su}from"node:fs";import{homedir as xR}from"node:os";import tr from"node:path";import{fileURLToPath as PR}from"node:url";function AR(e){let r=tr.join(e,"package.json");if(!ta(r))return null;try{let t=JSON.parse(Su(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function IR(e){return AR(e)==="kynver"}function vu(e){let r=tr.resolve(e);if(!ta(r))return null;let t=oe(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?tr.resolve(n):null}function OR(e=import.meta.url){let r=tr.dirname(PR(e));for(let t=0;t<8;t+=1){let n=tr.join(r,"package.json");if(ta(n))try{if(JSON.parse(Su(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=tr.dirname(r);if(o===r)break;r=o}return null}function ra(e,r,t,n){if(!t)return;let o=tr.resolve(t);e.has(o)||IR(o)&&(e.add(o),r.push({repo:o,source:n}))}function wu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ra(t,n,vu(r),"cwd_git");let o=OR(e?.runtimeModuleUrl??import.meta.url);o&&ra(t,n,vu(o),"runtime_checkout");let s=xR();for(let i of ER)ra(t,n,Rt(tr.join(s,i)),"well_known_path");return n}function bt(e){return wu(e)[0]??null}function NR(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 Qo(e){let r=wu(e);return r.find(n=>!NR(n.repo))??r[0]??null}var ER,Zo=U(()=>{"use strict";we();Me();ER=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function vt(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 Cu(e,r){return e[r]?.trim()||null}function xe(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:vt(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Cu(e,"KYNVER_BOX_KIND");if(o)return{boxKind:vt(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Cu(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 Ke(e={},r=process.env){return xe(r,e).boxKind}var Pe=U(()=>{"use strict"});function na(e,r){return e==="forge"?4:Math.max(1,r)}function nr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}function St(e,r){return e==="forge"&&r>4}var bn=U(()=>{"use strict"});import{readFileSync as TR}from"node:fs";import _u from"node:os";function vn(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:_u.freemem()}if(process.platform==="linux")try{let t=TR("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return _u.freemem()}var es=U(()=>{"use strict"});import{existsSync as DR,readFileSync as MR,statfsSync as UR}from"node:fs";function oa(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!DR(e))continue;let r=MR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function xu(e={}){if(!(e.forceWsl===void 0?oa():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||wt,n=e.wslHostFreeWarnBytes??WR,o=e.wslHostFreeCriticalBytes??LR,s=e.statfs??UR,i;try{i=s(t)}catch(g){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${g.message}`,probeError:g.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,p=!u&&!d,f=(a/(1024*1024*1024)).toFixed(1),m=null;return p||(m=`Windows host disk ${t} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${BR()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:m,probeError:null}}function BR(){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 WR,LR,wt,sa=U(()=>{"use strict";WR=25*1024*1024*1024,LR=12*1024*1024*1024,wt="/mnt/c"});import{execFileSync as Pu}from"node:child_process";import{existsSync as ts,readFileSync as Eu,readdirSync as HR,statSync as FR}from"node:fs";import ia from"node:path";function rs(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Au(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Pu("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()||wt;return r&&ts(ia.join(t,"Users",r))?r:null}function GR(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()||wt,n=e.windowsUser??Au();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function YR(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function JR(){try{if(ts("/proc/sys/kernel/core_pattern"))return Eu("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Pu("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function qR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function zR(e,r=wt){let t=ia.join(r,"Users",e,".wslconfig");if(!ts(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Eu(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 XR(e){if(!ts(e))return[];let r=HR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=ia.join(e,n.name);try{let s=FR(o),i=YR(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function br(e={}){if(!(e.forceWsl===void 0?oa():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||wt,n=e.windowsUser??Au(),o=e.warnBelowBytes??rs("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",$R),s=e.criticalBelowBytes??rs("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",KR),i=e.warnCount??rs("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",jR),a=e.criticalCount??rs("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",VR),l=(e.readCorePattern??JR)(),c=qR(l),u=null;n&&(u=(e.readWslConfig??zR)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,f=GR({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:p,reason:null,probeError:"windows_user_unresolved"};let m;try{m=(e.listDumps??XR)(f)}catch(j){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:p,reason:`WSL crash dump probe failed at ${f}: ${j.message}`,probeError:j.message}}let g=m.reduce((j,I)=>j+I.bytes,0),k=m.length,h=[...new Set(m.map(j=>j.executableHint).filter(j=>!!j))],R=g>=s,S=g>=o,P=k>=a,x=k>=i,J=!(R||P||S||x),V=null;if(!J){let j=R||P?"critical":"warning",I=(g/1024**3).toFixed(1),H=h.length>0?h.join(", "):"unknown";V=`WSL crash dumps ${j}: ${k} file(s), ${I} GiB at ${f} (executables: ${H}). `+QR({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:J,path:f,windowsUser:n,dumpCount:k,totalBytes:g,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:m,executables:h,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:V,probeError:null}}function QR(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 $R,KR,jR,VR,Sn=U(()=>{"use strict";sa();$R=5*1024*1024*1024,KR=10*1024*1024*1024,jR=2,VR=4});import{statfsSync as ZR}from"node:fs";function je(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??eb,n=e.diskFreeCriticalBytes??rb,o=e.diskMaxUsedPercent??tb,s=e.diskHardMaxUsedPercent??nb,i=ZR(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,p=a<t*2,f=p&&c>o,m=p&&c>s,g=!u&&!d&&!f&&!m,k=e.skipWslHostCheck?null:xu(e.wslHost),h=e.skipWslCrashDumpCheck?null:br(e.wslCrashDumps),R=g&&(k?k.ok:!0)&&(h?h.ok:!0),S=null;return R||(S=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,m?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,h&&!h.ok?h.reason:null].filter(Boolean).join("; ")),ob({ok:R,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k,wslCrashDumps:h?{ok:h.ok,path:h.path,dumpCount:h.dumpCount,totalBytes:h.totalBytes,executables:h.executables,wslCaptureEnabled:h.wslCaptureEnabled,dumpsDisabledInWslConfig:h.dumpsDisabledInWslConfig,reason:h.reason,probeError:h.probeError}:null})}function ob(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 eb,rb,tb,nb,wn=U(()=>{"use strict";Sn();sa();eb=30*1024*1024*1024,rb=15*1024*1024*1024,tb=80,nb=90});import{existsSync as Iu}from"node:fs";import{homedir as Nu}from"node:os";import vr from"node:path";function ce(e){let r=vr.resolve(Rt(e.trim()));for(;sb.has(vr.basename(r));)r=vr.dirname(r);return r}function be(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ce(e);let r=y().harnessRoot?.trim();if(r)return ce(r);let t=vr.join(Nu(),".kynver","harness");return Iu(t)?t:Iu(Ou)?Ou:t}function Ce(e){return vr.join(ce(e),"runs")}function Sr(e){return vr.join(ce(e),"worktrees")}function Ct(){let e=be();return{harnessRoot:e,runsDir:Ce(e),worktreesDir:Sr(e)}}function _t(e,r){return vr.join(e,v(r))}var Ou,sb,_e=U(()=>{"use strict";N();Me();C();Ou=vr.join(Nu(),".openclaw","harness"),sb=new Set(["runs","worktrees"])});import{existsSync as ib,readdirSync as ab,statSync as lb}from"node:fs";import xt from"node:path";function ee(){return Ct()}function L(e){let{runsDir:r}=ee();return _(xt.join(_t(r,v(e)),"run.json"))}function z(){let{runsDir:e}=ee();return Tu(e)}function ns(e){return Tu(Ce(e))}function cb(e){try{return lb(e).isDirectory()}catch{return!1}}function Tu(e){if(!ib(e))return[];let r=[];for(let t of ab(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=xt.join(e,t.name);if(!cb(n))continue;let o=_(xt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function ue(e,r){let{runsDir:t}=ee();return _(xt.join(_t(t,v(e)),"workers",v(r),"worker.json"))}function Ue(e){let{runsDir:r}=ee();se(xt.join(_t(r,e.id),"run.json"),e)}function $(e,r){let{runsDir:t}=ee();se(xt.join(_t(t,e),"workers",r.name,"worker.json"),r)}function E(e){let{harnessRoot:r}=ee();return Cn(r,e)}function Cn(e,r){return _t(Ce(e),v(r))}var D=U(()=>{"use strict";_e();C()});import{existsSync as ub,readdirSync as db}from"node:fs";import pb from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=pb.join(E(e.id),"workers");if(!ub(t))return[...r];for(let n of db(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Lr=U(()=>{"use strict";D();C()});function aa(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 Du(e){let r=e.trim();if(!r)return null;let t=aa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=aa(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=aa(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Mu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Du(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Du(t);return n||t}var Uu=U(()=>{"use strict"});import{existsSync as mb,readFileSync as fb}from"node:fs";function Wu(e){return e==="complete"}function or(e){return Wu(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function ae(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!mb(e))return r;let t=Date.now()+gb,n=new Date(t).toISOString(),o=fb(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let s of o){let i=kt(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)),Wu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Mu(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 gb,wr=U(()=>{"use strict";Uu();C();gb=6e4});function kb(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function yb(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 Rb(e){let r=kb(e[0]);return!!(r&&hb.has(r))}function la(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ca(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function bb(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function vb(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;Lu.has(n)&&(t+=1);continue}r.push(n)}}return r}function Sb(e){let r=!1,t=e.map((o,s)=>{let i=bb(o),a=e[s-1];return a&&Lu.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=vb(t);if(n.length===2){let[o,s]=n;if(ca(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(la(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 ua(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=yb(i.trim());if(!a.length||!Rb(a))return i;let l=Sb(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Bu(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 wb(e){let{pattern:r,target:t}=Bu(e);return r?ca(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:la(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Cb(e){let{pattern:r,target:t}=Bu(e);if(!r)return null;if(ca(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&la(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function _b(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 xb(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 da(e){let r=e.meta?.trim()||(e.command?xb(e.command):null)||null;if(r){let t=wb(r),n=_b(t);if(n)return n;let o=Cb(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=ua(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 hb,Lu,Hu=U(()=>{"use strict";hb=new Set(["rg","ripgrep","grep"]),Lu=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function _n(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Ib(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 xn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ob(e){let r=e.metadata;if(!xn(r))return null;let t=r.vulnerabilities;if(!xn(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function Nb(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function Tb(e,r){let t=e.error;if(xn(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?_n(o.split(`
|
|
8
|
+
`).find(Boolean)??o,160):"npm audit failed"}function Db(e){let r=`${e.stdout}
|
|
9
|
+
${e.stderr}`.trim(),t=Ib(r);if(!t||!xn(t)){let o=_n(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(xn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Tb(t,e.stderr)}`};let n=Ob(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Nb(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Mb(e){return Pb.test(e)}function Ub(e){return Eb.test(e)}function Wb(e){let r=da({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&&Ab.test(n)){let i=_n(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ua(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=_n(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 pa(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Mb(e.command)){let i=r.trim()||n.trim()||t.trim();return Db({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ub(e.command))return Wb({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=da({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=_n(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Pb,Eb,Ab,Fu=U(()=>{"use strict";Hu();Pb=/\bnpm\s+audit\b/i,Eb=/\b(rg|ripgrep)\b/i,Ab=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Lb,readFileSync as Bb}from"node:fs";function Hb(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function $u(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Fb(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 Ku(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 $b(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Pt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Lb(e))return r;let t=Bb(e,"utf8").split(`
|
|
10
|
+
`).filter(Boolean);for(let n of t){let o=kt(n);if(!o)continue;let s=Hb(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let l=a.find(c=>c?.type==="tool_use");l&&(r.currentTool=String(l.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,l=$u(a);l&&(r.currentTool=l)}let i=Ku(o);i&&$b(r,pa({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Fb(r,o)}return r}function Kb(e){let r=Ku(e);if(!r)return;let t=pa({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Yo(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 ju(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] ${Yo(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"?Kb(e):void 0;if(t)return t;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:void 0,o=$u(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Yo(String(e.result||""))}`.trim()}var Pn=U(()=>{"use strict";Fu();C()});function Vb(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function os(e){let r=(e??"").trim();if(!r)return null;for(let t of jb)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Vb(r)}`};return null}var jb,ma=U(()=>{"use strict";jb=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Vu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Gb(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Yb(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Vu(e.head)}function Jb(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 Et(e){if(e.alive||Gb(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Vu(e.headCommit)??Yb(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:Jb(s,r,t)}}var ss=U(()=>{"use strict"});function En(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function qb(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 zb(e){if(En(e.headCommit)||En(e.prUrl)||En(e.artifactBundlePath)||En(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&En(r.head))}function At(e){return qb(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:zb(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 Gu(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var is=U(()=>{"use strict"});function fa(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 Yu(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function It(e){let r=e.trim();if(!r)return null;let t=fa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=fa(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=fa(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Yu(l);for(let u of n){let d=Yu(u);d>c&&(l=u,c=d)}return l}var as=U(()=>{"use strict"});function Ju(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 qu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Xb(e){return new Set(e.map(r=>qu(Ju(r)??r)).filter(Boolean))}function zu(e,r,t){let n=Ju(e)??e;if(!n)return"unrelated";let o=qu(n);return Xb(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Xu=U(()=>{"use strict"});function Ot(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Qb(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Br(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ot(e)}function ls(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Qu(e){let r=null;if(typeof e=="string"){let o=It(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=Br(String(s.prUrl??s.pr_url??"")),a=Ot(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ot(s.mergeCommit??s.merge_commit),reason:Ot(s.reason)})}return n}function Zu(e,r){let t=[],n=Br(Ot(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Br(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function ed(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(!Qb(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?Br(Ot(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Br(r.targetPrUrls[0]):null):null;if(s){let d=Zu(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let g of d)if(g!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${g} instead of canonical target ${s}`}}let m=Qu(n).find(g=>g.prUrl===s);if(!m||m.outcome!=="merged"&&!(m.reason?.trim()&&(m.outcome==="skipped"||m.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Qu(n),a=new Map(i.map(d=>[ls(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>ls(Br(d)??d)).filter(Boolean)),c=Zu(t,n);if(r.landingOnly)for(let d of c){let p=a.get(ls(d)),f=zu(d,r.targetPrUrls,p);if(!(f==="contract"||f==="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 p=ls(Br(d)??d),f=a.get(p);if(!f){u.push(p);continue}f.outcome!=="merged"&&!f.reason?.trim()&&u.push(p)}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 rd(e){if(e.blocked)return e.detail??e.reason}var td=U(()=>{"use strict";as();Xu()});function ev(e){let r=Date.now();if(e.completionBlocker&&!nd(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&tv(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=At(o);if(s.blocked){let i=Gu(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=ed({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=rd(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(rv(e))return{state:"done",reason:"empty abandoned worker record"};let o=os(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Et({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>Zb)return{state:"needs_attention",reason:`no first stream event ${Qi(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Nt?{state:"stale",reason:`no log/event/heartbeat activity for ${Qi(n)}s`}:{state:"ok",reason:"recent activity"}}function nd(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function rv(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 tv(e){let r=null;if(typeof e=="string"?r=It(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 nv(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??or(t))}function M(e,r={}){let t=Pt(e.stdoutPath),n=ae(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=nv(e,t.finalResult,n),i=o?!1:F(e.pid),a=Jo(e.stdoutPath),l=Jo(e.stderrPath),c=Jo(e.heartbeatPath),u=Rn(e.worktreePath),d=Xo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),p=hu([t.lastEventAt,n.lastHeartbeatAt,qo(e.stdoutPath),qo(e.stderrPath),qo(e.heartbeatPath)]),f=t.error||!i&&!s&&zo(e.stderrPath,10).trim()||void 0,m=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=nd(m)?null:m,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=ev({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:f,changedFiles:u,gitAncestry:d,completionBlocker:g,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=g||h.state==="blocked"?"blocked":o||h.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:R,attention:h,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,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.provider??e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Tt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function An(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 Zb,Nt,X=U(()=>{"use strict";wr();Pn();ma();ss();we();is();td();as();C();Zb=18e4,Nt=6e5});import{readFileSync as ov}from"node:fs";function sv(e){if(!e||process.platform!=="linux")return null;try{return ov(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function cs(e){if(!e.pid||process.platform!=="linux")return!0;let r=sv(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 Dt(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=M(e);return r.alive&&!cs(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var In=U(()=>{"use strict";X()});import sd from"node:os";import iv from"node:path";function od(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function av(e=y(),r,t){let n=od(e.perWorkerMemBytes,On),o=od(e.memReserveBytes,Nn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Tn)),i=ds({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??sd.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function ga(e,r={}){let t=r.perWorkerMemBytes??On,n=r.memReserveBytes??Nn,o=r.memUtilization??Tn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,us)}function lv(){return vn()}function cv(e){let r=0;for(let t of fe(e)){let n=_(iv.join(E(e.id),"workers",v(t),"worker.json"),void 0);!n||!Dt(n)||r++}return r}function uv(){let e=0;for(let r of z())e+=cv(r);return e}function sr(e){let r=e.config??y(),t=e.totalMemBytes??sd.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=av(r,e.configuredMaxWorkersOverride,t),c=Ke(r),u=e.freeMemBytes??lv(),d=e.activeWorkers??uv(),p=Math.max(0,Math.floor(t*s)-o),f=Math.max(0,Math.floor(p/n)),m=Math.max(0,Math.floor(Math.max(0,u-o)/n)),g=a,k=nr(c,i??g),h=Math.max(0,Math.min(k,f)),R=Math.max(0,h-d),P=Math.min(R,m),A=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:je({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});A&&!A.ok&&(P=0);let J=null;return P<=0&&(A&&!A.ok?J=A.reason??"disk gate blocked worker admission":d>=h?J=`at worker limit (${d}/${h} running)`:m<=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:g,capacityWorkers:f,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:P,reason:J,...A?{diskGate:A}:{}}}var On,Nn,Tn,us,Mt=U(()=>{"use strict";es();N();Pe();bn();ps();wn();D();Lr();In();C();On=500*1024*1024,Nn=4*1024*1024*1024,Tn=.85,us=64});function Hr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ds(e){let r=e.config??{},t=e.env??process.env,n=Hr(r.perWorkerMemBytes,On),o=Hr(r.memReserveBytes,Nn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Tn)),i=ga(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Hr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Hr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,us),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Hr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,us),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function ha(e={}){let r=e.totalMemBytes??0,t=ga(r,{perWorkerMemBytes:Hr(e.config?.perWorkerMemBytes,On),memReserveBytes:Hr(e.config?.memReserveBytes,Nn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):Tn}),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 ps=U(()=>{"use strict";Mt()});import{existsSync as id,mkdirSync as dv,readFileSync as ad,writeFileSync as pv}from"node:fs";import{homedir as mv}from"node:os";import ld from"node:path";function ka(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 fv(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
11
11
|
`){let t=[r.trimEnd(),""];for(let[n,o]of[...e.entries()].sort(([s],[i])=>s.localeCompare(i))){let s=o.includes(" ")||o.includes("#")||o.includes('"')?`"${o.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:o;t.push(`${n}=${s}`)}return t.push(""),t.join(`
|
|
12
|
-
`)}function
|
|
13
|
-
`)}function
|
|
14
|
-
`,{mode:384})}function
|
|
15
|
-
`,{mode:384})}function oe(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Ln().apiKey}function Wn(e){fd({...Ln(),apiKey:e})}function cd(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Ln();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Br(e,r){fd({...Ln(),runnerToken:r,runnerTokenAgentOsId:e})}function V(e){let r=Hn(e);return r||gs("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function gd(e){return Hn(e)}function Hn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||b().apiBaseUrl;return r?Ze(String(r)):void 0}function bv(e,r){let t=e||cd(r)||(r?void 0:cd(b().agentOsId));if(t)return String(t);let n=process.env.KYNVER_RUNTIME_SECRET||process.env.KYNVER_CRON_SECRET||process.env.OPENCLAW_CRON_SECRET;if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function Ra(e,r,t){let n=bv(e,r);if(n)return{ok:!0,secret:n};let o=oe(),s=Hn(t?.baseUrl);if(o&&r&&s)try{let i=await Lr(r,{baseUrl:s,apiKey:o});return Br(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function J(e,r,t){let n=await Ra(e,r,t);if(n.ok)return n.secret;gs(n.reason)}async function hd(e,r){let t=oe(),n=Hn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Lr(e,{baseUrl:n,apiKey:t});return Br(e,o),o}catch{return null}}async function kd(e,r,t){let n=oe(),o=Hn(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 Lr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Br(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 Lr(e,r){let t=r?.apiKey||oe();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${V(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}async function yd(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||gs("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Lr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Br(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:q(Nt),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 gs(e){console.error(e),process.exit(1)}function hs(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 ks(e){let r=b(),t=$e({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=la({totalMemBytes:gv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=Rv(r,e),s=ya({...r,...yv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!Bn(s.agentOsId).ok&&gs(fs(s.agentOsId)),de(s);let i=_e(process.env,s),a=us(s,e);a.configUpdated&&(s=b());let l,c=oe(),u=s.agentOsId;if(c&&u)try{let d=await Lr(u,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:c});Br(u,d),l="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{l="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:q(ps),config:Tt(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 Rd(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){Wn(r),console.log(JSON.stringify({ok:!0,credentialsPath:q(Nt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(ha(),ld));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:q(Nt)},null,2))}var ms,ps,Nt,hv,kv,xD,_D,N=U(()=>{"use strict";jo();He();C();Pe();gn();ns();yn();Un();ms=ka.join(mv(),".kynver"),ps=ka.join(ms,"config.json"),Nt=ka.join(ms,"credentials"),hv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,kv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);xD=500*1024*1024,_D=4*1024*1024*1024});N();import{mkdirSync as Yy,realpathSync as Jy}from"node:fs";import{fileURLToPath as WO}from"node:url";N();C();ha();import vv from"node:os";function Sv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Ze(String(r)):void 0}async function wv(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 ys(e){let r=Sv(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),oe()||(typeof e.apiKey=="string"?Wn(e.apiKey):(await ga({...e,apiBaseUrl:r})).ok||process.exit(1));let t=oe();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await wv(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 ks(o),console.log(""),console.log(` Bootstrap complete \u2014 ${vv.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`.)")}N();import GA from"node:os";N();He();N();import xv from"node:path";import{homedir as _v}from"node:os";N();jo();He();import bd from"node:path";function Cv(e){return bd.resolve(mt(e.trim()))}function Dt(e,r,t){let n=e?.trim();return n?{repo:Cv(n),source:r,persistedInConfig:t}:null}function vd(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function je(e={}){let r=e.env??process.env,t=e.config??b(),n=Dt(t.defaultRepo,"config",!0);if(n)return n;let o=Dt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Dt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||vd(ft({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Sd(e={}){let r=e.env??process.env,t=e.config??b(),n=Dt(t.defaultRepo,"config",!0);if(n)return n;let o=Dt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Dt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||vd(Ko({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function wd(e,r){let t={...r??b(),defaultRepo:Re(bd.resolve(e))};return de(t),t}function Fn(e){return{defaultRepo:q(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var ba=xv.join(_v(),".kynver","config.json");function $n(e){let r=b(),t=Sd({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(ba),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(ba),resolved:Fn(t),config:Tt(r)};let n=wd(t.repo,r),o=Fn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(ba),resolved:o,config:Tt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Cd(e=!1){let r=$n();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 xd(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}function De(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}import{mkdirSync as Pv,readFileSync as Ev,renameSync as Av,writeFileSync as Iv}from"node:fs";import{homedir as Ov}from"node:os";import Pd from"node:path";function _d(e){return JSON.stringify(va(e))}function va(e){if(Array.isArray(e))return e.map(va);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=va(e[t]);return r}return e}function Sa(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 Kn(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 Ed(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Pd.join(Ov(),".kynver",`instruction-bundle-${r}.json`)}function Ad(e,r){try{let t=Ed(e);Pv(Pd.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Iv(n,JSON.stringify(r),"utf8"),Av(n,t)}catch{}}function Id(e){try{let r=Ev(Ed(e),"utf8"),t=JSON.parse(r);return Kn(t)?t:null}catch{return null}}var Nv="embedded-1",Tv=[{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"}],Dv={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
12
|
+
`)}function Fr(e=ge){return id(e)?ka(ad(e,"utf8")):new Map}function Dn(e=ge,r={}){let t=Fr(e),n=0,o=0;for(let[s,i]of t){if(!r.override&&process.env[s]!=null){o++;continue}process.env[s]=i,n++}return{path:e,loaded:n,skipped:o}}function ms(e,r={}){let t=r.filePath??ge,n=id(t)?ad(t,"utf8"):"",o=ka(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 p=o.get(u);o.set(u,d),p!==d&&s.push(u)}let a=ka(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=fv(o);return l&&(dv(ld.dirname(t),{recursive:!0}),pv(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var ge,Ve=U(()=>{"use strict";ge=ld.join(mv(),".kynver",".env")});var ya,Mn=U(()=>{"use strict";ya="1.5G"});import{spawnSync as gv}from"node:child_process";function Wn(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:Un!==void 0?Un:process.platform!=="linux"?(Un=!1,!1):(Un=gv("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,Un)}function Ra(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??ya,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 Un,fs=U(()=>{"use strict";Mn()});import{realpathSync as hv}from"node:fs";function Ut(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 hv.native(t)}catch{return t}}function ud(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var gs=U(()=>{"use strict"});import{existsSync as kv,mkdirSync as yv,writeFileSync as Rv}from"node:fs";import{homedir as bv}from"node:os";import pd from"node:path";import{spawnSync as dd}from"node:child_process";function vv(){return pd.join(bv(),".config","systemd","user")}function Sv(e){let r=ud(e.kynverBin?.trim()||Ut());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 hs(e,r){if(!Wn())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=vv(),n=pd.join(t,Ln),o=Sv(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."};yv(t,{recursive:!0});let s=kv(n);Rv(n,o,"utf8");let i=dd("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=dd("systemctl",["--user","enable","--now",Ln],{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 ${Ln}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}var Ln,ks=U(()=>{"use strict";fs();gs();Ln="kynver-cron-daemon.service"});import{existsSync as wv,readFileSync as Cv}from"node:fs";function Wt(){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(wv("/proc/version")){let e=Cv("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}function Bn(e){return e==="linux"}var Hn=U(()=>{"use strict"});function md(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}function _v(e){return"keeper"}function fd(e,r,t={}){if(md(t.installSystemd)||md(t["install-systemd"]))return Bn(r)?"systemd":"keeper";let n=e.daemonSupervisionOwner;return n==="systemd"&&Bn(r)?"systemd":n==="keeper"?"keeper":_v(r)}function xv(){return{KYNVER_CRON_DAEMON_PRESENT:"1"}}function ba(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 va(e,r={},t){let n=t??Wt(),o=fd(e,n,r);return{hostKind:n,owner:o,envUpdates:xv(),guidance:ba(n,o)}}var ys=U(()=>{"use strict";Hn()});import{existsSync as Pv}from"node:fs";import gd from"node:path";import{homedir as hd}from"node:os";function Ev(){return gd.join(hd(),".config","systemd","user",Ln)}function Sa(){return Pv(Ev())}function Rs(e,r={},t){let n=va(e,r,t),o={};e.daemonSupervisionOwner||(o.daemonSupervisionOwner=n.owner);let s={...e,...o},i=!1;Object.keys(o).length>0&&(de(s),i=!0);let a=ms(n.envUpdates,{filePath:ge});return{policy:n,configPath:B(gd.join(hd(),".kynver","config.json")),envFilePath:B(a.path),envChanged:a.changed,configUpdated:i}}function bs(e,r){return e.daemonSupervisionOwner==="systemd"&&Sa()?"systemd":e.daemonSupervisionOwner??"keeper"}var Fn=U(()=>{"use strict";Ve();Me();N();ks();ys()});var yd={};yR(yd,{runDeviceLogin:()=>wa});import kd from"node:os";function Av(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||y().apiBaseUrl;return r?er(String(r)):void 0}async function Iv(e){await new Promise(r=>setTimeout(r,e))}async function wa(e){let r=Av(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=`${kd.hostname()} (${kd.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 Iv(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?($n(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 Ca=U(()=>{"use strict";N();C()});import{existsSync as bd,mkdirSync as vd,readFileSync as _a,writeFileSync as Sd}from"node:fs";import{homedir as Ov,totalmem as Nv}from"node:os";import xa from"node:path";import Tv from"node:os";function Kn(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return Mv.has(t)?{ok:!1,value:r,reason:"placeholder"}:Dv.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function ws(e){let r=Kn(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 y(){if(!bd(vs))return{};try{return JSON.parse(_a(vs,"utf8"))}catch{return{}}}function de(e){vd(Ss,{recursive:!0}),Sd(vs,`${JSON.stringify(Pa(e),null,2)}
|
|
14
|
+
`,{mode:384})}function Pa(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Re(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Re(e.defaultRepo.trim())}:{}}}function Lt(e){return Pa(e)}function Uv(e,r){let t=jn(),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"?bt()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||Qo()?.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 Wv(e,r,t=Nv()){let n=typeof r.maxWorkers=="string"?r.maxWorkers:typeof r.maxConcurrentWorkers=="string"?r.maxConcurrentWorkers:void 0,o=typeof r.boxKind=="string"?r.boxKind:typeof r["box-kind"]=="string"?String(r["box-kind"]):void 0,s=xe(process.env,{...e,...o?{boxKind:vt(o)}:{}}).boxKind,i=je({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=ha({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:nr(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 St(s,l)?{maxConcurrentWorkers:na(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}:{maxConcurrentWorkers:nr(s,l),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}}return{maxConcurrentWorkers:na(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function jn(){if(!bd(ir))return{};try{return JSON.parse(_a(ir,"utf8"))}catch{return{}}}function wd(e){vd(Ss,{recursive:!0}),Sd(ir,`${JSON.stringify(e,null,2)}
|
|
15
|
+
`,{mode:384})}function Q(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:jn().apiKey}function $n(e){wd({...jn(),apiKey:e})}function Rd(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=jn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Cr(e,r){wd({...jn(),runnerToken:r,runnerTokenAgentOsId:e})}function K(e){let r=Vn(e);return r||Ee("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Cd(e){return Vn(e)}function Vn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||y().apiBaseUrl;return r?er(String(r)):void 0}function Lv(e,r){let t=e||Rd(r)||(r?void 0:Rd(y().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 Ea(e,r,t){let n=Lv(e,r);if(n)return{ok:!0,secret:n};let o=Q(),s=Vn(t?.baseUrl);if(o&&r&&s)try{let i=await $r(r,{baseUrl:s,apiKey:o});return Cr(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 q(e,r,t){let n=await Ea(e,r,t);if(n.ok)return n.secret;Ee(n.reason)}async function _d(e,r){let t=Q(),n=Vn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await $r(e,{baseUrl:n,apiKey:t});return Cr(e,o),o}catch{return null}}async function xd(e,r,t){let n=Q(),o=Vn(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 $r(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Cr(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 $r(e,r){let t=r?.apiKey||Q();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 Pd(e){let r=(e.agentOsId?String(e.agentOsId):y().agentOsId)||"";r||Ee("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await $r(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Cr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:B(ir),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)}}async function Ed(e){let r=(e.agentOsId?String(e.agentOsId):y().agentOsId)||"";r||Ee("runner credential list requires --agent-os-id or agentOsId in ~/.kynver/config.json");let t=Q();t||Ee("API key required \u2014 run `kynver login` first");let o=`${K(e.baseUrl?String(e.baseUrl):void 0)}/api/agent-os/by-id/${encodeURIComponent(r)}/runner-credentials`;try{let s=await fetch(o,{headers:{Authorization:`Bearer ${t}`}}),i=await s.text(),a=JSON.parse(i);s.ok||(console.error(`runner credential list failed (${s.status}): ${a?.error??i.slice(0,200)}`),process.exit(1)),console.log(JSON.stringify({ok:!0,agentOsId:r,credentials:a.credentials??[]},null,2))}catch(s){console.error(s instanceof Error?s.message:String(s)),process.exit(1)}}async function Ad(e){let r=(e.agentOsId?String(e.agentOsId):y().agentOsId)||"";r||Ee("runner credential revoke requires --agent-os-id or agentOsId in ~/.kynver/config.json");let t=e.tokenId?String(e.tokenId):"";t||Ee("runner credential revoke requires --token-id <tokenId>");let n=Q();n||Ee("API key required \u2014 run `kynver login` first");let s=`${K(e.baseUrl?String(e.baseUrl):void 0)}/api/agent-os/by-id/${encodeURIComponent(r)}/runner-credentials`;try{let i=await fetch(s,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({tokenId:t})}),a=await i.text(),l=JSON.parse(a);i.ok||(console.error(`runner credential revoke failed (${i.status}): ${l?.error??a.slice(0,200)}`),process.exit(1)),console.log(JSON.stringify({ok:!0,agentOsId:r,tokenId:t,revoked:!0},null,2))}catch(i){console.error(i instanceof Error?i.message:String(i)),process.exit(1)}}async function Id(e){let r=(e.agentOsId?String(e.agentOsId):y().agentOsId)||"";r||Ee("runner credential rotate requires --agent-os-id or agentOsId in ~/.kynver/config.json");let t=e.tokenId?String(e.tokenId):"";t||Ee("runner credential rotate requires --token-id <tokenId>");let n=Q();n||Ee("API key required \u2014 run `kynver login` first");let s=`${K(e.baseUrl?String(e.baseUrl):void 0)}/api/agent-os/by-id/${encodeURIComponent(r)}/runner-credentials`;try{let i=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({tokenId:t})}),a=await i.text(),l=JSON.parse(a);(!i.ok||!l?.token)&&(console.error(`runner credential rotate failed (${i.status}): ${l?.error??a.slice(0,200)}`),process.exit(1)),Cr(r,l.token),console.log(JSON.stringify({ok:!0,agentOsId:r,tokenId:l.tokenId,tokenPrefix:`${l.token.slice(0,12)}\u2026`,expiresAt:l.expiresAt??null,credentialsPath:B(ir),note:"New token saved to ~/.kynver/credentials."},null,2))}catch(i){console.error(i instanceof Error?i.message:String(i)),process.exit(1)}}function Od(e){let r=y().agentOsId,t=(e.agentOsId?String(e.agentOsId):r)||"",n=process.env.KYNVER_RUNNER_TOKEN?.trim(),o=(()=>{try{let u=_a(ir,"utf8");return JSON.parse(u)}catch{return{}}})(),s=o.runnerToken,i=o.runnerTokenAgentOsId,a=n||s,l=a?.startsWith("krc1.")??!1,c=!t||!i||i===t;console.log(JSON.stringify({ok:!0,agentOsId:t||r||null,source:n?"env:KYNVER_RUNNER_TOKEN":s?"credentials-file":"none",hasToken:!!a,isScoped:l,tokenPrefix:a?`${a.slice(0,12)}\u2026`:null,storedAgentOsId:i??null,boundToRequestedWorkspace:c,credentialsPath:B(ir),...c?{}:{warning:`Stored token is bound to workspace ${i??"(unknown)"} but ${t} was requested. Run \`kynver runner credential --agent-os-id ${t}\` to mint a new one.`}},null,2))}function Ee(e){console.error(e),process.exit(1)}function Gn(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 Cs(e){let r=y(),t=je({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=ha({totalMemBytes:Tv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=Wv(r,e),s=Pa({...r,...Uv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!Kn(s.agentOsId).ok&&Ee(ws(s.agentOsId)),de(s);let i=xe(process.env,s),a=Rs(s,e);a.configUpdated&&(s=y());let l,c=Q(),u=s.agentOsId;if(c&&u)try{let d=await $r(u,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:c});Cr(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:B(vs),config:Lt(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 Nd(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){$n(r),console.log(JSON.stringify({ok:!0,credentialsPath:B(ir)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(Ca(),yd));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:B(ir)},null,2))}var Ss,vs,ir,Dv,Mv,cM,uM,N=U(()=>{"use strict";Zo();Me();C();Pe();bn();ps();wn();Fn();Ss=xa.join(Ov(),".kynver"),vs=xa.join(Ss,"config.json"),ir=xa.join(Ss,"credentials"),Dv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,Mv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);cM=500*1024*1024,uM=4*1024*1024*1024});N();import{mkdirSync as pR,realpathSync as bN}from"node:fs";import{fileURLToPath as vN}from"node:url";N();C();Ca();import Bv from"node:os";function Hv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||y().apiBaseUrl;return r?er(String(r)):void 0}async function Fv(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 _s(e){let r=Hv(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)),Q()||(typeof e.apiKey=="string"?$n(e.apiKey):(await wa({...e,apiBaseUrl:r})).ok||process.exit(1));let t=Q();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await Fv(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 Cs(o),console.log(""),console.log(` Bootstrap complete \u2014 ${Bv.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`.)")}N();import mI from"node:os";N();Me();N();import Kv from"node:path";import{homedir as jv}from"node:os";N();Zo();Me();import Td from"node:path";function $v(e){return Td.resolve(Rt(e.trim()))}function Bt(e,r,t){let n=e?.trim();return n?{repo:$v(n),source:r,persistedInConfig:t}:null}function Dd(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ae(e={}){let r=e.env??process.env,t=e.config??y(),n=Bt(t.defaultRepo,"config",!0);if(n)return n;let o=Bt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Bt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||Dd(bt({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Md(e={}){let r=e.env??process.env,t=e.config??y(),n=Bt(t.defaultRepo,"config",!0);if(n)return n;let o=Bt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Bt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||Dd(Qo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Ud(e,r){let t={...r??y(),defaultRepo:Re(Td.resolve(e))};return de(t),t}function Yn(e){return{defaultRepo:B(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var Aa=Kv.join(jv(),".kynver","config.json");function Jn(e){let r=y(),t=Md({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:B(Aa),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:B(Aa),resolved:Yn(t),config:Lt(r)};let n=Ud(t.repo,r),o=Yn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:B(Aa),resolved:o,config:Lt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Wd(e=!1){let r=Jn();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 We(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 Vv,readFileSync as Gv,renameSync as Yv,writeFileSync as Jv}from"node:fs";import{homedir as qv}from"node:os";import Hd from"node:path";function Bd(e){return JSON.stringify(Ia(e))}function Ia(e){if(Array.isArray(e))return e.map(Ia);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=Ia(e[t]);return r}return e}function Oa(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 qn(e){if(!e||typeof e!="object")return!1;let r=e;if(typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.bundle;return!(!t||typeof t!="object"||typeof t.version!="string"||!t.version||typeof t.generatedAt!="string"||!Array.isArray(t.personas)||!t.instructions||typeof t.instructions!="object"||!t.policyThresholds||typeof t.policyThresholds!="object")}function Fd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Hd.join(qv(),".kynver",`instruction-bundle-${r}.json`)}function $d(e,r){try{let t=Fd(e);Vv(Hd.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Jv(n,JSON.stringify(r),"utf8"),Yv(n,t)}catch{}}function Kd(e){try{let r=Gv(Fd(e),"utf8"),t=JSON.parse(r);return qn(t)?t:null}catch{return null}}var zv="embedded-1",Xv=[{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"}],Qv={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
16
16
|
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
17
17
|
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
18
18
|
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
|
19
|
-
`)},Mv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:Nv,generatedAt:"1970-01-01T00:00:00.000Z",personas:Tv,instructions:Dv,policyThresholds:Mv};var jn=Mt,Od="embedded";function Hr(){return jn.version}function vr(){return Od}function Nd(e,r){jn=e,Od=r}function Vn(e){let r=jn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function Ut(e,r){let t=jn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Td(e){if(!e)return null;let r=e.trim().toLowerCase();return jn.personas.find(t=>t.slug===r)??null}import{createPublicKey as Wv,verify as Bv}from"node:crypto";var Uv={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Dd(e,r=process.env){let t=Sa(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=Uv[e];return n?Sa(n):null}var Lv=Buffer.from("302a300506032b6570032100","hex");function Hv(e){return Wv({key:Buffer.concat([Lv,Buffer.from(e)]),format:"der",type:"spki"})}function Fv(e,r){if(!Kn(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(_d(e.bundle),"utf8");return Bv(null,n,Hv(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 Md(e,r=process.env){if(!Kn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Dd(e.publicKeyId,r);return t?Fv(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var $v=15*6e4,Kv=1e4,sr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Yn(e,r){console.error(JSON.stringify({event:e,...r}))}function Ud(e,r,t){let n=Md(e);return n.ok?(Nd(n.bundle,r),r==="server"&&Ad(t,e),!0):(Yn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Gn(e){if(sr.diskCacheTried)return!1;sr.diskCacheTried=!0;let r=Id(e);return r?Ud(r,"disk",e):!1}async function Wd(e){let r=e.nowMs??Date.now(),t=()=>({source:vr(),version:Hr(),updated:!1});if(!e.force&&r-sr.lastAttemptAtMs<$v)return t();sr.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return vr()==="embedded"&&Gn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Kv);try{let l=De(o);delete l["Content-Type"],sr.etag&&vr()==="server"&&(l["If-None-Match"]=sr.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 sr.routeMissingLogged||(sr.routeMissingLogged=!0,Yn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),vr()==="embedded"&&Gn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Yn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),vr()==="embedded"&&Gn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Ud(u,"server",e.agentOsId)?vr()==="embedded"&&Gn(e.agentOsId)?{...t(),updated:!0}:t():(sr.etag=c.headers.get("etag"),Yn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Hr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Yn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),vr()==="embedded"&&Gn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}N();Pe();gn();ns();import jv from"node:os";function Bd(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Ld(e=b(),r=process.env){let t=_e(r,e),n=ts({config:e,totalMemBytes:jv.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup --box-kind forge|ghost` before starting the daemon so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=tr(t.boxKind,i);ht(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Bd("warn",c);for(let c of s)Bd("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as Vv,readFileSync as Gv,renameSync as Yv,writeFileSync as Jv}from"node:fs";import{homedir as qv}from"node:os";import Hd from"node:path";function Fd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Hd.join(qv(),".kynver",`daemon-heartbeat-${r}.json`)}function $d(e){try{let r=Fd(e.agentOsId);Vv(Hd.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}`;Jv(n,JSON.stringify(t),"utf8"),Yv(n,r)}catch{}}function Kd(e){try{let r=Gv(Fd(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function jd(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function zv(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Wt(){process.platform==="win32"&&(zv("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)))}N();import{existsSync as Xv}from"node:fs";import{homedir as Qv}from"node:os";import Zv from"node:path";function Vd(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 Jn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function Sr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Zv.join(Qv(),".kynver","agent-os-cron.json")}function eS(e=Sr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function rS(){let e=b();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function wa(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function ir(){let e=Sr(),r=eS(e),t=rS(),n=wa(),o=!!(t&&n),s=Xv(e),i=o&&(s||Vd("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:Vd("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Jn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Jn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Jn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Jn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Jn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function Rs(e=ir()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function tS(e){return e.replace(/\/+$/,"")}async function Gd(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${tS(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:De(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a,url:n}}C();import{closeSync as nS,existsSync as Ca,openSync as oS,readFileSync as sS,unlinkSync as Yd,writeFileSync as iS}from"node:fs";var aS=10*6e4;function Jd(e){if(!Ca(e))return null;try{let r=JSON.parse(sS(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function lS(e){let r=Jd(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>aS}function qd(e){if(Ca(e)&&!lS(e)){let r=Jd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(Ca(e))try{Yd(e)}catch{}try{let r=oS(e,"wx");return iS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),nS(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function zd(e){try{Yd(e)}catch{}}var cS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function uS(e){return cS.test(e.trim())}function dS(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 qn(e,r,t,n){let o=e.trim();return o==="*"?!0:dS(o,t,n).has(r)}function pS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return qn(n,r.getUTCMinutes(),0,59)&&qn(o,r.getUTCHours(),0,23)&&qn(s,r.getUTCDate(),1,31)&&qn(i,r.getUTCMonth()+1,1,12)&&qn(a,r.getUTCDay(),0,6)}var mS=366*24*60;function fS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Xd(e,r){if(!uS(e))return null;let t=fS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<mS;n++){if(pS(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Qd(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=Xd(e.cron.trim(),r);return t?t.toISOString():null}return null}function xa(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Xd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as gS}from"node:fs";async function Zd(e){try{return await gS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function hS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Fr(e=Sr()){let r=await Zd(e);return hS(r)}async function ep(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 rp(e,r=Sr()){let t=await Fr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await ep(r,t)}async function tp(e=Sr()){return await Zd(e)!==null?{created:!1}:(await ep(e,[]),{created:!0})}import{randomBytes as kS}from"node:crypto";import{promises as zn}from"node:fs";import yS from"node:path";var bs={version:1,jobs:{}};async function RS(e){try{return await zn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function bS(e){if(!e)return{...bs,jobs:{...bs.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...bs,jobs:{}}:r}catch{return{...bs,jobs:{}}}}async function vs(e){let r=await RS(e);return bS(r)}async function vS(e,r){await zn.mkdir(yS.dirname(e),{recursive:!0});let t=kS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await zn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
20
|
-
`,"utf8");try{await zn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await zn.unlink(n).catch(()=>{})}}async function np(e,r){await vS(e,r)}function op(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 SS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function wS(e){return!!e.completedAt}function CS(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 xS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Qd(e.spec,t);return r.nextFireAt=n,n}function _S(e,r,t,n){if(e.paused||wS(r)||SS(r,t)||!CS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function PS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=xa(e.spec,t))}async function Bt(e={}){let r=e.env??ir(),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=qd(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 Fr(r.storePath),i=e.agentOsIdFilter?s.filter(p=>p.spec.target.agentOsId===e.agentOsIdFilter):s,a=await vs(r.statePath),l=[];for(let p of i){let g=op(a,p.providerScheduleId);xS(p,g,t),_S(p,g,n,r)&&l.push({entry:p,job:g})}l.sort((p,g)=>{let k=Date.parse(p.job.nextFireAt??"")||0,h=Date.parse(g.job.nextFireAt??"")||0;return k-h});let c=0,u=0,d=0,f=r.maxCatchUpPerTick,m=[];for(let{entry:p,job:g}of l){if(r.missedRunPolicy==="skip"&&p.spec.scheduleKind==="cron"){let k=Date.parse(g.nextFireAt??"");if(!Number.isNaN(k)&&k<n-r.tickIntervalMs*2){g.nextFireAt=xa(p.spec,t),d++;continue}}if(f<=0){d++;continue}g.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),g.lastAttemptAt=t.toISOString(),PS(p,g,t);try{let k=await Gd({entry:p,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});g.inflightUntil=null,k.ok?(g.lastFiredAt=t.toISOString(),g.consecutiveFailures=0,p.spec.scheduleKind==="runAt"&&(g.completedAt=t.toISOString(),g.nextFireAt=null),c++,f--):(g.consecutiveFailures+=1,u++,m.push({providerScheduleId:p.providerScheduleId,callbackPath:p.spec.callbackPath,url:k.url,status:k.status,body:k.body}))}catch(k){g.inflightUntil=null,g.consecutiveFailures+=1,u++,m.push({providerScheduleId:p.providerScheduleId,callbackPath:p.spec.callbackPath,error:k instanceof Error?k.message:String(k)})}}return await np(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u,...m.length?{errorDetails:m}:{}}}finally{zd(r.lockPath)}}Ke();C();D();import sp from"node:path";var ip="mesh-cron-lease.json";function Ss(e){return x(sp.join(E(e),ip),null)}function ap(e,r){se(sp.join(E(e),ip),{...r,updatedAt:new Date().toISOString()})}function lp(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()}}C();import IE from"node:path";D();xn();C();import ES from"node:path";function AS(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 ws(e){let r=B(e),t=[];for(let n of Object.keys(r.workers||{})){let o=x(ES.join(E(r.id),"workers",v(n),"worker.json"),void 0);!o?.taskId||!Et(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...AS(o)})}return t}N();N();function cp(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 up(e,r){let t=cp(r),n=new AbortController,o;try{return await Promise.race([e(n.signal),new Promise((s,i)=>{o=setTimeout(()=>{n.abort(),i(new Error(`callback timeout after ${t}ms`))},t)})])}finally{o&&clearTimeout(o)}}function dp(e,r){let t=cp(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function $r(e,r,t,n){try{return await up(async o=>{let s=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return dp(o,n?.timeoutMs)}}async function re(e,r,t,n){let o=await $r(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await kd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await $r(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Cs(e,r,t){try{return await up(async n=>{let o=await fetch(e,{method:"GET",headers:De(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return dp(n,t?.timeoutMs)}}N();function pp(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function _a(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function mp(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"],OS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function NS(e){return IS.includes(e)}function TS(e){return OS.includes(e)}function fp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||NS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:TS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var gp=Mt.personas.map(fp),DS=new Map(gp.map(e=>[e.slug,e]));function MS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=DS.get(r)??null,n=Td(r);if(!n)return t;let o=fp(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function Pa(e){return MS(e)?.defaultRoleLane??null}function hp(){return gp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function kp(e){return(e??"").trim().toLowerCase()}function US(e){switch(kp(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 WS(e){let r=kp(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=US(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function yp(e){return WS(e)??"any"}yn();At();D();D();function xs(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ea(e){return e.toLowerCase()}function BS(e){let r=xs(e,"roleLane");if(r)return r;let t=Ea(xs(e,"executorRef")),n=Ea(xs(e,"title")),o=Ea(xs(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=Pa(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Rp(e){let r=BS(e);return r?{...e,roleLane:r}:e}N();var ar="cursor",LS=new Set(["claude","opus","anthropic"]),HS=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Aa(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Kr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return LS.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ia(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Kr(r))return!0;let t=Aa(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Aa(e,"description");if(HS.some(s=>s.test(n)))return!0;let o=Aa(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function FS(e,r){return{provider:ar,model:Oa,rule:`policy:cursor_default${r}`,requestedModel:e}}function bp(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Kr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Ia(t)||r.rule==="explicit:cli"&&Kr(r.provider)||!Kr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return FS(r.model,o)}function _s(e,r=ar){let t=e?.trim();return t?Kr(t)?ar:t==="codex"?"codex":t:r}var vp={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function Lt(e){return vp[e]}function Sp(){return Object.values(vp)}import{existsSync as KS}from"node:fs";import{homedir as jS}from"node:os";import xp from"node:path";import{createHash as wp}from"node:crypto";import{statSync as $S}from"node:fs";import{spawnSync as Cp}from"node:child_process";function Ve(e){try{let r=$S(e),t=`${e}|${r.size}|${r.mtimeMs}`;return wp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Ht(e){return wp("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ee(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Ge(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Cp(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 Ps(e,r,t={}){let n=t.timeoutMs??8e3;try{return Cp(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 VS="codex";function GS(){let e=jS();return[xp.join(e,".codex","auth.json"),xp.join(e,".config","codex","auth.json")]}function _p(e=new Date().toISOString()){let r=Ee(VS,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=GS().find(s=>KS(s)),n=Ge(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?Ve(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 YS}from"node:fs";import{homedir as JS}from"node:os";import Na from"node:path";function qS(){let e=process.env.HERMES_HOME?.trim(),r=e?Na.resolve(e):Na.join(JS(),".hermes");return Na.join(r,"auth.json")}function Es(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ge(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=qS(),o=YS(n),s=Ps(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?Ve(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 Ft(e=new Date().toISOString()){let r=_p(e);if(r.ready)return{...r,path:"codex_cli"};let t=Es(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 Pp=["low","medium","high"],Ep={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Ap(e,r){let t=Lt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function zS(e,r){let t=Lt(e.providerId),n=Lt(r.providerId),o=Pp.indexOf(t.costTier)-Pp.indexOf(n.costTier);if(o!==0)return o;let s=Ep[e.binding.authSource]-Ep[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ta(e){let r=Sp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Ap(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(zS)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Ap(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 XS}from"node:fs";import{homedir as QS}from"node:os";import ZS from"node:path";var ew="claude";function rw(){let e=QS();return[ZS.join(e,".claude",".credentials.json")]}function Ip(e=new Date().toISOString()){let r=Ee(ew,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ge(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=rw().find(i=>XS(i)),o=Ps(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?Ve(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 tw}from"node:fs";import{homedir as nw}from"node:os";import ow from"node:path";var sw="agent";function iw(){let e=nw();return[ow.join(e,".config","cursor","auth.json")]}function Op(e=new Date().toISOString()){let r=Ee(sw,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ge(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=iw().find(s=>tw(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Ve(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 aw,readFileSync as lw}from"node:fs";import{homedir as cw}from"node:os";import Da from"node:path";var uw=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function dw(){let e=process.env.HERMES_HOME?.trim(),r=e?Da.resolve(e):Da.join(cw(),".hermes");return Da.join(r,".env")}function pw(e){try{let r=lw(e,"utf8"),t=[];for(let n of uw)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Np(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ge(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=dw(),o=aw(n),s=o?pw(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?Ve(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 Tp(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ft(r),n={codex:t,cursor:Op(r),claude:Ip(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:Np(r),hermesOpenAiCodex:Es(r),codexAdapterPath:t.path,readyCount:o}}var mw=[/\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],fw=[/\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 Ma(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function gw(e){let r=Ma(e,"executorRef").toLowerCase(),t=Ma(e,"title").toLowerCase(),n=Ma(e,"description").toLowerCase(),o=`${r}
|
|
19
|
+
`)},Zv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Ht={version:zv,generatedAt:"1970-01-01T00:00:00.000Z",personas:Xv,instructions:Qv,policyThresholds:Zv};var zn=Ht,jd="embedded";function Kr(){return zn.version}function _r(){return jd}function Vd(e,r){zn=e,jd=r}function Xn(e){let r=zn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Ht.instructions[e];return typeof t=="string"?t:""}function Ft(e,r){let t=zn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Ht.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Gd(e){if(!e)return null;let r=e.trim().toLowerCase();return zn.personas.find(t=>t.slug===r)??null}import{createPublicKey as rS,verify as tS}from"node:crypto";var eS={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Yd(e,r=process.env){let t=Oa(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=eS[e];return n?Oa(n):null}var nS=Buffer.from("302a300506032b6570032100","hex");function oS(e){return rS({key:Buffer.concat([nS,Buffer.from(e)]),format:"der",type:"spki"})}function sS(e,r){if(!qn(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(Bd(e.bundle),"utf8");return tS(null,n,oS(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 Jd(e,r=process.env){if(!qn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Yd(e.publicKeyId,r);return t?sS(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var iS=15*6e4,aS=1e4,ar={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Zn(e,r){console.error(JSON.stringify({event:e,...r}))}function qd(e,r,t){let n=Jd(e);return n.ok?(Vd(n.bundle,r),r==="server"&&$d(t,e),!0):(Zn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Qn(e){if(ar.diskCacheTried)return!1;ar.diskCacheTried=!0;let r=Kd(e);return r?qd(r,"disk",e):!1}async function zd(e){let r=e.nowMs??Date.now(),t=()=>({source:_r(),version:Kr(),updated:!1});if(!e.force&&r-ar.lastAttemptAtMs<iS)return t();ar.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return _r()==="embedded"&&Qn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),aS);try{let l=We(o);delete l["Content-Type"],ar.etag&&_r()==="server"&&(l["If-None-Match"]=ar.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 ar.routeMissingLogged||(ar.routeMissingLogged=!0,Zn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),_r()==="embedded"&&Qn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Zn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),_r()==="embedded"&&Qn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!qd(u,"server",e.agentOsId)?_r()==="embedded"&&Qn(e.agentOsId)?{...t(),updated:!0}:t():(ar.etag=c.headers.get("etag"),Zn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Kr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Zn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),_r()==="embedded"&&Qn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}N();Pe();bn();ps();import lS from"node:os";function Xd(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Qd(e=y(),r=process.env){let t=xe(r,e),n=ds({config:e,totalMemBytes:lS.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup --box-kind forge|ghost` before starting the daemon so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=nr(t.boxKind,i);St(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Xd("warn",c);for(let c of s)Xd("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as cS,readFileSync as uS,renameSync as dS,writeFileSync as pS}from"node:fs";import{homedir as mS}from"node:os";import Zd from"node:path";function xs(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Zd.join(mS(),".kynver",`daemon-heartbeat-${r}.json`)}function ep(e){try{let r=xs(e.agentOsId);cS(Zd.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}`;pS(n,JSON.stringify(t),"utf8"),dS(n,r)}catch{}}function rp(e){try{let r=uS(xs(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function tp(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function fS(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function $t(){process.platform==="win32"&&(fS("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)))}N();import{existsSync as gS}from"node:fs";import{homedir as hS}from"node:os";import kS from"node:path";function np(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 eo(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function xr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||kS.join(hS(),".kynver","agent-os-cron.json")}function yS(e=xr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function RS(){let e=y();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 Na(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function lr(){let e=xr(),r=yS(e),t=RS(),n=Na(),o=!!(t&&n),s=gS(e),i=o&&(s||np("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:np("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:eo("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:eo("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:eo("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:eo("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:eo("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function Ps(e=lr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function bS(e){return e.replace(/\/+$/,"")}async function op(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${bS(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:We(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,url:n}}C();import{closeSync as vS,existsSync as Ta,openSync as SS,readFileSync as wS,unlinkSync as sp,writeFileSync as CS}from"node:fs";var _S=10*6e4;function ip(e){if(!Ta(e))return null;try{let r=JSON.parse(wS(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function xS(e){let r=ip(e);if(!r||!F(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>_S}function ap(e){if(Ta(e)&&!xS(e)){let r=ip(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(Ta(e))try{sp(e)}catch{}try{let r=SS(e,"wx");return CS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),vS(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function lp(e){try{sp(e)}catch{}}var PS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function ES(e){return PS.test(e.trim())}function AS(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])),p=Math.min(t,Number(c[2]));for(let f=d;f<=p;f+=l)n.add(f);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function ro(e,r,t,n){let o=e.trim();return o==="*"?!0:AS(o,t,n).has(r)}function IS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return ro(n,r.getUTCMinutes(),0,59)&&ro(o,r.getUTCHours(),0,23)&&ro(s,r.getUTCDate(),1,31)&&ro(i,r.getUTCMonth()+1,1,12)&&ro(a,r.getUTCDay(),0,6)}var OS=366*24*60;function NS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function cp(e,r){if(!ES(e))return null;let t=NS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<OS;n++){if(IS(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function up(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=cp(e.cron.trim(),r);return t?t.toISOString():null}return null}function Da(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=cp(e.cron.trim(),r);return t?t.toISOString():null}import{promises as TS}from"node:fs";async function dp(e){try{return await TS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function DS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function jr(e=xr()){let r=await dp(e);return DS(r)}async function pp(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 mp(e,r=xr()){let t=await jr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await pp(r,t)}async function fp(e=xr()){return await dp(e)!==null?{created:!1}:(await pp(e,[]),{created:!0})}import{randomBytes as MS}from"node:crypto";import{promises as to}from"node:fs";import US from"node:path";var Es={version:1,jobs:{}};async function WS(e){try{return await to.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function LS(e){if(!e)return{...Es,jobs:{...Es.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...Es,jobs:{}}:r}catch{return{...Es,jobs:{}}}}async function As(e){let r=await WS(e);return LS(r)}async function BS(e,r){await to.mkdir(US.dirname(e),{recursive:!0});let t=MS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await to.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
20
|
+
`,"utf8");try{await to.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await to.unlink(n).catch(()=>{})}}async function gp(e,r){await BS(e,r)}function hp(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 HS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function FS(e){return!!e.completedAt}function $S(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 KS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=up(e.spec,t);return r.nextFireAt=n,n}function jS(e,r,t,n){if(e.paused||FS(r)||HS(r,t)||!$S(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function VS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Da(e.spec,t))}async function Kt(e={}){let r=e.env??lr(),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=ap(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 jr(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await As(r.statePath),l=[];for(let m of i){let g=hp(a,m.providerScheduleId);KS(m,g,t),jS(m,g,n,r)&&l.push({entry:m,job:g})}l.sort((m,g)=>{let k=Date.parse(m.job.nextFireAt??"")||0,h=Date.parse(g.job.nextFireAt??"")||0;return k-h});let c=0,u=0,d=0,p=r.maxCatchUpPerTick,f=[];for(let{entry:m,job:g}of l){if(r.missedRunPolicy==="skip"&&m.spec.scheduleKind==="cron"){let k=Date.parse(g.nextFireAt??"");if(!Number.isNaN(k)&&k<n-r.tickIntervalMs*2){g.nextFireAt=Da(m.spec,t),d++;continue}}if(p<=0){d++;continue}g.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),g.lastAttemptAt=t.toISOString(),VS(m,g,t);try{let k=await op({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});g.inflightUntil=null,k.ok?(g.lastFiredAt=t.toISOString(),g.consecutiveFailures=0,m.spec.scheduleKind==="runAt"&&(g.completedAt=t.toISOString(),g.nextFireAt=null),c++,p--):(g.consecutiveFailures+=1,u++,f.push({providerScheduleId:m.providerScheduleId,callbackPath:m.spec.callbackPath,url:k.url,status:k.status,body:k.body}))}catch(k){g.inflightUntil=null,g.consecutiveFailures+=1,u++,f.push({providerScheduleId:m.providerScheduleId,callbackPath:m.spec.callbackPath,error:k instanceof Error?k.message:String(k)})}}return await gp(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u,...f.length?{errorDetails:f}:{}}}finally{lp(r.lockPath)}}Ve();C();D();import kp from"node:path";var yp="mesh-cron-lease.json";function Is(e){return _(kp.join(E(e),yp),null)}function Rp(e,r){se(kp.join(E(e),yp),{...r,updatedAt:new Date().toISOString()})}function bp(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()}}C();import XE from"node:path";D();In();C();import GS from"node:path";function YS(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Os(e){let r=L(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(GS.join(E(r.id),"workers",v(n),"worker.json"),void 0);!o?.taskId||!Dt(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...YS(o)})}return t}N();N();function vp(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 Sp(e,r){let t=vp(r),n=new AbortController,o;try{return await Promise.race([e(n.signal),new Promise((s,i)=>{o=setTimeout(()=>{n.abort(),i(new Error(`callback timeout after ${t}ms`))},t)})])}finally{o&&clearTimeout(o)}}function wp(e,r){let t=vp(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Vr(e,r,t,n){try{return await Sp(async o=>{let s=await fetch(e,{method:"POST",headers:We(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return wp(o,n?.timeoutMs)}}async function te(e,r,t,n){let o=await Vr(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await xd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Vr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Ns(e,r,t){try{return await Sp(async n=>{let o=await fetch(e,{method:"GET",headers:We(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return wp(n,t?.timeoutMs)}}N();function Cp(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function Ma(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function _p(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 JS=["implementation","review","landing"],qS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function zS(e){return JS.includes(e)}function XS(e){return qS.includes(e)}function xp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||zS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:XS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Pp=Ht.personas.map(xp),QS=new Map(Pp.map(e=>[e.slug,e]));function ZS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=QS.get(r)??null,n=Gd(r);if(!n)return t;let o=xp(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function Ua(e){return ZS(e)?.defaultRoleLane??null}function Ep(){return Pp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Ap(e){return(e??"").trim().toLowerCase()}function ew(e){switch(Ap(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 rw(e){let r=Ap(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=ew(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Ip(e){return rw(e)??"any"}wn();Mt();D();D();function Ts(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Wa(e){return e.toLowerCase()}function tw(e){let r=Ts(e,"roleLane");if(r)return r;let t=Wa(Ts(e,"executorRef")),n=Wa(Ts(e,"title")),o=Wa(Ts(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=Ua(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Op(e){let r=tw(e);return r?{...e,roleLane:r}:e}N();var cr="cursor",nw=new Set(["claude","opus","anthropic"]),ow=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function La(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Gr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return nw.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ds(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Gr(r))return!0;let t=La(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=La(e,"description");if(ow.some(s=>s.test(n)))return!0;let o=La(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function sw(e,r){return{provider:cr,model:Ba,rule:`policy:cursor_default${r}`,requestedModel:e}}function Np(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Gr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Ds(t)||r.rule==="explicit:cli"&&Gr(r.provider)||!Gr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return sw(r.model,o)}function Ms(e,r=cr){let t=e?.trim();return t?Gr(t)?cr:t==="codex"?"codex":t:r}var Tp={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 jt(e){return Tp[e]}function Dp(){return Object.values(Tp)}import{existsSync as aw}from"node:fs";import{homedir as lw}from"node:os";import Ws from"node:path";import{createHash as Mp}from"node:crypto";import{statSync as iw}from"node:fs";import{spawnSync as Up}from"node:child_process";function Ge(e){try{let r=iw(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Mp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Vt(e){return Mp("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ie(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Ye(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Up(e,r,{encoding:"utf8",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Us(e,r,t={}){let n=t.timeoutMs??8e3;try{return Up(e,r,{stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var cw="codex";function uw(){let e=lw();return[process.env.CODEX_HOME?.trim()?Ws.join(Ws.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Ws.join(e,".codex","auth.json"),Ws.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Wp(e=new Date().toISOString()){let r=Ie(cw,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Vt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=uw().find(s=>aw(s)),n=Ye(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?Ge(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as dw}from"node:fs";import{homedir as pw}from"node:os";import Ha from"node:path";function mw(){let e=process.env.HERMES_HOME?.trim(),r=e?Ha.resolve(e):Ha.join(pw(),".hermes");return Ha.join(r,"auth.json")}function Ls(e=new Date().toISOString()){let r=Ie("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ye(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=mw(),o=dw(n),s=Us(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?Ge(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 Gt(e=new Date().toISOString()){let r=Wp(e);if(r.ready)return{...r,path:"codex_cli"};let t=Ls(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 Lp=["low","medium","high"],Bp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Hp(e,r){let t=jt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function fw(e,r){let t=jt(e.providerId),n=jt(r.providerId),o=Lp.indexOf(t.costTier)-Lp.indexOf(n.costTier);if(o!==0)return o;let s=Bp[e.binding.authSource]-Bp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Fa(e){let r=Dp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Hp(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(fw)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Hp(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 gw}from"node:fs";import{homedir as hw}from"node:os";import kw from"node:path";var yw="claude";function Rw(){let e=hw();return[kw.join(e,".claude",".credentials.json")]}function Fp(e=new Date().toISOString()){let r=Ie(yw,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Vt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ye(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Rw().find(i=>gw(i)),o=Us(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?Ge(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 bw}from"node:fs";import{homedir as vw}from"node:os";import Sw from"node:path";var ww="agent";function Cw(){let e=vw();return[Sw.join(e,".config","cursor","auth.json")]}function $p(e=new Date().toISOString()){let r=Ie(ww,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Vt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ye(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Cw().find(s=>bw(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Ge(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 _w,readFileSync as xw}from"node:fs";import{homedir as Pw}from"node:os";import $a from"node:path";var Ew=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Aw(){let e=process.env.HERMES_HOME?.trim(),r=e?$a.resolve(e):$a.join(Pw(),".hermes");return $a.join(r,".env")}function Iw(e){try{let r=xw(e,"utf8"),t=[];for(let n of Ew)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Kp(e=new Date().toISOString()){let r=Ie("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ye(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Aw(),o=_w(n),s=o?Iw(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?Ge(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 jp(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Gt(r),n={codex:t,cursor:$p(r),claude:Fp(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:Kp(r),hermesOpenAiCodex:Ls(r),codexAdapterPath:t.path,readyCount:o}}var Ow=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],Nw=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function Ka(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Tw(e){let r=Ka(e,"executorRef").toLowerCase(),t=Ka(e,"title").toLowerCase(),n=Ka(e,"description").toLowerCase(),o=`${r}
|
|
21
21
|
${t}
|
|
22
|
-
${n}`;return mw.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":fw.some(s=>s.test(o))?"low":"elevated"}function hw(e){let r=Lt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function kw(e){let r=e.inventory??Tp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function jr(e){let r=hw({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 Dp(e){let r=e.task??{},t=gw(r),n=kw({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ft())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=ar;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Ta({inventory:n,riskClass:t});return jr(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 jr({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 jr({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 jr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Ta({inventory:n,riskClass:t});if(a)return jr({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 jr({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"}})}pt();C();import{closeSync as Mp,openSync as Up}from"node:fs";import{spawn as ww}from"node:child_process";var yw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Rw(e){return e.replace(yw,"")}var bw=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ua(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var vw=new Set(["cursor"]);function Sw(e){let r=e.trim().toLowerCase();return vw.has(r)?"auto":null}function Wa(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Rw(t).trim()||r;return bw.test(o)||!Ua(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 $t(e,r){let t=(e??"").trim();return t?Ua(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 Ba(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Sw(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")`}:Ua(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var Kt="claude-sonnet-4-6",Wp={name:"claude",defaultModel:Kt,preflightModel(e){return Wa(e,Kt)},start(e){let r=Wa(e.model,Kt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Up(e.stdoutPath,"a"),o=Up(e.stderrPath,"a"),s=["ignore",n,o],i=ww("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:er(process.env)}));if(Mp(n),Mp(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}}};pt();C();import{closeSync as Fp,existsSync as Pw,openSync as $p}from"node:fs";import{spawn as Kp}from"node:child_process";pt();C();import{closeSync as Bp,openSync as Lp}from"node:fs";import{spawn as Cw}from"node:child_process";var La=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function xw(){return er({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function _w(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 Hp={name:"hermes-codex",defaultModel:La,preflightModel(e){return $t(e,La)},start(e){let r=$t(e.model,La);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Lp(e.stdoutPath,"a"),o=Lp(e.stderrPath,"a"),s=["ignore",n,o],i=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=_w(t,e.prompt),l=Cw(i,a,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:xw()}));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 Ew(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Vr=Ew();function Aw(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Iw(){return er({...process.env,CI:"1",NO_COLOR:"1"})}function Ow(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Nw(e,r,t){if(!(process.platform!=="win32"&&Pw("/usr/bin/script")))return Kp(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Kp("script",["-qfc",o,"/dev/null"],t)}var jp={name:"codex",defaultModel:Vr,preflightModel(e){return $t(e,Vr)},start(e){if(Ft().path==="hermes_openai_codex")return Hp.start(e);let t=$t(e.model,Vr);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=Aw(),l=Ow(n,e.prompt),c=Nw(a,l,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Iw()}));if(Fp(o),Fp(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 Tw="claude-sonnet-4-6",Oa="composer-2.5";function As(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Vp(e){return e.toLowerCase()}function Fa(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Tw}function Ha(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 Dw(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Oa,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Kt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Gp(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 Mw(e){let r=Vp(As(e,"executorRef")),t=As(e,"title").toLowerCase(),n=As(e,"priority")||"normal",o=Vp(As(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Vr,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:Vr,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 Gp(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Gp(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=Fa();return{model:s,provider:Ha(s),rule:"default:global"}}function Is(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Dw(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Ha(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Mw(e.task);r={...o,requestedModel:o.model}}else{let o=Fa();r={model:o,provider:e.explicitProvider?.trim()||Ha(o),rule:"default:global",requestedModel:o}}let t=bp({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"||Kr(t.provider)&&(e.explicitProviderIsOperatorOverride||Ia(e.task)))return t;let n=Dp({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Vr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Yp(e,r,t){return e||r||t||Fa()||Kt}function Jp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function qp(){return{maxTaskAttempts:Jp(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ut("harness.maxTaskAttempts",4))),dispatchCooldownMs:Jp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ut("harness.dispatchCooldownMs",5e3)))}}N();import Bw from"node:path";D();X();C();var $a="kynver-harness:",zp="@runner:";function Ka(e){return e?.trim()?e.trim():null}function Uw(e){let r=Ka(e);if(!r?.startsWith($a))return null;let t=r.slice($a.length),n=t.indexOf(zp);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function ja(e,r){let t=e.trim(),n=r.trim();return`${$a}${t}${zp}${n}`}function Va(e,r){let t=Ka(r);return t?Uw(e)===t:!1}function Os(e){let r=Ka(e.workerLeaseOwner);return r&&Va(r,e.runId)?r:ja(e.runId,e.runnerId)}import Xp from"node:os";Pe();Pe();import Ww from"node:os";function Ns(e,r){let t=(r??Ww.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function wr(e){return e?.trim()?e.trim():null}function Ye(e={}){let r=e.env??process.env;return{runnerId:wr(r.KYNVER_RUNTIME_ID)??wr(r.OPENCLAW_RUNTIME_ID)??wr(r.HOSTNAME)??Xp.hostname(),hostname:wr(r.HOSTNAME)??Xp.hostname(),profile:wr(r.KYNVER_RUNNER_PROFILE)??wr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:wr(r.KYNVER_HARNESS_REPO)??wr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Hr()}}N();async function jt(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=V(e.baseUrl);try{let o=await J(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await re(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}D();async function Ts(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 jt({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 Qp(e,r){return x(Bw.join(E(e),"workers",v(r),"worker.json"),void 0)}async function Ds(e,r){let t=B(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=V(r.baseUrl?String(r.baseUrl):void 0),s=await J(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ga,a=Ye({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Qp(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=Os({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),g=await Ts({worker:f,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,h=await re(k,s,{leaseOwner:g.leaseOwner??p,leaseDurationMs:i,...g.leaseToken?{leaseToken:g.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(h.ok){l.push(d);continue}let y=h.response&&typeof h.response=="object"&&"reason"in h.response?String(h.response.reason??`http ${h.status}`):`http ${h.status}`;c.push({worker:d,reason:y})}return{renewed:l,failed:c,skipped:u}}function Zp(e,r){let t=B(e);for(let n of Object.keys(t.workers||{})){let o=Qp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||M(o).status==="done"))return!0}return!1}we();D();D();import{existsSync as mx,mkdirSync as fx}from"node:fs";import Gt from"node:path";var Lw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Hw="next-action-fix:";function Ms(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function em(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ms(e)}function Fw(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 $w(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Lw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Ms(String(n.targetPrUrl??n.target_pr_url??"")),s=Ms(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?em(o):null,targetPrBranch:s}}catch{return r}}function rm(e){if(!Fw(e))return null;let r=$w(e.description),t=e.prUrl?em(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Ms(e.branch)}:null}function tm(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 nm(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=[...Vn(`worker.prompt.progress.${n}`).split(`
|
|
23
|
-
|
|
24
|
-
`),a=Vn(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
25
|
-
`)
|
|
26
|
-
`),
|
|
27
|
-
`)
|
|
28
|
-
`)
|
|
29
|
-
`)}function nl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function PC(e){return nl(e.prUrlHint)??km(e.status.finalResult)??nl(e.worker.taskPrUrl)??null}function EC(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??Jr(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=Zn({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=wm({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=Jr(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function tl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Jr(e.snapshot.worktreePath,e.exec)??void 0};let r=Zn({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 ol(e,r=Hs){let t=PC(e),n=Rm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!ym({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?tl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return tl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!CC(r)){let S=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${S?`${S} 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 S=!1,P=!1,_=n.headCommit??Jr(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Zn({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!A.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${A.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};S=A.committed,P=A.pushed,_=A.headCommit??_}else{let A=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(A.status!==0&&!/already up to date/i.test(A.stderr||A.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${A.stderr||A.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};P=A.status===0}return{ok:!0,prUrl:a,headCommit:_,committed:S,pushed:P}}let l=nl(e.worker.taskId),c=[];if(l){c=el(n.worktreePath,i,l,r);let S=Pm(c);if(S){let P=EC({snapshot:n,canonical:S,workerName:e.worker.name,exec:r});return P.ok&&P.prUrl&&rl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:P.prUrl,exec:r}),P}}let u=Ls(n.worktreePath,i,n.branch,r);if(u)return tl({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let d=n.changedFiles.length>0,f=!1,m=!1,p=n.headCommit??void 0,g=Zn({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:d,exec:r});if(d&&!g.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${g.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(f=g.committed,m=g.pushed,!g.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${g.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 S=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(S.status!==0&&!/already up to date/i.test(S.stderr||S.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${S.stderr||S.stdout||S.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=S.status===0}p=g.headCommit??p??Jr(n.worktreePath,r)??void 0;let k=p?Im(n.worktreePath,i,p,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:p,committed:f,pushed:m,created:!1};let h=e.run.base?.trim()||"main",y=Cm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:xC(e.worker.name,e.worker.runId),body:_C(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!y.ok||!y.prUrl){if(gm(y.detail))return{ok:!0,headCommit:p??void 0,committed:f,pushed:m};let S=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${S?`${S} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${y.detail?` (${y.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`."}}if(l&&y.prUrl){let P=[...c.length>0?c:el(n.worktreePath,i,l,r),{url:y.prUrl,number:Number.parseInt(y.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];rl({worktreePath:n.worktreePath,repo:i,rows:P,canonicalPrUrl:y.prUrl,exec:r})}return{ok:!0,prUrl:y.prUrl,headCommit:p??void 0,committed:f,pushed:m,created:y.created}}X();br();sa();D();X();C();import AC from"node:path";var IC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Om(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function OC(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 Cr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:OC(r);return{finalResult:r??t??"completed",summary:t}}function sl(e,r,t){if(Om(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Cr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),F(e.runId,e)}function NC(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 Nm(e,r){let t=NC(r);if(t.size===0)return[];let n=B(e),o=[];for(let s of Object.keys(n.workers||{})){let i=x(AC.join(E(n.id),"workers",v(s),"worker.json"),void 0);if(!i?.taskId||Om(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!IC.has(a))continue;let l=M(i,{base:n.base,baseCommit:n.baseCommit});sl(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}Sn();function Fs(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function TC(e){let r=e.lastHeartbeatPhase?.trim();if(!r||r==="complete")return null;let t=e.lastHeartbeatSummary?.trim();return t?{summary:t,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:r,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function DC(e){let r=qo(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function MC(e){let r=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${r}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:r,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function $s(e){let{worker:r,status:t}=e;if(Fs(t.finalResult)){let u=ae(r.heartbeatPath),d=nr(u),f=Fs(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:f,snapshot:Cr(t)}}if(t.alive)return null;let n=vt(r.stdoutPath);if(Fs(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Cr(u)}}let o=ae(r.heartbeatPath),s=nr(o);if(Fs(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Cr(u)}}let i=DC(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Cr(u)}}let a=TC(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Cr(u)}}let l=MC({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Cr(c)}}function Ks(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Sn();function js(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 Tm(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 Dm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Mm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Wm(e){let r=Mm(e);if(!r)return[];let t=Mm(r.worktreeHandoff),n=Dm(t?.disposableArtifactsRemoved);return n.length?n:Dm(r.disposableArtifactsRemoved)}function Um(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Bm(e,r){let t=js(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Um(o)));return t.every(o=>{let s=Um(Tm(o));return n.has(s)})}function Vs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Lm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function UC(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 WC(e){let r=Lm(e.disposableArtifactsRemoved),t=Wm(e.finalResult);return[...new Set([...r,...t])]}function Hm(e){let r=Lm(e.changedFiles),t=js(r),n=WC(e),o=t.length===0||Bm(r,n);return Vs(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`}:Vs(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`}:Vs(e.artifactBundlePath)||Vs(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}:UC(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`}}C();C();import BC from"node:path";var LC=/^[a-z0-9][a-z0-9._-]{0,127}$/i,HC=/^[a-z0-9][a-z0-9._-]{0,63}$/i,il=new Set(["undefined","null"]),Fm="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Gs(e){let r=e.trim();if(!LC.test(r))throw new Error(`invalid run id: ${e}`);return r}function FC(e){let r=e.trim();if(!HC.test(r))throw new Error(`invalid worker name: ${e}`);return r}function al(e){return typeof e=="string"?e.trim():""}function qe(e){let r=al(e.run),t=al(e.name);return(!r||il.has(r))&&fr(`missing --run RUN_ID (${Fm})`),(!t||il.has(t))&&fr(`missing --name WORKER_NAME (${Fm})`),{runId:Gs(r),workerName:FC(t)}}function ll(e){let r=al(e.run);return(!r||il.has(r))&&fr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Gs(r)}function $m(e){let r=BC.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function Km(e,r,t){let n=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function $C(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function jm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function ro(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function KC(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function jC(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 Gm(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function VC(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function to(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,F(e.runId,e))}function GC(e){e.completionBlocker&&(delete e.completionBlocker,F(e.runId,e))}function no(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function YC(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function so(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=B(n.runId),s=M(n,no(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Yr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Qa(n)&&GC(n),!s.finalResult&&s.alive===!1){let _=$s({worker:n,status:s});_&&Ks(n,_)&&(F(n.runId,n),n=ue(r,t),s=M(n,no(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let _=ol({worker:n,run:o,status:s});if(!_.ok)return to(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=M(n,no(o)),s=YC(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let _=Hm({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let A=_.detail??`worktree completion blocked (${_.state})`;return to(n,A),{ok:!1,reason:A,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=V(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await J(f,i,{baseUrl:d});a&&(await Ts({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=ue(r,t));let p=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,g={...s};n.disposableArtifactsRemoved?.length&&(g.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?{...g,leaseToken:n.leaseToken}:g,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}},h=await Km(p,m,k);if((h.status===401||h.status===403)&&!f){let _=await hd(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Km(p,m,k))}if(h.ok){let _=um(h.parsed);if(!dm(_)){let I=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;to(n,I);let L={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Xa(n,n.runId,L),{ok:!1,httpStatus:h.status,response:h.parsed,reason:I,completionBlocked:!0}}to(n,void 0);let A=_.routeOutcome??"acknowledged",Y={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Xa(n,n.runId,Y),sl(n,s,{source:"harness-completion"});let K=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:A,...K?{prHandoff:{prUrl:K}}:{}}}let y=h.status===401||h.status===403,S=$C(h.parsed)??(y?"runner token unauthorized":"non-2xx response"),P=y?`completion replay rejected (${h.status}): ${S}`:`completion replay failed (${h.status}): ${S}`;return to(n,P),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function ul(e){try{let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=B(n.runId),s=M(n,no(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await so(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 Ym(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=B(n.runId),s=M(n,no(o));se(oo.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function JC(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 cl(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function qC(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=cl(e.task??e.taskId);t&&(r.task=t);let n=cl(e.worker??e.name);n&&(r.worker=n);let o=cl(e.status);return o&&(r.status=o),r}function zC(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 Jm(e,r){let t=qC(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>zC(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:xr(n,"status"),attentionCounts:xr(n,"attention"),lifecycleCounts:xr(n,"lifecycleStage")}),e.controller&&(o.controller=Xm(n)),o}function qm(e){let r=ll(e),t=e.full===!0||e.full==="true",n=Jm(t?io(r):ao(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:JC(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function zm(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=St({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=Gm(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=jm(n.completionResponse),m=jm(f?.task),p=ro(f?.outcome),g=ro(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(A=>typeof A=="string"&&A.trim().length>0):[],h=ro(m?.prUrl)??ro(f?.prUrl),y=ro(n.completionReportedAt),S=KC({finished:ie(o),completionBlocker:c,completionOutcome:p,completionReportedAt:y}),P=jC({completionBlocker:c,completionOutcome:p,completionReportedAt:y,finished:ie(o)}),_=VC({changedFiles:o.changedFiles,headCommit:s,prUrl:h??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 A=n.instructionPolicyEvidence;if(!A||typeof A!="object")return null;let Y=A.ruleSlugs;return Array.isArray(Y)?Y.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:h,handoffState:_,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:S,completionReportedAt:y,completionOutcome:n.completionOutcome??null,completionRouteStatus:g,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 XC(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&&!Gm(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function QC(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 xr(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 Vm(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 Xm(e){let r=e.filter(Vm),t=e.filter(n=>{if(Vm(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 Qm(e,r,t){let n={runId:e.id,name:e.name,status:Cn(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:xr(r,"status"),attentionCounts:xr(r,"attention"),lifecycleCounts:xr(r,"lifecycleStage")},n.controller=Xm(r)),n}function ZC(e){return e.status==="done"&&e.attention==="done"}function io(e){let r=B(e),n=Object.keys(r.workers||{}).map(s=>{let i=x(oo.join(E(r.id),"workers",v(s),"worker.json"),void 0);return i?zm({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Qm(r,n,!1);return se(oo.join(E(r.id),"last-board.json"),o),o}function ao(e){let r=B(e),n=Object.keys(r.workers||{}).map(i=>{let a=x(oo.join(E(r.id),"workers",v(i),"worker.json"),void 0);return a?XC(a)?QC(i,a):zm({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!ZC(i)),s=Qm(r,o,!0);return s.status=Cn(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:xr(n,"status"),allAttentionCounts:xr(n,"attention")},se(oo.join(E(r.id),"last-board-compact.json"),s),s}async function Zm(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=io(t),s=V(e.baseUrl?String(e.baseUrl):void 0),i=await J(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await re(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}function ex(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 ef(e){let r=ll(e),t=e.full===!0||e.full==="true",n=Jm(t?io(r):ao(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=ex(r)),console.log(JSON.stringify(n,null,2))}function rf(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=Fo(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=dt(s),a=i?Du(i):s;a&&console.log(a)}}function tf(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t);if(!H(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(hr(n.pid,"SIGTERM"),Nr(1500),H(n.pid)){hr(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))}C();import{existsSync as Ys}from"node:fs";import qr from"node:path";import{fileURLToPath as rx}from"node:url";function tx(e,r){let t=qr.resolve(e);for(;;){let n=qr.join(t,r);if(Ys(n))return n;let o=qr.dirname(t);if(o===t)return null;t=o}}function nx(e){return tx(e,qr.join("node_modules",".bin","tsx"))??"npx"}function dl(e,r){if(e.endsWith(".ts")){let t=nx(qr.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Js(e){if(e.explicitCliPath)return Ys(e.explicitCliPath)?dl(e.explicitCliPath,e.nodeExecutable):null;let r=rx(new URL(".",e.importMetaUrl)),t=qr.join(r,"cli.js");if(Ys(t))return dl(t,e.nodeExecutable);let n=qr.join(r,"cli.ts");return Ys(n)?dl(n,e.nodeExecutable):null}var lx=5e3,cx=360*60*1e3,ux=3,dx=5e3;function px(e){let{runId:r,workerName:t}=qe(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 Vt(e){let r=px(e),t=r.pollMs??lx,n=r.maxTotalMs??cx,o=r.completeAttempts??ux,s=r.completeBackoffMs??dx,i=ue(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(Yr(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=ue(r.run,r.name),Yr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=M(i);if(ie(u)||!H(i.pid))break;if(Date.now()-a>n)return{worker:i.name,runId:i.runId,outcome:"timed_out",attempts:0,reason:`worker did not finish within ${n}ms`};Nr(t)}let l,c;for(let u=1;u<=o;u++){let d=await so({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&&Nr(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function of(e){try{let r=await Vt(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 sf(e){let r=e.nodeExecutable??process.execPath,t=Js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!sx(n))return;let o=ax.join(e.workerDir,"auto-complete.log"),s;try{s=ix(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=ox(t.command,a,pe({detached:!0,stdio:i,env:process.env}));return s!==void 0&&nf(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{nf(s)}catch{}return}}function af(e){let r=e.branch?.trim()||"unknown branch",t=e.pid!=null?`pid ${e.pid}`:"pid pending";return`Harness worker started: ${e.worker} (${t}, ${r})`}function pl(e){return JSON.stringify(e,null,2)}we();function lf(e,r,t){me(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Pe();N();function ml(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=v(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||ar,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Is({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=cm(o.provider),i=o.model;if(s.preflightModel){let $=s.preflightModel(r.model);if(!$.ok)throw new Error(`model preflight failed for provider "${s.name}": ${$.note??"invalid model/provider combination"}`);$.normalized&&console.error(`[supervisor] ${n}: ${$.note}`),i=$.model}let{worktreesDir:a}=Z(),l=Gt.join(E(e.id),"workers",n);fx(l,{recursive:!0});let c=Gt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(mx(c))throw new Error(`worktree path already exists: ${c}`);me(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?lf(e.repo,c,u):me(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Gt.join(l,"stdout.jsonl"),m=Gt.join(l,"stderr.log"),p=Gt.join(l,"heartbeat.jsonl"),g=nm({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,h=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:g})}catch($){throw me(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),me(e.repo,["branch","-D",d],{allowFailure:!0}),$}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,h===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=h}let S=Yp(y.model,i,s.defaultModel),P=b(),_=_e(process.env,P),A=Ye().runnerId,Y=Ns(_.boxKind),K={name:n,runId:e.id,status:"running",pid:y.pid,model:S,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:_.boxKind,boxId:Y,runtimeId:A,startedAt:new Date().toISOString()};if(F(e.id,K),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Gt.join(l,"worker.json")}},e.status="running",Te(e),K.agentOsId&&K.taskId){let $;try{$=sf({runId:e.id,workerName:n,workerDir:l,agentOsId:K.agentOsId})}catch(I){let L=`completion sidecar failed to spawn: ${I.message}`;K.completionBlocker=L,F(e.id,K)}if($)$.pid&&(K.completionSidecarPid=$.pid,F(e.id,K));else{let I="completion sidecar failed to spawn (CLI not found or spawn error)";K.completionBlocker=I,K.completionSidecarSpawnFailedAt=new Date().toISOString(),F(e.id,K)}}return K}async function cf(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):su(e.taskFile?String(e.taskFile):void 0);n||(console.error("missing --task or --task-file"),process.exit(1));let o=!!(e.agentOsId&&e.taskId),s=e.localOnly===!0||e.localOnly==="true";!o&&!s&&(e.agentOsId||e.taskId)&&(console.error("worker start: board-linked workers require both --agent-os-id and --task-id (or pass --local-only for direct runs)"),process.exit(1));let i=e.wait===!0||e.wait==="true",a=e.emitJson===!0||e.emitJson==="true",l;try{l=ml(r,{name:t,task:n,ownedPaths:e.owned?String(e.owned).split(",").map(d=>d.trim()).filter(Boolean):[],model:e.model?String(e.model):void 0,branch:e.branch?String(e.branch):void 0,agentOsId:e.agentOsId?String(e.agentOsId):void 0,taskId:e.taskId?String(e.taskId):void 0,provider:e.provider?String(e.provider):void 0});let u={runId:r.id,worker:l.name,pid:l.pid,branch:l.branch,worktreePath:l.worktreePath,workerDir:l.workerDir};a?console.log(pl(u)):(console.log(af(u)),console.error(pl(u)))}catch(u){console.error(`worker start failed: ${u.message}`),process.exit(1)}if(!i||!l)return;let c=await Vt({run:String(e.run),name:l.name,...l.agentOsId?{agentOsId:l.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...c})),c.outcome==="timed_out"&&(process.exitCode=1)}C();import{createHash as uf}from"node:crypto";function _r(e){let r=e.replace(/\r\n/g,`
|
|
31
|
-
`).trimEnd();return uf("sha256").update(r,"utf8").digest("hex")}function Yt(e){if(e==null)return null;let r=e.trim();return r?uf("sha256").update(r,"utf8").digest("hex"):null}N();var ee=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function lo(e,r){return e===401||e===403?new ee("auth",r,e):e>=500?new ee("server",r,e):new ee("permanent",r,e)}function fl(e){let r=e instanceof Error?e.message:String(e);return/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|fetch failed|network/i.test(r)?new ee("network",r):new ee("tool_interruption",r)}function df(e){return e!=="permanent"}function zs(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Xs(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function pf(e,r,t={}){let n=V(t.baseUrl),o=t.apiKey??oe(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:zs(o)}),l=await Xs(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw lo(a.status,c)}return l}catch(a){throw a instanceof ee?a:fl(a)}}async function mf(e,r={}){let t=V(r.baseUrl),n=r.apiKey??oe(),o=r.fetchFn??fetch,s=e.agentOsSlug;try{if(e.operation==="create"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans`,m={title:e.title,summary:e.summary??null,slug:e.planSlug??null,sourceRefs:qs(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:qs(e)}},p=await o(f,{method:"POST",headers:zs(n),body:JSON.stringify(m)}),g=await Xs(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${p.status})`;throw lo(p.status,h)}let k=g;return{planId:k.plan.id,versionId:k.version.id,versionNumber:k.version.versionNumber}}let i=e.planId;if(!i)throw new ee("permanent","planId is required for this operation");if(e.operation==="update_metadata"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}`,m={title:e.title,summary:e.summary??null,sourceRefs:qs(e)},p=await o(f,{method:"PATCH",headers:zs(n),body:JSON.stringify(m)}),g=await Xs(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${p.status})`;throw lo(p.status,h)}let k=g;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:qs(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:zs(n),body:JSON.stringify(l)}),u=await Xs(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw lo(c.status,f)}let d=u;return{planId:d.version.planId,versionId:d.version.id,versionNumber:d.version.versionNumber}}catch(i){throw i instanceof ee?i:fl(i)}}function qs(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as gx}from"node:crypto";function Qs(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:Yt(e.summary),bodyHash:_r(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return gx("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as ff}from"node:fs";import{homedir as hx}from"node:os";import Jt from"node:path";function Zs(){let e=process.env.KYNVER_STATE_ROOT;return e?Jt.resolve(e):Jt.join(hx(),".kynver","state")}function ei(){return Jt.join(Zs(),"plan-outbox")}function kx(){return Jt.join(Zs(),"plan-outbox-archive")}function zr(){let e=ei(),r=kx();return ff(e,{recursive:!0}),ff(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function co(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=Jt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(Jt.join("/var","folders"))}import{existsSync as gl,readFileSync as hf,renameSync as gf,readdirSync as yx,writeFileSync as hl,unlinkSync as JH}from"node:fs";import Me from"node:path";import{randomUUID as Rx}from"node:crypto";var bx=12;function qt(){let{outboxDir:e}=zr(),r=yx(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=yl(Me.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function kl(e){for(let r of qt())if(r.idempotencyKey===e)return r;return null}function yl(e){if(!gl(e))return null;try{return JSON.parse(hf(e,"utf8"))}catch{return null}}function kf(e){let{outboxDir:r}=zr(),t=Me.join(r,e.bodyPath);return hf(t,"utf8")}function Rl(e,r){let{outboxDir:t}=zr(),n=new Date().toISOString(),o=r.existing?.id??Rx(),s=r.existing?.bodyPath??`${o}.body.md`,i=Me.join(t,`${o}.json`),a=Me.join(t,s);r.existing||hl(a,e.body,"utf8");let l={id:o,idempotencyKey:Qs(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:_r(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??bx,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return hl(i,`${JSON.stringify(l,null,2)}
|
|
32
|
-
`,{mode:384}),l}function yf(e){let{outboxDir:r}=zr(),t=Me.join(r,`${e.id}.json`);hl(t,`${JSON.stringify(e,null,2)}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
`)}function Vx(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 at=function(){return Q.filter(w=>w.started).length},Be=function(w,R){_a({runId:i.id,agentOsId:a,phase:w,startedCount:at(),outcomeCount:Q.length,cappedStarts:P,...R})},ke=function(){return Q.some(w=>(typeof w.error=="string"?w.error:"").startsWith("dispatch_start_readback_failed:"))},W=function(w){return w.landPrDispatch===!0?!0:w.task?.executor==="land_pr"};var t=at,n=Be,o=ke,s=W;let i=B(String(T(String(e.run||""),"--run"))),a=String(T(String(e.agentOsId||""),"--agent-os-id")),l=V(e.baseUrl?String(e.baseUrl):void 0),c=await J(e.secret?String(e.secret):void 0,a,{baseUrl:l}),d=!(e.execute===!0||e.execute==="true"),f=Ye({runId:i.id}),m=ja(i.id,f.runnerId),p=e.diskPath?$e({diskPath:String(e.diskPath)}):$e({diskPath:i.repo}),g=or({runId:i.id}),k=Vx(e),h=k.size>0,y=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,S=h?Math.min(y,k.size):y,P=d?S:Math.min(S,g.slotsAvailable);if(!d&&P<=0){let w={runId:i.id,agentOsId:a,dryRun:!1,skipped:!0,reason:g.reason??"no resource slots",resourceGate:g};if(r)return{ok:!0,...w};console.log(JSON.stringify(w,null,2));return}let _=ws(i.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let w=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/lane-hygiene`;try{await re(w,c,{agentOsId:a,dryRun:!1,includeBoardReconcile:!0},{agentOsId:a,baseUrl:l})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let A=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/tasks/dispatch-next`,Y=w=>({agentOsId:a,dryRun:d,maxStarts:w,leaseOwner:m,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Ga,runnerDiskGate:p,runnerResourceGate:g,activeHarnessWorkers:_,runnerPresence:f,harnessBoardSnapshot:io(i.id),...e.lane?{lane:yp(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(R=>R.trim()).filter(Boolean)}:{}}),K=pp(),$=async w=>{let R=await re(A,c,Y(w),{agentOsId:a,baseUrl:l,timeoutMs:K})??{ok:!1,status:0,response:null},O=R.response;return{dispatch:R,result:O?.result}},I=await $(h||d?P:1);if(!I.dispatch.ok||!I.result){let w={runId:i.id,agentOsId:a,action:"dispatch",httpStatus:I.dispatch.status,response:I.dispatch.response,authRefreshed:I.dispatch.refreshedAuth===!0,authRefreshFailure:I.dispatch.authRefreshFailure};if(r)return{ok:!1,...w};console.log(JSON.stringify(w,null,2)),process.exit(1)}let L=I.result;if(d){let w=Uf(L),R=Wf(L),O={runId:i.id,agentOsId:a,dryRun:!0,wouldStart:L.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:L.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:L.diskGate,resourceGate:L.resourceGate,inspected:L.inspected,pagesScanned:L.pagesScanned??null,candidatesExhausted:L.candidatesExhausted??null,capacityIdle:w?.capacityIdle===!0,admissionExhaustion:w,dispatchSkipDrain:R};if(r)return{ok:!0,...O};console.log(JSON.stringify(O,null,2));return}let Or=qp(),Q=[],pr=[],it=Number(L.inspected)||0,We=!1;async function G(w,R,O){let j=await xl({baseUrl:l,secret:c,agentOsId:a,taskId:String(w.id),leaseOwner:m,failureDetail:R}),le={taskId:w.id,started:!1,error:R,released:j.released,releaseResponse:j.releaseResponse,...O};return Q.push(le),Be("outcome",{lastOutcome:le}),!1}async function ye(w){let R=w.task,O=String(R.id);if(h&&!k.has(O))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let j=R.prUrl?String(R.prUrl):"";if(!j)return G(R,"land_pr task missing prUrl");try{let le=await Of({prUrl:j,repo:Af(j),cwd:i.repo}),ct=await Nf({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:R,report:le});return ct.ok?(Q.push({taskId:O,started:!0,landPr:!0,outcome:le.outcome,completionStatus:ct.status}),!0):G(R,`land_pr completion POST failed (HTTP ${ct.status})`,{landPr:!0,outcome:le.outcome})}catch(le){return G(R,le.message)}}async function ve(w){let R="duplicate_dispatch_prevented: live local worker already owns this task",O=await xl({baseUrl:l,secret:c,agentOsId:a,taskId:String(w.id),leaseOwner:m,failureDetail:R}),j={taskId:w.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:O.released,releaseResponse:O.releaseResponse};return Q.push(j),Be("outcome",{lastOutcome:j}),!1}async function mr(w){let R=w.task,O=$x(w),j=String(R.id);if(h&&!k.has(j))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let le=Kx(R.personaSlug);if(le&&(!O?.personaInjectionReady||!O.personaMarkdown))return G(R,`persona_injection_required: missing anchored context-envelope persona block for "${le}"`);if(Zp(i.id,j))return ve(R);let ct=Number(R.attempt)||1;if(ct>Or.maxTaskAttempts)return G(R,`task attempt ${ct} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Or.maxTaskAttempts})`);let mn=R.leaseToken?String(R.leaseToken).trim():"";if(!mn)return G(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Xy=v(`t-${R.id}-a${R.attempt}`),ut=Is({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Rp(R)});try{let $i=R.planId?String(R.planId):void 0,Uo=rm({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),Le=ml(i,{name:Xy,task:jx(R,a),ownedPaths:e.owned?String(e.owned).split(",").map(Qy=>Qy.trim()).filter(Boolean):[],model:ut.model,provider:ut.provider,routingRule:ut.rule,requestedModel:ut.requestedModel,agentOsId:a,taskId:String(R.id),planId:$i,branch:Uo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Uo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Uo?.targetPrUrl,repairTargetBranch:Uo?.targetPrBranch??void 0,instructionPolicyMarkdown:O?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyEvidence:O?.instructionPolicyEvidence??null,memoryQualityCapture:O?.memoryQualityCapture??null,memoryQualityPromptMarkdown:O?.memoryQualityPromptMarkdown??null,personaMarkdown:O?.personaMarkdown??null,personaSlug:O?.personaSlug??le,personaEvidence:O?.personaEvidence??null,contextEnvelopeMarkdown:O?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:O?.contextEnvelopeEvidence??null,leaseOwner:m,leaseToken:mn,dispatched:!0}),Wo=await Df({agentOsId:a,taskId:String(R.id),leaseOwner:m,expectedLeaseToken:mn,worker:Le,baseUrl:l,secret:c});if(!Wo.ok)return Mf(i.id,Le,Wo.error??"dispatch_start_readback_failed"),G(R,Wo.error??"dispatch_start_readback_failed",{readback:Wo.detail??null});Le.leaseToken!==mn&&(Le.leaseToken=mn,Le.leaseOwner=m,F(i.id,Le));let ru={taskId:R.id,started:!0,worker:Le.name,pid:Le.pid,branch:Le.branch,model:Le.model,provider:ut.provider,routingRule:ut.rule,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(O?.instructionPolicyEvidence?.ruleSlugs)?O.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:O?.personaSlug??le,personaOperatingRuleCount:O?.personaEvidence?.operatingRuleCount??null};return Q.push(ru),Be("worker_started",{lastOutcome:ru}),O?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: operating-rules policy injected fingerprint=${O.instructionPolicyFingerprint}`),O?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${O.personaSlug}`),O?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${O.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch($i){return G(R,$i.message)}}let Se=new Set;async function To(w){let R=w.task,O=String(R.id);if(Se.has(O))return G(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=W(w)?await ye(w):await mr(w);return j||Se.add(O),j}for(let w of L.started)await To(w);if(pr.push(...L.skipped??[]),h)for(let w of pr){let R=String(w.task.id);k.has(R)&&Q.push({taskId:R,started:!1,error:`exact_target_not_started:${w.skipReason}`,skipReason:w.skipReason,detail:w.reason??null,requestedTargetTaskIds:[...k]})}for(;!h&&Q.length<P;){if(ke()){let O={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};Q.push(O),Be("circuit_breaker",{lastOutcome:O});break}let w=await $(1);if(!w.dispatch.ok||!w.result){let O=mp(w.dispatch.response),j=at();We=O&&j>0;let le={started:!1,error:"dispatch_next request failed during top-up",httpStatus:w.dispatch.status,response:w.dispatch.response,...We?{nonFatal:!0,partialTopUp:!0}:{}};Q.push(le),Be("top_up_failed",{partialTopUpInterrupted:We,lastOutcome:le});break}it+=Number(w.result.inspected)||0,pr.push(...w.result.skipped??[]);let R=w.result.started??[];if(R.length===0)break;for(let O of R){if(Q.length>=P)break;await To(O)}}let Do=Q.filter(w=>w.started).length,lt=Uf(L),Mo=Wf(L),Xc=Do===0&&(lt?.capacityIdle===!0||Number(L.resourceGate?.slotsAvailable)>0);if(Xc&<?.summary){let w=lt.skipReasonCounts?.retry_ceiling_exceeded??0,R=L.overAttemptIdleRecovery??lt.overAttemptIdleRecovery,O=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:w>0?"; over_attempt_recovery not attempted":"",j=Mo?`; dispatch_skip_drain scanned=${Mo.scanned??0} advanced=${Mo.advanced??0}`:"";console.error(`[dispatch] ${lt.summary}${w>0?`; retry_ceiling_exceeded=${w}`:""}${O}${j}`)}let Qc={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:m,startedCount:Do,capacityIdle:Xc,admissionExhaustion:lt,dispatchSkipDrain:Mo,outcomes:Q,skipped:pr.map(w=>({taskId:w.task.id,skipReason:w.skipReason})),inspected:it,pagesScanned:L.pagesScanned??null,candidatesExhausted:L.candidatesExhausted??null,diskGate:L.diskGate,resourceGate:L.resourceGate,...We?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:K},Zc=w=>!w.started&&w.nonFatal!==!0,zy=Q.some(Zc),eu=We&&Do>0?!0:!zy;if(_a({runId:i.id,agentOsId:a,phase:"complete",partial:We,startedCount:Do,ok:eu}),r)return{ok:eu,...Qc};console.log(JSON.stringify(Qc,null,2)),Q.some(Zc)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var Gx=1;function zt(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 Yx(e){let{maxStarts:r,...t}=e;return t}async function El(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=Yx(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:zt(u)}}let n=Math.min(r,Gx),o=Math.max(0,r-n),s=await Qr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=zt(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=zt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Bf(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 Jx(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function fo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function qx(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Lf(e,r){let t=Jx(r),n=fo(t?.recommendedMaxStarts),o=fo(t?.actionableReady),s=fo(t?.queuedTasks),i=fo(t?.boardAdvancedThisTick)??0,a=fo(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 p=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,p))}let f=qx("KYNVER_DAEMON_MAX_DISPATCH_STARTS");f!==null&&(u=Math.min(u,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 P_ from"node:path";D();Dr();X();C();import zx from"node:path";var Xx=new Set(["running","dispatching","pending","queued","needs_attention"]),lr=new Set(["completed","failed","cancelled","done"]);function Zr(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=x(zx.join(E(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let l=M(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Pt(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function go(){let e=[];for(let r of z()){if(!Xx.has(r.status))continue;let t=Zr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Te(r),e.push({runId:r.id,from:n,to:t})}return e}D();Dr();X();C();br();Sn();import{existsSync as Ar,lstatSync as a_,readdirSync as l_,readlinkSync as c_,renameSync as Ul,unlinkSync as u_}from"node:fs";import ze from"node:path";xe();C();import Ue from"node:path";var Qx=`${Ue.sep}runs${Ue.sep}runs${Ue.sep}`;function ri(e){return e.includes(Qx)}function Al(e,r){return Ue.join(Ce(ce(e)),v(r))}function Pr(e,r,t){return Ue.join(Al(e,r),"workers",v(t))}function Hf(e,r,t){let n=ce(e);return Ue.join(n,"runs","runs",v(r),"workers",v(t))}function Il(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function et(e){return{workerJsonPath:Ue.join(e,"worker.json"),stdoutPath:Ue.join(e,"stdout.jsonl"),stderrPath:Ue.join(e,"stderr.log"),heartbeatPath:Ue.join(e,"heartbeat.jsonl"),lastStatusPath:Ue.join(e,"last-status.json")}}function Ff(e){let r=et(Pr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!ri(e.statusPath)?e.statusPath:r}import{existsSync as Er,mkdirSync as Zx,readdirSync as Kf,renameSync as e_,statSync as Ol}from"node:fs";import te from"node:path";br();xe();D();C();var ho=900*1e3,r_=3600*1e3;function jf(e,r){let t=te.resolve(e),n=te.resolve(Ce(r)),o=te.relative(n,t);return o!==".."&&!o.startsWith("..")&&!te.isAbsolute(o)}function Nl(e){if(!Er(e))return[];try{return Kf(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Tl(e){let r=te.join(e,"workers");if(!Er(r))return[];try{return Kf(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Vf(e){return te.join(e,"archived-workers")}function t_(e,r){let t=te.join(Vf(e),v(r));return Er(t)?`${t}-${Date.now()}`:t}function $f(e,r,t){if(!Er(e))return!1;try{let n=r-Ol(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Gf(e,r=Date.now(),t=ho){if(!Er(e))return!1;let n=et(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&H(o.pid))return!0;let s=ae(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!($f(n.stdoutPath,r,t)||$f(n.heartbeatPath,r,t))}function n_(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-Ol(te.join(e,"worker.json")).mtimeMs}catch{return 0}}function o_(e,r,t,n){if(Gf(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=n_(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 Xt(e,r=Date.now(),t=ho){for(let n of Tl(e))if(Gf(te.join(e,"workers",n),r,t))return!0;return!1}function s_(){return{repo:je()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function i_(e,r){let t=te.join(Ce(e),v(r));if(!Er(t))return null;let n=Tl(t);if(n.length===0)return null;let o;try{o=Ol(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Pr(e,r,a);s[a]={workerDir:l,statusPath:te.join(l,"worker.json")}}let i=Xt(t);return{id:r,name:r,...s_(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Dl(e){let r=ce(e??be()),t=Ce(r),n=[];for(let o of Nl(t)){let s=te.join(t,o,"run.json");if(Er(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=i_(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Te(i),n.push({runId:o,action:"repaired_run_json",reason:Xt(te.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Ml(e,r={}){let t=ce(e??be()),n=Ce(t),o=r.now??Date.now(),s=r.archiveAgeMs??r_,i=[];Dl(t);for(let a of Nl(n)){let l=te.join(n,a),c=te.join(l,"run.json"),u=x(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...Tl(l)]),f=!1;for(let m of d){let p=te.join(l,"workers",v(m)),g=te.join(p,"worker.json"),k=x(g,void 0);if(!k){let S=te.join(Vf(l),v(m));if(Er(S)&&(u.workers[v(m)]||u.workers[m])){delete u.workers[v(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:S});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let h=o_(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let y=t_(l,m);Zx(te.dirname(y),{recursive:!0}),e_(p,y),delete u.workers[v(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:h.reason,archivePath:y})}f&&Te(u)}return{workers:i}}function Yf(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of Nl(n)){let s=te.join(n,o);Xt(s,r)&&t.add(`${e}\0${o}`)}return t}D();C();function d_(e,r){let t=Al(e,r),n;try{n=a_(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=ze.resolve(ze.dirname(t),c_(t));if(Xt(o)||Xt(t))return null;let s=`${t}.materialize-${Date.now()}`;return Ul(o,s),u_(t),Ul(s,t),o}function p_(e){let r=[];for(let t of Il()){let n=ze.join(e.fromDir,t),o=ze.join(e.toDir,t);!Ar(n)||Ar(o)||(Ul(n,o),r.push(t))}return r}function Jf(e,r){let t=et(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 m_(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 f_(e){let r=et(e.canonicalDir),t=x(r.lastStatusPath,void 0),n=Ar(r.stdoutPath),o=Ar(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?vt(r.stdoutPath):{finalResult:null},a=o?ae(r.heartbeatPath):ae(""),l=nr(a),c=m_({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:ze.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Jf(u,e.canonicalDir),u}function g_(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Pr(r,e.id,o),a=ze.join(i,"worker.json");(ri(s.workerDir)||ri(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Te(e)),t}function h_(e){let r=[],t=Pr(e.harnessRoot,e.run.id,e.workerName),n=Hf(e.harnessRoot,e.run.id,e.workerName),o=et(t),s=p_({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=Ff({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=x(i,void 0);if(!a&&Ar(o.workerJsonPath)&&(a=x(o.workerJsonPath,void 0)),!a){let l=f_({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=Ar(t),u=Il().some(d=>Ar(ze.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:ze.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return 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 Jf(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 k_(e,r){let t=ze.join(E(e.id),"workers");if(!Ar(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of l_(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function qf(){let{harnessRoot:e}=Z(),r=Dl(e),t=[];for(let n of z()){let o=d_(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),g_(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 k_(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Pr(e,n.id,i),statusPath:ze.join(Pr(e,n.id,i),"worker.json")}},Te(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...h_({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}br();Qo();X();D();Dr();C();import{execFileSync as zf}from"node:child_process";import Xf from"node:path";function Wl(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function y_(e){let r=Wl(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function R_(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function b_(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function v_(e){let r=null;if(typeof e=="string"?r=Ct(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=Wl(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 S_(e){try{let n=zf("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=zf("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:Wl(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 w_(e){let r=ae(e.heartbeatPath);return e.completionSnapshot?.finalResult??nr(r)}function C_(e){let r=new Map,t=E(e.id);for(let n of fe(e)){let o=x(Xf.join(t,"workers",v(n),"worker.json"),void 0);if(o)for(let s of v_(w_(o))){let i=y_(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function x_(e,r){let t=ae(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,R_(r)].filter(Boolean).join(`
|
|
37
|
-
`);return b_(n)}function __(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Bl(e={}){let r=e.lookupPr??S_,t=[],n=new Map;for(let o of z()){let s=C_(o),i=E(o.id);for(let a of fe(o)){let l=Xf.join(i,"workers",v(a),"worker.json"),c=x(l,void 0);if(!c||!__(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 x_(c,u.finalResult)){if(d=s.get(m)??null,!d){let p=o.repo||c.worktreePath,g=`${p}#${m}`,k=n.has(g)?n.get(g)??null:r({repoDir:p,prNumber:m});n.has(g)||n.set(g,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 E_=900*1e3;function A_(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Qf(e,r){let t=$s({worker:e,status:r}),n=t?Ks(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function ko(){let e=qf();if(A_()){let s=Bl(),i=Ml();return{workers:[],finalizedRuns:go(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of fe(s)){let a=P_.join(E(s.id),"workers",v(i),"worker.json"),l=x(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=Qf(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,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=Qf(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.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>E_,m=Number.isFinite(d)&&t-d>_t;if(f&&m){hr(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=Ml();return{workers:r,finalizedRuns:go(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Zf(){let e=ko(),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))}At();N();Pe();import I_ from"node:os";function ti(e,r={}){let t=(r.boxKind??Fe(b())).trim().toLowerCase()||"forge",n=r.hostLabel??I_.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}:{}}}D();zo();X();N();import O_ from"node:path";D();X();C();async function yo(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=B(String(T(String(e.run||""),"--run"))),n=String(T(String(e.agentOsId||""),"--agent-os-id")),o=V(e.baseUrl?String(e.baseUrl):void 0),s=await J(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Ye({runId:t.id}).runnerId,a=await Zm({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=x(O_.join(E(t.id),"workers",v(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 g=Os({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,h;try{h=await re(k,s,{agentOsId:n,leaseOwner:g},{agentOsId:n,baseUrl:o})}catch(y){h={ok:!1,error:y.message}}l.push({worker:f,taskId:m.taskId,pid:m.pid,released:h.ok===!0||h.response?.ok===!0,response:h.response??h})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await re(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}C();X();D();C();import N_ from"node:path";N();async function eg(e){let r=V(e.baseUrl),t=await J(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await re(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function rg(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=x(N_.join(E(t.id),"workers",v(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=M(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await eg({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}xn();N();Pe();function T_(e=process.env){let r=b();return Fe(r,e)!=="forge"}function tg(e,r=process.env){if(T_(r))return e?.maxConcurrentWorkers??void 0}async function ng(e,r){let t=V(r.baseUrl?String(r.baseUrl):void 0),n=await J(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Cs(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}}N();Pe();xe();import Ne from"node:path";Xo();import si from"node:path";we();X();var Ll=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function og(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Ll)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Ae(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!og(n)})}function rt(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 Ro(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(rt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}C();function bo(e){return e.status||(e.status=M(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Hl(e,r){if(e.status)return Ae(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):fn(e.worktreePath);return Ae(t).length>0}function D_(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Fl(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=D_(e);if(o&&!H(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):fn(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"}:$o(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??rt(s)};return e.status=u,u}return bo(e)}X();X();br();C();function $l(e,r=Date.now(),t=ho){let n=ae(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function ni(e,r=Date.now(),t=ho){return H(e.pid)?!0:$l(e,r,t)}function M_(e,r){return r?r.runTerminalCache.derive(e.run):Zr(e.run)}function cr(e,r=Date.now()){return ni(e.worker,r)}function Kl(e,r){return lr.has(e.run.status)?!1:M_(e,r)!==null}function sg(e,r,t=Date.now()){if(cr(e,t))return!0;if(lr.has(e.run.status)||Kl(e,r))return!1;let n=bo(e);return ie(n)?!1:!!cr(e,t)}Xo();X();function ig(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(cr(e))return!0;let n=r??bo(e);return!!(!ie(n)||Ro(n)||Ae(n.changedFiles).length>0||wt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:rt(n.finalResult)}).blocked)}we();C();import{existsSync as lg,mkdirSync as U_,writeFileSync as ag}from"node:fs";import oi from"node:path";function cg(e,r,t){return oi.join(e,"salvage",v(r),v(t))}function ug(e){return lg(oi.join(cg(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function dg(e){let r=cg(e.harnessRoot,e.indexed.runId,e.indexed.workerName);U_(r,{recursive:!0});let t=oi.join(r,"salvage.patch"),n=!1;if(lg(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
38
|
-
`);a.trim()&&(ag(t,a.endsWith(`
|
|
22
|
+
${n}`;return Ow.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":Nw.some(s=>s.test(o))?"low":"elevated"}function Dw(e){let r=jt(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 Mw(e){let r=e.inventory??jp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Yr(e){let r=Dw({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function Vp(e){let r=e.task??{},t=Tw(r),n=Mw({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Gt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=cr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Fa({inventory:n,riskClass:t});return Yr(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 Yr({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 Yr({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 Yr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Fa({inventory:n,riskClass:t});if(a)return Yr({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 Yr({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"}})}yt();C();import{closeSync as Gp,openSync as Yp}from"node:fs";import{spawn as Fw}from"node:child_process";var Uw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Ww(e){return e.replace(Uw,"")}var Lw=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function ja(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var Bw=new Set(["cursor"]);function Hw(e){let r=e.trim().toLowerCase();return Bw.has(r)?"auto":null}function Va(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Ww(t).trim()||r;return Lw.test(o)||!ja(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 Yt(e,r){let t=(e??"").trim();return t?ja(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 Ga(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Hw(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")`}:ja(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 Jr="claude-sonnet-4-6",no="claude-opus-4-8",Jp={name:"claude",defaultModel:Jr,preflightModel(e){return Va(e,Jr)},start(e){let r=Va(e.model,Jr);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Yp(e.stdoutPath,"a"),o=Yp(e.stderrPath,"a"),s=["ignore",n,o],i=Fw("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(Gp(n),Gp(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}}};yt();C();import{closeSync as Qp,existsSync as Vw,openSync as Zp}from"node:fs";import{spawn as em}from"node:child_process";yt();C();import{closeSync as qp,openSync as zp}from"node:fs";import{spawn as $w}from"node:child_process";var Ya=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Kw(){return rr({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function jw(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Xp={name:"hermes-codex",defaultModel:Ya,preflightModel(e){return Yt(e,Ya)},start(e){let r=Yt(e.model,Ya);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=zp(e.stdoutPath,"a"),o=zp(e.stderrPath,"a"),s=["ignore",n,o],i=Ie("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=jw(t,e.prompt),l=$w(i,a,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Kw()}));if(qp(n),qp(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 Gw(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var qr=Gw();function Yw(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Jw(){return rr({...process.env,CI:"1",NO_COLOR:"1"})}function qw(e,r){return["--ask-for-approval","never","exec","--sandbox","read-only","--model",e,r]}function zw(e,r,t){if(!(process.platform!=="win32"&&Vw("/usr/bin/script")))return em(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return em("script",["-qfc",o,"/dev/null"],t)}var rm={name:"codex",defaultModel:qr,preflightModel(e){return Yt(e,qr)},start(e){if(Gt().path==="hermes_openai_codex")return Xp.start(e);let t=Yt(e.model,qr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Zp(e.stdoutPath,"a"),s=Zp(e.stderrPath,"a"),i=["ignore",o,s],a=Yw(),l=qw(n,e.prompt),c=zw(a,l,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Jw()}));if(Qp(o),Qp(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 Xw="claude-sonnet-4-6",Ba="composer-2.5";function ur(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Qw(e){if(!e)return;let r=ur(e,"workerModelOverride")||ur(e,"modelOverride");return r||`${ur(e,"title")}
|
|
23
|
+
${ur(e,"description")}
|
|
24
|
+
${ur(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function tm(e){return e.toLowerCase()}function qa(e=y()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Xw}function Ja(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 Zw(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ba,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Jr,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function nm(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")))}var eC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function om(e,r,t){return eC.has(e)?no:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?no:Jr}function rC(e){let r=tm(ur(e,"executorRef")),t=ur(e,"title").toLowerCase(),n=ur(e,"priority")||"normal",o=tm(ur(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=om(o,r,t);return{provider:"claude",model:i,rule:i===no?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:qr,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:qr,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 nm(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(nm(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=qa();return{model:s,provider:Ja(s),rule:"default:global"}}function Bs(e){let r;if(!e.explicitModel?.trim()&&e.task&&Ds(e.task)){let o=Qw(e.task),s,i;if(o)s=o,i="task:provider_override";else{let a=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",l=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",c=typeof e.task.title=="string"?e.task.title.toLowerCase():"";s=om(a,l,c),i=s===no?"factory:claude_review":"factory:claude_implementation"}r={model:s,provider:"claude",rule:i,requestedModel:s}}else if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Zw(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Ja(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=rC(e.task);r={...o,requestedModel:o.model}}else{let o=qa();r={model:o,provider:e.explicitProvider?.trim()||Ja(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"||Gr(t.provider)&&(e.explicitProviderIsOperatorOverride||Ds(e.task)))return t;let n=Vp({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??qr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function sm(e,r,t){return e||r||t||qa()||Jr}function im(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function am(){return{maxTaskAttempts:im(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ft("harness.maxTaskAttempts",4))),dispatchCooldownMs:im(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ft("harness.dispatchCooldownMs",5e3)))}}N();import oC from"node:path";D();X();C();var za="kynver-harness:",lm="@runner:";function Xa(e){return e?.trim()?e.trim():null}function tC(e){let r=Xa(e);if(!r?.startsWith(za))return null;let t=r.slice(za.length),n=t.indexOf(lm);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Qa(e,r){let t=e.trim(),n=r.trim();return`${za}${t}${lm}${n}`}function Za(e,r){let t=Xa(r);return t?tC(e)===t:!1}function Hs(e){let r=Xa(e.workerLeaseOwner);return r&&Za(r,e.runId)?r:Qa(e.runId,e.runnerId)}import cm from"node:os";Pe();Pe();import nC from"node:os";function Fs(e,r){let t=(r??nC.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Pr(e){return e?.trim()?e.trim():null}function Je(e={}){let r=e.env??process.env;return{runnerId:Pr(r.KYNVER_RUNTIME_ID)??Pr(r.OPENCLAW_RUNTIME_ID)??Pr(r.HOSTNAME)??cm.hostname(),hostname:Pr(r.HOSTNAME)??cm.hostname(),profile:Pr(r.KYNVER_RUNNER_PROFILE)??Pr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Pr(r.KYNVER_HARNESS_REPO)??Pr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Kr()}}N();async function Jt(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 q(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await te(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 $s(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 Jt({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)&&$(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function um(e,r){return _(oC.join(E(e),"workers",v(r),"worker.json"),void 0)}async function Ks(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=K(r.baseUrl?String(r.baseUrl):void 0),s=await q(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):el,a=Je({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=um(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!F(p.pid)){u.push(d);continue}if(M(p).status==="done"){u.push(d);continue}let m=Hs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),g=await $s({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,h=await te(k,s,{leaseOwner:g.leaseOwner??m,leaseDurationMs:i,...g.leaseToken?{leaseToken:g.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(h.ok){l.push(d);continue}let R=h.response&&typeof h.response=="object"&&"reason"in h.response?String(h.response.reason??`http ${h.status}`):`http ${h.status}`;c.push({worker:d,reason:R})}return{renewed:l,failed:c,skipped:u}}function dm(e,r){let t=L(e);for(let n of Object.keys(t.workers||{})){let o=um(e,n);if(!(!o||o.taskId!==r||!F(o.pid)||M(o).status==="done"))return!0}return!1}we();D();D();import{existsSync as T_,mkdirSync as D_}from"node:fs";import zt from"node:path";var sC=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,iC="next-action-fix:";function js(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function pm(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:js(e)}function aC(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(iC)||t.includes("repair")||t.includes("unblock"))}function lC(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(sC);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=js(String(n.targetPrUrl??n.target_pr_url??"")),s=js(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?pm(o):null,targetPrBranch:s}}catch{return r}}function mm(e){if(!aC(e))return null;let r=lC(e.description),t=e.prUrl?pm(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??js(e.branch)}:null}function fm(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 gm(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=[...Xn(`worker.prompt.progress.${n}`).split(`
|
|
25
|
+
`),o],i=Xn(`worker.prompt.merge_gate.${n}`).split(`
|
|
26
|
+
`),a=Xn(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
27
|
+
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.",...Xn("worker.prompt.core_rules").split(`
|
|
28
|
+
`),"",...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?[...fm({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
29
|
+
`)}C();N();C();yt();import{closeSync as tl,existsSync as km,mkdirSync as mC,openSync as nl,statSync as fC,unlinkSync as hm}from"node:fs";import{spawn as gC}from"node:child_process";import hC from"node:os";import qe from"node:path";import{existsSync as oo,readdirSync as cC}from"node:fs";import zr from"node:path";var uC=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function dC(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 pC(e){let r=zr.join(e,"versions");if(!oo(r))return null;let t=null,n=-1;for(let o of cC(r,{withFileTypes:!0})){if(!o.isDirectory()||!uC.test(o.name))continue;let s=dC(o.name);s==null||s<=n||(n=s,t=zr.join(r,o.name))}return t}function Vs(e){let r=e?.trim()||zr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=zr.join(r,"node.exe"),n=zr.join(r,"index.js");if(oo(t)&&oo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=pC(r);if(!o)return null;let s=zr.join(o,"node.exe"),i=zr.join(o,"index.js");return!oo(s)||!oo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var rl="composer-2.5",kC=15e3,yC=6e4,RC=3e4;function bC(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function vC(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&km(qe.join(qe.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Vs(qe.dirname(e)):t?{nodeExe:e,indexJs:qe.join(qe.dirname(e),"index.js"),versionDir:qe.dirname(e)}:Vs();if(o)return bC(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 SC(){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=Vs(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=qe.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(km(t))return t}return"agent"}function wC(e,r){return rr({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:qe.basename(e)||"agent.cmd"}:{}})}function ym(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function ol(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 CC(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||qe.join(hC.homedir(),".kynver","locks");return mC(e,{recursive:!0}),qe.join(e,"cursor-agent-start.lock")}function _C(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=CC(),r=ol("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",yC),t=ol("KYNVER_CURSOR_START_LOCK_STALE_MS",RC),n=Date.now();for(;;)try{let o=nl(e,"wx");return tl(o),()=>{try{hm(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-fC(e).mtimeMs>t){hm(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);ym(250)}}var Rm={name:"cursor",defaultModel:rl,preflightModel(e){return Ga(e,rl)},start(e){let r=Ga(e.model,rl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=nl(e.stdoutPath,"a"),o=nl(e.stderrPath,"a"),s=["ignore",n,o],i=SC(),a=vC(i),l=_C(),c;try{c=gC(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:wC(i,a)})),ym(ol("KYNVER_CURSOR_START_LOCK_HOLD_MS",kC))}finally{l(),tl(n),tl(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 Gs={claude:Jp,codex:rm,cursor:Rm},bm=null;function vm(e){if(bm)return bm;let r=e?.trim();if(r){let o=Gs[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Gs).join(", ")}`);return o}let t=Ms(y().workerProvider),n=Gs[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Gs).join(", ")}`);return n}C();import{spawn as C_}from"node:child_process";import{existsSync as __,openSync as x_,closeSync as hf}from"node:fs";import P_ from"node:path";D();function Ys(e){return!!e.completionReportedAt?.trim()}function sl(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),$(r,e)}function xC(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function il(e){return!!(xC(e.completionBlocker)||e.completionOutcome==="rejected")}function Xr(e){return Ys(e)&&!il(e)}D();X();N();import po from"node:path";function al(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function so(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var PC=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function Sm(e){let r=al(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=so(r.outcome),n=so(r.detail)??so(r.error),o=al(r.task),s=al(r.closedTask),i=o?so(o.status):null,a=s?so(s.status):null,l=t!==null&&PC.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function wm(e){return e.taskAdvanced}D();ss();var EC="expert-lane-pr-review:",AC="plan-review-task",IC="scheduledjob:";function Cm(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function _m(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(EC)||r===AC||r.startsWith("daemon-review:"))return!0;if(r.startsWith(IC)&&e.parentTaskId){let n=Cm(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=Cm(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var xm=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,OC=new Set(Ep()),NC=/no commits between/i;function Pm(e){return!!(e&&NC.test(e))}function he(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Em(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:he(e.head)}function Am(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 TC(e,r,t){let n=r.trim();if(!n)return null;let o=t.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function DC(e,r){if(r.changedFiles.length>0)return!1;let t=he(e.personaSlug)?.toLowerCase();if(t&&OC.has(t))return!0;let n=he(e.routingRule)??"";return!!(n&&xm.test(n))}function MC(e,r){if(e.changedFiles.length>0)return!0;let t=he(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=TC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(he(e.headCommit)||Em(e.gitAncestry))}function Im(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(_m({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&&xm.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(DC(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 MC(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Om(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:he(r?.headCommit)??Em(e.gitAncestry),prUrl:he(r?.prUrl)??null}}import{spawnSync as UC}from"node:child_process";function Tm(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}we();function WC(e,r,t){try{let n=UC(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 qs={git:(e,r)=>oe(e,r),gh:(e,r)=>WC("gh",e,r)};function LC(e){return e.split(`
|
|
30
|
+
`).map(r=>r.trim()).find(Boolean)??""}function Dm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Tm(t.stdout)}function Qr(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Js(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 io(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=Qr(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Mm(e){let r=e.remoteBranch.trim();if(!r)return{ok:!1,detail:"missing remote branch"};let t=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${r}`]);return t.status!==0&&!/already up to date/i.test(t.stderr||t.stdout)?{ok:!1,detail:t.stderr||t.stdout||t.error||"git push to PR branch failed"}:{ok:!0}}function Um(e){let r=Js(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=BC(t.stdout)??Js(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 BC(e){let t=LC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}C();function Wm(e){return`t-${v(e)}-a`}function Lm(e,r){let t=Wm(r);if(e.headRefName.toLowerCase().includes(t))return!0;let n=r.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function ao(e){return e.trim().toLowerCase()}function Bm(e,r){if(!e.length)return null;if(r){let t=ao(r),n=e.find(o=>ao(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Hm(e,r){let t=ao(r);return e.filter(n=>ao(n.url)!==t).map(n=>n.url)}function Fm(e){try{let r=JSON.parse(e);return Array.isArray(r)?r.map(t=>({url:t.url?.trim()??"",number:Number(t.number)||0,headRefName:t.headRefName?.trim()??"",createdAt:t.createdAt?.trim()??"",body:t.body,title:t.title})).filter(t=>t.url&&t.number>0&&t.headRefName):[]}catch{return[]}}function HC(e){let r=new Set,t=[];for(let n of e){let o=ao(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function FC(e,r,t,n){let o=n.gh(e,["search","prs",t,"--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:Fm(o.stdout).filter(s=>Lm(s,t))}function $C(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=Wm(t);return Fm(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Lm(i,t))}function ll(e,r,t,n){let o=t.trim();if(!o)return[];let s=FC(e,r,o,n),i=$C(e,r,o,n);return HC([...s,...i])}function KC(e){let r=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function cl(e){let r=Hm(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=KC(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?t.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:t,failed:n}}function $m(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 jC(e){return e.gh(process.cwd(),["--version"]).status===0}function VC(e,r){return`AgentOS harness: ${e} (${r})`}function GC(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(`
|
|
31
|
+
`)}function dl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function YC(e){return dl(e.prUrlHint)??Am(e.status.finalResult)??dl(e.worker.taskPrUrl)??null}function JC(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??Qr(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=io({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Mm({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=Qr(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function ul(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Qr(e.snapshot.worktreePath,e.exec)??void 0};let r=io({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 pl(e,r=qs){let t=YC(e),n=Om(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Im({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?ul({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return ul({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!jC(r)){let S=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${S?`${S} 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=Dm(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 S=!1,P=!1,x=n.headCommit??Qr(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=io({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!A.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${A.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};S=A.committed,P=A.pushed,x=A.headCommit??x}else{let A=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(A.status!==0&&!/already up to date/i.test(A.stderr||A.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${A.stderr||A.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};P=A.status===0}return{ok:!0,prUrl:a,headCommit:x,committed:S,pushed:P}}let l=dl(e.worker.taskId),c=[];if(l){c=ll(n.worktreePath,i,l,r);let S=Bm(c);if(S){let P=JC({snapshot:n,canonical:S,workerName:e.worker.name,exec:r});return P.ok&&P.prUrl&&cl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:P.prUrl,exec:r}),P}}let u=Js(n.worktreePath,i,n.branch,r);if(u)return ul({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let d=n.changedFiles.length>0,p=!1,f=!1,m=n.headCommit??void 0,g=io({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:d,exec:r});if(d&&!g.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${g.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=g.committed,f=g.pushed,!g.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${g.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 S=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(S.status!==0&&!/already up to date/i.test(S.stderr||S.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${S.stderr||S.stdout||S.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};f=S.status===0}m=g.headCommit??m??Qr(n.worktreePath,r)??void 0;let k=m?$m(n.worktreePath,i,m,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:m,committed:p,pushed:f,created:!1};let h=e.run.base?.trim()||"main",R=Um({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:VC(e.worker.name,e.worker.runId),body:GC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!R.ok||!R.prUrl){if(Pm(R.detail))return{ok:!0,headCommit:m??void 0,committed:p,pushed:f};let S=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${S?`${S} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${R.detail?` (${R.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`."}}if(l&&R.prUrl){let P=[...c.length>0?c:ll(n.worktreePath,i,l,r),{url:R.prUrl,number:Number.parseInt(R.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];cl({worktreePath:n.worktreePath,repo:i,rows:P,canonicalPrUrl:R.prUrl,exec:r})}return{ok:!0,prUrl:R.prUrl,headCommit:m??void 0,committed:p,pushed:f,created:R.created}}X();wr();ma();D();X();C();import qC from"node:path";var zC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Km(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function XC(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 Er(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:XC(r);return{finalResult:r??t??"completed",summary:t}}function ml(e,r,t){if(Km(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Er(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),$(e.runId,e)}function QC(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 jm(e,r){let t=QC(r);if(t.size===0)return[];let n=L(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(qC.join(E(n.id),"workers",v(s),"worker.json"),void 0);if(!i?.taskId||Km(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!zC.has(a))continue;let l=M(i,{base:n.base,baseCommit:n.baseCommit});ml(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}Pn();function zs(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function ZC(e){let r=e.lastHeartbeatPhase?.trim();if(!r||r==="complete")return null;let t=e.lastHeartbeatSummary?.trim();return t?{summary:t,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:r,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function e_(e){let r=os(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function r_(e){let r=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${r}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:r,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function Xs(e){let{worker:r,status:t}=e;if(zs(t.finalResult)){let u=ae(r.heartbeatPath),d=or(u),p=zs(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Er(t)}}if(t.alive)return null;let n=Pt(r.stdoutPath);if(zs(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Er(u)}}let o=ae(r.heartbeatPath),s=or(o);if(zs(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Er(u)}}let i=e_(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Er(u)}}let a=ZC(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Er(u)}}let l=r_({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Er(c)}}function Qs(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Pn();function Zs(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 Vm(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 Gm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Ym(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function qm(e){let r=Ym(e);if(!r)return[];let t=Ym(r.worktreeHandoff),n=Gm(t?.disposableArtifactsRemoved);return n.length?n:Gm(r.disposableArtifactsRemoved)}function Jm(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function zm(e,r){let t=Zs(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Jm(o)));return t.every(o=>{let s=Jm(Vm(o));return n.has(s)})}function ei(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function t_(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 n_(e){let r=Xm(e.disposableArtifactsRemoved),t=qm(e.finalResult);return[...new Set([...r,...t])]}function Qm(e){let r=Xm(e.changedFiles),t=Zs(r),n=n_(e),o=t.length===0||zm(r,n);return ei(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`}:ei(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`}:ei(e.artifactBundlePath)||ei(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}:t_(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`}}C();C();import o_ from"node:path";var s_=/^[a-z0-9][a-z0-9._-]{0,127}$/i,i_=/^[a-z0-9][a-z0-9._-]{0,63}$/i,fl=new Set(["undefined","null"]),Zm="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function ri(e){let r=e.trim();if(!s_.test(r))throw new Error(`invalid run id: ${e}`);return r}function a_(e){let r=e.trim();if(!i_.test(r))throw new Error(`invalid worker name: ${e}`);return r}function gl(e){return typeof e=="string"?e.trim():""}function ze(e){let r=gl(e.run),t=gl(e.name);return(!r||fl.has(r))&&kr(`missing --run RUN_ID (${Zm})`),(!t||fl.has(t))&&kr(`missing --name WORKER_NAME (${Zm})`),{runId:ri(r),workerName:a_(t)}}function hl(e){let r=gl(e.run);return(!r||fl.has(r))&&kr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),ri(r)}function ef(e){let r=o_.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function rf(e,r,t){let n=await fetch(e,{method:"POST",headers:We(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 l_(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function tf(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function lo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function c_(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function u_(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 of(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function d_(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function co(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,$(e.runId,e))}function p_(e){e.completionBlocker&&(delete e.completionBlocker,$(e.runId,e))}function uo(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function m_(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function mo(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=L(n.runId),s=M(n,uo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Xr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&il(n)&&p_(n),!s.finalResult&&s.alive===!1){let x=Xs({worker:n,status:s});x&&Qs(n,x)&&($(n.runId,n),n=ue(r,t),s=M(n,uo(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let x=pl({worker:n,run:o,status:s});if(!x.ok)return co(n,x.reason),{ok:!1,reason:x.reason,nextAction:x.nextAction,completionBlocked:!0};(x.prUrl||x.headCommit)&&(s=M(n,uo(o)),s=m_(s,x))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let x=Qm({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!x.allowed){let A=x.detail??`worktree completion blocked (${x.state})`;return co(n,A),{ok:!1,reason:A,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),p=e.secret?String(e.secret):void 0,f=await q(p,i,{baseUrl:d});a&&(await $s({worker:n,agentOsId:i,baseUrl:d,secret:f}),n=ue(r,t));let m=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,g={...s};n.disposableArtifactsRemoved?.length&&(g.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?{...g,leaseToken:n.leaseToken}:g,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}},h=await rf(m,f,k);if((h.status===401||h.status===403)&&!p){let x=await _d(i,{baseUrl:d});x&&x!==f&&(f=x,h=await rf(m,f,k))}if(h.ok){let x=Sm(h.parsed);if(!wm(x)){let I=`completion acknowledged but board not advanced: ${x.detail??(x.routeOutcome?`harness completion returned ${x.routeOutcome}`:"harness completion did not advance the linked task")}`;co(n,I);let H={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return sl(n,n.runId,H),{ok:!1,httpStatus:h.status,response:h.parsed,reason:I,completionBlocked:!0}}co(n,void 0);let A=x.routeOutcome??"acknowledged",J={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};sl(n,n.runId,J),ml(n,s,{source:"harness-completion"});let V=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:A,...V?{prHandoff:{prUrl:V}}:{}}}let R=h.status===401||h.status===403,S=l_(h.parsed)??(R?"runner token unauthorized":"non-2xx response"),P=R?`completion replay rejected (${h.status}): ${S}`:`completion replay failed (${h.status}): ${S}`;return co(n,P),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function yl(e){try{let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=L(n.runId),s=M(n,uo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await mo(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 sf(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=L(n.runId),s=M(n,uo(o));se(po.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function f_(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 kl(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function g_(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=kl(e.task??e.taskId);t&&(r.task=t);let n=kl(e.worker??e.name);n&&(r.worker=n);let o=kl(e.status);return o&&(r.status=o),r}function h_(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 af(e,r){let t=g_(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>h_(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:Ar(n,"status"),attentionCounts:Ar(n,"attention"),lifecycleCounts:Ar(n,"lifecycleStage")}),e.controller&&(o.controller=uf(n)),o}function lf(e){let r=hl(e),t=e.full===!0||e.full==="true",n=af(t?fo(r):go(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:f_(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function cf(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=Et({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=of(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=tf(n.completionResponse),f=tf(p?.task),m=lo(p?.outcome),g=lo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(A=>typeof A=="string"&&A.trim().length>0):[],h=lo(f?.prUrl)??lo(p?.prUrl),R=lo(n.completionReportedAt),S=c_({finished:ie(o),completionBlocker:c,completionOutcome:m,completionReportedAt:R}),P=u_({completionBlocker:c,completionOutcome:m,completionReportedAt:R,finished:ie(o)}),x=d_({changedFiles:o.changedFiles,headCommit:s,prUrl:h??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 A=n.instructionPolicyEvidence;if(!A||typeof A!="object")return null;let J=A.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:h,handoffState:x,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:S,completionReportedAt:R,completionOutcome:n.completionOutcome??null,completionRouteStatus:g,completionRouteOutcome:m,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:P,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function k_(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&&!of(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function y_(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 Ar(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 nf(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 uf(e){let r=e.filter(nf),t=e.filter(n=>{if(nf(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 df(e,r,t){let n={runId:e.id,name:e.name,status:An(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:Ar(r,"status"),attentionCounts:Ar(r,"attention"),lifecycleCounts:Ar(r,"lifecycleStage")},n.controller=uf(r)),n}function R_(e){return e.status==="done"&&e.attention==="done"}function fo(e){let r=L(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(po.join(E(r.id),"workers",v(s),"worker.json"),void 0);return i?cf({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=df(r,n,!1);return se(po.join(E(r.id),"last-board.json"),o),o}function go(e){let r=L(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(po.join(E(r.id),"workers",v(i),"worker.json"),void 0);return a?k_(a)?y_(i,a):cf({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!R_(i)),s=df(r,o,!0);return s.status=An(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Ar(n,"status"),allAttentionCounts:Ar(n,"attention")},se(po.join(E(r.id),"last-board-compact.json"),s),s}async function pf(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=fo(t),s=K(e.baseUrl?String(e.baseUrl):void 0),i=await q(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await te(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 b_(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 mf(e){let r=hl(e),t=e.full===!0||e.full==="true",n=af(t?fo(r):go(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=b_(r)),console.log(JSON.stringify(n,null,2))}function ff(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=zo(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
32
|
+
`).filter(Boolean)){let i=kt(s),a=i?ju(i):s;a&&console.log(a)}}function gf(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t);if(!F(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(Rr(n.pid,"SIGTERM"),Ur(1500),F(n.pid)){Rr(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))}C();import{existsSync as ti}from"node:fs";import Zr from"node:path";import{fileURLToPath as v_}from"node:url";function S_(e,r){let t=Zr.resolve(e);for(;;){let n=Zr.join(t,r);if(ti(n))return n;let o=Zr.dirname(t);if(o===t)return null;t=o}}function w_(e){return S_(e,Zr.join("node_modules",".bin","tsx"))??"npx"}function Rl(e,r){if(e.endsWith(".ts")){let t=w_(Zr.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function ni(e){if(e.explicitCliPath)return ti(e.explicitCliPath)?Rl(e.explicitCliPath,e.nodeExecutable):null;let r=v_(new URL(".",e.importMetaUrl)),t=Zr.join(r,"cli.js");if(ti(t))return Rl(t,e.nodeExecutable);let n=Zr.join(r,"cli.ts");return ti(n)?Rl(n,e.nodeExecutable):null}var E_=5e3,A_=360*60*1e3,I_=3,O_=5e3;function N_(e){let{runId:r,workerName:t}=ze(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 qt(e){let r=N_(e),t=r.pollMs??E_,n=r.maxTotalMs??A_,o=r.completeAttempts??I_,s=r.completeBackoffMs??O_,i=ue(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(Xr(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=ue(r.run,r.name),Xr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=M(i);if(ie(u)||!F(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`};Ur(t)}let l,c;for(let u=1;u<=o;u++){let d=await mo({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&&Ur(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function kf(e){try{let r=await qt(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 yf(e){let r=e.nodeExecutable??process.execPath,t=ni({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!__(n))return;let o=P_.join(e.workerDir,"auto-complete.log"),s;try{s=x_(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=C_(t.command,a,pe({detached:!0,stdio:i,env:process.env}));return s!==void 0&&hf(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{hf(s)}catch{}return}}function Rf(e){let r=e.branch?.trim()||"unknown branch",t=e.pid!=null?`pid ${e.pid}`:"pid pending";return`Harness worker started: ${e.worker} (${t}, ${r})`}function bl(e){return JSON.stringify(e,null,2)}we();function bf(e,r,t){me(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=oe(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=oe(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)}}Pe();N();function vl(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=v(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||cr,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=vm(o.provider),i=o.model;if(s.preflightModel){let j=s.preflightModel(r.model);if(!j.ok)throw new Error(`model preflight failed for provider "${s.name}": ${j.note??"invalid model/provider combination"}`);j.normalized&&console.error(`[supervisor] ${n}: ${j.note}`),i=j.model}let{worktreesDir:a}=ee(),l=zt.join(E(e.id),"workers",n);D_(l,{recursive:!0});let c=zt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(T_(c))throw new Error(`worktree path already exists: ${c}`);me(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?bf(e.repo,c,u):me(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let p=zt.join(l,"stdout.jsonl"),f=zt.join(l,"stderr.log"),m=zt.join(l,"heartbeat.jsonl"),g=gm({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:m,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,h=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 R;try{R=s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:f,heartbeatPath:m,prompt:g})}catch(j){throw me(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),me(e.repo,["branch","-D",d],{allowFailure:!0}),j}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,h===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=h}let S=sm(R.model,i,s.defaultModel),P=y(),x=xe(process.env,P),A=Je().runnerId,J=Fs(x.boxKind),V={name:n,runId:e.id,status:"running",pid:R.pid,model:S,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:f,heartbeatPath:m,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},boxKind:x.boxKind,boxId:J,runtimeId:A,startedAt:new Date().toISOString()};if($(e.id,V),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:zt.join(l,"worker.json")}},e.status="running",Ue(e),V.agentOsId&&V.taskId){let j;try{j=yf({runId:e.id,workerName:n,workerDir:l,agentOsId:V.agentOsId})}catch(I){let H=`completion sidecar failed to spawn: ${I.message}`;V.completionBlocker=H,$(e.id,V)}if(j)j.pid&&(V.completionSidecarPid=j.pid,$(e.id,V));else{let I="completion sidecar failed to spawn (CLI not found or spawn error)";V.completionBlocker=I,V.completionSidecarSpawnFailedAt=new Date().toISOString(),$(e.id,V)}}return V}async function vf(e){let r=L(String(e.run)),t=typeof e.name=="string"?e.name.trim():"";t||(console.error("worker start failed: --name is required"),process.exit(1));let n=e.task?String(e.task):gu(e.taskFile?String(e.taskFile):void 0);n||(console.error("missing --task or --task-file"),process.exit(1));let o=!!(e.agentOsId&&e.taskId),s=e.localOnly===!0||e.localOnly==="true";!o&&!s&&(e.agentOsId||e.taskId)&&(console.error("worker start: board-linked workers require both --agent-os-id and --task-id (or pass --local-only for direct runs)"),process.exit(1));let i=e.wait===!0||e.wait==="true",a=e.emitJson===!0||e.emitJson==="true",l;try{l=vl(r,{name:t,task:n,ownedPaths:e.owned?String(e.owned).split(",").map(d=>d.trim()).filter(Boolean):[],model:e.model?String(e.model):void 0,branch:e.branch?String(e.branch):void 0,agentOsId:e.agentOsId?String(e.agentOsId):void 0,taskId:e.taskId?String(e.taskId):void 0,provider:e.provider?String(e.provider):void 0});let u={runId:r.id,worker:l.name,pid:l.pid,branch:l.branch,worktreePath:l.worktreePath,workerDir:l.workerDir};a?console.log(bl(u)):(console.log(Rf(u)),console.error(bl(u)))}catch(u){console.error(`worker start failed: ${u.message}`),process.exit(1)}if(!i||!l)return;let c=await qt({run:String(e.run),name:l.name,...l.agentOsId?{agentOsId:l.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...c})),c.outcome==="timed_out"&&(process.exitCode=1)}C();import{createHash as Sf}from"node:crypto";function Ir(e){let r=e.replace(/\r\n/g,`
|
|
33
|
+
`).trimEnd();return Sf("sha256").update(r,"utf8").digest("hex")}function Xt(e){if(e==null)return null;let r=e.trim();return r?Sf("sha256").update(r,"utf8").digest("hex"):null}N();var re=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function ho(e,r){return e===401||e===403?new re("auth",r,e):e>=500?new re("server",r,e):new re("permanent",r,e)}function Sl(e){let r=e instanceof Error?e.message:String(e);return/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|fetch failed|network/i.test(r)?new re("network",r):new re("tool_interruption",r)}function wf(e){return e!=="permanent"}function si(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function ii(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function Cf(e,r,t={}){let n=K(t.baseUrl),o=t.apiKey??Q(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:si(o)}),l=await ii(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw ho(a.status,c)}return l}catch(a){throw a instanceof re?a:Sl(a)}}async function _f(e,r={}){let t=K(r.baseUrl),n=r.apiKey??Q(),o=r.fetchFn??fetch,s=e.agentOsSlug;try{if(e.operation==="create"){let p=`${t}/api/agent-os/${encodeURIComponent(s)}/plans`,f={title:e.title,summary:e.summary??null,slug:e.planSlug??null,sourceRefs:oi(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:oi(e)}},m=await o(p,{method:"POST",headers:si(n),body:JSON.stringify(f)}),g=await ii(m);if(!m.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${m.status})`;throw ho(m.status,h)}let k=g;return{planId:k.plan.id,versionId:k.version.id,versionNumber:k.version.versionNumber}}let i=e.planId;if(!i)throw new re("permanent","planId is required for this operation");if(e.operation==="update_metadata"){let p=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}`,f={title:e.title,summary:e.summary??null,sourceRefs:oi(e)},m=await o(p,{method:"PATCH",headers:si(n),body:JSON.stringify(f)}),g=await ii(m);if(!m.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${m.status})`;throw ho(m.status,h)}let k=g;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:oi(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:si(n),body:JSON.stringify(l)}),u=await ii(c);if(!c.ok){let p=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw ho(c.status,p)}let d=u;return{planId:d.version.planId,versionId:d.version.id,versionNumber:d.version.versionNumber}}catch(i){throw i instanceof re?i:Sl(i)}}function oi(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as M_}from"node:crypto";function ai(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:Xt(e.summary),bodyHash:Ir(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return M_("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as xf}from"node:fs";import{homedir as U_}from"node:os";import Qt from"node:path";function li(){let e=process.env.KYNVER_STATE_ROOT;return e?Qt.resolve(e):Qt.join(U_(),".kynver","state")}function ci(){return Qt.join(li(),"plan-outbox")}function W_(){return Qt.join(li(),"plan-outbox-archive")}function et(){let e=ci(),r=W_();return xf(e,{recursive:!0}),xf(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function ko(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=Qt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(Qt.join("/var","folders"))}import{existsSync as wl,readFileSync as Ef,renameSync as Pf,readdirSync as L_,writeFileSync as Cl,unlinkSync as NH}from"node:fs";import Le from"node:path";import{randomUUID as B_}from"node:crypto";var H_=12;function Zt(){let{outboxDir:e}=et(),r=L_(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=xl(Le.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function _l(e){for(let r of Zt())if(r.idempotencyKey===e)return r;return null}function xl(e){if(!wl(e))return null;try{return JSON.parse(Ef(e,"utf8"))}catch{return null}}function Af(e){let{outboxDir:r}=et(),t=Le.join(r,e.bodyPath);return Ef(t,"utf8")}function Pl(e,r){let{outboxDir:t}=et(),n=new Date().toISOString(),o=r.existing?.id??B_(),s=r.existing?.bodyPath??`${o}.body.md`,i=Le.join(t,`${o}.json`),a=Le.join(t,s);r.existing||Cl(a,e.body,"utf8");let l={id:o,idempotencyKey:ai(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:Ir(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??H_,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return Cl(i,`${JSON.stringify(l,null,2)}
|
|
34
|
+
`,{mode:384}),l}function If(e){let{outboxDir:r}=et(),t=Le.join(r,`${e.id}.json`);Cl(t,`${JSON.stringify(e,null,2)}
|
|
35
|
+
`,{mode:384})}function Of(e){let{outboxDir:r,archiveDir:t}=et(),n=Le.join(r,`${e.id}.json`),o=Le.join(r,e.bodyPath),s=Le.join(t,`${e.id}.json`),i=Le.join(t,e.bodyPath);wl(n)&&Pf(n,s),wl(o)&&Pf(o,i)}function yo(e){let{outboxDir:r}=et();return{jsonPath:Le.join(r,`${e.id}.json`),bodyPath:Le.join(r,e.bodyPath)}}function Nf(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 Tf(e,r,t={}){let n=await Cf(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new re("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=Xt(r.summary),a=Xt(o.summary);if(i!==a)throw new re("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new re("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new re("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=Ir(l);if(r.bodyHash&&c!==r.bodyHash)throw new re("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 Df(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:Ir(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var Mf="persisted and read back",F_="queued for retry",El="failed and needs action";async function Ro(e,r={}){e.bodyPathHint&&ko(e.bodyPathHint);let t=ai(e),n=_l(t);if(n?.readbackEvidence)return{userStatus:Mf,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Uf(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??_f,s=r.verifyReadback??Tf;try{let i=await o(e,r),a={...e,planId:i.planId},l=Df(a,i),c=await s(e.agentOsSlug,$_(e,l),r);return n&&Of(n),{userStatus:Mf,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof re?i:new re("tool_interruption",i instanceof Error?i.message:String(i));if(!wf(a.kind)){let l=Pl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=yo(l),u=Wf(l,a.message);return{userStatus:El,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Uf(e,a.message,a.kind,n)}}function $_(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Uf(e,r,t,n){let o=Pl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=yo(o);if(o.retryCount>=o.maxRetries){let i=Wf(o,r);return{userStatus:El,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:F_,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function Wf(e,r){let t={...e,queueStatus:"failed",userStatus:El,lastError:r,updatedAt:new Date().toISOString()};return If(t),t}import K_ from"node:path";async function Al(e={},r={}){let t=Zt().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=Af(s),a=Nf(s,i),l=await Ro(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 Il(e){let r=K_.join(ci(),`${e}.json`);return xl(r)}function Ol(e){let r=yo(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(`
|
|
36
|
+
`)}function Nl(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 Tl(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await te(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 Bf}from"node:child_process";import{spawnSync as j_}from"node:child_process";function Lf(){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=j_("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 Hf=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),V_=new Set(["CLEAN","HAS_HOOKS"]);function Ml(e){return e?.trim()?["--repo",e.trim()]:[]}function Ff(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function $f(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 bo(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function G_(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&&Hf.has(i))){if(i){n.push(`${bo(s)}=${i}`);continue}if(!(l&&Hf.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${bo(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${bo(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${bo(s)}=${a}`);continue}t.push(`${bo(s)}=PENDING`)}}}return{pending:t,failed:n}}function Y_(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 J_=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,q_=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,z_=/^docs[(:]/i,X_=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function Q_(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=z_.test(r)||X_.test(t),o=J_.test(t),s=q_.test(t);return n||o||s||e.vercelCheckSuccess===!0}function Z_(e){if(!Q_({title:e.title,body:e.body,vercelCheckSuccess:Y_(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 ex(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(!V_.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=G_(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(", ")}`);Z_(e)}function rx(e){try{return ex(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function tx(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 nx(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 ox(e,r){if(!r?.trim())return;let t=Bf("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}`)&&Bf("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function Kf(e){let r=e.cwd??process.cwd(),t=e.exec??qs,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=Lf();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=$f(t,r,["pr","view",n,...Ml(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=rx(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,...Ml(e.repo),"--squash"]);if(l.status!==0){let u=Dl(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=Dl(t,r,a,e.repo);c||(c=Dl(t,r,a,e.repo));try{let u=nx(t,r,e.repo);tx(t,r,u,s.headRefName),ox(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 Dl(e,r,t,n){try{let o=$f(e,r,["pr","view",t,...Ml(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}N();async function jf(e){let r=await q(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 te(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Vf(){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(`
|
|
37
|
+
`)}var sx="dispatch_start_readback_failed:";function rt(e){return`${sx} ${e.trim()}`}function ix(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 ax(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:rt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:rt(`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:rt(`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:rt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=ix(o);return a?{ok:!1,error:rt(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:rt(`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:rt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function Gf(e){let r=await Jt({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return ax({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}C();D();function Yf(e,r,t){r.pid&&F(r.pid)&&(Rr(r.pid,"SIGTERM"),F(r.pid)&&Rr(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return $(e,n),n}D();var el=3600*1e3;function Jf(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function qf(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function lx(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,p=t.contextEnvelopeReady===!0,f=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,m=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof f?.promptMarkdown=="string"?f.promptMarkdown:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:f,memoryQualityPromptMarkdown:m,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:p}}function cx(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function ux(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("",Vf());let n=Nl(e);if(n?.outboxId){let o=Il(n.outboxId);o?t.push("",Ol(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
38
|
+
`)}function dx(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 tt(e){let r=e.pipeline===!0||e.pipeline==="true";try{let mt=function(){return Z.filter(w=>w.started).length},Fe=function(w,b){Ma({runId:i.id,agentOsId:a,phase:w,startedCount:mt(),outcomeCount:Z.length,cappedStarts:P,...b})},ke=function(){return Z.some(w=>(typeof w.error=="string"?w.error:"").startsWith("dispatch_start_readback_failed:"))},W=function(w){return w.landPrDispatch===!0?!0:w.task?.executor==="land_pr"};var t=mt,n=Fe,o=ke,s=W;let i=L(String(T(String(e.run||""),"--run"))),a=String(T(String(e.agentOsId||""),"--agent-os-id")),l=K(e.baseUrl?String(e.baseUrl):void 0),c=await q(e.secret?String(e.secret):void 0,a,{baseUrl:l}),d=!(e.execute===!0||e.execute==="true"),p=Je({runId:i.id}),f=Qa(i.id,p.runnerId),m=e.diskPath?je({diskPath:String(e.diskPath)}):je({diskPath:i.repo}),g=sr({runId:i.id}),k=dx(e),h=k.size>0,R=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,S=h?Math.min(R,k.size):R,P=d?S:Math.min(S,g.slotsAvailable);if(!d&&P<=0){let w={runId:i.id,agentOsId:a,dryRun:!1,skipped:!0,reason:g.reason??"no resource slots",resourceGate:g};if(r)return{ok:!0,...w};console.log(JSON.stringify(w,null,2));return}let x=Os(i.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let w=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/lane-hygiene`;try{await te(w,c,{agentOsId:a,dryRun:!1,includeBoardReconcile:!0},{agentOsId:a,baseUrl:l})}catch(b){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${b.message}`)}}let A=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/tasks/dispatch-next`,J=w=>({agentOsId:a,dryRun:d,maxStarts:w,leaseOwner:f,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):el,runnerDiskGate:m,runnerResourceGate:g,activeHarnessWorkers:x,runnerPresence:p,harnessBoardSnapshot:fo(i.id),...e.lane?{lane:Ip(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(b=>b.trim()).filter(Boolean)}:{}}),V=Cp(),j=async w=>{let b=await te(A,c,J(w),{agentOsId:a,baseUrl:l,timeoutMs:V})??{ok:!1,status:0,response:null},O=b.response;return{dispatch:b,result:O?.result}},I=await j(h||d?P:1);if(!I.dispatch.ok||!I.result){let w={runId:i.id,agentOsId:a,action:"dispatch",httpStatus:I.dispatch.status,response:I.dispatch.response,authRefreshed:I.dispatch.refreshedAuth===!0,authRefreshFailure:I.dispatch.authRefreshFailure};if(r)return{ok:!1,...w};console.log(JSON.stringify(w,null,2)),process.exit(1)}let H=I.result;if(d){let w=Jf(H),b=qf(H),O={runId:i.id,agentOsId:a,dryRun:!0,wouldStart:H.started.map(G=>({taskId:G.task.id,title:G.task.title,reason:G.reason})),skipped:H.skipped.map(G=>({taskId:G.task.id,skipReason:G.skipReason,reason:G.reason})),diskGate:H.diskGate,resourceGate:H.resourceGate,inspected:H.inspected,pagesScanned:H.pagesScanned??null,candidatesExhausted:H.candidatesExhausted??null,capacityIdle:w?.capacityIdle===!0,admissionExhaustion:w,dispatchSkipDrain:b};if(r)return{ok:!0,...O};console.log(JSON.stringify(O,null,2));return}let Mr=am(),Z=[],gr=[],pt=Number(H.inspected)||0,He=!1;async function Y(w,b,O){let G=await Tl({baseUrl:l,secret:c,agentOsId:a,taskId:String(w.id),leaseOwner:f,failureDetail:b}),le={taskId:w.id,started:!1,error:b,released:G.released,releaseResponse:G.releaseResponse,...O};return Z.push(le),Fe("outcome",{lastOutcome:le}),!1}async function ye(w){let b=w.task,O=String(b.id);if(h&&!k.has(O))return Y(b,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let G=b.prUrl?String(b.prUrl):"";if(!G)return Y(b,"land_pr task missing prUrl");try{let le=await Kf({prUrl:G,repo:Ff(G),cwd:i.repo}),gt=await jf({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:b,report:le});return gt.ok?(Z.push({taskId:O,started:!0,landPr:!0,outcome:le.outcome,completionStatus:gt.status}),!0):Y(b,`land_pr completion POST failed (HTTP ${gt.status})`,{landPr:!0,outcome:le.outcome})}catch(le){return Y(b,le.message)}}async function ve(w){let b="duplicate_dispatch_prevented: live local worker already owns this task",O=await Tl({baseUrl:l,secret:c,agentOsId:a,taskId:String(w.id),leaseOwner:f,failureDetail:b}),G={taskId:w.id,started:!1,error:b,alreadyRunning:!0,nonFatal:!0,released:O.released,releaseResponse:O.releaseResponse};return Z.push(G),Fe("outcome",{lastOutcome:G}),!1}async function hr(w){let b=w.task,O=lx(w),G=String(b.id);if(h&&!k.has(G))return Y(b,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let le=cx(b.personaSlug);if(le&&(!O?.personaInjectionReady||!O.personaMarkdown))return Y(b,`persona_injection_required: missing anchored context-envelope persona block for "${le}"`);if(dm(i.id,G))return ve(b);let gt=Number(b.attempt)||1;if(gt>Mr.maxTaskAttempts)return Y(b,`task attempt ${gt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Mr.maxTaskAttempts})`);let yn=b.leaseToken?String(b.leaseToken).trim():"";if(!yn)return Y(b,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let gR=v(`t-${b.id}-a${b.attempt}`),ht=Bs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Op(b)});try{let zi=b.planId?String(b.planId):void 0,Vo=mm({title:b.title?String(b.title):void 0,description:b.description?String(b.description):null,executorRef:b.executorRef?String(b.executorRef):null,prUrl:b.prUrl?String(b.prUrl):null,branch:b.branch?String(b.branch):null}),$e=vl(i,{name:gR,task:ux(b,a),ownedPaths:e.owned?String(e.owned).split(",").map(hR=>hR.trim()).filter(Boolean):[],model:ht.model,provider:ht.provider,routingRule:ht.rule,requestedModel:ht.requestedModel,agentOsId:a,taskId:String(b.id),planId:zi,branch:Vo?.targetPrBranch??void 0,executorRef:b.executorRef?String(b.executorRef):void 0,parentTaskId:b.parentTaskId?String(b.parentTaskId):void 0,taskTitle:b.title?String(b.title):void 0,taskPrUrl:Vo?.targetPrUrl??(b.prUrl?String(b.prUrl):void 0),repairTargetPrUrl:Vo?.targetPrUrl,repairTargetBranch:Vo?.targetPrBranch??void 0,instructionPolicyMarkdown:O?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyEvidence:O?.instructionPolicyEvidence??null,memoryQualityCapture:O?.memoryQualityCapture??null,memoryQualityPromptMarkdown:O?.memoryQualityPromptMarkdown??null,personaMarkdown:O?.personaMarkdown??null,personaSlug:O?.personaSlug??le,personaEvidence:O?.personaEvidence??null,contextEnvelopeMarkdown:O?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:O?.contextEnvelopeEvidence??null,leaseOwner:f,leaseToken:yn,dispatched:!0}),Go=await Gf({agentOsId:a,taskId:String(b.id),leaseOwner:f,expectedLeaseToken:yn,worker:$e,baseUrl:l,secret:c});if(!Go.ok)return Yf(i.id,$e,Go.error??"dispatch_start_readback_failed"),Y(b,Go.error??"dispatch_start_readback_failed",{readback:Go.detail??null});$e.leaseToken!==yn&&($e.leaseToken=yn,$e.leaseOwner=f,$(i.id,$e));let du={taskId:b.id,started:!0,worker:$e.name,pid:$e.pid,branch:$e.branch,model:$e.model,provider:ht.provider,routingRule:ht.rule,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(O?.instructionPolicyEvidence?.ruleSlugs)?O.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:O?.personaSlug??le,personaOperatingRuleCount:O?.personaEvidence?.operatingRuleCount??null};return Z.push(du),Fe("worker_started",{lastOutcome:du}),O?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${G}: operating-rules policy injected fingerprint=${O.instructionPolicyFingerprint}`),O?.personaSlug&&console.error(`[dispatch] task ${G}: persona context injected slug=${O.personaSlug}`),O?.contextEnvelopeReady&&console.error(`[dispatch] task ${G}: context envelope injected anchor=${O.contextEnvelopeEvidence?.anchorTaskId??G}`),!0}catch(zi){return Y(b,zi.message)}}let Se=new Set;async function $o(w){let b=w.task,O=String(b.id);if(Se.has(O))return Y(b,"dispatch_retry_loop_prevented: task already failed to start this tick");let G=W(w)?await ye(w):await hr(w);return G||Se.add(O),G}for(let w of H.started)await $o(w);if(gr.push(...H.skipped??[]),h)for(let w of gr){let b=String(w.task.id);k.has(b)&&Z.push({taskId:b,started:!1,error:`exact_target_not_started:${w.skipReason}`,skipReason:w.skipReason,detail:w.reason??null,requestedTargetTaskIds:[...k]})}for(;!h&&Z.length<P;){if(ke()){let O={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};Z.push(O),Fe("circuit_breaker",{lastOutcome:O});break}let w=await j(1);if(!w.dispatch.ok||!w.result){let O=_p(w.dispatch.response),G=mt();He=O&&G>0;let le={started:!1,error:"dispatch_next request failed during top-up",httpStatus:w.dispatch.status,response:w.dispatch.response,...He?{nonFatal:!0,partialTopUp:!0}:{}};Z.push(le),Fe("top_up_failed",{partialTopUpInterrupted:He,lastOutcome:le});break}pt+=Number(w.result.inspected)||0,gr.push(...w.result.skipped??[]);let b=w.result.started??[];if(b.length===0)break;for(let O of b){if(Z.length>=P)break;await $o(O)}}let Ko=Z.filter(w=>w.started).length,ft=Jf(H),jo=qf(H),au=Ko===0&&(ft?.capacityIdle===!0||Number(H.resourceGate?.slotsAvailable)>0);if(au&&ft?.summary){let w=ft.skipReasonCounts?.retry_ceiling_exceeded??0,b=H.overAttemptIdleRecovery??ft.overAttemptIdleRecovery,O=b?.attempted===!0?`; over_attempt_recovery minted=${b.minted??0} started=${b.started??0}`:w>0?"; over_attempt_recovery not attempted":"",G=jo?`; dispatch_skip_drain scanned=${jo.scanned??0} advanced=${jo.advanced??0}`:"";console.error(`[dispatch] ${ft.summary}${w>0?`; retry_ceiling_exceeded=${w}`:""}${O}${G}`)}let lu={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:f,startedCount:Ko,capacityIdle:au,admissionExhaustion:ft,dispatchSkipDrain:jo,outcomes:Z,skipped:gr.map(w=>({taskId:w.task.id,skipReason:w.skipReason})),inspected:pt,pagesScanned:H.pagesScanned??null,candidatesExhausted:H.candidatesExhausted??null,diskGate:H.diskGate,resourceGate:H.resourceGate,...He?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:V},cu=w=>!w.started&&w.nonFatal!==!0,fR=Z.some(cu),uu=He&&Ko>0?!0:!fR;if(Ma({runId:i.id,agentOsId:a,phase:"complete",partial:He,startedCount:Ko,ok:uu}),r)return{ok:uu,...lu};console.log(JSON.stringify(lu,null,2)),Z.some(cu)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var px=1;function en(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 mx(e){let{maxStarts:r,...t}=e;return t}async function Ul(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=mx(e);if(t.targetTaskId||t.targetTaskIds){let u=await tt({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:en(u)}}let n=Math.min(r,px),o=Math.max(0,r-n),s=await tt({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=en(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await tt({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=en(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function zf(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 fx(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function vo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function gx(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Xf(e,r){let t=fx(r),n=vo(t?.recommendedMaxStarts),o=vo(t?.actionableReady),s=vo(t?.queuedTasks),i=vo(t?.boardAdvancedThisTick)??0,a=vo(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 p=gx("KYNVER_DAEMON_MAX_DISPATCH_STARTS");p!==null&&(u=Math.min(u,p));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 Yx from"node:path";D();Lr();X();C();import hx from"node:path";var kx=new Set(["running","dispatching","pending","queued","needs_attention"]),dr=new Set(["completed","failed","cancelled","done"]);function nt(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=_(hx.join(E(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let l=M(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Tt(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function So(){let e=[];for(let r of z()){if(!kx.has(r.status))continue;let t=nt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ue(r),e.push({runId:r.id,from:n,to:t})}return e}D();Lr();X();C();wr();Pn();import{existsSync as Tr,lstatSync as Px,readdirSync as Ex,readlinkSync as Ax,renameSync as jl,unlinkSync as Ix}from"node:fs";import Xe from"node:path";_e();C();import Be from"node:path";var yx=`${Be.sep}runs${Be.sep}runs${Be.sep}`;function ui(e){return e.includes(yx)}function Wl(e,r){return Be.join(Ce(ce(e)),v(r))}function Or(e,r,t){return Be.join(Wl(e,r),"workers",v(t))}function Qf(e,r,t){let n=ce(e);return Be.join(n,"runs","runs",v(r),"workers",v(t))}function Ll(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function ot(e){return{workerJsonPath:Be.join(e,"worker.json"),stdoutPath:Be.join(e,"stdout.jsonl"),stderrPath:Be.join(e,"stderr.log"),heartbeatPath:Be.join(e,"heartbeat.jsonl"),lastStatusPath:Be.join(e,"last-status.json")}}function Zf(e){let r=ot(Or(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!ui(e.statusPath)?e.statusPath:r}import{existsSync as Nr,mkdirSync as Rx,readdirSync as rg,renameSync as bx,statSync as Bl}from"node:fs";import ne from"node:path";wr();_e();D();C();var wo=900*1e3,vx=3600*1e3;function tg(e,r){let t=ne.resolve(e),n=ne.resolve(Ce(r)),o=ne.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ne.isAbsolute(o)}function Hl(e){if(!Nr(e))return[];try{return rg(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Fl(e){let r=ne.join(e,"workers");if(!Nr(r))return[];try{return rg(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function ng(e){return ne.join(e,"archived-workers")}function Sx(e,r){let t=ne.join(ng(e),v(r));return Nr(t)?`${t}-${Date.now()}`:t}function eg(e,r,t){if(!Nr(e))return!1;try{let n=r-Bl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function og(e,r=Date.now(),t=wo){if(!Nr(e))return!1;let n=ot(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&F(o.pid))return!0;let s=ae(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(eg(n.stdoutPath,r,t)||eg(n.heartbeatPath,r,t))}function wx(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-Bl(ne.join(e,"worker.json")).mtimeMs}catch{return 0}}function Cx(e,r,t,n){if(og(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=wx(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 rn(e,r=Date.now(),t=wo){for(let n of Fl(e))if(og(ne.join(e,"workers",n),r,t))return!0;return!1}function _x(){return{repo:Ae()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function xx(e,r){let t=ne.join(Ce(e),v(r));if(!Nr(t))return null;let n=Fl(t);if(n.length===0)return null;let o;try{o=Bl(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Or(e,r,a);s[a]={workerDir:l,statusPath:ne.join(l,"worker.json")}}let i=rn(t);return{id:r,name:r,..._x(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function $l(e){let r=ce(e??be()),t=Ce(r),n=[];for(let o of Hl(t)){let s=ne.join(t,o,"run.json");if(Nr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=xx(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ue(i),n.push({runId:o,action:"repaired_run_json",reason:rn(ne.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Kl(e,r={}){let t=ce(e??be()),n=Ce(t),o=r.now??Date.now(),s=r.archiveAgeMs??vx,i=[];$l(t);for(let a of Hl(n)){let l=ne.join(n,a),c=ne.join(l,"run.json"),u=_(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...Fl(l)]),p=!1;for(let f of d){let m=ne.join(l,"workers",v(f)),g=ne.join(m,"worker.json"),k=_(g,void 0);if(!k){let S=ne.join(ng(l),v(f));if(Nr(S)&&(u.workers[v(f)]||u.workers[f])){delete u.workers[v(f)],delete u.workers[f],p=!0,i.push({runId:u.id,worker:f,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:S});continue}i.push({runId:u.id,worker:f,action:"skipped",reason:"worker.json missing"});continue}let h=Cx(m,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:f,action:"skipped",reason:h.reason});continue}let R=Sx(l,f);Rx(ne.dirname(R),{recursive:!0}),bx(m,R),delete u.workers[v(f)],delete u.workers[f],p=!0,i.push({runId:u.id,worker:f,action:"archived",reason:h.reason,archivePath:R})}p&&Ue(u)}return{workers:i}}function sg(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of Hl(n)){let s=ne.join(n,o);rn(s,r)&&t.add(`${e}\0${o}`)}return t}D();C();function Ox(e,r){let t=Wl(e,r),n;try{n=Px(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Xe.resolve(Xe.dirname(t),Ax(t));if(rn(o)||rn(t))return null;let s=`${t}.materialize-${Date.now()}`;return jl(o,s),Ix(t),jl(s,t),o}function Nx(e){let r=[];for(let t of Ll()){let n=Xe.join(e.fromDir,t),o=Xe.join(e.toDir,t);!Tr(n)||Tr(o)||(jl(n,o),r.push(t))}return r}function ig(e,r){let t=ot(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 Tx(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 Dx(e){let r=ot(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=Tr(r.stdoutPath),o=Tr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Pt(r.stdoutPath):{finalResult:null},a=o?ae(r.heartbeatPath):ae(""),l=or(a),c=Tx({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:Xe.join(ee().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}),ig(u,e.canonicalDir),u}function Mx(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Or(r,e.id,o),a=Xe.join(i,"worker.json");(ui(s.workerDir)||ui(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ue(e)),t}function Ux(e){let r=[],t=Or(e.harnessRoot,e.run.id,e.workerName),n=Qf(e.harnessRoot,e.run.id,e.workerName),o=ot(t),s=Nx({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=Zf({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&Tr(o.workerJsonPath)&&(a=_(o.workerJsonPath,void 0)),!a){let l=Dx({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return $(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=Tr(t),u=Ll().some(d=>Tr(Xe.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:Xe.join(ee().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 $(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 ig(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",$(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 Wx(e,r){let t=Xe.join(E(e.id),"workers");if(!Tr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of Ex(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function ag(){let{harnessRoot:e}=ee(),r=$l(e),t=[];for(let n of z()){let o=Ox(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),Mx(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 Wx(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Or(e,n.id,i),statusPath:Xe.join(Or(e,n.id,i),"worker.json")}},Ue(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(...Ux({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}wr();as();X();D();Lr();C();import{execFileSync as lg}from"node:child_process";import cg 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 Lx(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 Bx(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function Hx(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 Fx(e){let r=null;if(typeof e=="string"?r=It(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 $x(e){try{let n=lg("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=lg("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 Kx(e){let r=ae(e.heartbeatPath);return e.completionSnapshot?.finalResult??or(r)}function jx(e){let r=new Map,t=E(e.id);for(let n of fe(e)){let o=_(cg.join(t,"workers",v(n),"worker.json"),void 0);if(o)for(let s of Fx(Kx(o))){let i=Lx(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function Vx(e,r){let t=ae(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,Bx(r)].filter(Boolean).join(`
|
|
39
|
+
`);return Hx(n)}function Gx(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Gl(e={}){let r=e.lookupPr??$x,t=[],n=new Map;for(let o of z()){let s=jx(o),i=E(o.id);for(let a of fe(o)){let l=cg.join(i,"workers",v(a),"worker.json"),c=_(l,void 0);if(!c||!Gx(c))continue;let u=M(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let f of Vx(c,u.finalResult)){if(d=s.get(f)??null,!d){let m=o.repo||c.worktreePath,g=`${m}#${f}`,k=n.has(g)?n.get(g)??null:r({repoDir:m,prNumber:f});n.has(g)||n.set(g,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 p=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=p,c.reconcileReason="local-only needs_attention superseded by merged PR",$(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 Jx=900*1e3;function qx(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function ug(e,r){let t=Xs({worker:e,status:r}),n=t?Qs(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function Co(){let e=ag();if(qx()){let s=Gl(),i=Kl();return{workers:[],finalizedRuns:So(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of fe(s)){let a=Yx.join(E(s.id),"workers",v(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=M(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=ug(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,$(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=ug(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,$(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&&F(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,p=!Number.isFinite(u)||t-u>Jx,f=Number.isFinite(d)&&t-d>Nt;if(p&&f){Rr(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,$(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=Gl(),o=Kl();return{workers:r,finalizedRuns:So(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function dg(){let e=Co(),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))}Mt();N();Pe();import zx from"node:os";function di(e,r={}){let t=(r.boxKind??Ke(y())).trim().toLowerCase()||"forge",n=r.hostLabel??zx.hostname();return{boxId:r.boxId??Fs(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();ss();X();N();import Xx from"node:path";D();X();C();async function _o(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=L(String(T(String(e.run||""),"--run"))),n=String(T(String(e.agentOsId||""),"--agent-os-id")),o=K(e.baseUrl?String(e.baseUrl):void 0),s=await q(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Je({runId:t.id}).runnerId,a=await pf({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let f=_(Xx.join(E(t.id),"workers",v(p),"worker.json"),void 0);if(!f||!f.dispatched||!f.taskId)continue;let m=M(f);if(m.alive||m.finalResult||f.completionReportedAt)continue;let g=Hs({runId:t.id,workerLeaseOwner:f.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(f.taskId))}/release`,h;try{h=await te(k,s,{agentOsId:n,leaseOwner:g},{agentOsId:n,baseUrl:o})}catch(R){h={ok:!1,error:R.message}}l.push({worker:p,taskId:f.taskId,pid:f.pid,released:h.ok===!0||h.response?.ok===!0,response:h.response??h})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await te(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(p){u={ok:!1,error:p.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)}}C();X();D();C();import Qx from"node:path";N();async function pg(e){let r=K(e.baseUrl),t=await q(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 te(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 mg(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=_(Qx.join(E(t.id),"workers",v(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=M(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await pg({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,$(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}In();N();Pe();function Zx(e=process.env){let r=y();return Ke(r,e)!=="forge"}function fg(e,r=process.env){if(Zx(r))return e?.maxConcurrentWorkers??void 0}async function gg(e,r){let t=K(r.baseUrl?String(r.baseUrl):void 0),n=await q(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Ns(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}}N();Pe();_e();import De from"node:path";is();import fi from"node:path";we();X();var Yl=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function hg(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Yl)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Oe(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!hg(n)})}function st(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 xo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Oe(e.changedFiles).length>0:!!(st(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}C();function Po(e){return e.status||(e.status=M(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Jl(e,r){if(e.status)return Oe(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Rn(e.worktreePath);return Oe(t).length>0}function eP(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function ql(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=eP(e);if(o&&!F(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Rn(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"}:Xo(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??st(s)};return e.status=u,u}return Po(e)}X();X();wr();C();function zl(e,r=Date.now(),t=wo){let n=ae(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function pi(e,r=Date.now(),t=wo){return F(e.pid)?!0:zl(e,r,t)}function rP(e,r){return r?r.runTerminalCache.derive(e.run):nt(e.run)}function pr(e,r=Date.now()){return pi(e.worker,r)}function Xl(e,r){return dr.has(e.run.status)?!1:rP(e,r)!==null}function kg(e,r,t=Date.now()){if(pr(e,t))return!0;if(dr.has(e.run.status)||Xl(e,r))return!1;let n=Po(e);return ie(n)?!1:!!pr(e,t)}is();X();function yg(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(pr(e))return!0;let n=r??Po(e);return!!(!ie(n)||xo(n)||Oe(n.changedFiles).length>0||At({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:st(n.finalResult)}).blocked)}we();C();import{existsSync as bg,mkdirSync as tP,writeFileSync as Rg}from"node:fs";import mi from"node:path";function vg(e,r,t){return mi.join(e,"salvage",v(r),v(t))}function Sg(e){return bg(mi.join(vg(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function wg(e){let r=vg(e.harnessRoot,e.indexed.runId,e.indexed.workerName);tP(r,{recursive:!0});let t=mi.join(r,"salvage.patch"),n=!1;if(bg(e.indexed.worktreePath)){let s=oe(e.indexed.worktreePath,["diff","HEAD"]),i=oe(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
40
|
+
`);a.trim()&&(Rg(t,a.endsWith(`
|
|
39
41
|
`)?a:`${a}
|
|
40
|
-
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return
|
|
41
|
-
`),o}var W_=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function B_(e){return!W_.has(e.skipReason)||cr(e.indexed,e.now)?!1:ug({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(dg({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function L_(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(lr.has(r.run.status)||e.liveness&&Kl(r,e.liveness)||e.liveness&&ie(Fl(r,e.liveness))&&!cr(r))?n:t}function H_(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:L_(e)}function F_(e,r){if(e.harnessRoot?.trim())return si.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${si.sep}runs${si.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function pg(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=H_(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(cr(r,a))return"active_worker";let c=Fl(r,e.liveness),u=F_(e,r),d=p=>u&&B_({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(ig(r,c)){let p=d("completion_blocked");if(p)return p}if(Hl(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(sg(r,e.liveness,a)||!ie(c))return"run_still_active";if(Ro(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(Ae(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(wt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:rt(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 jl(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(si.resolve(o))||r&&cr(r)?"active_worker":r&&Hl(r,e.gitStatusCache)?"dirty_worktree":null}function mg(e){return jl(e)}var fg=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function gg(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)fg.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||fg.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Rg,readdirSync as bg,statSync as j_}from"node:fs";import vg from"node:path";D();xe();import hg from"node:path";C();function K_(e,r){return ni(e,r)}function kg(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Jo(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=x(hg.join(Rn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=hg.resolve(l.worktreePath);K_(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Yf(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function yg(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}C();function V_(e,r){try{let t=j_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function G_(e,r){let t=vg.join(e,"runs",r,"run.json");return Rg(t)?x(t,null):null}function Sg(e){try{return bg(e).length===0}catch{return!1}}function wg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(yg(n,r,t,i.liveRunKeys)||!Sg(n))return"run_still_active";let a=G_(r,t);return a&&!lr.has(a.status)&&!Zr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Cg(e){if(!Rg(e.worktreesDir))return[];let r=[],t;try{t=bg(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=vg.join(e.worktreesDir,o);Sg(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:V_(s,e.now)})}return r}we();import{existsSync as Gl,rmSync as Mg}from"node:fs";import{execFileSync as Y_}from"node:child_process";import{existsSync as xg,readdirSync as J_,statSync as q_}from"node:fs";import z_ from"node:path";var X_=2500;function Q_(e,r=X_){if(!xg(e))return 0;try{let n=Y_("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 ur(e,r=5e4){if(!xg(e))return 0;let t=Q_(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=J_(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=z_.join(i,l),u;try{u=q_(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as tP,rmSync as nP}from"node:fs";xe();import{lstatSync as Z_,readdirSync as eP}from"node:fs";function _g(e){try{let r=Z_(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 Pg(e,r=32){let t=_g(e);if(!t)return!1;if(t.foreign)return!0;try{let n=eP(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=_g(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as rP}from"node:child_process";import Ig from"node:path";import Ie from"node:path";function Eg(e,r,t,n){let o=Ie.resolve(e),s=`${Ie.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ie.relative(t,i);if(a.startsWith("..")||Ie.isAbsolute(a))return"path_outside_harness";let l=a.split(Ie.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ie.resolve(r))?"path_outside_harness":null}function ii(e,r,t){return Eg(e,r,t,"node_modules")}function ai(e,r,t){return Eg(e,r,t,".next")}function li(e,r,t){let n=Ie.resolve(e),o=Ie.relative(t,n);return o.startsWith("..")||Ie.isAbsolute(o)||o.split(Ie.sep).length<3||!n.startsWith(Ie.resolve(r))?"path_outside_harness":null}function Ag(e,r,t){let n=Ie.resolve(e);return ii(n,r,t)===null||ai(n,r,t)===null||li(n,r,t)===null}function Ng(){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 Og(e){let r=rP("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Tg(e,r,t){if(!Ag(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=Og(["chown","-R",`${n}:${o}`,Ig.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Og(["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 Vl="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 oP(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Dg(e,r,t={}){if(!tP(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?Rr(n):null,i=e.bytes??ur(e.path)??void 0,a=t.removePath??nP,l=t.hasForeignOwnedEntry??Pg;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!oP(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Ng();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Vl}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Tg(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}; ${Vl}`}}}function Yl(e){let r=e.harnessRoot;return!r||!jf(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Jl(e,r){let t=Yl(e);if(t)return t;let n=Dg(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Ug(e,r){return Jl(e,r)}function Wg(e,r){return Jl(e,r)}function Bg(e,r){return Jl(e,r)}function Lg(e,r){let t=Yl(e);if(t)return t;if(!Gl(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??ur(e.path);return Mg(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=Yl(e);if(t)return t;if(!Gl(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??ur(e.path);return n&&me(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Gl(e.path)&&Mg(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 ci,readdirSync as ui,statSync as sP}from"node:fs";import Xe from"node:path";function ql(e,r){try{let t=sP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function $g(e,r){let t=Xe.relative(r,e);return t===""||!t.startsWith("..")&&!Xe.isAbsolute(t)}function Fg(e,r,t,n){let o=[];for(let s of Ll){if(s===".next")continue;let i=Xe.join(e,s);if(!ci(i))continue;let a=Xe.resolve(i);t.has(a)||$g(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:ql(a,r.now)}))}return o}function Kg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Fg(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ci(e.worktreesDir))return r;for(let n of ui(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Xe.join(e.worktreesDir,n.name);for(let s of ui(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Xe.join(o,s.name);r.push(...Fg(i,e,t,{runId:n.name,worker:s.name}))}}return r}function jg(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;ci(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:ql(a,e.now)})))}if(!t||!ci(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Xe.resolve(i.worktreePath));for(let i of ui(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Xe.join(e.worktreesDir,i.name),l;try{l=ui(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Xe.resolve(Xe.join(a,c.name));o.has(u)||s.has(u)||$g(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:ql(u,e.now)}))}}return n}import{existsSync as Yg,readdirSync as Vg,statSync as iP}from"node:fs";import Qt from"node:path";var aP=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function lP(e,r){try{let t=iP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function cP(e,r){let t=Qt.relative(r,e);return t===""||!t.startsWith("..")&&!Qt.isAbsolute(t)}function uP(e,r,t,n,o,s){if(!Yg(n))return;let i=Qt.resolve(n);r.has(i)||cP(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:lP(i,t.now)}))}function Gg(e,r,t,n,o){for(let s of aP)uP(e,r,t,Qt.join(n,s.dirName),s.kind,o)}function Jg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Gg(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Yg(e.worktreesDir))return r;for(let n of Vg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Qt.join(e.worktreesDir,n.name),s;try{s=Vg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Qt.join(o,i.name);Gg(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as qg,statSync as dP}from"node:fs";import Qe from"node:path";function pP(e,r){try{let t=dP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function mP(e){let r=[],t=null;for(let n of e.split(`
|
|
42
|
-
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function
|
|
43
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(
|
|
44
|
-
`).map(t=>t.trim()).filter(Boolean)}var fi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=mh(t)??[];return this.cache.set(t,o),o}};var gi=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 TP(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function fh(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:TP(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 DP(e={}){let r=e.harnessRoot?ce(e.harnessRoot):be(),t=lh({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function MP(e){return typeof e=="string"?{reason:e}:e}function Zt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function hi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:ur(e.path,t)}}function gh(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 UP(e,r){return e.kind==="remove_next_cache"?Wg(e,r):Ug(e,r)}function WP(e,r,t){return e.kind==="remove_next_cache"?ai(e.path,r,t):ii(e.path,r,t)}function BP(e){let r=new Map;for(let t of e)for(let[n,o]of Qg(t))r.set(n,o);return r}function hh(e,r){return e.runId&&e.worker?Ne.join(r,e.runId,e.worker):Ne.resolve(e.path,"..")}function rc(e={}){let r=Ql(e),t=ch();r=uh(r,t);let n=DP(e);Oe("scan",`${n.scanRoots.length} harness root(s)`);let o=kg(n.scanRoots,n.now),s=r.finalizeStaleRuns?go().map(I=>({runId:I.runId,from:I.from,to:I.to})):[];s.length>0&&Oe("finalize",`${s.length} stale run(s) marked terminal`),Oe("index","building worktree index");let i=BP(n.scanRoots);Oe("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new gi,gitStatusCache:new fi,gitRevCache:new mi},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let I of n.scanRoots){if(f())break;Oe("root",I);let L=Ne.join(I,"worktrees"),Or=Xg(i,I),Q={harnessRoot:I,worktreesDir:L,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Or,now:n.now},pr=r.scanDependencyCaches?Jg(Q):[];Oe("dependency",r.scanDependencyCaches?`${pr.length} cache candidate(s) at ${I}`:"skipped (worktree-only sweep)");let it=0;for(let ke of pr){if(f())break;it+=1,it%50===0&&Oe("dependency",`${it}/${pr.length} evaluated`);let G=Ne.resolve(ke.path);if(u.has(G))continue;u.add(G);let W={...ke,path:G},ye=WP(W,I,L);if(ye){Zt(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=hh(W,L),mr=Or.get(Ne.resolve(ve))??null,Se=jl({indexed:mr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){Zt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(UP(hi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let ke of Kg(Q)){if(f())break;let G=Ne.resolve(ke.path);if(u.has(G))continue;u.add(G);let W={...ke,path:G},ye=li(W.path,I,L);if(ye){Zt(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=hh(W,L),mr=Or.get(Ne.resolve(ve))??null,Se=mg({indexed:mr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){Zt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Bg(hi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let We=[...jg(Q),...zg(Q)];Oe("worktrees",`${We.length} candidate(s) at ${I}`);let at=new Set,Be=0;for(let ke of We){if(f())break;Be+=1,Be%50===0&&Oe("worktrees",`${Be}/${We.length} evaluated`);let G=Ne.resolve(ke.path);if(at.has(G))continue;at.add(G);let W={...ke,path:G},ye=Or.get(Ne.resolve(W.path))??null,ve=ye?null:oh({worktreePath:W.path,harnessRoot:I,runId:W.runId,workerName:W.worker,now:n.now}),mr=pg({indexed:ye,worktreePath:Ne.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:ve,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:I,writeSalvageEvidence:r.execute});if(mr){let{reason:Se,detail:To}=MP(mr);Zt(l,W.path,Se,To),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Hg(hi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let ke of Cg({harnessRoot:I,worktreesDir:L,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let G=Ne.resolve(ke.path);if(u.has(G))continue;u.add(G);let W={...ke,path:G},ye=W.runId??Ne.basename(G),ve=wg({harnessRoot:I,runId:ye,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ve){Zt(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}c.push(Lg(hi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,g=0,k=0,h=0,y=0;for(let I of c)I.bytes&&(m+=I.bytes),!I.skipped&&!I.executed&&I.bytes&&(g+=I.bytes),I.executed?(h+=1,k+=I.bytes??0,I.kind==="remove_run_directory"&&(p+=1)):I.skipped&&(y+=1,I.skipReason==="dry_run"&&I.bytes&&(g+=I.bytes));let S=r.accountBytes?ih({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,P=kr(),_=r.execute&&ph(P),A=_?pi({execute:!0}):null,Y=P?{observed:!0,execute:_,dumpCount:P.dumpCount,totalBytes:P.totalBytes,removedCount:A?.removed.length??0,removedBytes:A?.removedBytes??0,executables:P.executables,path:P.path,reason:P.reason}:void 0;A&&A.removed.length>0&&(k+=A.removedBytes,h+=A.removed.length,Oe("wsl-crashes",`removed ${A.removed.length} dump(s), ${A.removedBytes} bytes`)),Oe("complete",`${c.length} action(s), ${y} skipped, ${h} removed`);let K=gg(c,l),$=fh({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:g,removedBytes:k,removedPaths:h,skippedPaths:y,skipReasons:gh(c,l)},...S?{storage:S}:{},...K.length>0?{preservedLivePaths:K}:{},...p>0?{removedRunDirectories:p}:{},...Y?{wslCrashDumps:Y}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:g,removedBytes:k,removedPaths:h,skippedPaths:y,skipReasons:gh(c,l)},...S?{storage:S}:{},...K.length>0?{preservedLivePaths:K}:{},...p>0?{removedRunDirectories:p}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:$}}function kh(e){let r=th(e);return rc({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function yh(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as YP}from"node:fs/promises";import{homedir as JP}from"node:os";import nt from"node:path";jo();import{existsSync as Rh,readFileSync as LP}from"node:fs";import ki from"node:path";var vh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Sh=Object.keys(vh),tc={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},HP={"@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 bh(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 yi(e,r){let t=bh(e),n=bh(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 wh(e,r){return yi(e,r)>=0}function FP(e){let r=null;for(let t of e)(!r||yi(t,r)>0)&&(r=t);return r}function $P(e){try{let r=JSON.parse(LP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function KP(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=ki.resolve(o);if(Rh(ki.join(s,"packages/kynver-runtime/package.json"))&&Rh(ki.join(s,"package.json")))return s}return ft({cwd:e})?.repo??null}function Ch(e={}){let r=e.cwd??process.cwd(),t=KP(r,e.repoRoot);if(!t)return{};let n={};for(let o of Sh){let s=ki.join(t,HP[o]),i=$P(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function jP(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function VP(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&wh(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${jP(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 GP(e){if(e.length===0)return{version:null,source:"unknown"};let r=FP(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 xh(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=Sh.map(i=>{let a=vh[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}=GP(l),p=u?.version??null,g=f?wh(f,a):!1,k=g?[]:VP({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${tc[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${tc[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:tc[i],minimumVersion:a,effectiveVersion:f,effectiveSource:m,ok:g,summary:h,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 nc=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
45
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function
|
|
46
|
-
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function
|
|
47
|
-
`)){let i=s.match(
|
|
48
|
-
`))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{r.releaseLock()}}function
|
|
49
|
-
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:GE.has(t)?{ok:!0,mutating:!1}:YE.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var zE=10*6e4,XE=5e3,zh=2e5;async function Xh(e,r,t={}){let n=qh(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??zE,i=new tn(r);return new Promise(a=>{let l=0,c=!1,u=qE(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=zh)return;let p=m.toString("utf8").slice(0,zh-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"),XE).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 ZE=25e3,eA=32e3,rA=5e3,tA=6e4,Qh=5*6e4,nA=5e3,oA="claude-sonnet-4-6";async function sA(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(),nA);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 Zh(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=oe();if(!t||!n)return null;let o=await sA(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:QE.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||oA,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function iA(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),eA),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:ZE}),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 ot(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 aA(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Xh(n,s=>{ot(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await ot(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await ot(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 lA(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||ot(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new tn(s),a=Yh(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await ot(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Jh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await ot(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 ot(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 dc(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function ek(e){let r=await Zh();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!oe()||!b().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Qh}));!r&&!e.shouldStop();){if(!oe()||!b().agentOsId?.trim()||(await dc(Qh,e.shouldStop),e.shouldStop()))return;r=await Zh()}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 iA(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await dc(tA,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await aA(r,t):await lA(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await dc(rA,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var cA=6e4,uA=5*6e4,dA=10,pA=250;async function pc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(pA,t);await gr(n),t-=n}}async function Si(e){Wt();let r=An();r.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...r}));let t=String(T(String(e.run||""),"--run")),n=String(T(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),o=e.execute!==!1&&e.execute!=="false",s=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):cA,i=!1,a=0;process.on("SIGINT",()=>{i=!0}),process.on("SIGTERM",()=>{i=!0});let l=$n();l.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:l.resolved?.defaultRepo??null,configPath:l.configPath}));let c=Ld(b());c.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:t,agentOsId:n,errors:c.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:t,agentOsId:n,execute:o,intervalMs:s,boxKind:c.box.boxKind,workerCapSource:c.workerCapSource,maxConcurrentWorkers:c.maxConcurrentWorkers}));let u=ir(),d=ek({shouldStop:()=>i}).catch(m=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:m instanceof Error?m.message:String(m)}))}),f=!1;for(;!i;)try{$d({agentOsId:n,runId:t,instructionBundleVersion:Hr()});let m=await Ra(e.secret?String(e.secret):void 0,n);if(!m.ok){f||(f=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:n,reason:m.reason,remedy:`run \`kynver runner credential --agent-os-id ${n}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await pc(s,()=>i);continue}f&&(f=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:n}))),await Wd({agentOsId:n,baseUrl:gd(e.baseUrl?String(e.baseUrl):void 0),secret:m.secret});let p=await uc({run:t,agentOsId:n,execute:o,...e});if(console.error(JSON.stringify({event:"daemon_tick",...p})),u.tickEnabled){let y=Ss(t);if(y&&!y.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:y.holderBoxId}));else{let S=await Bt({env:u,agentOsIdFilter:n});S.enabled&&(S.fired>0||S.errors>0||S.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...S}))}}p.idle?a++:a=0;let g=Math.floor(Ut("daemon.maxIdleStreak",dA)),k=Math.floor(Ut("daemon.idleIntervalMs",uA)),h=a>=g?k:s;await pc(h,()=>i)}catch(m){console.error(JSON.stringify({event:"daemon_tick_error",error:m.message})),await pc(s,()=>i)}await d,console.error(JSON.stringify({event:"daemon_stop",runId:t,agentOsId:n}))}N();import{spawn as mA}from"node:child_process";C();var fA=15*6e4,rk=2*6e4,tk=1e4,gA=5e3,hA=5*6e4,kA=30*6e4,nk=5e3;function yA(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:fA}function wi(e,r=process.env){if(e.keeperChild===!0||e.keeperChild==="true"||e.noSupervise===!0||e.noSupervise==="true"||e.supervised==="false")return!1;let t=(r.KYNVER_DAEMON_SUPERVISED??"").trim().toLowerCase();return!(t==="0"||t==="false"||t==="no"||t==="off")}function RA(e,r=gA,t=hA){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function bA(e,r,t=kA){return r-e>=t}function st(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function vA(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 Ci(e,r=process.argv.slice(2)){let t=String(T(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=yA(e.stallMs),o=vA(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,st("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),st("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=mA(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),st("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await gr(nk),!(d||i));){if(Date.now()-u<rk)continue;let k=Kd(t),h=k&&k.pid===a.pid?k:null;if(h&&jd(h,n)){st("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await gr(tk),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+rk){st("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await gr(tk),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await gr(nk);if(i)break;let p=Date.now();bA(u,p)&&(l=0),l+=1;let g=RA(l);st("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await gr(g)}st("stopped",{agentOsId:t})}we();D();import{existsSync as AA,mkdirSync as IA}from"node:fs";import OA from"node:path";D();Dr();import{existsSync as SA,readFileSync as wA}from"node:fs";import ok from"node:path";X();C();function CA(e){if(!e||!SA(e))return 0;try{return wA(e,"utf8").trim().length}catch{return 0}}function xA(e,r){let t=ok.join(E(e.id),"workers",v(r),"worker.json"),n=x(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=CA(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:Pt(o),completionBlocked:a}}function _A(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 PA(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 EA(e){let r=0;for(let t of fe(e)){let n=ok.join(E(e.id),"workers",v(t),"worker.json"),o=x(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 Co(){return ko(),z().map(e=>{let t=fe(e).map(d=>xA(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}=PA(t),c=EA(e),u=Cn(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:_A({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function sk(){console.log(JSON.stringify(Co(),null,2))}C();function NA(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=je();return t?t.repo:(T("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function xi(e){let r=$m(NA(e));cu(r);let t=e.id?Gs(String(e.id)):ou(String(e.name||"run")),n=E(t);AA(n)&&TA(`run already exists: ${t}`),IA(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:{}};se(OA.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 ik(){sk()}function TA(e){console.error(e),process.exit(1)}D();import{existsSync as Pi}from"node:fs";async function _i(e=ir()){let r=await Fr(e.storePath).catch(()=>[]),t=await vs(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=Rs(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 DA}from"node:os";import MA from"node:path";Ke();var Ir="watchdog:board-sweep",UA="*/5 * * * *",WA=["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 ak(e){let r=e.storePath?.trim()||Sr(),t=e.envFilePath?.trim()||ge,n=MA.join(DA(),".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:WA,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:UA,dedupeKey:Ir,callbackPath:o}}}Ke();async function nn(e){let r=e.envFilePath??ge,t=[],n=ir(),o=await _i(n),s=Wr(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:Pi(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Pi(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:Pi(n.storePath),summary:Pi(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 Fr(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===Ir);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}}N();He();C();import{existsSync as kk}from"node:fs";import{createHash as BA}from"node:crypto";function lk(e){let r=JSON.stringify({cb:e.callbackPath,cron:e.cron??null,runAt:e.runAt??null,kind:e.kind,target:e.target,dedupeKey:e.dedupeKey??null});return`kc-cron:${BA("sha1").update(r).digest("hex").slice(0,16)}`}async function mc(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function ck(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await mc(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 uk(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 mc(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??Ir,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function dk(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await mc(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 pk(e,r,t=Ir){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 mk(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Ir&&r.provider==="qstash"&&r.status!=="cancelled")}function LA(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Ir&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function fk(e){return LA(e)?{allowed:!0}:{allowed:!1,reason:"Cannot cancel QStash watchdog until hosted KYNVER_SCHEDULER_PROVIDER=kynver-cron is live and a kynver-cron watchdog row exists. Set Vercel env, redeploy, re-run `kynver cron install`, then `--confirm-qstash-removal`."}}Ke();Ke();import{randomBytes as HA}from"node:crypto";function FA(){return HA(32).toString("base64url")}function gk(e=ge){let r=wa();if(r)return{secret:r,generated:!1,source:"env"};let n=Wr(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:FA(),generated:!0,source:"generated"}}is();ls();D();function hk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=Z().runsDir;return kk(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Ei(e={}){let r=e.execute!==!1,t=b(),n=Ze(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=gk(),i=ak({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=os(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=hk(u,e.runId);d&&(u.defaultDaemonRunId=d),de(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 tp(i.storePath);l.storeInitialized=f.created||kk(i.storePath);let m=oe();if(m)try{let p=await Lr(o,{baseUrl:n,apiKey:m});Br(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 uk(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=pk(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:lk(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await rp(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await ck(n,o,m),y=mk(h),S=["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(y.length)if(e.confirmQstashRemoval){let _=fk(h);if(!_.allowed)a.push(_.reason);else for(let A of y)await dk(n,o,A.id,m),P.push(A.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(_=>({id:_.id,provider:_.provider,status:_.status})),removed:P,manualSteps:S}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=hk({...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=as({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:It()},r),r&&l.systemd.enabled){let g=b();de({...g,daemonSupervisionOwner:"systemd"})}}}if(!e.skipTestFire&&a.length===0){let p=await Bt({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 nn({config:b(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var $A=["deployment_provider","cron_secret","env_file","cron_store"];function yk(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function KA(e){let r=yk(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=yk(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function jA(e){if(!KA(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await nn({config:e})).checks.filter(n=>$A.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function VA(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 fc(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Rk(e){if(fc(e.args.skipCron))return{action:"skipped"};let r=await jA(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=fc(e.args.installSystemd)||fc(e.args["install-systemd"]),n=await Ei({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 VA(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}N();Pe();gn();function bk(e=b(),r=process.env){let t=_e(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`)),ht(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=tr(t.boxKind,o);a!==o&&(o=a,i.maxConcurrentWorkers=a,s=!0,n.push(`clamped maxConcurrentWorkers to ${a} for ${t.boxKind} pool`))}return s&&de(i),{repaired:s,boxKind:t.boxKind,maxConcurrentWorkers:o??4,warnings:n}}ls();is();N();Ke();Mn();cs();Un();D();async function vk(e){let r=us(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&Dn(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=as({envFilePath:ge,agentOsId:e.agentOsId,runId:e.runId,kynverBin:It()},!0),s=[];if(!o.supported)return s.push(o.note??"systemd user units not supported on this host"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};if(!o.enabled)return s.push(o.note??"systemd unit write/enable failed"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};let i=b();return de({...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 Sk(e){return e.action==="systemd_installed"}function wk(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 YA(e,r){return e.filter(n=>n.repo===r&&!lr.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Ck(e){Wt();let r=b();(!oe()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await ys(e),r=b());let t=(typeof e.agentOsId=="string"?e.agentOsId.trim():"")||r.agentOsId?.trim()||"";t||(console.error("No AgentOS workspace configured \u2014 run `kynver bootstrap` (or pass --agent-os-id)."),process.exit(1)),Bn(t).ok||(console.error(fs(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(de({...r,chatUseClaudeOauth:!0}),r=b(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let o=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||je()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=bk(r);if(s.repaired){r=b();for(let c of s.warnings)console.log(` ${c}`)}let i=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";i||(i=YA(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=xi({...e,repo:o,name:"agent"}).runId),await Rk({config:r,agentOsId:t,runId:i,args:e});let a=await vk({config:b(),agentOsId:t,runId:i,args:e});if(Sk(a)){console.log("");for(let c of wk())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${GA.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${o}`),console.log(` run: ${i}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let l={...e,run:i,agentOsId:t};if(wi(l)){await Ci(l,JA(i,t,e));return}await Si(l)}function JA(e,r,t){if(!Bn(r).ok)throw new Error(fs(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();X();import{existsSync as qA,rmSync as zA}from"node:fs";import gc from"node:path";function XA(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function QA(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function ZA(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=[...QA(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=gc.resolve(n.worktreePath),i=[];for(let c of o){let u=XA(c),d=gc.resolve(s,u);if(!d.startsWith(s+gc.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!qA(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};zA(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 xk(e){let r=ZA(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}N();import xI from"node:path";In();Vo();In();var eI=/--max-old-space-size=(\d+)/;function rI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function hc(){return rI(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function kc(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(eI.test(t))return r;let o=`--max-old-space-size=${hc()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function on(e=hc()){return`--max-old-space-size=${e}`}ss();N();In();Vo();import{spawnSync as tI}from"node:child_process";function Ii(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Pk(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Ii(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Ii(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Ii(e.perWorkerMemBytes,1610612736),reserveBytes:t??Ii(e.memReserveBytes,2147483648)}}var Oi=0;function bc(){Oi+=1}function vc(){Oi=Math.max(0,Oi-1)}function sn(e={}){let r={...Pk(),...e},t=e.memAvailableBytes??hn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Oi,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function nI(e){e<=0||tI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Sc(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=sn({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)nI(Math.min(r,n-Date.now())),o=sn({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as wI}from"node:child_process";C();import{closeSync as aI,existsSync as wc,mkdirSync as lI,openSync as cI,readdirSync as Ak,readFileSync as uI,unlinkSync as xc,writeFileSync as dI}from"node:fs";import _c from"node:path";import{mkdirSync as oI}from"node:fs";import{tmpdir as sI}from"node:os";import Ni from"node:path";function iI(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Ek(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?Ni.resolve(e):iI()?Ni.join(sI(),"kynver","state","heavy-verification"):Ni.join(Zs(),"heavy-verification")}function xo(){return Ni.join(Ek(),"slots")}function an(){let e=xo();return oI(e,{recursive:!0}),e}var ln=120*6e4,Cc=1;function pI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Po(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function _o(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?pI(e,Cc):Cc}function mI(e){return`slot-${e}`}function Ik(e,r=xo()){return _c.join(r,`${e}.json`)}function Pc(e){if(!wc(e))return null;try{let r=JSON.parse(uI(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=ln){if(!e||!H(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function fI(e,r){let t=Pc(e);if(Ti(t,r))try{xc(e)}catch{}}function gI(e){return lI(e,{recursive:!0}),e}function Mi(e={}){let r=gI(e.slotsDir??an()),t=e.staleMs??ln,n=0;for(let o of Ak(r)){if(!o.endsWith(".json"))continue;let s=_c.join(r,o),i=wc(s);fI(s,t),i&&!wc(s)&&(n+=1)}return n}function Ok(e={}){let r=e.slotsDir??an(),t=e.staleMs??ln;Mi({slotsDir:r,staleMs:t});let n=[];for(let o of Ak(r)){if(!o.endsWith(".json"))continue;let s=Pc(_c.join(r,o));s&&!Ti(s,t)&&n.push(s)}return n}function Di(e={}){return Ok(e).length}function cn(e,r={}){if(Po())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:_o(),reason:null};let t=r.slotsDir??an(),n=r.staleMs??ln,o=r.maxSlots??_o();Mi({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=mI(i),l=Ik(a,t),c=Pc(l);if(c&&Ti(c,n))try{xc(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=cI(l,"wx");dI(d,JSON.stringify(u,null,2),"utf8"),aI(d);let f=Di({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=Di({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function Eo(e,r={}){if(!e)return;let t=Ik(e,r.slotsDir??xo());try{xc(t)}catch{}}function Ao(e,r={}){if(Po())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:_o(),reason:null};let t=r.slotsDir??an(),n=r.staleMs??ln,o=r.maxSlots??_o();Mi({slotsDir:t,staleMs:n});let s=Di({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 hI}from"node:child_process";function kI(e){e<=0||hI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Ec(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=cn(e,n);for(;!s.admitted&&Date.now()<o;)kI(Math.min(t,o-Date.now())),s=cn(e,n);return s}var yI=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,RI=/\b(npm run build\b|next build\b)\b/i,bI=/\b(vercel (build|deploy|--prod))\b/i,vI=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function Ac(e){let r=e.trim();return r?vI.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:bI.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:RI.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:yI.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 Ui="heavy_verification_token_required";function Ic(e,r={}){let t=Ac(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...Ao(e),slotId:null}};if(Po())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Ao(e),slotId:null}};let n=r.waitMs??0,o=n>0?Ec(e,n,r.pollMs):cn(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Ui,commandClass:t.commandClass,reason:t.reason??o.reason??Ui,verificationGate:o}}xe();import Oc from"node:path";function SI(e){let r=Rr(be()),t=Oc.relative(r,Oc.resolve(e));return t.length>0&&!t.startsWith("..")&&!Oc.isAbsolute(t)}function Nk(e){return SI(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}}ss();function CI(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Tk(e,r){let t=wI(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 Nc(e){let r=e.waitForAdmissionMs??6e5,t=Ic(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:on(),admission:sn(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?Sc(r):sn();if(!s.admitted)return Eo(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:on(),admission:s,verificationGate:n,command:e.command};let i=Nk(e.cwd);if(!i.ok)return Eo(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:on(),admission:s,verificationGate:n,command:e.command};let a=kc({...process.env,...e.env}),l=on(),c=Nn();bc();try{let u;if(c){let d=da({cwd:e.cwd,command:["/usr/bin/env",...CI(a),"/bin/bash","-lc",e.command]});u=Tk(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=Tk([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{vc(),Eo(o)}}var Tc=["npm run typecheck","npm run test"];function Wi(e,r=Tc,t={}){let n=[],o=!0;for(let s of r){let i=Nc({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}}C();function Dk(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 Mk(e){let r=T(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=T(e.role?String(e.role):void 0,"role"),o=T(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let S of i)s.push(Dk(String(S)));else typeof i=="string"&&s.push(Dk(i));let a=V(e.baseUrl?String(e.baseUrl):void 0),l=await J(e.secret?String(e.secret):void 0,t,{baseUrl:a}),c=`${a}/api/agent-os/by-id/${encodeURIComponent(t)}/plans/${encodeURIComponent(r)}/progress-events`,u=b(),f=`provider:${_s(u.workerProvider,ar)}`,p=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),g={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&&(g.proposed=p);let k=await fetch(c,{method:"POST",headers:De(l),body:JSON.stringify(g)}),h=await k.text(),y=null;try{y=JSON.parse(h)}catch{y=h}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:y},null,2)),process.exit(1)),console.log(JSON.stringify(y,null,2))}function _I(e){let r=T(e.worktree?String(e.worktree):void 0,"worktree"),t=xI.resolve(r),n=Wi(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 Uk(e){let r=T(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){_I(e);return}let n=b().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=V(e.baseUrl?String(e.baseUrl):void 0),s=process.env.KYNVER_API_KEY,i={"Content-Type":"application/json"};s&&(i.Authorization=`Bearer ${s}`);let a=`${o}/api/agent-os/${encodeURIComponent(n)}/plans/${encodeURIComponent(r)}/verify`,l=await fetch(a,{method:"POST",headers:i,body:JSON.stringify({worktreePath:e.worktree?String(e.worktree):void 0,taskId:e.task?String(e.task):void 0,humanOverride:e.humanOverride===!0||e.humanOverride==="true"})}),c=await l.text(),u=null;try{u=JSON.parse(c)}catch{u=c}l.ok||(console.error(JSON.stringify({httpStatus:l.status,response:u},null,2)),process.exit(1)),console.log(JSON.stringify(u,null,2))}import PI from"node:path";C();function Wk(e){let r=PI.resolve(T(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=Wi(r,n.length?n:Tc,{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
|
-
`)
|
|
51
|
-
`),
|
|
52
|
-
`),diagnostic:dr(e)}}import $I from"node:path";D();X();C();X();C();function Kk(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Va(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>_t?{health:"stale",reason:`heartbeat older than ${Math.floor(_t/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();C();import{existsSync as jk,mkdirSync as LI,readdirSync as HI,unlinkSync as FI}from"node:fs";import Dc from"node:path";function Vk(){let{harnessRoot:e}=yt(),r=Dc.join(e,"monitors");return LI(r,{recursive:!0}),r}function un(e,r){return r?`${v(e)}--${v(r)}`:v(e)}function Mc(e){return Dc.join(Vk(),`${e}.json`)}function dn(e){return x(Mc(e),void 0)}function pn(e){se(Mc(e.monitorId),e)}function Gk(e){let r=Mc(e);return jk(r)?(FI(r),!0):!1}function Yk(){let e=Vk();if(!jk(e))return[];let r=[];for(let t of HI(e)){if(!t.endsWith(".json"))continue;let n=x(Dc.join(e,t),void 0);n?.monitorId&&r.push({monitorId:n.monitorId,runId:n.runId,workerName:n.workerName,agentOsId:n.agentOsId,pid:n.pid,alive:n.pid?H(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}X();function Uc(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"),Bs(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"),Pt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}function Jk(e,r){return x($I.join(E(e),"workers",v(r),"worker.json"),void 0)}function qk(e,r){let t=B(e),n=Object.keys(t.workers||{});if(!r)return n;let o=v(r);return n.filter(s=>v(s)===o)}function zk(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=Kk({worker:e,status:n,taskLease:o}),i=Uc({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 Io(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=B(r),s=qk(r,t),i=[];for(let p of s){let g=Jk(r,p);g&&i.push(g)}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 jt({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>zk(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Ds(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 g=await Vt({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:g.outcome,ok:g.outcome==="completed",reason:g.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function Xk(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=qk(r,t),o=[];for(let s of n){let i=Jk(r,s);i&&o.push(zk(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Wc(){return Yk()}function Qk(e){let r=String(e.run||"");T(r,"--run");let t=un(r,e.name?String(e.name):void 0),n=dn(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(),pn(n),Gk(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Bc(e){let r=String(e.run||""),t=String(e.name||"");T(r,"--run"),T(t,"--name");let n=ue(r,t),o=B(r),s=M(n,{base:o.base,baseCommit:o.baseCommit}),i=Uc({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 Vt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}C();var KI=5e3,jI=360*60*1e3;async function Zk(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):KI,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):jI,o=Date.now();for(;Date.now()-o<=n;){let s=r?dn(r):void 0;if(s?.stoppedAt)break;let i=await Io({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Bi({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(),pn(s));break}Nr(t)}}C();xe();import{spawn as VI}from"node:child_process";import{closeSync as ey,existsSync as GI,openSync as YI}from"node:fs";import JI from"node:path";function ry(e){let r=e.nodeExecutable??process.execPath,t=Js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!GI(n))return;let o=un(e.runId,e.workerName),{harnessRoot:s}=yt(),i=JI.join(s,"monitors",`${o}.log`),a;try{a=YI(i,"a")}catch{a=void 0}let l=e.pollMs??5e3,c=[...t.argsPrefix,"monitor","run-loop","--run",e.runId,"--monitor-id",o,"--poll-ms",String(l),"--auto-complete","true","--renew-leases","true"];e.workerName&&c.push("--name",e.workerName),e.agentOsId&&c.push("--agent-os-id",e.agentOsId),e.baseUrl&&c.push("--base-url",e.baseUrl),e.secret&&c.push("--secret",e.secret);let u=["ignore",a??"ignore",a??"ignore"];try{let d=VI(t.command,c,pe({detached:!0,stdio:u,env:process.env}));a!==void 0&&ey(a),d.unref();let f={monitorId:o,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:d.pid,startedAt:new Date().toISOString(),pollMs:l,logPath:i};return pn(f),{monitorId:o,pid:d.pid,logPath:i,session:f}}catch{if(a!==void 0)try{ey(a)}catch{}return}}C();async function ty(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=un(r,t),o=dn(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=ry({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 ny(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Io({...e,autoComplete:!1}):Xk(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Wc()},null,2))}function oy(e){console.log(JSON.stringify(Qk(e),null,2))}function sy(){console.log(JSON.stringify({monitors:Wc()},null,2))}async function iy(e){await Zk(e)}async function ay(e){let r=await Io(e);console.log(JSON.stringify(r,null,2))}import{existsSync as qI,readFileSync as zI}from"node:fs";import{dirname as Lc,join as cy}from"node:path";import{fileURLToPath as ly}from"node:url";function XI(e){let r=Lc(ly(e));for(let t=0;t<6;t+=1){if(qI(cy(r,"package.json")))return r;let n=Lc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Lc(ly(e))}`)}function uy(e=import.meta.url){let r=cy(XI(e),"package.json"),t=JSON.parse(zI(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Li=uy();function QI(e){return e.some(r=>r==="--version"||r==="-v")}function ZI(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function dy(e,r=import.meta.url,t){return QI(e)?(ZI(uy(r),t),!0):!1}function eO(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 rO(e={}){let[r,t]=await Promise.all([Ri(),Promise.resolve(Ch({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:eO(r),repo:t,self:n}}async function py(e={}){let r=await rO(e);return _h(r)}function my(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}C();function tO(e){let r=e.trim();return r?Co().find(n=>n.name===r&&n.status!=="completed")??null:null}function fy(e){let r=String(T(String(e.name||""),"--name")),t=tO(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}D();X();C();N();import nO from"node:path";function Oo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function oO(e){let r=V(e.baseUrl?String(e.baseUrl):void 0),t=e.agentOsId?String(e.agentOsId).trim():null,n=e.dryRun===!0||e.dryRun==="true",o=[],s=[],i=[];for(let a of z())for(let l of Object.keys(a.workers??{})){let c=nO.join(E(a.id),"workers",v(l),"worker.json"),u=x(c,void 0);if(!u){s.push(Oo(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(Oo(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Oo(a.id,l,d,f,m,"completion already reported"));continue}let p=M(u);if(p.finalResult){s.push(Oo(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Oo(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 g=await J(e.secret?String(e.secret):void 0,f,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(f)}/tasks/${encodeURIComponent(d)}/release`,h=await re(k,g,{agentOsId:f,leaseOwner:m},{agentOsId:f,baseUrl:r});h.ok===!0||h.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 ${h.status}`})}catch(g){i.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"error",reason:g.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function gy(e){let r=await oO(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 Cy from"node:path";He();N();import{accessSync as sO,constants as iO,existsSync as Hc,readFileSync as aO}from"node:fs";import{homedir as Hi}from"node:os";import Fi from"node:path";import{spawnSync as lO}from"node:child_process";xe();function hy(e,r){try{let t=lO(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 ky(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function cO(e){if(!Hc(e))return!1;try{return sO(e,iO.W_OK),!0}catch{return!1}}var yy={packageVersion:()=>Li,commandOnPath:e=>hy(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>hy(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Fi.join(Hi(),".kynver","config.json"),credentialsFilePath:()=>Fi.join(Hi(),".kynver","credentials"),readCredentials:()=>{let e=Fi.join(Hi(),".kynver","credentials");if(!Hc(e))return{hasApiKey:!1};try{let r=JSON.parse(aO(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:ky(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:ky(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:Rs(),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:()=>Fi.join(Hi(),".openclaw","harness"),pathExists:e=>Hc(e),pathWritable:e=>cO(e)};function Ry(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function uO(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function by(e){return!!e.openclawCronStorePath}function dO(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function vy(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(dO(e,r)&&!Ry(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(uO(e,r)&&!Ry(e,r)){if(by(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(by(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"}}}Ke();Mn();Un();cs();function Sy(e,r={}){let t=Ot(),n=ds(e,t),o=[],s=r.envFilePath??ge,a=Wr(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=fa();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=pa(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Mn();Un();function wy(e){let r=e.loadConfig(),t=Ot(),n=ds(r,t),s=Sy(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 pO(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 mO(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 fO(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=je({config:o}),c=l?Fn(l):null,u=xd(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 gO(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 hO(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 kO(e){let r=e.harnessRoot(),t=Cy.join(r,"runs"),n=Cy.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 yO(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 RO(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,f=n.runnerTokenPrefix,m=n.runnerTokenAgentOsId,p=!!f&&(!u||!m||m===u),g=!!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},vy(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:g,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 xy(e=yy){let r=[mO(e),fO(e),gO(e),hO(e),kO(e),yO(e),wy(e),RO(e)],t=pO(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 _y(e={}){let r;if(e.remediateDefaultRepo===!0){let n=$n();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=xy();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}N();async function Py(e){let r=b(),t=(e.agentOsId?String(e.agentOsId):r.agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=V(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await J(e.secret?String(e.secret):void 0,t,{baseUrl:n}),s=new URLSearchParams;if(typeof e.since=="string"&&e.since.trim()&&s.set("since",e.since.trim()),e.limit!=null&&String(e.limit).trim()){let c=Number(e.limit);Number.isFinite(c)&&c>0&&s.set("limit",String(Math.floor(c)))}let i=s.toString()?`?${s.toString()}`:"",a=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/command-center/dashboard-contract${i}`,l=await Cs(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 Fc=["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"],$c=["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 bO(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 Kc(e,r=bO()){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:[...Fc],runnerSteps:[...$c]}}function Ey(e){return{...e,deploymentSchedulerProvider:"qstash"}}N();import vO from"node:path";import{homedir as SO}from"node:os";var Ay=vO.join(SO(),".kynver","config.json");function Iy(e=!1){let r=b(),t=Kc(r),n={...t,configPath:q(Ay),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
|
-
`),
|
|
54
|
-
User runner:`);for(let o of $c)console.log(` - ${o}`);if(console.log(`
|
|
42
|
+
`),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 Rg(mi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
43
|
+
`),o}var nP=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function oP(e){return!nP.has(e.skipReason)||pr(e.indexed,e.now)?!1:Sg({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(wg({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function sP(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(dr.has(r.run.status)||e.liveness&&Xl(r,e.liveness)||e.liveness&&ie(ql(r,e.liveness))&&!pr(r))?n:t}function iP(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:sP(e)}function aP(e,r){if(e.harnessRoot?.trim())return fi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${fi.sep}runs${fi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Cg(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=iP(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(pr(r,a))return"active_worker";let c=ql(r,e.liveness),u=aP(e,r),d=m=>u&&oP({indexed:r,harnessRoot:u,skipReason:m,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:m;if(yg(r,c)){let m=d("completion_blocked");if(m)return m}if(Jl(r,e.liveness?.gitStatusCache)){let m=d("dirty_worktree");if(m)return m}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let m=d("pr_or_unmerged_commits");if(m)return m}if(kg(r,e.liveness,a)||!ie(c))return"run_still_active";if(xo(c)){let m=d("pr_or_unmerged_commits");if(m)return m}if(Oe(c.changedFiles).length>0){let m=d("dirty_worktree");if(m)return m}if(At({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:st(c.finalResult)}).blocked){let m=d("landing_blocked");if(m)return m}if(i&&e.worktreePath){let m=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(m)return m.detail?{reason:m.reason,detail:m.detail}:m.reason}return null}function Ql(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(fi.resolve(o))||r&&pr(r)?"active_worker":r&&Jl(r,e.gitStatusCache)?"dirty_worktree":null}function _g(e){return Ql(e)}var xg=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Pg(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)xg.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||xg.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Og,readdirSync as Ng,statSync as uP}from"node:fs";import Tg from"node:path";D();_e();import Eg from"node:path";C();function cP(e,r){return pi(e,r)}function Ag(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of ns(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(Eg.join(Cn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Eg.resolve(l.worktreePath);cP(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of sg(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Ig(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}C();function dP(e,r){try{let t=uP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pP(e,r){let t=Tg.join(e,"runs",r,"run.json");return Og(t)?_(t,null):null}function Dg(e){try{return Ng(e).length===0}catch{return!1}}function Mg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Ig(n,r,t,i.liveRunKeys)||!Dg(n))return"run_still_active";let a=pP(r,t);return a&&!dr.has(a.status)&&!nt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Ug(e){if(!Og(e.worktreesDir))return[];let r=[],t;try{t=Ng(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=Tg.join(e.worktreesDir,o);Dg(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:dP(s,e.now)})}return r}we();import{existsSync as ec,rmSync as Yg}from"node:fs";import{execFileSync as mP}from"node:child_process";import{existsSync as Wg,readdirSync as fP,statSync as gP}from"node:fs";import hP from"node:path";var kP=2500;function yP(e,r=kP){if(!Wg(e))return 0;try{let n=mP("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 mr(e,r=5e4){if(!Wg(e))return 0;let t=yP(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=fP(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=hP.join(i,l),u;try{u=gP(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as SP,rmSync as wP}from"node:fs";_e();import{lstatSync as RP,readdirSync as bP}from"node:fs";function Lg(e){try{let r=RP(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 Bg(e,r=32){let t=Lg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=bP(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Lg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as vP}from"node:child_process";import $g from"node:path";import Ne from"node:path";function Hg(e,r,t,n){let o=Ne.resolve(e),s=`${Ne.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ne.relative(t,i);if(a.startsWith("..")||Ne.isAbsolute(a))return"path_outside_harness";let l=a.split(Ne.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ne.resolve(r))?"path_outside_harness":null}function gi(e,r,t){return Hg(e,r,t,"node_modules")}function hi(e,r,t){return Hg(e,r,t,".next")}function ki(e,r,t){let n=Ne.resolve(e),o=Ne.relative(t,n);return o.startsWith("..")||Ne.isAbsolute(o)||o.split(Ne.sep).length<3||!n.startsWith(Ne.resolve(r))?"path_outside_harness":null}function Fg(e,r,t){let n=Ne.resolve(e);return gi(n,r,t)===null||hi(n,r,t)===null||ki(n,r,t)===null}function jg(){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 Kg(e){let r=vP("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Vg(e,r,t){if(!Fg(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=Kg(["chown","-R",`${n}:${o}`,$g.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Kg(["rm","-rf",$g.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 Zl="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 CP(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Gg(e,r,t={}){if(!SP(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?Sr(n):null,i=e.bytes??mr(e.path)??void 0,a=t.removePath??wP,l=t.hasForeignOwnedEntry??Bg;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!CP(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=jg();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Zl}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let f=Vg(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(m){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${m.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${f.error}; ${Zl}`}}}function rc(e){let r=e.harnessRoot;return!r||!tg(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function tc(e,r){let t=rc(e);if(t)return t;let n=Gg(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Jg(e,r){return tc(e,r)}function qg(e,r){return tc(e,r)}function zg(e,r){return tc(e,r)}function Xg(e,r){let t=rc(e);if(t)return t;if(!ec(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??mr(e.path);return Yg(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 Qg(e,r){let t=rc(e);if(t)return t;if(!ec(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??mr(e.path);return n&&me(n,["worktree","remove","--force",e.path],{allowFailure:!0}),ec(e.path)&&Yg(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 yi,readdirSync as Ri,statSync as _P}from"node:fs";import Qe from"node:path";function nc(e,r){try{let t=_P(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function eh(e,r){let t=Qe.relative(r,e);return t===""||!t.startsWith("..")&&!Qe.isAbsolute(t)}function Zg(e,r,t,n){let o=[];for(let s of Yl){if(s===".next")continue;let i=Qe.join(e,s);if(!yi(i))continue;let a=Qe.resolve(i);t.has(a)||eh(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:nc(a,r.now)}))}return o}function rh(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Zg(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!yi(e.worktreesDir))return r;for(let n of Ri(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Qe.join(e.worktreesDir,n.name);for(let s of Ri(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Qe.join(o,s.name);r.push(...Zg(i,e,t,{runId:n.name,worker:s.name}))}}return r}function th(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;yi(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:nc(a,e.now)})))}if(!t||!yi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Qe.resolve(i.worktreePath));for(let i of Ri(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Qe.join(e.worktreesDir,i.name),l;try{l=Ri(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Qe.resolve(Qe.join(a,c.name));o.has(u)||s.has(u)||eh(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:nc(u,e.now)}))}}return n}import{existsSync as sh,readdirSync as nh,statSync as xP}from"node:fs";import tn from"node:path";var PP=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function EP(e,r){try{let t=xP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function AP(e,r){let t=tn.relative(r,e);return t===""||!t.startsWith("..")&&!tn.isAbsolute(t)}function IP(e,r,t,n,o,s){if(!sh(n))return;let i=tn.resolve(n);r.has(i)||AP(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:EP(i,t.now)}))}function oh(e,r,t,n,o){for(let s of PP)IP(e,r,t,tn.join(n,s.dirName),s.kind,o)}function ih(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||oh(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!sh(e.worktreesDir))return r;for(let n of nh(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=tn.join(e.worktreesDir,n.name),s;try{s=nh(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=tn.join(o,i.name);oh(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as ah,statSync as OP}from"node:fs";import Ze from"node:path";function NP(e,r){try{let t=OP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function TP(e){let r=[],t=null;for(let n of e.split(`
|
|
44
|
+
`)){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 DP(e,r){let t=Ze.relative(Ze.resolve(r),Ze.resolve(e));return t!==""&&!t.startsWith("..")&&!Ze.isAbsolute(t)}var MP=200;function lh(e){if(!e.includeOrphans||!ah(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Ze.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Ze.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=TP(a);for(let c of l){if(i>=MP)break;let u=Ze.resolve(c.path);if(u===Ze.resolve(s)||!DP(u,e.worktreesDir)||t.has(u)||o.has(u)||!ah(u))continue;let p=Ze.relative(e.worktreesDir,u).split(Ze.sep),f=p[0],m=p[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:f,worker:m,repo:s,ageMs:NP(u,e.now)})}}return n}D();C();import Eo from"node:path";function ch(e,r){let t=Eo.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Eo.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function uh(e){let r=new Map;for(let t of ns(e))for(let n of Object.keys(t.workers||{})){let o=Eo.join(Cn(e,t.id),"workers",v(n),"worker.json"),s=_(o,void 0);s?.worktreePath&&r.set(Eo.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Eo.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Ao(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function it(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function ic(e={}){let r=e.execute===!0||e.execute!==!1&&Ao("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Ao("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??it("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??it("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??it("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??it("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??it("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Ao("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Ao("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),p=e.accountBytes!==!1&&!Ao("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),f=it("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),m=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&f>0?f:null,g=it("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(g)&&g>0?Math.floor(g):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:p,storagePerRunEntryCap:m,byteAccountingEntryCap:k}}function fh(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 ic({runIdFilter:r?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:r?216e5:void 0,runDirectoriesAgeMs:r?36e5:void 0,includeOrphans:r?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}we();import{existsSync as ac,statSync as UP}from"node:fs";import bi from"node:path";C();var WP=1800*1e3;function gh(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??WP;if(!ac(e.worktreePath))return null;if(e.runId&&e.workerName){let c=bi.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=_(bi.join(c,"worker.json"),void 0);if(u&&zl(u,r,t))return"active_worker";if(!u){let d=bi.join(c,"heartbeat.jsonl");if(ac(d))try{let p=r-UP(d).mtimeMs;if(Number.isFinite(p)&&p>=0&&p<t)return"active_worker"}catch{}}}let n=bi.join(e.worktreePath,".git");if(!ac(n))return null;let o=oe(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
45
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(Oe(s).length>0)return"dirty_worktree";let i=oe(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=oe(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}_e();import{existsSync as LP,readdirSync as hh,statSync as BP}from"node:fs";import HP from"node:path";function kh(e={}){let r=ce(e.harnessRoot??be()),t=Sr(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!LP(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=hh(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=HP.join(t,u.name);try{let p=BP(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of hh(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let f=mr(d,p);f===null?s=null:s+=f}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}_e();import{existsSync as FP}from"node:fs";import{homedir as $P}from"node:os";import yh from"node:path";var KP=["/var/tmp/kynver-harness",yh.join($P(),".openclaw","harness")];function lc(e,r,t){if(!t?.trim())return;let n=ce(t.trim());e.has(n)||(e.add(n),r.push(n))}function jP(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 Rh(e={}){let r=new Set,t=[];lc(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??[])lc(r,t,o);if(jP(e))for(let o of KP){let s=yh.resolve(o);!r.has(s)&&FP(s)&&lc(r,t,s)}return t}wn();function VP(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function GP(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function bh(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=GP("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=je({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function vh(e,r){if(!r.pressured)return e;let t=e.execute||!VP("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}}Sn();import{unlinkSync as YP}from"node:fs";function vi(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Sh(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function JP(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function Si(e={}){let r=e.execute===!0||vi("KYNVER_WSL_CRASH_DUMP_EXECUTE")||vi("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||vi("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Sh("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=br({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=JP(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{YP(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 wh(e){return e?vi("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Sh("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Sn();function Te(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}we();var wi=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=oe(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 qP}from"node:child_process";import{existsSync as zP}from"node:fs";import XP from"node:path";var QP=5e3;function ZP(e,r){if(!zP(XP.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=qP("git",r,{cwd:e,encoding:"utf8",timeout:QP}),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 Ch(e){let r=ZP(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
46
|
+
`).map(t=>t.trim()).filter(Boolean)}var Ci=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Ch(t)??[];return this.cache.set(t,o),o}};var _i=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=nt(r);return this.cache.set(r.id,n),n}};function eE(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function _h(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:eE(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 rE(e={}){let r=e.harnessRoot?ce(e.harnessRoot):be(),t=Rh({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function tE(e){return typeof e=="string"?{reason:e}:e}function nn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function xi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:mr(e.path,t)}}function xh(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 nE(e,r){return e.kind==="remove_next_cache"?qg(e,r):Jg(e,r)}function oE(e,r,t){return e.kind==="remove_next_cache"?hi(e.path,r,t):gi(e.path,r,t)}function sE(e){let r=new Map;for(let t of e)for(let[n,o]of uh(t))r.set(n,o);return r}function Ph(e,r){return e.runId&&e.worker?De.join(r,e.runId,e.worker):De.resolve(e.path,"..")}function cc(e={}){let r=ic(e),t=bh();r=vh(r,t);let n=rE(e);Te("scan",`${n.scanRoots.length} harness root(s)`);let o=Ag(n.scanRoots,n.now),s=r.finalizeStaleRuns?So().map(I=>({runId:I.runId,from:I.from,to:I.to})):[];s.length>0&&Te("finalize",`${s.length} stale run(s) marked terminal`),Te("index","building worktree index");let i=sE(n.scanRoots);Te("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new _i,gitStatusCache:new Ci,gitRevCache:new wi},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let I of n.scanRoots){if(p())break;Te("root",I);let H=De.join(I,"worktrees"),Mr=ch(i,I),Z={harnessRoot:I,worktreesDir:H,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Mr,now:n.now},gr=r.scanDependencyCaches?ih(Z):[];Te("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${I}`:"skipped (worktree-only sweep)");let pt=0;for(let ke of gr){if(p())break;pt+=1,pt%50===0&&Te("dependency",`${pt}/${gr.length} evaluated`);let Y=De.resolve(ke.path);if(u.has(Y))continue;u.add(Y);let W={...ke,path:Y},ye=oE(W,I,H);if(ye){nn(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=Ph(W,H),hr=Mr.get(De.resolve(ve))??null,Se=Ql({indexed:hr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){nn(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(nE(xi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let ke of rh(Z)){if(p())break;let Y=De.resolve(ke.path);if(u.has(Y))continue;u.add(Y);let W={...ke,path:Y},ye=ki(W.path,I,H);if(ye){nn(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=Ph(W,H),hr=Mr.get(De.resolve(ve))??null,Se=_g({indexed:hr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){nn(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(zg(xi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let He=[...th(Z),...lh(Z)];Te("worktrees",`${He.length} candidate(s) at ${I}`);let mt=new Set,Fe=0;for(let ke of He){if(p())break;Fe+=1,Fe%50===0&&Te("worktrees",`${Fe}/${He.length} evaluated`);let Y=De.resolve(ke.path);if(mt.has(Y))continue;mt.add(Y);let W={...ke,path:Y},ye=Mr.get(De.resolve(W.path))??null,ve=ye?null:gh({worktreePath:W.path,harnessRoot:I,runId:W.runId,workerName:W.worker,now:n.now}),hr=Cg({indexed:ye,worktreePath:De.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:ve,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:I,writeSalvageEvidence:r.execute});if(hr){let{reason:Se,detail:$o}=tE(hr);nn(l,W.path,Se,$o),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Qg(xi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let ke of Ug({harnessRoot:I,worktreesDir:H,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let Y=De.resolve(ke.path);if(u.has(Y))continue;u.add(Y);let W={...ke,path:Y},ye=W.runId??De.basename(Y),ve=Mg({harnessRoot:I,runId:ye,runPath:Y,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ve){nn(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}c.push(Xg(xi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let f=0,m=0,g=0,k=0,h=0,R=0;for(let I of c)I.bytes&&(f+=I.bytes),!I.skipped&&!I.executed&&I.bytes&&(g+=I.bytes),I.executed?(h+=1,k+=I.bytes??0,I.kind==="remove_run_directory"&&(m+=1)):I.skipped&&(R+=1,I.skipReason==="dry_run"&&I.bytes&&(g+=I.bytes));let S=r.accountBytes?kh({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,P=br(),x=r.execute&&wh(P),A=x?Si({execute:!0}):null,J=P?{observed:!0,execute:x,dumpCount:P.dumpCount,totalBytes:P.totalBytes,removedCount:A?.removed.length??0,removedBytes:A?.removedBytes??0,executables:P.executables,path:P.path,reason:P.reason}:void 0;A&&A.removed.length>0&&(k+=A.removedBytes,h+=A.removed.length,Te("wsl-crashes",`removed ${A.removed.length} dump(s), ${A.removedBytes} bytes`)),Te("complete",`${c.length} action(s), ${R} skipped, ${h} removed`);let V=Pg(c,l),j=_h({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:g,removedBytes:k,removedPaths:h,skippedPaths:R,skipReasons:xh(c,l)},...S?{storage:S}:{},...V.length>0?{preservedLivePaths:V}:{},...m>0?{removedRunDirectories:m}:{},...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:g,removedBytes:k,removedPaths:h,skippedPaths:R,skipReasons:xh(c,l)},...S?{storage:S}:{},...V.length>0?{preservedLivePaths:V}:{},...m>0?{removedRunDirectories:m}:{},...J?{wslCrashDumps:J}:{},compactSummary:j}}function Eh(e){let r=fh(e);return cc({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Ah(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as fE}from"node:fs/promises";import{homedir as gE}from"node:os";import at from"node:path";Zo();import{existsSync as Ih,readFileSync as iE}from"node:fs";import Pi from"node:path";var Nh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Th=Object.keys(Nh),uc={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},aE={"@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 Oh(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 Ei(e,r){let t=Oh(e),n=Oh(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 Dh(e,r){return Ei(e,r)>=0}function lE(e){let r=null;for(let t of e)(!r||Ei(t,r)>0)&&(r=t);return r}function cE(e){try{let r=JSON.parse(iE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function uE(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=Pi.resolve(o);if(Ih(Pi.join(s,"packages/kynver-runtime/package.json"))&&Ih(Pi.join(s,"package.json")))return s}return bt({cwd:e})?.repo??null}function Mh(e={}){let r=e.cwd??process.cwd(),t=uE(r,e.repoRoot);if(!t)return{};let n={};for(let o of Th){let s=Pi.join(t,aE[o]),i=cE(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function dE(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function pE(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&Dh(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${dE(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 mE(e){if(e.length===0)return{version:null,source:"unknown"};let r=lE(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 Uh(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=Th.map(i=>{let a=Nh[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:p,source:f}=mE(l),m=u?.version??null,g=p?Dh(p,a):!1,k=g?[]:pE({packageName:i,minimumVersion:a,effectiveVersion:p,effectiveSource:f,repoVersion:m}),h=g?`${uc[i]} ${p} meets memory-cost minimum ${a} (${f}).`:`${uc[i]} is below memory-cost minimum ${a}`+(p?` (effective ${p} via ${f})`:" (no version detected)")+".";return{packageName:i,displayName:uc[i],minimumVersion:a,effectiveVersion:p,effectiveSource:f,ok:g,summary:h,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 dc=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(`
|
|
47
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Wh(e={}){let r=Uh(e);if(!r.ok)throw new dc(r);return r}var hE=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function on(e){let r=e?.trim();return r||null}function kE(e){return[...new Set(e.filter(r=>!!r))]}function yE(){let e=gE(),r=on(process.env.KYNVER_OPENCLAW_NPM_ROOT)??on(process.env.OPENCLAW_NPM_ROOT)??at.join(e,".openclaw","npm"),t=on(process.env.KYNVER_NPM_GLOBAL_ROOT)??on(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(on(process.env.NPM_CONFIG_PREFIX)?at.join(on(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):at.join(e,".npm-global","lib","node_modules"));return kE([at.join(r,"lib","node_modules"),at.join(r,"node_modules"),t.endsWith("node_modules")?t:at.join(t,"lib","node_modules")])}async function RE(e){try{let r=JSON.parse(await fE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function bE(e){let r=yE(),t=new Set,n=[];for(let o of r){let s=at.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Ai(e=new Date().toISOString()){let r={};for(let t of hE){let n=null;for(let o of bE(t)){let s=await RE(o);s&&(!n||Ei(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 vE}from"node:child_process";var SE=1e4,wE=4*1024*1024,Lh=(e,r,t)=>{try{let n=vE(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??SE,maxBuffer:wE});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 Ii(e,r,t){return`${e} ${r} ${t}`}function Io(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 Bh(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 CE=8e3,_E=30,xE=100,PE=400,EE=3600*1e3,pc=0;function fc(){return Date.now()<pc}function AE(e){let r=`${e.stdout}
|
|
48
|
+
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Hh(e){AE(e)&&(pc=Math.max(pc,Date.now()+EE))}function mc(e,r){if(fc())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Hh(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function IE(e,r,t,n){if(fc())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Hh(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function gc(e){return fc()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function sn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function OE(e){return Array.isArray(e)?e.map(r=>sn(r)).filter(r=>r!==null).slice(0,_E).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function NE(e,r,t){let n=mc(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:OE(n.statuses)}:null}var Fh={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:gc,collect(e,r){let t=Bh(e);if(!t)return null;let n=IE(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=sn(n.author),s=sn(n.mergeCommit),i=sn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,CE):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>sn(u)).filter(u=>u!==null).slice(0,xE).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null})):[],c=Array.isArray(n.files)?n.files.map(u=>sn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,PE):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},$h={provider:"github",kind:"commit_status",version:"1",isAvailable:gc,collect(e,r){let t=Io(e);return t?NE(r,t.repo,t.sha):null}},Kh={provider:"github",kind:"branch_reachability",version:"1",isAvailable:gc,collect(e,r){let t=Io(e);if(!t)return null;let n=mc(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=mc(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 TE=5,DE=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,ME=/https:\/\/[^\s]+/,jh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=Io(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(`
|
|
49
|
+
`)){let i=s.match(ME)?.[0];if(!i)continue;let a=s.match(DE)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=TE)break}return{found:o.length>0,deployments:o}}};var hc=[];function Oi(e){hc.some(r=>r.provider===e.provider&&r.kind===e.kind)||hc.push(e)}function Vh(e,r){return hc.find(t=>t.provider===e&&t.kind===r)??null}function Gh(){Oi(Fh),Oi($h),Oi(Kh),Oi(jh)}var UE=1,WE=25e3;function Yh(e,r={}){Gh();let t=r.run??Lh,n=r.now??(()=>new Date),o=r.maxSubjects??UE,s=Date.now()+(r.deadlineMs??WE),i=new Set,a=e.filter(f=>{let m=Ii(f.provider,f.kind,f.subject);return i.has(m)?!1:(i.add(m),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((f,m)=>a[(l+m)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let f of u){let m=Ii(f.provider,f.kind,f.subject),g=n(),k=r.cache?.get(m,g)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...f,reason:"budget_exhausted"});continue}let h=Vh(f.provider,f.kind);if(!h){d.skipped.push({...f,reason:"no_recipe"});continue}let R=`${h.provider} ${h.kind}`,S=p.get(R);if(S===void 0&&(S=h.isAvailable(t),p.set(R,S)),!S){d.skipped.push({...f,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(f,m,n())===!1){d.skipped.push({...f,reason:"budget_exhausted"});continue}d.attempted+=1;let P=h.collect(f.subject,t);if(P==null){d.skipped.push({...f,reason:"collect_failed"});continue}d.collected+=1;let x={provider:f.provider,kind:f.kind,subject:f.subject,payload:P,observedAt:n().toISOString(),collectorVersion:h.version};d.items.push(x),r.cache?.set(m,x,n())}return d}D();C();import $E from"node:path";D();C();import Jh from"node:path";var LE="provider-evidence-wanted.json",BE="provider-evidence-cache.json",HE=600*1e3;function qh(e){return Jh.join(E(e),LE)}function FE(e){return Jh.join(E(e),BE)}function zh(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 Xh(e){let r=_(qh(e),null);return zh(r?.wanted)}function Qh(e,r){se(qh(e),{savedAt:new Date().toISOString(),wanted:r})}function Zh(e,r={}){let t=r.ttlMs??HE,n=FE(e),s={..._(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(se(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function ek(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?zh(r):null}var KE="provider-evidence-shared-cache.json",jE=6e4,VE=1,GE=1;function kc(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function YE(){return $E.join(ee().harnessRoot,KE)}function JE(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?VE:GE;return kc(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,kc("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function rk(){return kc("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",jE)}function qE(e){return Math.floor(e.getTime()/6e4)*6e4}function zE(e){return`${e.provider}:${e.kind}`}function tk(e,r={}){let t=Zh(e,{ttlMs:r.ttlMs??rk()}),n=r.file??YE(),o=_(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??rk(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let f=s[u];if(!f)return null;let m=Date.parse(f.observedAt);return!Number.isFinite(m)||d.getTime()-m>a?(delete s[u],l=!0,null):(t.set(u,f,d),f)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let f=JE(u.provider);if(f===0)return!0;let m=zE(u),g=qE(p),k=i[m];return!k||k.windowStartMs!==g?(i[m]={windowStartMs:g,used:1},l=!0,!0):k.used>=f?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(se(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}function QE(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function ZE(e,r){let t=L(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=_(XE.join(E(t.id),"workers",v(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Dt(a))continue;if(Xr(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=M(a);if(!ie(l))continue;let c=Et({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await mo({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function eA(e,r,t,n,o){let s=K(n.baseUrl?String(n.baseUrl):void 0),i=await q(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await Ai(),c=Os(r),u=null;try{let g=Xh(r);if(g.length>0){let k=tk(r);u=Yh(g,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=Is(r),p=await Vr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:go(r),resourceGate:t,boxResourceSnapshot:di(t,{harnessRunId:r,boxKind:Ke(y())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Je({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),f=ek(p.response);if(f)try{Qh(r,f)}catch{}let m=bp(p);if(m)try{Rp(r,m)}catch{}return{ok:p.ok,httpStatus:p.status,response:p.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function yc(e){let r=String(T(String(e.run||""),"--run")),t=String(T(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";go(r);let o=await gg(t,e),s=fg(o),i=sr({runId:r,configuredMaxWorkersOverride:s}),a=Ah()?Eh(r):void 0,l=await eA(t,r,i,e,a),c=jm(r,l),u=await Ks(r,e),d=await ZE(r,e),p=sr({runId:r,configuredMaxWorkersOverride:s}),f=Co(),m=await mg(r,e),g=Xf(p,l),k=g.maxStarts,h=QE()?await _o({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},R=null,S=0,P=zf(l),x=k;if(n&&x>0&&P.length>0){let J=Math.min(x,P.length),V=await Ul({...e,run:r,agentOsId:t,targetTaskIds:P.join(",")},J),j=en(V);S+=j,x=Math.max(0,x-j),R={exactTargetTaskIds:P,exact:V,startedCount:S}}if(n&&x>0){let J=await Ul({...e,run:r,agentOsId:t},x),V=en(J);S+=V,R=R&&typeof R=="object"?{...R,broad:J,startedCount:S}:J}else!n||k<=0?R||(R={ok:!0,skipped:!0,reason:n?p.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:g,...P.length?{exactTargetTaskIds:P,exactOnly:!0}:{}}):R&&typeof R=="object"&&(R={...R,broadSkipped:!0,startedCount:S});let A=!g.underutilized&&k===0&&d.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:p,leaseRenewal:u,completedWorkers:d,staleReconcile:f,harnessCleanup:a,planProgressSync:m,completionAckSync:c,operatorTick:l,sweep:h,dispatchAdvice:g,dispatch:R,idle:A}}N();import RA from"node:os";import{readFileSync as rA}from"node:fs";import{homedir as tA,platform as nA}from"node:os";import oA from"node:path";import{execFileSync as sA}from"node:child_process";function nk(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 iA(){if(nA()==="darwin")try{let e=sA("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return nk(e.trim())}catch{return null}try{let e=rA(oA.join(tA(),".claude",".credentials.json"),"utf8");return nk(e)}catch{return null}}function ok(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=iA();if(s)return{kind:"oauth",token:s}}return null}var aA="You are Claude Code, Anthropic's official CLI for Claude.";function lA(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function cA(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 uA(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*dA(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(`
|
|
50
|
+
`))!==-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 pA(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function sk(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:aA},{type:"text",text:n.system}]);let i=await fetch(`${pA()}/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=lA();for await(let l of dA(i.body)){let c=cA(a,l);c&&e.onDelta(c)}return uA(a)}var an=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 hA}from"node:child_process";var mA=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),fA=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),gA=["--secret","--api-key","--keeper-child"];function ik(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(gA.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
51
|
+
`)||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")}:mA.has(t)?{ok:!0,mutating:!1}:fA.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var kA=10*6e4,yA=5e3,ak=2e5;async function lk(e,r,t={}){let n=ik(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??kA,i=new an(r);return new Promise(a=>{let l=0,c=!1,u=hA(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=f=>{if(l>=ak)return;let m=f.toString("utf8").slice(0,ak-l);l+=m.length,i.push(m)};u.stdout?.on("data",d),u.stderr?.on("data",d);let p=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),yA).unref()},s);u.on("error",f=>{clearTimeout(p),i.push(`spawn failed: ${f.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",f=>{clearTimeout(p),i.close(),a({exitCode:f,timedOut:c})})})}var bA=25e3,vA=32e3,SA=5e3,wA=6e4,ck=5*6e4,CA=5e3,_A="claude-sonnet-4-6";async function xA(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(),CA);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 uk(e=process.env){let r=y(),t=r.agentOsId?.trim(),n=Q();if(!t||!n)return null;let o=await xA(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:RA.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||_A,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function PA(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),vA),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:bA}),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 lt(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 EA(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await lk(n,s=>{lt(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await lt(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await lt(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 AA(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||lt(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new an(s),a=ok(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await lt(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await sk({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await lt(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 lt(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 Rc(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function dk(e){let r=await uk();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!Q()||!y().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:ck}));!r&&!e.shouldStop();){if(!Q()||!y().agentOsId?.trim()||(await Rc(ck,e.shouldStop),e.shouldStop()))return;r=await uk()}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 PA(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Rc(wA,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await EA(r,t):await AA(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Rc(SA,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var IA=6e4,OA=5*6e4,NA=10,TA=250;async function bc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(TA,t);await yr(n),t-=n}}async function Ni(e){$t();let r=Dn();r.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...r}));let t=String(T(String(e.run||""),"--run")),n=String(T(String(e.agentOsId||y().agentOsId||""),"--agent-os-id")),o=e.execute!==!1&&e.execute!=="false",s=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):IA,i=!1,a=0;process.on("SIGINT",()=>{i=!0}),process.on("SIGTERM",()=>{i=!0});let l=Jn();l.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:l.resolved?.defaultRepo??null,configPath:l.configPath}));let c=Qd(y());c.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:t,agentOsId:n,errors:c.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:t,agentOsId:n,execute:o,intervalMs:s,boxKind:c.box.boxKind,workerCapSource:c.workerCapSource,maxConcurrentWorkers:c.maxConcurrentWorkers}));let u=lr(),d=dk({shouldStop:()=>i}).catch(f=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:f instanceof Error?f.message:String(f)}))}),p=!1;for(;!i;)try{ep({agentOsId:n,runId:t,instructionBundleVersion:Kr()});let f=await Ea(e.secret?String(e.secret):void 0,n);if(!f.ok){p||(p=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:n,reason:f.reason,remedy:`run \`kynver runner credential --agent-os-id ${n}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await bc(s,()=>i);continue}p&&(p=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:n}))),await zd({agentOsId:n,baseUrl:Cd(e.baseUrl?String(e.baseUrl):void 0),secret:f.secret});let m=await yc({run:t,agentOsId:n,execute:o,...e});if(console.error(JSON.stringify({event:"daemon_tick",...m})),u.tickEnabled){let R=Is(t);if(R&&!R.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:R.holderBoxId}));else{let S=await Kt({env:u,agentOsIdFilter:n});S.enabled&&(S.fired>0||S.errors>0||S.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...S}))}}m.idle?a++:a=0;let g=Math.floor(Ft("daemon.maxIdleStreak",NA)),k=Math.floor(Ft("daemon.idleIntervalMs",OA)),h=a>=g?k:s;await bc(h,()=>i)}catch(f){console.error(JSON.stringify({event:"daemon_tick_error",error:f.message})),await bc(s,()=>i)}await d,console.error(JSON.stringify({event:"daemon_stop",runId:t,agentOsId:n}))}N();import{spawn as DA}from"node:child_process";C();var MA=15*6e4,pk=2*6e4,mk=1e4,UA=5e3,WA=5*6e4,LA=30*6e4,fk=5e3;function BA(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:MA}function Ti(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 HA(e,r=UA,t=WA){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function FA(e,r,t=LA){return r-e>=t}function ct(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function $A(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 Di(e,r=process.argv.slice(2)){let t=String(T(String(e.agentOsId||y().agentOsId||""),"--agent-os-id")),n=BA(e.stallMs),o=$A(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,ct("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),ct("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,p=null,f=null;for(a=DA(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),ct("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,p=k,f=h});!d&&!i&&(await yr(fk),!(d||i));){if(Date.now()-u<pk)continue;let k=rp(t),h=k&&k.pid===a.pid?k:null;if(h&&tp(h,n)){ct("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await yr(mk),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+pk){ct("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await yr(mk),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await yr(fk);if(i)break;let m=Date.now();FA(u,m)&&(l=0),l+=1;let g=HA(l);ct("child_exited",{code:p,signal:f,uptimeMs:m-u,consecutiveFailures:l,respawnInMs:g}),await yr(g)}ct("stopped",{agentOsId:t})}we();D();import{existsSync as zA,mkdirSync as XA}from"node:fs";import QA from"node:path";D();Lr();import{existsSync as KA,readFileSync as jA}from"node:fs";import gk from"node:path";X();C();function VA(e){if(!e||!KA(e))return 0;try{return jA(e,"utf8").trim().length}catch{return 0}}function GA(e,r){let t=gk.join(E(e.id),"workers",v(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=M(n,{base:e.base,baseCommit:e.baseCommit}),s=VA(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:Tt(o),completionBlocked:a}}function YA(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 JA(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 qA(e){let r=0;for(let t of fe(e)){let n=gk.join(E(e.id),"workers",v(t),"worker.json"),o=_(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 Oo(){return Co(),z().map(e=>{let t=fe(e).map(d=>GA(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}=JA(t),c=qA(e),u=An(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:YA({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function hk(){console.log(JSON.stringify(Oo(),null,2))}C();function ZA(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ae();return t?t.repo:(T("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Mi(e){let r=ef(ZA(e));Ru(r);let t=e.id?ri(String(e.id)):fu(String(e.name||"run")),n=E(t);zA(n)&&eI(`run already exists: ${t}`),XA(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:{}};se(QA.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 kk(){hk()}function eI(e){console.error(e),process.exit(1)}D();import{existsSync as Wi}from"node:fs";async function Ui(e=lr()){let r=await jr(e.storePath).catch(()=>[]),t=await As(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=Ps(e),s="disabled";return o?s="kynver-cron-daemon":process.env.QSTASH_TOKEN?.trim()&&(s="qstash"),{primary:s,env:{storePath:e.storePath,statePath:e.statePath,tickEnabled:e.tickEnabled,fireBaseUrl:e.fireBaseUrl,missedRunPolicy:e.missedRunPolicy,maxCatchUpPerTick:e.maxCatchUpPerTick,maxRetries:e.maxRetries},jobCount:r.length,stateJobCount:Object.keys(t.jobs).length,credentialsReady:n,daemonPrimary:o}}import{homedir as rI}from"node:os";import tI from"node:path";Ve();var Dr="watchdog:board-sweep",nI="*/5 * * * *",oI=["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 yk(e){let r=e.storePath?.trim()||xr(),t=e.envFilePath?.trim()||ge,n=tI.join(rI(),".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:oI,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:nI,dedupeKey:Dr,callbackPath:o}}}Ve();async function ln(e){let r=e.envFilePath??ge,t=[],n=lr(),o=await Ui(n),s=Fr(r);t.push({id:"config_agent_os",ok:!!e.config.agentOsId?.trim(),summary:e.config.agentOsId?`agentOsId configured (${e.config.agentOsId})`:"agentOsId missing in ~/.kynver/config.json",remediation:"Run `kynver setup --agent-os-id <id>`."}),t.push({id:"config_api_base",ok:!!(e.config.apiBaseUrl?.trim()||n.fireBaseUrl),summary:n.fireBaseUrl?`fire base URL resolved (${n.fireBaseUrl})`:"KYNVER_API_URL / apiBaseUrl not configured",remediation:"Run `kynver setup --api-base-url https://\u2026`."}),t.push({id:"deployment_provider",ok:e.config.deploymentSchedulerProvider==="kynver-cron",summary:`deploymentSchedulerProvider=${e.config.deploymentSchedulerProvider??"(unset)"}`,remediation:'Run `kynver cron install` or set deploymentSchedulerProvider to "kynver-cron".'}),t.push({id:"cron_secret",ok:!!n.secret,summary:n.secret?"KYNVER_CRON_SECRET present":"KYNVER_CRON_SECRET missing",remediation:"Run `kynver cron install` to generate and persist the shared secret."}),t.push({id:"env_file",ok:Wi(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Wi(r)?`~/.kynver/.env present (${s.size} keys)`:"~/.kynver/.env missing",remediation:"Run `kynver cron install` to write ~/.kynver/.env."}),t.push({id:"cron_store",ok:Wi(n.storePath),summary:Wi(n.storePath)?`cron store present (${n.storePath})`:`cron store missing (${n.storePath})`,remediation:"Run `kynver cron install` to initialize the local store."});let a=(await jr(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===Dr);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}}N();Me();C();import{existsSync as Ek}from"node:fs";import{createHash as sI}from"node:crypto";function Rk(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:${sI("sha1").update(r).digest("hex").slice(0,16)}`}async function vc(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function bk(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await vc(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 vk(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 vc(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??Dr,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function Sk(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await vc(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 wk(e,r,t=Dr){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 Ck(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Dr&&r.provider==="qstash"&&r.status!=="cancelled")}function iI(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Dr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function _k(e){return iI(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`."}}Ve();Ve();import{randomBytes as aI}from"node:crypto";function lI(){return aI(32).toString("base64url")}function xk(e=ge){let r=Na();if(r)return{secret:r,generated:!1,source:"env"};let n=Fr(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:lI(),generated:!0,source:"generated"}}gs();ks();D();function Pk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=ee().runsDir;return Ek(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Li(e={}){let r=e.execute!==!1,t=y(),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=xk(),i=yk({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:B(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=ms(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:B(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=Pk(u,e.runId);d&&(u.defaultDaemonRunId=d),de(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 p=await fp(i.storePath);l.storeInitialized=p.created||Ek(i.storePath);let f=Q();if(f)try{let m=await $r(o,{baseUrl:n,apiKey:f});Cr(o,m)}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 m=await vk(n,o,f,void 0,{requireProvider:"kynver-cron"}),g=wk(o,m.requestedCron,m.dedupeKey),k={providerScheduleId:Rk(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await mp(k,i.storePath),l.watchdog={remoteJobId:m.job.id,provider:m.selectedProvider??m.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await bk(n,o,f),R=Ck(h),S=["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 x=_k(h);if(!x.allowed)a.push(x.reason);else for(let A of R)await Sk(n,o,A.id,f),P.push(A.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(x=>({id:x.id,provider:x.provider,status:x.status})),removed:P,manualSteps:S}}catch(m){l.watchdog={error:m.message},a.push(`watchdog registration failed: ${m.message}`)}if(e.installSystemd){let m=Pk({...t,...i.configUpdates},e.runId);if(!m)l.systemd={supported:i.systemdSupported,unitPath:null,written:!1,enabled:!1,started:!1,note:"No harness run found \u2014 run `kynver run create` first or pass --run <runId>."},a.push("harness run \u2014 create a run before installing systemd unit");else{try{L(m)}catch{a.push(`harness run ${m} not found`)}if(l.systemd=hs({envFilePath:i.envFilePath,agentOsId:o,runId:m,kynverBin:Ut()},r),r&&l.systemd.enabled){let g=y();de({...g,daemonSupervisionOwner:"systemd"})}}}if(!e.skipTestFire&&a.length===0){let m=await Kt({agentOsIdFilter:o});l.testFire={fired:m.fired,errors:m.errors},m.errors>0&&a.push(`test fire reported ${m.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await ln({config:y(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var cI=["deployment_provider","cron_secret","env_file","cron_store"];function Ak(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function uI(e){let r=Ak(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Ak(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function dI(e){if(!uI(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await ln({config:e})).checks.filter(n=>cI.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function pI(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 Sc(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Ik(e){if(Sc(e.args.skipCron))return{action:"skipped"};let r=await dI(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=Sc(e.args.installSystemd)||Sc(e.args["install-systemd"]),n=await Li({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 pI(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}N();Pe();bn();function Ok(e=y(),r=process.env){let t=xe(r,e),n=[...t.warnings],o=e.maxConcurrentWorkers,s=!1,i={...e};if(e.boxKind?.trim()||(i.boxKind=t.boxKind,s=!0,n.push(`persisted boxKind=${t.boxKind} to ~/.kynver/config.json \u2014 set explicitly via kynver setup --box-kind`)),St(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=nr(t.boxKind,o);a!==o&&(o=a,i.maxConcurrentWorkers=a,s=!0,n.push(`clamped maxConcurrentWorkers to ${a} for ${t.boxKind} pool`))}return s&&de(i),{repaired:s,boxKind:t.boxKind,maxConcurrentWorkers:o??4,warnings:n}}ks();gs();N();Ve();Hn();ys();Fn();D();async function Nk(e){let r=Rs(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&Bn(t.hostKind)))return{action:"keeper",owner:"keeper"};try{L(e.runId)}catch{return{action:"systemd_skipped",owner:"keeper",blockers:[`harness run ${e.runId} not found \u2014 cannot install systemd unit`]}}let o=hs({envFilePath:ge,agentOsId:e.agentOsId,runId:e.runId,kynverBin:Ut()},!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=y();return de({...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 Tk(e){return e.action==="systemd_installed"}function Dk(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 fI(e,r){return e.filter(n=>n.repo===r&&!dr.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Mk(e){$t();let r=y();(!Q()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await _s(e),r=y());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)),Kn(t).ok||(console.error(ws(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(de({...r,chatUseClaudeOauth:!0}),r=y(),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()||Ae()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=Ok(r);if(s.repaired){r=y();for(let c of s.warnings)console.log(` ${c}`)}let i=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";i||(i=fI(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=Mi({...e,repo:o,name:"agent"}).runId),await Ik({config:r,agentOsId:t,runId:i,args:e});let a=await Nk({config:y(),agentOsId:t,runId:i,args:e});if(Tk(a)){console.log("");for(let c of Dk())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${mI.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(Ti(l)){await Di(l,gI(i,t,e));return}await Ni(l)}function gI(e,r,t){if(!Kn(r).ok)throw new Error(ws(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();X();import{existsSync as hI,rmSync as kI}from"node:fs";import wc from"node:path";function yI(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function RI(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function bI(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=[...RI(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=wc.resolve(n.worktreePath),i=[];for(let c of o){let u=yI(c),d=wc.resolve(s,u);if(!d.startsWith(s+wc.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!hI(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};kI(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])],$(n.runId,n);let l=M(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function Uk(e){let r=bI(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}N();import JI from"node:path";Mn();es();Mn();var vI=/--max-old-space-size=(\d+)/;function SI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Cc(){return SI(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function _c(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(vI.test(t))return r;let o=`--max-old-space-size=${Cc()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function cn(e=Cc()){return`--max-old-space-size=${e}`}fs();N();Mn();es();import{spawnSync as wI}from"node:child_process";function Hi(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Lk(e=y()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Hi(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Hi(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Hi(e.perWorkerMemBytes,1610612736),reserveBytes:t??Hi(e.memReserveBytes,2147483648)}}var Fi=0;function Ec(){Fi+=1}function Ac(){Fi=Math.max(0,Fi-1)}function un(e={}){let r={...Lk(),...e},t=e.memAvailableBytes??vn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Fi,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function CI(e){e<=0||wI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Ic(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=un({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)CI(Math.min(r,n-Date.now())),o=un({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as VI}from"node:child_process";C();import{closeSync as EI,existsSync as To,mkdirSync as AI,openSync as II,readdirSync as Hk,readFileSync as OI,statSync as NI,unlinkSync as Nc,writeFileSync as TI}from"node:fs";import Tc from"node:path";import{mkdirSync as _I}from"node:fs";import{tmpdir as xI}from"node:os";import $i from"node:path";function PI(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Bk(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?$i.resolve(e):PI()?$i.join(xI(),"kynver","state","heavy-verification"):$i.join(li(),"heavy-verification")}function No(){return $i.join(Bk(),"slots")}function dn(){let e=No();return _I(e,{recursive:!0}),e}var pn=120*6e4,Oc=1;function DI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Mo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function Do(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?DI(e,Oc):Oc}function MI(e){return`slot-${e}`}function Fk(e,r=No()){return Tc.join(r,`${e}.json`)}function Dc(e){if(!To(e))return null;try{let r=JSON.parse(OI(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 $k(e,r=pn){if(!e||!F(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function Kk(e,r){let t=Dc(e);if(t)return $k(t,r);if(!To(e))return!0;try{return Date.now()-NI(e).mtimeMs>r}catch{return!0}}function UI(e,r){if(Kk(e,r))try{Nc(e)}catch{}}function WI(e){return AI(e,{recursive:!0}),e}function ji(e={}){let r=WI(e.slotsDir??dn()),t=e.staleMs??pn,n=0;for(let o of Hk(r)){if(!o.endsWith(".json"))continue;let s=Tc.join(r,o),i=To(s);UI(s,t),i&&!To(s)&&(n+=1)}return n}function jk(e={}){let r=e.slotsDir??dn(),t=e.staleMs??pn;ji({slotsDir:r,staleMs:t});let n=[];for(let o of Hk(r)){if(!o.endsWith(".json"))continue;let s=Dc(Tc.join(r,o));s&&!$k(s,t)&&n.push(s)}return n}function Ki(e={}){return jk(e).length}function mn(e,r={}){if(Mo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Do(),reason:null};let t=r.slotsDir??dn(),n=r.staleMs??pn,o=r.maxSlots??Do();ji({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=MI(i),l=Fk(a,t),c=Dc(l);if(Kk(l,n))try{Nc(l)}catch{}else if(c||To(l))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=II(l,"wx");TI(d,JSON.stringify(u,null,2),"utf8"),EI(d);let p=Ki({slotsDir:t,staleMs:n});return{admitted:!0,slotId:a,activeSlots:p,maxSlots:o,reason:null}}catch(d){if(d.code==="EEXIST")continue;throw d}}let s=Ki({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function Uo(e,r={}){if(!e)return;let t=Fk(e,r.slotsDir??No());try{Nc(t)}catch{}}function Wo(e,r={}){if(Mo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Do(),reason:null};let t=r.slotsDir??dn(),n=r.staleMs??pn,o=r.maxSlots??Do();ji({slotsDir:t,staleMs:n});let s=Ki({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 LI}from"node:child_process";function BI(e){e<=0||LI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Mc(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=mn(e,n);for(;!s.admitted&&Date.now()<o;)BI(Math.min(t,o-Date.now())),s=mn(e,n);return s}var HI=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,FI=/\b(npm run build\b|next build\b)\b/i,$I=/\b(vercel (build|deploy|--prod))\b/i,KI=/\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?KI.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:$I.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:FI.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:HI.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 Vi="heavy_verification_token_required";function Wc(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:{...Wo(e),slotId:null}};if(Mo())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Wo(e),slotId:null}};let n=r.waitMs??0,o=n>0?Mc(e,n,r.pollMs):mn(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Vi,commandClass:t.commandClass,reason:t.reason??o.reason??Vi,verificationGate:o}}_e();import Lc from"node:path";function jI(e){let r=Sr(be()),t=Lc.relative(r,Lc.resolve(e));return t.length>0&&!t.startsWith("..")&&!Lc.isAbsolute(t)}function Vk(e){return jI(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}}fs();function GI(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}var YI=[/Failed to start transient scope unit/i,/Failed to connect to bus/i,/Failed to allocate scope/i,/Connection timed out/i,/No such file or directory.*systemd-run/i];function Gk(e){return YI.some(r=>r.test(e))}function Bc(e,r){let t=VI(e[0],e.slice(1),{cwd:r.cwd,env:r.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:r.shell,timeout:r.timeoutMs});return{exitCode:t.status??1,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}function Hc(e){let r=e.waitForAdmissionMs??6e5,t=Wc(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:cn(),admission:un(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?Ic(r):un();if(!s.admitted)return Uo(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:cn(),admission:s,verificationGate:n,command:e.command};let i=Vk(e.cwd);if(!i.ok)return Uo(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:cn(),admission:s,verificationGate:n,command:e.command};let a=_c({...process.env,...e.env}),l=cn(),c=Wn();Ec();try{let u,d=c,p=!1;if(c){let f=Ra({cwd:e.cwd,command:["/usr/bin/env",...GI(a),"/bin/bash","-lc",e.command]});u=Bc(f,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs}),u.exitCode!==0&&Gk(u.stderr)&&(u=Bc([e.command],{cwd:e.cwd,env:a,shell:!0,timeoutMs:e.timeoutMs}),d=!1,p=!0)}else u=Bc([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:d,systemdScopeFallback:p,nodeOptionsFlag:l,admission:s,verificationGate:n,gateOutcome:t.outcome,command:e.command}}finally{Ac(),Uo(o)}}var Fc=["npm run typecheck","npm run test"];function Gi(e,r=Fc,t={}){let n=[],o=!0;for(let s=0;s<r.length;s++){let i=r[s];t.onBeforeCommand?.(i,s,r.length);let a=Hc({cwd:e,command:i,waitForAdmissionMs:t.waitForAdmissionMs,timeoutMs:t.timeoutMs});n.push({command:i,result:a}),a.ok||(o=!1)}return{passed:o,steps:n}}C();function Yk(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 Jk(e){let r=T(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):y().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=T(e.role?String(e.role):void 0,"role"),o=T(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let S of i)s.push(Yk(String(S)));else typeof i=="string"&&s.push(Yk(i));let a=K(e.baseUrl?String(e.baseUrl):void 0),l=await q(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=y(),p=`provider:${Ms(u.workerProvider,cr)}`,m=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),g={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):p};m!==void 0&&(g.proposed=m);let k=await fetch(c,{method:"POST",headers:We(l),body:JSON.stringify(g)}),h=await k.text(),R=null;try{R=JSON.parse(h)}catch{R=h}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:R},null,2)),process.exit(1)),console.log(JSON.stringify(R,null,2))}function qI(e){let r=T(e.worktree?String(e.worktree):void 0,"worktree"),t=JI.resolve(r),n=e.json===!0||e.json==="true",o=e.timeoutMs?Number(e.timeoutMs):600*1e3,s=e.waitForAdmissionMs?Number(e.waitForAdmissionMs):3e4;n||process.stderr.write(`plan verify local: ${t} (timeout ${o/1e3}s/cmd, admission wait ${s/1e3}s)
|
|
52
|
+
`);let i=Gi(t,void 0,{timeoutMs:o,waitForAdmissionMs:s,onBeforeCommand:n?void 0:(l,c,u)=>process.stderr.write(` [${c+1}/${u}] running: ${l}
|
|
53
|
+
`)}),a={passed:i.passed,worktree:t,steps:i.steps};console.log(n?JSON.stringify(a,null,2):i.passed?"local plan verify passed":"local plan verify failed"),i.passed||process.exit(1)}async function qk(e){let r=T(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){qI(e);return}let n=y().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 zI from"node:path";C();function zk(e){let r=zI.resolve(T(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=Gi(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(`
|
|
54
|
+
`)[0]}`)}process.exit(s.passed?0:1)}N();import{readFileSync as XI}from"node:fs";C();var QI=["create","add_version","update_metadata"],ZI=["approval_guard","auth","network","server","tool_interruption"];function eO(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:XI(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 Xk(e){let r=T(e.operation?String(e.operation):void 0,"operation");if(!QI.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=y(),o=T(e.slug?String(e.slug):n.agentOsSlug,"slug (or agentOsSlug in ~/.kynver/config.json)"),s=T(e.title?String(e.title):void 0,"title"),{body:i,bodyPathHint:a}=eO(e);a&&ko(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:rO(e)},c=await Ro(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function rO(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!ZI.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 Qk(){let e=Zt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Zk(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await Al({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function ey(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=cc({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)}Sn();function ry(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=Si({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=br(),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 fr(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 Yi(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(`
|
|
55
|
+
`),diagnostic:fr(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(`
|
|
56
|
+
`),diagnostic:fr(e)}}import dO from"node:path";D();X();C();X();C();function ty(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Za(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>Nt?{health:"stale",reason:`heartbeat older than ${Math.floor(Nt/1e3)}s`}:t.alive&&r.pid&&!F(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}_e();C();import{existsSync as ny,mkdirSync as lO,readdirSync as cO,unlinkSync as uO}from"node:fs";import $c from"node:path";function oy(){let{harnessRoot:e}=Ct(),r=$c.join(e,"monitors");return lO(r,{recursive:!0}),r}function fn(e,r){return r?`${v(e)}--${v(r)}`:v(e)}function Kc(e){return $c.join(oy(),`${e}.json`)}function gn(e){return _(Kc(e),void 0)}function hn(e){se(Kc(e.monitorId),e)}function sy(e){let r=Kc(e);return ny(r)?(uO(r),!0):!1}function iy(){let e=oy();if(!ny(e))return[];let r=[];for(let t of cO(e)){if(!t.endsWith(".json"))continue;let n=_($c.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?F(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}X();function jc(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"),Ys(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"),Tt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}function ay(e,r){return _(dO.join(E(e),"workers",v(r),"worker.json"),void 0)}function ly(e,r){let t=L(e),n=Object.keys(t.workers||{});if(!r)return n;let o=v(r);return n.filter(s=>v(s)===o)}function cy(e,r){let t=L(e.runId),n=M(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=ty({worker:e,status:n,taskLease:o}),i=jc({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 Lo(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=L(r),s=ly(r,t),i=[];for(let m of s){let g=ay(r,m);g&&i.push(g)}let a=n||i.map(m=>m.agentOsId).find(m=>typeof m=="string"&&m.trim())||void 0,l=i.map(m=>m.taskId).filter(m=>!!m),c=await Jt({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(m=>cy(m,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Ks(r,{...e,agentOsId:a}));let p=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let m of u){if(!m.autoComplete.eligible){p.push({worker:m.worker,outcome:"skipped",ok:!1,reason:m.autoComplete.blockers.join("; ")||"not eligible"});continue}let g=await qt({run:r,name:m.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});p.push({worker:m.worker,outcome:g.outcome,ok:g.outcome==="completed",reason:g.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:p}}function uy(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=ly(r,t),o=[];for(let s of n){let i=ay(r,s);i&&o.push(cy(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Vc(){return iy()}function dy(e){let r=String(e.run||"");T(r,"--run");let t=fn(r,e.name?String(e.name):void 0),n=gn(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&F(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),hn(n),sy(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Gc(e){let r=String(e.run||""),t=String(e.name||"");T(r,"--run"),T(t,"--name");let n=ue(r,t),o=L(r),s=M(n,{base:o.base,baseCommit:o.baseCommit}),i=jc({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 qt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}C();var pO=5e3,mO=360*60*1e3;async function py(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):pO,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):mO,o=Date.now();for(;Date.now()-o<=n;){let s=r?gn(r):void 0;if(s?.stoppedAt)break;let i=await Lo({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Yi({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(),hn(s));break}Ur(t)}}C();_e();import{spawn as fO}from"node:child_process";import{closeSync as my,existsSync as gO,openSync as hO}from"node:fs";import kO from"node:path";function fy(e){let r=e.nodeExecutable??process.execPath,t=ni({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!gO(n))return;let o=fn(e.runId,e.workerName),{harnessRoot:s}=Ct(),i=kO.join(s,"monitors",`${o}.log`),a;try{a=hO(i,"a")}catch{a=void 0}let l=e.pollMs??5e3,c=[...t.argsPrefix,"monitor","run-loop","--run",e.runId,"--monitor-id",o,"--poll-ms",String(l),"--auto-complete","true","--renew-leases","true"];e.workerName&&c.push("--name",e.workerName),e.agentOsId&&c.push("--agent-os-id",e.agentOsId),e.baseUrl&&c.push("--base-url",e.baseUrl),e.secret&&c.push("--secret",e.secret);let u=["ignore",a??"ignore",a??"ignore"];try{let d=fO(t.command,c,pe({detached:!0,stdio:u,env:process.env}));a!==void 0&&my(a),d.unref();let p={monitorId:o,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:d.pid,startedAt:new Date().toISOString(),pollMs:l,logPath:i};return hn(p),{monitorId:o,pid:d.pid,logPath:i,session:p}}catch{if(a!==void 0)try{my(a)}catch{}return}}C();async function gy(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=fn(r,t),o=gn(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=fy({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 hy(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Lo({...e,autoComplete:!1}):uy(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Vc()},null,2))}function ky(e){console.log(JSON.stringify(dy(e),null,2))}function yy(){console.log(JSON.stringify({monitors:Vc()},null,2))}async function Ry(e){await py(e)}async function by(e){let r=await Lo(e);console.log(JSON.stringify(r,null,2))}import{existsSync as yO,readFileSync as RO}from"node:fs";import{dirname as Yc,join as Sy}from"node:path";import{fileURLToPath as vy}from"node:url";function bO(e){let r=Yc(vy(e));for(let t=0;t<6;t+=1){if(yO(Sy(r,"package.json")))return r;let n=Yc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Yc(vy(e))}`)}function wy(e=import.meta.url){let r=Sy(bO(e),"package.json"),t=JSON.parse(RO(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var ut=wy();function vO(e){return e.some(r=>r==="--version"||r==="-v")}function SO(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Cy(e,r=import.meta.url,t){return vO(e)?(SO(wy(r),t),!0):!1}function wO(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 CO(e={}){let[r,t]=await Promise.all([Ai(),Promise.resolve(Mh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:ut;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:wO(r),repo:t,self:n}}async function _y(e={}){let r=await CO(e);return Wh(r)}function xy(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}C();function _O(e){let r=e.trim();return r?Oo().find(n=>n.name===r&&n.status!=="completed")??null:null}function Py(e){let r=String(T(String(e.name||""),"--name")),t=_O(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}D();X();C();N();import xO from"node:path";function Bo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function PO(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 z())for(let l of Object.keys(a.workers??{})){let c=xO.join(E(a.id),"workers",v(l),"worker.json"),u=_(c,void 0);if(!u){s.push(Bo(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",p=u.agentOsId??"",f=u.leaseOwner??"";if(!u.dispatched||!d||!p||!f){s.push(Bo(a.id,l,d,p,f,"not a fully-leased dispatched worker"));continue}if(t&&p!==t)continue;if(u.completionReportedAt){s.push(Bo(a.id,l,d,p,f,"completion already reported"));continue}let m=M(u);if(m.finalResult){s.push(Bo(a.id,l,d,p,f,"has final result \u2014 let pipeline tick complete it"));continue}if(m.alive){s.push(Bo(a.id,l,d,p,f,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:p,leaseOwner:f,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let g=await q(e.secret?String(e.secret):void 0,p,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(p)}/tasks/${encodeURIComponent(d)}/release`,h=await te(k,g,{agentOsId:p,leaseOwner:f},{agentOsId:p,baseUrl:r});h.ok===!0||h.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:p,leaseOwner:f,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:p,leaseOwner:f,action:"skipped",reason:`release returned ok:false (likely owner mismatch or already released): HTTP ${h.status}`})}catch(g){i.push({runId:a.id,worker:l,taskId:d,agentOsId:p,leaseOwner:f,action:"error",reason:g.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function Ey(e){let r=await PO(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 Wy from"node:path";Me();N();import{accessSync as EO,constants as AO,existsSync as Jc,readFileSync as IO}from"node:fs";import{homedir as Ji}from"node:os";import qi from"node:path";import{spawnSync as OO}from"node:child_process";_e();function Ay(e,r){try{let t=OO(e,r,{encoding:"utf8"}),n=(t.stdout||"").trim(),o=(t.stderr||"").trim();return{ok:t.status===0,stdout:n,stderr:o,error:t.error?.message}}catch(t){return{ok:!1,stdout:"",stderr:"",error:t.message}}}function Iy(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function NO(e){if(!Jc(e))return!1;try{return EO(e,AO.W_OK),!0}catch{return!1}}var Oy={packageVersion:()=>ut,commandOnPath:e=>Ay(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Ay(e,["--version"]),loadConfig:()=>y(),configFilePath:()=>qi.join(Ji(),".kynver","config.json"),credentialsFilePath:()=>qi.join(Ji(),".kynver","credentials"),readCredentials:()=>{let e=qi.join(Ji(),".kynver","credentials");if(!Jc(e))return{hasApiKey:!1};try{let r=JSON.parse(IO(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:Iy(r.runnerToken),runnerTokenAgentOsId:r.runnerTokenAgentOsId}}catch{return{hasApiKey:!1}}},envSnapshot:()=>({kynverApiUrl:process.env.KYNVER_API_URL?.trim()||void 0,openclawCronFireBaseUrl:process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||void 0,kynverRunnerTokenPrefix:Iy(process.env.KYNVER_RUNNER_TOKEN),kynverRuntimeSecret:!!process.env.KYNVER_RUNTIME_SECRET?.trim(),openclawCronSecret:!!process.env.OPENCLAW_CRON_SECRET?.trim(),kynverHarnessRoot:process.env.KYNVER_HARNESS_ROOT?.trim()||void 0,opusHarnessRoot:process.env.OPUS_HARNESS_ROOT?.trim()||void 0,kynverSchedulerProvider:process.env.KYNVER_SCHEDULER_PROVIDER?.trim()||void 0,openclawCronStorePath:!!(process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim()),kynverCronDaemonPrimary:Ps(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>be(),legacyOpenclawHarnessRoot:()=>qi.join(Ji(),".openclaw","harness"),pathExists:e=>Jc(e),pathWritable:e=>NO(e)};function Ny(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function TO(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Ty(e){return!!e.openclawCronStorePath}function DO(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Dy(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(DO(e,r)&&!Ny(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(TO(e,r)&&!Ny(e,r)){if(Ty(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(Ty(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"}}}Ve();Hn();Fn();ys();function My(e,r={}){let t=Wt(),n=bs(e,t),o=[],s=r.envFilePath??ge,a=Fr(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=Sa();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=ba(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Hn();Fn();function Uy(e){let r=e.loadConfig(),t=Wt(),n=bs(r,t),s=My(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 MO(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 UO(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?B(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 WO(e){let r=e.configFilePath(),t=B(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=Ae({config:o}),c=l?Yn(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?Re(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function LO(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=B(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 BO(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 HO(e){let r=e.harnessRoot(),t=Wy.join(r,"runs"),n=Wy.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 FO(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 $O(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,p=n.runnerTokenPrefix,f=n.runnerTokenAgentOsId,m=!!p&&(!u||!f||f===u),g=!!d?.startsWith("krc1.")||m&&!!p?.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},Dy(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:g,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 Ly(e=Oy){let r=[UO(e),WO(e),LO(e),BO(e),HO(e),FO(e),Uy(e),$O(e)],t=MO(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 By(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Jn();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=Ly();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}N();import{existsSync as Ho,readFileSync as Fy}from"node:fs";import{homedir as KO}from"node:os";import qc from"node:path";import{spawnSync as jO}from"node:child_process";Me();var $y=qc.join(KO(),".kynver"),mX=qc.join($y,"config.json"),dt=qc.join($y,"credentials"),Hy=(()=>{let e=process.env.KYNVER_DAEMON_STALL_MS?.trim(),r=e?parseInt(e,10):NaN;return Number.isFinite(r)&&r>0?r:900*1e3})();function VO(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 kn(e){return e.checks.some(r=>r.status==="fail")}function GO(e){try{let r=jO(process.platform==="win32"?"where":"which",[e],{encoding:"utf8",timeout:3e3});return r.status===0&&!!r.stdout?.trim()}catch{return!1}}function YO(){if(!Ho(dt))return{hasApiKey:!1};try{let e=JSON.parse(Fy(dt,"utf8"));return{hasApiKey:!!e.apiKey?.trim(),runnerToken:e.runnerToken?.trim()||void 0,runnerTokenAgentOsId:e.runnerTokenAgentOsId?.trim()||void 0}}catch{return{hasApiKey:!1}}}function JO(){let e=GO("kynver");return{id:"stage_1_install",label:"Stage 1 \u2014 Install",checks:[{id:"install_package_version",label:"@kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${ut} is running`,details:{version:ut}},{id:"install_on_path",label:"kynver executable on PATH",status:e?"pass":"warn",summary:e?"kynver found on PATH \u2014 global install confirmed":"kynver not on PATH \u2014 running via node/npx (fine for first-timers)",remediation:e?void 0:"Install globally for a shorter command: `npm install -g @kynver-app/runtime`",details:{onPath:e}}]}}function qO(e,r){return{id:"stage_2_login",label:"Stage 2 \u2014 Device Login",checks:[{id:"login_credentials_file",label:"Credentials file present",status:Ho(dt)?"pass":"fail",summary:Ho(dt)?`${B(dt)} exists`:`${B(dt)} missing \u2014 not logged in`,remediation:Ho(dt)?void 0:r?`kynver login --api-base-url ${r}`:"kynver login --api-base-url https://your-kynver-site"},{id:"login_api_key",label:"API key present",status:e.hasApiKey?"pass":"fail",summary:e.hasApiKey?"API key found in credentials":"No API key \u2014 device login not completed",remediation:e.hasApiKey?void 0:r?`kynver login --api-base-url ${r}`:"kynver login --api-base-url https://your-kynver-site"}]}}function zO(e,r){return{id:"stage_3_workspace",label:"Stage 3 \u2014 Workspace Binding",checks:[{id:"workspace_api_base_url",label:"API base URL configured",status:r?"pass":"fail",summary:r?`apiBaseUrl = ${r}`:"apiBaseUrl not set \u2014 bootstrap required",remediation:r?void 0:"kynver bootstrap --api-base-url https://your-kynver-site",details:{apiBaseUrl:r??null}},{id:"workspace_agent_os_id",label:"AgentOS workspace bound",status:e?"pass":"fail",summary:e?`Workspace ${e} bound`:"agentOsId not set \u2014 workspace not bound",remediation:e?void 0:r?`kynver bootstrap --api-base-url ${r}`:"kynver bootstrap --api-base-url https://your-kynver-site",details:{agentOsId:e??null}}]}}function XO(e){let r=y(),t=Ae({config:r}),n=!!t?.repo,o=!!t?.persistedInConfig,s=[{id:"repo_configured",label:"Default repo configured",status:n?"pass":"fail",summary:n?o?`${B(t.repo)} (from config)`:`${B(t.repo)} (discovered \u2014 not persisted yet)`:"No default repo \u2014 kynver start requires --repo or a configured path",remediation:n?o?void 0:"kynver config ensure-default-repo":"kynver setup --repo /path/to/your/repo",details:{defaultRepo:t?.repo??null,source:t?.source??null,persistedInConfig:o}}];return n&&!o&&s.push({id:"repo_persisted",label:"Default repo persisted in ~/.kynver/config.json",status:"warn",summary:`Repo discovered via ${t?.source} but not saved to config \u2014 may not survive env changes`,remediation:"kynver config ensure-default-repo"}),{id:"stage_4_repo",label:"Stage 4 \u2014 Repo Selection",checks:s}}function QO(e,r){let t=e.runnerToken,n=!!t?.startsWith("krc1."),o=e.runnerTokenAgentOsId,s=!r||!o||o===r,i=[{id:"credential_scoped_token",label:"Scoped runner token (krc1.*) present",status:n?"pass":"fail",summary:n?`Scoped token present (krc1.\u2026 for ${o??r??"workspace"})`:t?"Runner token present but not a krc1.* scoped token \u2014 re-mint required":"No runner token \u2014 mint one with `kynver runner credential`",remediation:n?void 0:r?`kynver runner credential --agent-os-id ${r}`:"kynver runner credential --agent-os-id <your-agent-os-id>",details:{hasToken:!!t,isScoped:n,tokenAgentOsId:o??null}}];return n&&!s&&i.push({id:"credential_workspace_match",label:"Runner token matches configured workspace",status:"warn",summary:`Token is for workspace ${o}, config expects ${r}`,remediation:r?`kynver runner credential --agent-os-id ${r}`:void 0,details:{tokenAgentOsId:o??null,configAgentOsId:r??null}}),{id:"stage_5_credential",label:"Stage 5 \u2014 Runner Credential",checks:i}}function ZO(e){if(!e)return{id:"stage_6_daemon",label:"Stage 6 \u2014 Supervised Daemon",checks:[{id:"daemon_workspace_required",label:"Workspace required for daemon liveness check",status:"warn",summary:"agentOsId not set \u2014 cannot locate heartbeat file; complete stage 3 first"}]};let r=xs(e),t=Ho(r),n=!1,o=null,s=null;if(t)try{let a=JSON.parse(Fy(r,"utf8"));a.observedAt&&(o=Date.now()-new Date(a.observedAt).getTime(),n=o<Hy),s=a.pid??null}catch{}let i=[{id:"daemon_running",label:"Daemon running (heartbeat present)",status:t?"pass":"warn",summary:t?`Heartbeat file found: ${B(r)}`:`No heartbeat file at ${B(r)} \u2014 daemon not started`,remediation:t?void 0:"kynver start",details:{heartbeatPath:B(r),exists:t}}];return t&&i.push({id:"daemon_heartbeat_fresh",label:"Daemon heartbeat fresh",status:n?"pass":"warn",summary:n?`Last beat ${Math.round((o??0)/1e3)}s ago (pid ${s??"?"})`:o!==null?`Heartbeat is ${Math.round(o/6e4)}m old \u2014 daemon may be stalled`:"Cannot parse heartbeat timestamp",remediation:n?void 0:"kynver start # keeper will respawn the daemon",details:{ageMs:o,stallThresholdMs:Hy,pid:s}}),{id:"stage_6_daemon",label:"Stage 6 \u2014 Supervised Daemon",checks:i}}function Ky(){let e=y(),r=YO(),t=e.agentOsId?.trim()||void 0,n=e.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||void 0,o=JO(),s=qO(r,n),i=zO(t,n),a=XO(t),l=QO(r,t),c=ZO(t),u=[o,s,i,a,l,c],d=VO(u),p=0;kn(o)||(p=1),p>=1&&!kn(s)&&(p=2),p>=2&&!kn(i)&&(p=3),p>=3&&!kn(a)&&(p=4),p>=4&&!kn(l)&&(p=5),p>=5&&!kn(c)&&(p=6);let f=p>=5,m={0:"not started",1:"installed",2:"logged in",3:"workspace bound",4:"repo selected",5:"ready (credential minted)",6:"fully operational (daemon running)"},g=f?p===6?"Fully operational \u2014 daemon running with supervised respawn.":`Ready \u2014 runner at stage ${p} (${m[p]}). Run \`kynver start\` to bring the daemon online.`:`Lifecycle at stage ${p} (${m[p]}). ${d.fail} blocking check(s) \u2014 see remediation hints above.`;return{command:"doctor runner-install",ready:f,lifecycleStage:p,summary:g,counts:d,sections:u}}function jy(){let e=Ky();console.log(JSON.stringify(e,null,2)),e.ready||(process.exitCode=1)}N();async function Vy(e){let r=y(),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 q(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 Ns(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))}Me();var zc=["Vercel/hosted: set KYNVER_SCHEDULER_PROVIDER=qstash","Vercel/hosted: ensure QSTASH_TOKEN (and QStash signing keys) are configured","Vercel/hosted: unset OPENCLAW_CRON_STORE_PATH if present"],Xc=["User runner: unset KYNVER_SCHEDULER_PROVIDER (scheduling is deployment-owned)","User runner: unset OPENCLAW_CRON_STORE_PATH, OPENCLAW_CRON_SECRET, OPENCLAW_CRON_FIRE_BASE_URL",'User runner: after deployment cutover, run `kynver scheduler attest-cutover` (or set deploymentSchedulerProvider to "qstash" in ~/.kynver/config.json)',"Verify: kynver doctor runtime-takeover \u2014 hotspot_openclaw_scheduler should pass"];function eN(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 Qc(e,r=eN()){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:[...zc],runnerSteps:[...Xc]}}function Gy(e){return{...e,deploymentSchedulerProvider:"qstash"}}N();import rN from"node:path";import{homedir as tN}from"node:os";var Yy=rN.join(tN(),".kynver","config.json");function Jy(e=!1){let r=y(),t=Qc(r),n={...t,configPath:B(Yy),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
57
|
+
`),console.log("Deployment (Vercel):");for(let o of zc)console.log(` - ${o}`);console.log(`
|
|
58
|
+
User runner:`);for(let o of Xc)console.log(` - ${o}`);if(console.log(`
|
|
55
59
|
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
60
|
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
|
|
61
|
+
No local blockers detected on this runner.`)}function qy(e=!1){let r=y(),t=Qc(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=Gy(r);de(n);let o={ok:!0,attested:!0,configPath:B(Yy),deploymentSchedulerProvider:"qstash",config:Lt(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}`)}Ve();async function zy(e){Dn();let r=await Ui();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 Xy(e){Dn();let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await Kt({agentOsIdFilter:r??null});if(e.json===!0){console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({event:"kynver_cron_tick",...t}))}N();function nN(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 Qy(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await Li({execute:r?!1:nN(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
62
|
`:`Kynver Cron install
|
|
59
63
|
`),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
64
|
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)}N();import
|
|
63
|
-
`)}function
|
|
64
|
-
`);for(let n of e.workers)t.push(
|
|
65
|
-
`)}function
|
|
66
|
-
`)),process.exit(e)}async function
|
|
65
|
+
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 Zy(e){let r=y(),t=await ln({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"}
|
|
66
|
+
`);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)}N();import sN from"node:os";N();Pe();Mt();C();var Fo={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 oN}from"node:child_process";import eR from"node:path";function rR(e,r,t){let o=[eR.join(r,Fo.landScript),String(e),...Fo.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=oN("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 tR(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?eR.resolve(r):Ae()?.repo??process.cwd()}async function nR(e){let r=String(T(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Fo.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=sr({runId:s??"fleet-lane-tick"}),a={...di(i,{harnessRunId:s,boxKind:Ke(y()),hostLabel:sN.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=K(e.baseUrl?String(e.baseUrl):void 0),c=await q(e.secret?String(e.secret):void 0,r,{baseUrl:l}),u=`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/tick`,p=(await Vr(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,f=[],m=tR(e),g=Array.isArray(p?.localActions)?p.localActions:[],k=a.boxId;for(let h of g){if(h.kind==="land_pr"&&typeof h.prNumber=="number"){let R=rR(h.prNumber,m,o);if(f.push({action:R.action,executed:R.executed,exitCode:R.exitCode}),o&&R.executed){let S=R.exitCode===0,P=typeof h.prUrl=="string"&&h.prUrl.trim()?h.prUrl.trim():`https://github.com/${t}/pull/${h.prNumber}`;try{await Vr(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:P,holderBoxId:k,merged:S})}catch{}}continue}f.push({action:h,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:p,localOutcomes:f}}async function oR(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await nR(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}`)}N();D();Lr();Mt();import cN from"node:path";C();wr();In();D();C();import iN from"node:path";function sR(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function iR(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&&!sR(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function Zc(e){return typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!F(e.pid)?!1:cs(e)}function aN(e,r){let t=e.completionBlocker?.trim();if(t&&!sR(t))return{attention:"blocked",attentionReason:t,status:"blocked"};if(r.heartbeatBlocker)return{attention:"blocked",attentionReason:r.heartbeatBlocker,status:"blocked"};if(iR(e))return{attention:"done",attentionReason:"completion acknowledged",status:"done"};let n=Zc(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 lN(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||iR(e)?!1:Zc(e)}function eu(e,r){let t=_(iN.join(E(e.id),"workers",v(r),"worker.json"),void 0);if(!t)return null;let n=ae(t.heartbeatPath),{attention:o,attentionReason:s,status:i}=aN(t,n),a=Zc(t),l=lN(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 ru(e,r){let t={};for(let n of e){let o=r(n).trim()||"unknown";t[o]=(t[o]??0)+1}return t}function aR(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 lR(e){return e.filter(r=>r.isActive&&r.taskId).map(r=>r.taskId.trim())}function uN(){let e=[];for(let r of z())for(let t of fe(r)){let n=eu(r,t);n&&e.push(n)}return e}function dN(e){let r=e.match(/-a(\d+)$/i);return r&&Number.parseInt(r[1],10)||0}function cR(e){if(!e)return 0;let r=Date.parse(e);return Number.isFinite(r)?r:0}function pN(e){let r=e.completionSnapshot;if(!r)return!1;if(typeof r.prUrl=="string"&&r.prUrl.trim())return!0;let t=r.finalResult;if(typeof t=="string")return/https:\/\/github\.com\/\S+\/pull\/\d+/i.test(t);if(t&&typeof t=="object"&&!Array.isArray(t)){let n=t;return["pr","prUrl","pr_url","pullRequestUrl"].some(o=>{let s=n[o];return typeof s=="string"&&s.trim().length>0})}return!1}function mN(e,r){let t=0;return e.completionOutcome==="acknowledged"&&(t+=1e4),e.completionOutcome==="rejected"&&(t-=1e4),e.completionBlocker?.trim()&&(t-=5e3),(r.attention==="done"||r.status==="done"||e.status==="done")&&(t+=2e3),(r.alive||r.isActive)&&(t+=1500),pN(e)&&(t+=1e3),t+=dN(e.name)*10,t+=Math.floor(Math.max(cR(e.completionReportedAt),cR(e.startedAt))/1e9),t}function fN(e){let r=e.trim().toLowerCase();if(!r)return null;let t=null;for(let n of z())for(let o of fe(n)){let s=_(cN.join(E(n.id),"workers",v(o),"worker.json"),void 0);if(!s)continue;let i=s.taskId?.trim();if(!i||i.toLowerCase()!==r&&!i.toLowerCase().endsWith(r))continue;let a=eu(n,o);if(!a)continue;let l=mN(s,a);(!t||l>t.score)&&(t={row:a,score:l})}return t?.row??null}function tu(e){if(e.mode==="full")return{mode:"full",runs:Oo()};let r=y(),{harnessRoot:t}=ee(),n=z(),o=uN(),s=o.filter(l=>l.isActive).length,i=sr({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:ru(n,l=>l.status),workerCount:o.length,workerStatusCounts:ru(o,l=>l.status),workerAttentionCounts:ru(o,l=>l.attention),activeTaskIds:lR(o),blocked:aR(o).slice(0,25),workers:o};if(e.mode==="task"){let l=e.taskId?.trim()??"",c=l?fN(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:aR(l).slice(0,25),activeTaskIds:lR(l)}}return a}function nu(e,r=72){let t=e.trim();return t.length<=r?t:`${t.slice(0,r-1)}\u2026`}function gN(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=${nu(e.currentTask,48)}`),r.join(" \xB7 ")}function hN(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}: ${nu(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(`
|
|
67
|
+
`)}function kN(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(`
|
|
68
|
+
`);for(let n of e.workers)t.push(gN(n));return t.join(`
|
|
69
|
+
`)}function yN(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=${nu(r.currentTask)}`:null,r.completionBlocker??r.heartbeatBlocker??r.attentionReason??null].filter(n=>!!n).join(" \xB7 ")}function uR(e){return e.mode==="workers"?kN(e):e.mode==="task"?yN(e):hN(e)}function RN(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 dR(e){let r=RN(e);if(r==="full"){let n=tu({mode:"full"});console.log(JSON.stringify(n,null,2));return}let t=tu({mode:r,taskId:typeof e.task=="string"?e.task:void 0});if(r==="json"){console.log(JSON.stringify(t,null,2));return}console.log(uR(t))}function ou(e){return e==="help"||e==="--help"||e==="-h"}function su(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),iu(1)}function iu(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 [mint] [--agent-os-id ID] [--base-url URL] (default: mint new scoped token)"," kynver runner credential status [--agent-os-id ID] (show local token state; no server call)"," kynver runner credential list [--agent-os-id ID] [--base-url URL] (list active credentials on server)"," kynver runner credential revoke --token-id ID [--agent-os-id AOS_ID] [--base-url URL]"," kynver runner credential rotate --token-id ID [--agent-os-id AOS_ID] [--base-url URL] (revoke old + mint new; saves to ~/.kynver/credentials)"," 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]] [--provider claude|cursor|codex] [--model claude-opus-4-8] [--disk-path /] [--reconcile-stale-blockers]"," kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]",' kynver worker start --run RUN_ID --name worker --task "..." [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID] [--wait] [--emit-json]'," kynver worker list --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver worker status --run RUN_ID --name worker"," kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]"," kynver worker stop --run RUN_ID --name worker"," kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"," kynver worker discard-disposable --run RUN_ID --name worker --path scripts/helper.mjs[,other]"," kynver worker auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--poll-ms 5000] [--max-total-ms 21600000] [--complete-attempts 3] [--complete-backoff-ms 5000] [--base-url URL] [--secret SECRET]"," kynver run reconcile"," kynver run unblock [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET] [--dry-run]"," kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]"," kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override] [--local]"," kynver harness verify --worktree PATH [--command CMD] [--json] [--wait-for-admission-ms MS] [--timeout-ms MS]"," kynver plan persist --operation create|add_version|update_metadata --title TITLE (--body-file PATH | --body TEXT) [--slug SLUG] [--plan PLAN_ID] [--summary TEXT] [--failure-kind approval_guard|auth|network|server|tool_interruption]"," kynver plan outbox list"," kynver plan outbox drain [--max N] [--id OUTBOX_ID]"," kynver cleanup [--execute] [--compact] [--node-modules-age-ms MS] [--worktrees-age-ms MS] [--harness-root PATH] [--include-orphans] [--skip-finalize] [--account-bytes]"," kynver wsl-crashes [--json] [--execute] [--purge-all] [--keep-newest N]"," --include-orphans also scans whole worktree directories (<harnessRoot>/worktrees/<runId>/<workerId>/) that no run/worker.json references; orphans pass salvage gates (recent heartbeat, dirty git, ahead of origin/main) before removal."," Dry-run defaults to fast scan (no byte accounting). Pass --account-bytes for reclaimable byte totals. Pass --compact for a bounded operator summary (no full action list)."," kynver monitor start --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS]"," kynver monitor status [--run RUN_ID] [--name worker] [--tick]"," kynver monitor stop --run RUN_ID [--name worker]"," kynver monitor list"," kynver monitor tick --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--auto-complete] [--renew-leases]"," kynver monitor auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET]"," kynver monitor run-loop --run RUN_ID --monitor-id ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS] [--auto-complete] [--renew-leases]"," kynver config ensure-default-repo [--json]"," kynver doctor runner-install (BYOC M0.3 \u2014 six-stage lifecycle health check for new users)"," 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(`
|
|
70
|
+
`)),process.exit(e)}async function SN(e=process.argv.slice(2)){if(Cy(e,import.meta.url,"kynver"))return;if(e.length===0||ou(e[0]))return iu(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&&ou(t)||n.some(ou))return iu(0);let o=Gn(n),{runsDir:s,worktreesDir:i}=ee();if(pR(s,{recursive:!0}),pR(i,{recursive:!0}),r==="daemon"&&$t(),xy(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=L(l).repo}catch{a=void 0}await _y({repoRoot:a,cwd:a})}if(r==="login")return void await Nd(o);if(r==="bootstrap")return void await _s(o);if(r==="start")return void await Mk(o);if(r==="runner"&&t==="credential"){let a=n[0]&&!n[0].startsWith("--")?n.shift():void 0,l=Gn(n);if(!a||a==="mint")return void await Pd(l);if(a==="status")return void Od(l);if(a==="list")return void await Ed(l);if(a==="revoke")return void await Ad(l);if(a==="rotate")return void await Id(l);su("runner credential",a)}if(r==="setup")return void await Cs(o);if(r==="status")return dR(o);if(r==="daemon")return Ti(o)?void await Di(o):void await Ni(o);if(r==="plan"&&t==="progress")return void await Jk(o);if(r==="plan"&&t==="verify")return void await qk(o);if(r==="harness"&&t==="verify")return zk(o);if(r==="plan"&&t==="persist")return void await Xk(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Qk();if(a==="drain")return void await Zk(Gn(n));su("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return ey(o);if(r==="wsl-crashes")return ry(o);if(r==="config"&&t==="ensure-default-repo")return Wd(o.json===!0);if(r==="doctor"&&t==="runner-install")return jy();if(r==="doctor"&&t==="runtime-takeover")return By(o);if(r==="scheduler"&&t==="cutover-check")return Jy(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return qy(o.json===!0);if(r==="cron"&&t==="install")return void await Qy(o);if(r==="cron"&&t==="verify")return void await Zy(o);if(r==="cron"&&t==="status")return void await zy(o.json===!0);if(r==="cron"&&t==="tick")return void await Xy(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await oR(Gn(n),a)}if(r==="board"&&t==="contract")return void await Vy(o);if(r==="run"&&t==="create")return void Mi(o);if(r==="run"&&t==="list")return kk();if(r==="run"&&t==="resolve")return Py(o);if(r==="run"&&t==="status")return mf(o);if(r==="run"&&t==="dispatch")return void await tt(o);if(r==="run"&&t==="sweep")return void await _o(o);if(r==="run"&&t==="reconcile")return dg();if(r==="run"&&t==="unblock")return void await Ey(o);if(r==="worker"&&t==="start")return void await vf(o);if(r==="worker"&&t==="list")return lf(o);if(r==="worker"&&t==="status")return sf(o);if(r==="worker"&&t==="tail")return ff(o);if(r==="worker"&&t==="stop")return gf(o);if(r==="worker"&&t==="complete")return void await yl(o);if(r==="worker"&&t==="discard-disposable")return Uk(o);if(r==="worker"&&t==="auto-complete")return void await kf(o);if(r==="monitor"&&t==="start"){let a=await gy(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await hy(o);if(r==="monitor"&&t==="stop")return ky(o);if(r==="monitor"&&t==="list")return yy();if(r==="monitor"&&t==="tick")return void await by(o);if(r==="monitor"&&t==="auto-complete")return void await Gc(o);if(r==="monitor"&&t==="run-loop")return void await Ry(o);su(r,t)}function mR(e){let r=e?.trim();if(!r||r==="-")return null;try{return bN.native(r)}catch{return null}}var wN=mR(process.argv[1])===mR(vN(import.meta.url));wN&&SN().catch(e=>{console.error(e),process.exit(1)});export{SN as main,iu as usage};
|