@kynver-app/runtime 0.1.157 → 0.1.168

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,68 +1,71 @@
1
1
  #!/usr/bin/env node
2
- var rR=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 tR=(e,r)=>{for(var t in r)rR(e,t,{get:r[t],enumerable:!0})};import{existsSync as nR,mkdirSync as oR,readFileSync as ji,readdirSync as YO,statSync as tu,writeFileSync as sR}from"node:fs";import nu from"node:path";function gr(e){console.error(e),process.exit(1)}function pe(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function T(e,r){return e||gr(`missing ${r}`),e}function pt(e){try{return JSON.parse(e)}catch{return null}}function x(e,r){try{return JSON.parse(ji(e,"utf8"))}catch(t){if(arguments.length>1)return r;gr(`failed to read ${e}: ${t.message}`)}}function se(e,r){oR(nu.dirname(e),{recursive:!0}),sR(e,`${JSON.stringify(r,null,2)}
3
- `)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function ou(e){return v(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Ze(e){return String(e).replace(/\/+$/,"")}function Lo(e){return String(e||"").replace(/\s+/g," ").trim()}function Ho(e){try{return tu(e).size}catch{return 0}}function Fo(e){try{return tu(e).mtime.toISOString()}catch{return null}}function $o(e,r){return nR(e)?ji(e,"utf8").split(`
2
+ var _R=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 xR=(e,r)=>{for(var t in r)_R(e,t,{get:r[t],enumerable:!0})};import{existsSync as PR,mkdirSync as ER,readFileSync as Zi,readdirSync as XN,statSync as hu,writeFileSync as AR}from"node:fs";import ku 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(Zi(e,"utf8"))}catch(t){if(arguments.length>1)return r;kr(`failed to read ${e}: ${t.message}`)}}function se(e,r){ER(ku.dirname(e),{recursive:!0}),AR(e,`${JSON.stringify(r,null,2)}
3
+ `)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function yu(e){return v(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function er(e){return String(e).replace(/\/+$/,"")}function zo(e){return String(e||"").replace(/\s+/g," ").trim()}function Xo(e){try{return hu(e).size}catch{return 0}}function Qo(e){try{return hu(e).mtime.toISOString()}catch{return null}}function Zo(e,r){return PR(e)?Zi(e,"utf8").split(`
4
4
  `).slice(-r).join(`
5
- `):""}function su(e){return e?ji(nu.resolve(e),"utf8"):""}function Tr(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function hr(e){return new Promise(r=>setTimeout(r,e))}function H(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function kr(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function iu(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 Vi(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var C=U(()=>{"use strict"});function cR(e){return aR.has(e)?!0:lR.some(r=>e.endsWith(r))}function er(e){let r={...e};for(let t of Object.keys(r))cR(t)&&delete r[t];return r}var iR,aR,lR,mt=U(()=>{"use strict";iR=["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"],aR=new Set(iR),lR=["_SECRET","_API_KEY"]});import{spawnSync as lu}from"node:child_process";function me(e,r,t={}){let n=lu("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);gr(o)}return n.stdout||""}function cu(e){me(e,["rev-parse","--show-toplevel"])}function gn(e){return me(e,["status","--short"],{allowFailure:!0}).split(`
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 Ko(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 Gi(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Gi(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 Gi(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 Gi(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();mt()});import{homedir as Yi}from"node:os";import Dr from"node:path";function uu(e){return e==="~"?Yi():e.startsWith("~/")||e.startsWith("~\\")?Dr.join(Yi(),e.slice(2)):e}function ft(e){return Dr.resolve(uu(e))}function Re(e){let r=uu(e),t=Dr.resolve(r),n=Dr.resolve(Yi());return t===n?"~":t.startsWith(`${n}${Dr.sep}`)?`~/${Dr.relative(n,t).split(Dr.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 qi,readFileSync as pu}from"node:fs";import{homedir as uR}from"node:os";import rr from"node:path";import{fileURLToPath as dR}from"node:url";function mR(e){let r=rr.join(e,"package.json");if(!qi(r))return null;try{let t=JSON.parse(pu(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function fR(e){return mR(e)==="kynver"}function du(e){let r=rr.resolve(e);if(!qi(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 gR(e=import.meta.url){let r=rr.dirname(dR(e));for(let t=0;t<8;t+=1){let n=rr.join(r,"package.json");if(qi(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 Ji(e,r,t,n){if(!t)return;let o=rr.resolve(t);e.has(o)||fR(o)&&(e.add(o),r.push({repo:o,source:n}))}function mu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Ji(t,n,du(r),"cwd_git");let o=gR(e?.runtimeModuleUrl??import.meta.url);o&&Ji(t,n,du(o),"runtime_checkout");let s=uR();for(let i of pR)Ji(t,n,ft(rr.join(s,i)),"well_known_path");return n}function gt(e){return mu(e)[0]??null}function hR(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 jo(e){let r=mu(e);return r.find(n=>!hR(n.repo))??r[0]??null}var pR,Vo=U(()=>{"use strict";we();He();pR=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function ht(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:ht(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=fu(e,"KYNVER_BOX_KIND");if(o)return{boxKind:ht(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 zi(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 kt(e,r){return e==="forge"&&r>4}var hn=U(()=>{"use strict"});import{readFileSync as kR}from"node:fs";import gu from"node:os";function kn(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=kR("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return gu.freemem()}var Go=U(()=>{"use strict"});import{existsSync as yR,readFileSync as RR,statfsSync as bR}from"node:fs";function Xi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!yR(e))continue;let r=RR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function hu(e={}){if(!(e.forceWsl===void 0?Xi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||yt,n=e.wslHostFreeWarnBytes??vR,o=e.wslHostFreeCriticalBytes??SR,s=e.statfs??bR,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. ${wR()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function wR(){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 vR,SR,yt,Qi=U(()=>{"use strict";vR=25*1024*1024*1024,SR=12*1024*1024*1024,yt="/mnt/c"});import{execFileSync as ku}from"node:child_process";import{existsSync as Jo,readFileSync as yu,readdirSync as CR,statSync as xR}from"node:fs";import Zi from"node:path";function Yo(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()||yt;return r&&Jo(Zi.join(t,"Users",r))?r:null}function IR(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()||yt,n=e.windowsUser??Ru();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function OR(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 NR(){try{if(Jo("/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 TR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function DR(e,r=yt){let t=Zi.join(r,"Users",e,".wslconfig");if(!Jo(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 MR(e){if(!Jo(e))return[];let r=CR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Zi.join(e,n.name);try{let s=xR(o),i=OR(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 yr(e={}){if(!(e.forceWsl===void 0?Xi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||yt,n=e.windowsUser??Ru(),o=e.warnBelowBytes??Yo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",_R),s=e.criticalBelowBytes??Yo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",PR),i=e.warnCount??Yo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",ER),a=e.criticalCount??Yo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",AR),l=(e.readCorePattern??NR)(),c=TR(l),u=null;n&&(u=(e.readWslConfig??DR)(n,t));let d=u?.maxCrashDumpCount??null,f=d===-1,m=IR({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??MR)(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}). `+UR({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 UR(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure \u2014 see docs/runbooks/wsl-disk-pressure.md);"),r.push("full runbook: docs/runbooks/wsl-disk-pressure.md."),r.join(" ")}var _R,PR,ER,AR,yn=U(()=>{"use strict";Qi();_R=5*1024*1024*1024,PR=10*1024*1024*1024,ER=2,AR=4});import{statfsSync as WR}from"node:fs";function $e(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??BR,n=e.diskFreeCriticalBytes??LR,o=e.diskMaxUsedPercent??HR,s=e.diskHardMaxUsedPercent??FR,i=WR(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:yr(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("; ")),$R({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 $R(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 BR,LR,HR,FR,Rn=U(()=>{"use strict";yn();Qi();BR=30*1024*1024*1024,LR=15*1024*1024*1024,HR=80,FR=90});import{existsSync as bu}from"node:fs";import{homedir as Su}from"node:os";import Rr from"node:path";function ce(e){let r=Rr.resolve(ft(e.trim()));for(;KR.has(Rr.basename(r));)r=Rr.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=Rr.join(Su(),".kynver","harness");return bu(t)?t:bu(vu)?vu:t}function Ce(e){return Rr.join(ce(e),"runs")}function br(e){return Rr.join(ce(e),"worktrees")}function Rt(){let e=be();return{harnessRoot:e,runsDir:Ce(e),worktreesDir:br(e)}}function bt(e,r){return Rr.join(e,v(r))}var vu,KR,xe=U(()=>{"use strict";N();He();C();vu=Rr.join(Su(),".openclaw","harness"),KR=new Set(["runs","worktrees"])});import{existsSync as jR,readdirSync as VR,statSync as GR}from"node:fs";import vt from"node:path";function Z(){return Rt()}function B(e){let{runsDir:r}=Z();return x(vt.join(bt(r,v(e)),"run.json"))}function z(){let{runsDir:e}=Z();return wu(e)}function qo(e){return wu(Ce(e))}function YR(e){try{return GR(e).isDirectory()}catch{return!1}}function wu(e){if(!jR(e))return[];let r=[];for(let t of VR(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=vt.join(e,t.name);if(!YR(n))continue;let o=x(vt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function ue(e,r){let{runsDir:t}=Z();return x(vt.join(bt(t,v(e)),"workers",v(r),"worker.json"))}function Te(e){let{runsDir:r}=Z();se(vt.join(bt(r,e.id),"run.json"),e)}function F(e,r){let{runsDir:t}=Z();se(vt.join(bt(t,e),"workers",r.name,"worker.json"),r)}function E(e){let{harnessRoot:r}=Z();return bn(r,e)}function bn(e,r){return bt(Ce(e),v(r))}var D=U(()=>{"use strict";xe();C()});import{existsSync as JR,readdirSync as qR}from"node:fs";import zR from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=zR.join(E(e.id),"workers");if(!JR(t))return[...r];for(let n of qR(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Mr=U(()=>{"use strict";D();C()});function ea(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=ea(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ea(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ea(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 XR,readFileSync as QR}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(!XR(e))return r;let t=Date.now()+ZR,n=new Date(t).toISOString(),o=QR(e,"utf8").split(`
7
- `).filter(Boolean);for(let s of o){let i=pt(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)),Pu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=xu(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 ZR,vr=U(()=>{"use strict";_u();C();ZR=6e4});function rb(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function tb(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 nb(e){let r=rb(e[0]);return!!(r&&eb.has(r))}function ra(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ta(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function ob(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function sb(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;Eu.has(n)&&(t+=1);continue}r.push(n)}}return r}function ib(e){let r=!1,t=e.map((o,s)=>{let i=ob(o),a=e[s-1];return a&&Eu.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=sb(t);if(n.length===2){let[o,s]=n;if(ta(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(ra(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 na(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=tb(i.trim());if(!a.length||!nb(a))return i;let l=ib(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Au(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 ab(e){let{pattern:r,target:t}=Au(e);return r?ta(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:ra(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function lb(e){let{pattern:r,target:t}=Au(e);if(!r)return null;if(ta(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&ra(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function cb(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 ub(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 oa(e){let r=e.meta?.trim()||(e.command?ub(e.command):null)||null;if(r){let t=ab(r),n=cb(t);if(n)return n;let o=lb(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=na(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 eb,Eu,Iu=U(()=>{"use strict";eb=new Set(["rg","ripgrep","grep"]),Eu=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function vn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function fb(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 Sn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function gb(e){let r=e.metadata;if(!Sn(r))return null;let t=r.vulnerabilities;if(!Sn(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 hb(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 kb(e,r){let t=e.error;if(Sn(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?vn(o.split(`
8
- `).find(Boolean)??o,160):"npm audit failed"}function yb(e){let r=`${e.stdout}
9
- ${e.stderr}`.trim(),t=fb(r);if(!t||!Sn(t)){let o=vn(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(Sn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${kb(t,e.stderr)}`};let n=gb(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:hb(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Rb(e){return db.test(e)}function bb(e){return pb.test(e)}function vb(e){let r=oa({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&&mb.test(n)){let i=vn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=na(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=vn(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 sa(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Rb(e.command)){let i=r.trim()||n.trim()||t.trim();return yb({exitCode:e.exitCode,stdout:i,stderr:t})}if(bb(e.command))return vb({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=oa({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=vn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var db,pb,mb,Ou=U(()=>{"use strict";Iu();db=/\bnpm\s+audit\b/i,pb=/\b(rg|ripgrep)\b/i,mb=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Sb,readFileSync as wb}from"node:fs";function Cb(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Nu(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 xb(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 Tu(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 St(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Sb(e))return r;let t=wb(e,"utf8").split(`
10
- `).filter(Boolean);for(let n of t){let o=pt(n);if(!o)continue;let s=Cb(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&&_b(r,sa({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&xb(r,o)}return r}function Pb(e){let r=Tu(e);if(!r)return;let t=sa({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Lo(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] ${Lo(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"?Pb(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||""} ${Lo(String(e.result||""))}`.trim()}var wn=U(()=>{"use strict";Ou();C()});function Ab(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function zo(e){let r=(e??"").trim();if(!r)return null;for(let t of Eb)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Ab(r)}`};return null}var Eb,ia=U(()=>{"use strict";Eb=[{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 Ib(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 Ob(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Mu(e.head)}function Nb(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 wt(e){if(e.alive||Ib(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Mu(e.headCommit)??Ob(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:Nb(s,r,t)}}var Xo=U(()=>{"use strict"});function Cn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Tb(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 Db(e){if(Cn(e.headCommit)||Cn(e.prUrl)||Cn(e.artifactBundlePath)||Cn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Cn(r.head))}function Ct(e){return Tb(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Db(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 Qo=U(()=>{"use strict"});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 Wu(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function xt(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 u=aa(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=aa(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 Zo=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 Mb(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 Mb(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 _t(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ub(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Ur(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:_t(e)}function es(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=xt(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=Ur(String(s.prUrl??s.pr_url??"")),a=_t(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:_t(s.mergeCommit??s.merge_commit),reason:_t(s.reason)})}return n}function Ku(e,r){let t=[],n=Ur(_t(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Ur(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(!Ub(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?Ur(_t(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Ur(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=>[es(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>es(Ur(d)??d)).filter(Boolean)),c=Ku(t,n);if(r.landingOnly)for(let d of c){let f=a.get(es(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=es(Ur(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";Zo();Fu()});function Bb(e){let r=Date.now();if(e.completionBlocker&&!Yu(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Hb(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=Ct(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(Lb(e))return{state:"done",reason:"empty abandoned worker record"};let o=zo(e.error);if(o)return{state:"blocked",reason:o.reason};let s=wt({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>Wb)return{state:"needs_attention",reason:`no first stream event ${Vi(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Pt?{state:"stale",reason:`no log/event/heartbeat activity for ${Vi(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 Lb(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 Hb(e){let r=null;if(typeof e=="string"?r=xt(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 Fb(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=St(e.stdoutPath),n=ae(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Fb(e,t.finalResult,n),i=o?!1:H(e.pid),a=Ho(e.stdoutPath),l=Ho(e.stderrPath),c=Ho(e.heartbeatPath),u=gn(e.worktreePath),d=Ko(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=iu([t.lastEventAt,n.lastHeartbeatAt,Fo(e.stdoutPath),Fo(e.stderrPath),Fo(e.heartbeatPath)]),m=t.error||!i&&!s&&$o(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=Bb({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.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 Et(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function xn(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 Wb,Pt,X=U(()=>{"use strict";vr();wn();ia();Xo();we();Qo();Gu();Zo();C();Wb=18e4,Pt=6e5});import{readFileSync as $b}from"node:fs";function Kb(e){if(!e||process.platform!=="linux")return null;try{return $b(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function rs(e){if(!e.pid||process.platform!=="linux")return!0;let r=Kb(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 At(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=M(e);return r.alive&&!rs(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var _n=U(()=>{"use strict";X()});import qu from"node:os";import jb from"node:path";function Ju(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Vb(e=b(),r,t){let n=Ju(e.perWorkerMemBytes,Pn),o=Ju(e.memReserveBytes,En),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):An)),i=ns({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 la(e,r={}){let t=r.perWorkerMemBytes??Pn,n=r.memReserveBytes??En,o=r.memUtilization??An,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,ts)}function Gb(){return kn()}function Yb(e){let r=0;for(let t of fe(e)){let n=x(jb.join(E(e.id),"workers",v(t),"worker.json"),void 0);!n||!At(n)||r++}return r}function Jb(){let e=0;for(let r of z())e+=Yb(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}=Vb(r,e.configuredMaxWorkersOverride,t),c=Fe(r),u=e.freeMemBytes??Gb(),d=e.activeWorkers??Jb(),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 Pn,En,An,ts,It=U(()=>{"use strict";Go();N();Pe();hn();os();Rn();D();Mr();_n();C();Pn=500*1024*1024,En=4*1024*1024*1024,An=.85,ts=64});function Wr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ns(e){let r=e.config??{},t=e.env??process.env,n=Wr(r.perWorkerMemBytes,Pn),o=Wr(r.memReserveBytes,En),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):An)),i=la(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Wr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Wr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,ts),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Wr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,ts),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function ca(e={}){let r=e.totalMemBytes??0,t=la(r,{perWorkerMemBytes:Wr(e.config?.perWorkerMemBytes,Pn),memReserveBytes:Wr(e.config?.memReserveBytes,En),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):An}),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 os=U(()=>{"use strict";It()});import{existsSync as zu,mkdirSync as qb,readFileSync as Xu,writeFileSync as zb}from"node:fs";import{homedir as Xb}from"node:os";import Qu from"node:path";function ua(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 Qb(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
5
+ `):""}function Ru(e){return e?Zi(ku.resolve(e),"utf8"):""}function Wr(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 bu(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 ea(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var C=U(()=>{"use strict"});function TR(e){return OR.has(e)?!0:NR.some(r=>e.endsWith(r))}function rr(e){let r={...e};for(let t of Object.keys(r))TR(t)&&delete r[t];return r}var IR,OR,NR,yt=U(()=>{"use strict";IR=["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"],OR=new Set(IR),NR=["_SECRET","_API_KEY"]});import{spawnSync as Su}from"node:child_process";function me(e,r,t={}){let n=Su("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 wu(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=Su("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 vu(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 es(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 ra(n,"missing worktree path");let s=oe(e,["rev-parse","HEAD"]);if(s.status!==0)return ra(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 ra(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=vu(e,i,a),c=vu(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 ra(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 ta}from"node:os";import Lr from"node:path";function Cu(e){return e==="~"?ta():e.startsWith("~/")||e.startsWith("~\\")?Lr.join(ta(),e.slice(2)):e}function Rt(e){return Lr.resolve(Cu(e))}function Re(e){let r=Cu(e),t=Lr.resolve(r),n=Lr.resolve(ta());return t===n?"~":t.startsWith(`${n}${Lr.sep}`)?`~/${Lr.relative(n,t).split(Lr.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 oa,readFileSync as xu}from"node:fs";import{homedir as DR}from"node:os";import tr from"node:path";import{fileURLToPath as MR}from"node:url";function WR(e){let r=tr.join(e,"package.json");if(!oa(r))return null;try{let t=JSON.parse(xu(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function LR(e){return WR(e)==="kynver"}function _u(e){let r=tr.resolve(e);if(!oa(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 BR(e=import.meta.url){let r=tr.dirname(MR(e));for(let t=0;t<8;t+=1){let n=tr.join(r,"package.json");if(oa(n))try{if(JSON.parse(xu(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=tr.dirname(r);if(o===r)break;r=o}return null}function na(e,r,t,n){if(!t)return;let o=tr.resolve(t);e.has(o)||LR(o)&&(e.add(o),r.push({repo:o,source:n}))}function Pu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];na(t,n,_u(r),"cwd_git");let o=BR(e?.runtimeModuleUrl??import.meta.url);o&&na(t,n,_u(o),"runtime_checkout");let s=DR();for(let i of UR)na(t,n,Rt(tr.join(s,i)),"well_known_path");return n}function bt(e){return Pu(e)[0]??null}function HR(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 rs(e){let r=Pu(e);return r.find(n=>!HR(n.repo))??r[0]??null}var UR,ts=U(()=>{"use strict";we();Me();UR=["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 Eu(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=Eu(e,"KYNVER_BOX_KIND");if(o)return{boxKind:vt(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Eu(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 je(e={},r=process.env){return xe(r,e).boxKind}var Pe=U(()=>{"use strict"});function sa(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 FR}from"node:fs";import Au 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:Au.freemem()}if(process.platform==="linux")try{let t=FR("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Au.freemem()}var ns=U(()=>{"use strict"});import{existsSync as $R,readFileSync as KR,statfsSync as jR}from"node:fs";function ia(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!$R(e))continue;let r=KR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Iu(e={}){if(!(e.forceWsl===void 0?ia():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||wt,n=e.wslHostFreeWarnBytes??VR,o=e.wslHostFreeCriticalBytes??GR,s=e.statfs??jR,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. ${YR()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:m,probeError:null}}function YR(){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 VR,GR,wt,aa=U(()=>{"use strict";VR=25*1024*1024*1024,GR=12*1024*1024*1024,wt="/mnt/c"});import{execFileSync as Ou}from"node:child_process";import{existsSync as ss,readFileSync as Nu,readdirSync as JR,statSync as qR}from"node:fs";import la from"node:path";function os(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Tu(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Ou("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&&ss(la.join(t,"Users",r))?r:null}function eb(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??Tu();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function rb(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 tb(){try{if(ss("/proc/sys/kernel/core_pattern"))return Nu("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Ou("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function nb(e){return!!(e&&/wsl-capture-crash/i.test(e))}function ob(e,r=wt){let t=la.join(r,"Users",e,".wslconfig");if(!ss(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Nu(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 sb(e){if(!ss(e))return[];let r=JR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=la.join(e,n.name);try{let s=qR(o),i=rb(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?ia():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||wt,n=e.windowsUser??Tu(),o=e.warnBelowBytes??os("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",zR),s=e.criticalBelowBytes??os("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",XR),i=e.warnCount??os("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",QR),a=e.criticalCount??os("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",ZR),l=(e.readCorePattern??tb)(),c=nb(l),u=null;n&&(u=(e.readWslConfig??ob)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,f=eb({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??sb)(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}). `+ib({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 ib(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 zR,XR,QR,ZR,Sn=U(()=>{"use strict";aa();zR=5*1024*1024*1024,XR=10*1024*1024*1024,QR=2,ZR=4});import{statfsSync as ab}from"node:fs";function Ve(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??lb,n=e.diskFreeCriticalBytes??cb,o=e.diskMaxUsedPercent??ub,s=e.diskHardMaxUsedPercent??db,i=ab(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:Iu(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("; ")),pb({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 pb(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 lb,cb,ub,db,wn=U(()=>{"use strict";Sn();aa();lb=30*1024*1024*1024,cb=15*1024*1024*1024,ub=80,db=90});import{existsSync as Du}from"node:fs";import{homedir as Uu}from"node:os";import vr from"node:path";function ce(e){let r=vr.resolve(Rt(e.trim()));for(;mb.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(Uu(),".kynver","harness");return Du(t)?t:Du(Mu)?Mu: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 Mu,mb,_e=U(()=>{"use strict";N();Me();C();Mu=vr.join(Uu(),".openclaw","harness"),mb=new Set(["runs","worktrees"])});import{existsSync as fb,readdirSync as gb,statSync as hb}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 Wu(e)}function is(e){return Wu(Ce(e))}function kb(e){try{return hb(e).isDirectory()}catch{return!1}}function Wu(e){if(!fb(e))return[];let r=[];for(let t of gb(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=xt.join(e,t.name);if(!kb(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 yb,readdirSync as Rb}from"node:fs";import bb from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=bb.join(E(e.id),"workers");if(!yb(t))return[...r];for(let n of Rb(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Br=U(()=>{"use strict";D();C()});function ca(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Lu(e){let r=e.trim();if(!r)return null;let t=ca(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ca(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ca(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Bu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Lu(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Lu(t);return n||t}var Hu=U(()=>{"use strict"});import{existsSync as vb,readFileSync as Sb}from"node:fs";function Fu(e){return e==="complete"}function or(e){return Fu(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(!vb(e))return r;let t=Date.now()+wb,n=new Date(t).toISOString(),o=Sb(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)),Fu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Bu(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 wb,wr=U(()=>{"use strict";Hu();C();wb=6e4});function _b(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function xb(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 Pb(e){let r=_b(e[0]);return!!(r&&Cb.has(r))}function ua(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function da(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Eb(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Ab(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;$u.has(n)&&(t+=1);continue}r.push(n)}}return r}function Ib(e){let r=!1,t=e.map((o,s)=>{let i=Eb(o),a=e[s-1];return a&&$u.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Ab(t);if(n.length===2){let[o,s]=n;if(da(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(ua(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 pa(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=xb(i.trim());if(!a.length||!Pb(a))return i;let l=Ib(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Ku(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 Ob(e){let{pattern:r,target:t}=Ku(e);return r?da(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:ua(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Nb(e){let{pattern:r,target:t}=Ku(e);if(!r)return null;if(da(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&ua(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Tb(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 Db(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 ma(e){let r=e.meta?.trim()||(e.command?Db(e.command):null)||null;if(r){let t=Ob(r),n=Tb(t);if(n)return n;let o=Nb(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=pa(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 Cb,$u,ju=U(()=>{"use strict";Cb=new Set(["rg","ripgrep","grep"]),$u=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 Lb(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 Bb(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 Hb(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 Fb(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 $b(e){let r=`${e.stdout}
9
+ ${e.stderr}`.trim(),t=Lb(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: ${Fb(t,e.stderr)}`};let n=Bb(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:Hb(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Kb(e){return Mb.test(e)}function jb(e){return Ub.test(e)}function Vb(e){let r=ma({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&&Wb.test(n)){let i=_n(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=pa(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 fa(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Kb(e.command)){let i=r.trim()||n.trim()||t.trim();return $b({exitCode:e.exitCode,stdout:i,stderr:t})}if(jb(e.command))return Vb({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ma({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 Mb,Ub,Wb,Vu=U(()=>{"use strict";ju();Mb=/\bnpm\s+audit\b/i,Ub=/\b(rg|ripgrep)\b/i,Wb=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Gb,readFileSync as Yb}from"node:fs";function Jb(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Gu(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 qb(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 Yu(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 zb(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(!Gb(e))return r;let t=Yb(e,"utf8").split(`
10
+ `).filter(Boolean);for(let n of t){let o=kt(n);if(!o)continue;let s=Jb(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=Gu(a);l&&(r.currentTool=l)}let i=Yu(o);i&&zb(r,fa({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&qb(r,o)}return r}function Xb(e){let r=Yu(e);if(!r)return;let t=fa({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=zo(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] ${zo(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=Gu(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${zo(String(e.result||""))}`.trim()}var Pn=U(()=>{"use strict";Vu();C()});function Zb(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function as(e){let r=(e??"").trim();if(!r)return null;for(let t of Qb)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Zb(r)}`};return null}var Qb,ga=U(()=>{"use strict";Qb=[{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 qu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ev(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 rv(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:qu(e.head)}function tv(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||ev(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=qu(e.headCommit)??rv(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:tv(s,r,t)}}var ls=U(()=>{"use strict"});function En(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function nv(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 ov(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 nv(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:ov(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 zu(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var cs=U(()=>{"use strict"});function ha(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 Xu(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=ha(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ha(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ha(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Xu(l);for(let u of n){let d=Xu(u);d>c&&(l=u,c=d)}return l}var us=U(()=>{"use strict"});function Qu(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 Zu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function sv(e){return new Set(e.map(r=>Zu(Qu(r)??r)).filter(Boolean))}function ed(e,r,t){let n=Qu(e)??e;if(!n)return"unrelated";let o=Zu(n);return sv(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var rd=U(()=>{"use strict"});function Ot(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function iv(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Hr(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 ds(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function td(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=Hr(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 nd(e,r){let t=[],n=Hr(Ot(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Hr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function od(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(!iv(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?Hr(Ot(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Hr(r.targetPrUrls[0]):null):null;if(s){let d=nd(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=td(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=td(n),a=new Map(i.map(d=>[ds(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>ds(Hr(d)??d)).filter(Boolean)),c=nd(t,n);if(r.landingOnly)for(let d of c){let p=a.get(ds(d)),f=ed(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=ds(Hr(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 sd(e){if(e.blocked)return e.detail??e.reason}var id=U(()=>{"use strict";us();rd()});function lv(e){let r=Date.now();if(e.completionBlocker&&!ad(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&uv(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=zu(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=od({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=sd(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(cv(e))return{state:"done",reason:"empty abandoned worker record"};let o=as(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>av)return{state:"needs_attention",reason:`no first stream event ${ea(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 ${ea(n)}s`}:{state:"ok",reason:"recent activity"}}function ad(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function cv(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 uv(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 dv(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=dv(e,t.finalResult,n),i=o?!1:F(e.pid),a=Xo(e.stdoutPath),l=Xo(e.stderrPath),c=Xo(e.heartbeatPath),u=Rn(e.worktreePath),d=es(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),p=bu([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=ad(m)?null:m,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=lv({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 av,Nt,X=U(()=>{"use strict";wr();Pn();ga();ls();we();cs();id();us();C();av=18e4,Nt=6e5});import{readFileSync as pv}from"node:fs";function mv(e){if(!e||process.platform!=="linux")return null;try{return pv(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function ps(e){if(!e.pid||process.platform!=="linux")return!0;let r=mv(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&&!ps(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var In=U(()=>{"use strict";X()});import cd from"node:os";import fv from"node:path";function ld(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function gv(e=y(),r,t){let n=ld(e.perWorkerMemBytes,On),o=ld(e.memReserveBytes,Nn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Tn)),i=fs({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??cd.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function ka(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,ms)}function hv(){return vn()}function kv(e){let r=0;for(let t of fe(e)){let n=_(fv.join(E(e.id),"workers",v(t),"worker.json"),void 0);!n||!Dt(n)||r++}return r}function yv(){let e=0;for(let r of z())e+=kv(r);return e}function sr(e){let r=e.config??y(),t=e.totalMemBytes??cd.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=gv(r,e.configuredMaxWorkersOverride,t),c=je(r),u=e.freeMemBytes??hv(),d=e.activeWorkers??yv(),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:Ve({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,ms,Mt=U(()=>{"use strict";ns();N();Pe();bn();gs();wn();D();Br();In();C();On=500*1024*1024,Nn=4*1024*1024*1024,Tn=.85,ms=64});function Fr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function fs(e){let r=e.config??{},t=e.env??process.env,n=Fr(r.perWorkerMemBytes,On),o=Fr(r.memReserveBytes,Nn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Tn)),i=ka(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Fr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Fr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,ms),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Fr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,ms),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function ya(e={}){let r=e.totalMemBytes??0,t=ka(r,{perWorkerMemBytes:Fr(e.config?.perWorkerMemBytes,On),memReserveBytes:Fr(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 gs=U(()=>{"use strict";Mt()});import{existsSync as ud,mkdirSync as Rv,readFileSync as dd,writeFileSync as bv}from"node:fs";import{homedir as vv}from"node:os";import pd from"node:path";function Ra(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 Sv(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 Br(e=ge){return zu(e)?ua(Xu(e,"utf8")):new Map}function In(e=ge,r={}){let t=Br(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 ss(e,r={}){let t=r.filePath??ge,n=zu(t)?Xu(t,"utf8"):"",o=ua(n),s=[],i=[];for(let u of r.removeKeys??[])o.delete(u)&&i.push(u);for(let[u,d]of Object.entries(e)){if(d===void 0)continue;let f=o.get(u);o.set(u,d),f!==d&&s.push(u)}let a=ua(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=Qb(o);return l&&(qb(Qu.dirname(t),{recursive:!0}),zb(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var ge,Ke=U(()=>{"use strict";ge=Qu.join(Xb(),".kynver",".env")});var da,On=U(()=>{"use strict";da="1.5G"});import{spawnSync as Zb}from"node:child_process";function Tn(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:Nn!==void 0?Nn:process.platform!=="linux"?(Nn=!1,!1):(Nn=Zb("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,Nn)}function pa(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??da,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 Nn,is=U(()=>{"use strict";On()});import{realpathSync as ev}from"node:fs";function Ot(e=process.argv[1]){let r=process.env.KYNVER_BIN?.trim();if(r)return r;let t=e?.trim();if(!t)return"kynver";try{return ev.native(t)}catch{return t}}function ed(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var as=U(()=>{"use strict"});import{existsSync as rv,mkdirSync as tv,writeFileSync as nv}from"node:fs";import{homedir as ov}from"node:os";import td from"node:path";import{spawnSync as rd}from"node:child_process";function sv(){return td.join(ov(),".config","systemd","user")}function iv(e){let r=ed(e.kynverBin?.trim()||Ot());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 ls(e,r){if(!Tn())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=sv(),n=td.join(t,Dn),o=iv(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."};tv(t,{recursive:!0});let s=rv(n);nv(n,o,"utf8");let i=rd("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=rd("systemctl",["--user","enable","--now",Dn],{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 ${Dn}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}var Dn,cs=U(()=>{"use strict";is();as();Dn="kynver-cron-daemon.service"});import{existsSync as av,readFileSync as lv}from"node:fs";function Nt(){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(av("/proc/version")){let e=lv("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}function Mn(e){return e==="linux"}var Un=U(()=>{"use strict"});function nd(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}function cv(e){return"keeper"}function od(e,r,t={}){if(nd(t.installSystemd)||nd(t["install-systemd"]))return Mn(r)?"systemd":"keeper";let n=e.daemonSupervisionOwner;return n==="systemd"&&Mn(r)?"systemd":n==="keeper"?"keeper":cv(r)}function uv(){return{KYNVER_CRON_DAEMON_PRESENT:"1"}}function ma(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 fa(e,r={},t){let n=t??Nt(),o=od(e,n,r);return{hostKind:n,owner:o,envUpdates:uv(),guidance:ma(n,o)}}var us=U(()=>{"use strict";Un()});import{existsSync as dv}from"node:fs";import sd from"node:path";import{homedir as id}from"node:os";function pv(){return sd.join(id(),".config","systemd","user",Dn)}function ga(){return dv(pv())}function ds(e,r={},t){let n=fa(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=ss(n.envUpdates,{filePath:ge});return{policy:n,configPath:q(sd.join(id(),".kynver","config.json")),envFilePath:q(a.path),envChanged:a.changed,configUpdated:i}}function ps(e,r){return e.daemonSupervisionOwner==="systemd"&&ga()?"systemd":e.daemonSupervisionOwner??"keeper"}var Wn=U(()=>{"use strict";Ke();He();N();cs();us()});var ld={};tR(ld,{runDeviceLogin:()=>ha});import ad from"node:os";function mv(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 fv(e){await new Promise(r=>setTimeout(r,e))}async function ha(e){let r=mv(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=`${ad.hostname()} (${ad.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 fv(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?(Bn(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 ka=U(()=>{"use strict";N();C()});import{existsSync as ud,mkdirSync as dd,readFileSync as pd,writeFileSync as md}from"node:fs";import{homedir as gv,totalmem as hv}from"node:os";import ya from"node:path";import kv from"node:os";function Ln(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return Rv.has(t)?{ok:!1,value:r,reason:"placeholder"}:yv.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function gs(e){let r=Ln(e),t=r.value??String(e??"").trim(),n=t?`"${t}"`:"<empty>",o=r.reason==="placeholder"?"looks like a placeholder":r.reason??"is invalid";return[`Invalid AgentOS id ${n}: ${o}.`,"AgentOS ids are UUIDs from the AgentOS registry, not slugs or examples (for example, not `aos`).","Fix: run `kynver bootstrap` to relink this runner, or run `kynver setup --agent-os-id <uuid>` / pass `--agent-os-id <uuid>` after copying the id from Command Center.","If this came from stale ~/.kynver/config.json, remove or replace the agentOsId value before starting the daemon."].join(" ")}function b(){if(!ud(ms))return{};try{return JSON.parse(pd(ms,"utf8"))}catch{return{}}}function de(e){dd(fs,{recursive:!0}),md(ms,`${JSON.stringify(Ra(e),null,2)}
14
- `,{mode:384})}function Ra(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Re(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Re(e.defaultRepo.trim())}:{}}}function Dt(e){return Ra(e)}function bv(e,r){let t=Hn(),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"?gt()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||jo()?.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:Ze(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function vv(e,r,t=hv()){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=_e(process.env,{...e,...o?{boxKind:ht(o)}:{}}).boxKind,i=$e({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=ca({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:tr(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 kt(s,l)?{maxConcurrentWorkers:zi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}:{maxConcurrentWorkers:tr(s,l),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}}return{maxConcurrentWorkers:zi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function Hn(){if(!ud(Tt))return{};try{return JSON.parse(pd(Tt,"utf8"))}catch{return{}}}function fd(e){dd(fs,{recursive:!0}),md(Tt,`${JSON.stringify(e,null,2)}
15
- `,{mode:384})}function oe(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Hn().apiKey}function Bn(e){fd({...Hn(),apiKey:e})}function cd(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Hn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Lr(e,r){fd({...Hn(),runnerToken:r,runnerTokenAgentOsId:e})}function V(e){let r=Fn(e);return r||hs("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function gd(e){return Fn(e)}function Fn(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 Sv(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 ba(e,r,t){let n=Sv(e,r);if(n)return{ok:!0,secret:n};let o=oe(),s=Fn(t?.baseUrl);if(o&&r&&s)try{let i=await Hr(r,{baseUrl:s,apiKey:o});return Lr(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 ba(e,r,t);if(n.ok)return n.secret;hs(n.reason)}async function hd(e,r){let t=oe(),n=Fn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Hr(e,{baseUrl:n,apiKey:t});return Lr(e,o),o}catch{return null}}async function kd(e,r,t){let n=oe(),o=Fn(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 Hr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Lr(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 Hr(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||hs("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Hr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Lr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:q(Tt),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 hs(e){console.error(e),process.exit(1)}function ks(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 ys(e){let r=b(),t=$e({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=ca({totalMemBytes:kv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=vv(r,e),s=Ra({...r,...bv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!Ln(s.agentOsId).ok&&hs(gs(s.agentOsId)),de(s);let i=_e(process.env,s),a=ds(s,e);a.configUpdated&&(s=b());let l,c=oe(),u=s.agentOsId;if(c&&u)try{let d=await Hr(u,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:c});Lr(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(ms),config:Dt(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){Bn(r),console.log(JSON.stringify({ok:!0,credentialsPath:q(Tt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(ka(),ld));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:q(Tt)},null,2))}var fs,ms,Tt,yv,Rv,ID,OD,N=U(()=>{"use strict";Vo();He();C();Pe();hn();os();Rn();Wn();fs=ya.join(gv(),".kynver"),ms=ya.join(fs,"config.json"),Tt=ya.join(fs,"credentials"),yv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,Rv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);ID=500*1024*1024,OD=4*1024*1024*1024});N();import{mkdirSync as qy,realpathSync as zy}from"node:fs";import{fileURLToPath as $O}from"node:url";N();C();ka();import wv from"node:os";function Cv(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 xv(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 Rs(e){let r=Cv(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"?Bn(e.apiKey):(await ha({...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 xv(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 ys(o),console.log(""),console.log(` Bootstrap complete \u2014 ${wv.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 JA from"node:os";N();He();N();import Pv from"node:path";import{homedir as Ev}from"node:os";N();Vo();He();import bd from"node:path";function _v(e){return bd.resolve(ft(e.trim()))}function Mt(e,r,t){let n=e?.trim();return n?{repo:_v(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=Mt(t.defaultRepo,"config",!0);if(n)return n;let o=Mt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Mt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||vd(gt({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Sd(e={}){let r=e.env??process.env,t=e.config??b(),n=Mt(t.defaultRepo,"config",!0);if(n)return n;let o=Mt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Mt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||vd(jo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function wd(e,r){let t={...r??b(),defaultRepo:Re(bd.resolve(e))};return de(t),t}function $n(e){return{defaultRepo:q(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var va=Pv.join(Ev(),".kynver","config.json");function Kn(e){let r=b(),t=Sd({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(va),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(va),resolved:$n(t),config:Dt(r)};let n=wd(t.repo,r),o=$n({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(va),resolved:o,config:Dt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Cd(e=!1){let r=Kn();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 Av,readFileSync as Iv,renameSync as Ov,writeFileSync as Nv}from"node:fs";import{homedir as Tv}from"node:os";import Pd from"node:path";function _d(e){return JSON.stringify(Sa(e))}function Sa(e){if(Array.isArray(e))return e.map(Sa);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=Sa(e[t]);return r}return e}function wa(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 jn(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(Tv(),".kynver",`instruction-bundle-${r}.json`)}function Ad(e,r){try{let t=Ed(e);Av(Pd.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Nv(n,JSON.stringify(r),"utf8"),Ov(n,t)}catch{}}function Id(e){try{let r=Iv(Ed(e),"utf8"),t=JSON.parse(r);return jn(t)?t:null}catch{return null}}var Dv="embedded-1",Mv=[{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"}],Uv={"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 $r(e=ge){return ud(e)?Ra(dd(e,"utf8")):new Map}function Dn(e=ge,r={}){let t=$r(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 hs(e,r={}){let t=r.filePath??ge,n=ud(t)?dd(t,"utf8"):"",o=Ra(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=Ra(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=Sv(o);return l&&(Rv(pd.dirname(t),{recursive:!0}),bv(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var ge,Ge=U(()=>{"use strict";ge=pd.join(vv(),".kynver",".env")});var ba,Mn=U(()=>{"use strict";ba="1.5G"});import{spawnSync as wv}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=wv("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,Un)}function va(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??ba,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,ks=U(()=>{"use strict";Mn()});import{realpathSync as Cv}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 Cv.native(t)}catch{return t}}function fd(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var ys=U(()=>{"use strict"});import{existsSync as _v,mkdirSync as xv,writeFileSync as Pv}from"node:fs";import{homedir as Ev}from"node:os";import hd from"node:path";import{spawnSync as gd}from"node:child_process";function Av(){return hd.join(Ev(),".config","systemd","user")}function Iv(e){let r=fd(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 Rs(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=Av(),n=hd.join(t,Ln),o=Iv(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."};xv(t,{recursive:!0});let s=_v(n);Pv(n,o,"utf8");let i=gd("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=gd("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,bs=U(()=>{"use strict";ks();ys();Ln="kynver-cron-daemon.service"});import{existsSync as Ov,readFileSync as Nv}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(Ov("/proc/version")){let e=Nv("/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 kd(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}function Tv(e){return"keeper"}function yd(e,r,t={}){if(kd(t.installSystemd)||kd(t["install-systemd"]))return Bn(r)?"systemd":"keeper";let n=e.daemonSupervisionOwner;return n==="systemd"&&Bn(r)?"systemd":n==="keeper"?"keeper":Tv(r)}function Dv(){return{KYNVER_CRON_DAEMON_PRESENT:"1"}}function Sa(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 wa(e,r={},t){let n=t??Wt(),o=yd(e,n,r);return{hostKind:n,owner:o,envUpdates:Dv(),guidance:Sa(n,o)}}var vs=U(()=>{"use strict";Hn()});import{existsSync as Mv}from"node:fs";import Rd from"node:path";import{homedir as bd}from"node:os";function Uv(){return Rd.join(bd(),".config","systemd","user",Ln)}function Ca(){return Mv(Uv())}function Ss(e,r={},t){let n=wa(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=hs(n.envUpdates,{filePath:ge});return{policy:n,configPath:B(Rd.join(bd(),".kynver","config.json")),envFilePath:B(a.path),envChanged:a.changed,configUpdated:i}}function ws(e,r){return e.daemonSupervisionOwner==="systemd"&&Ca()?"systemd":e.daemonSupervisionOwner??"keeper"}var Fn=U(()=>{"use strict";Ge();Me();N();bs();vs()});var Sd={};xR(Sd,{runDeviceLogin:()=>_a});import vd from"node:os";function Wv(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 Lv(e){await new Promise(r=>setTimeout(r,e))}async function _a(e){let r=Wv(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=`${vd.hostname()} (${vd.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 Lv(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 xa=U(()=>{"use strict";N();C()});import{existsSync as Cd,mkdirSync as _d,readFileSync as Pa,writeFileSync as xd}from"node:fs";import{homedir as Bv,totalmem as Hv}from"node:os";import Ea from"node:path";import Fv from"node:os";function Kn(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return Kv.has(t)?{ok:!1,value:r,reason:"placeholder"}:$v.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function xs(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(!Cd(Cs))return{};try{return JSON.parse(Pa(Cs,"utf8"))}catch{return{}}}function de(e){_d(_s,{recursive:!0}),xd(Cs,`${JSON.stringify(Aa(e),null,2)}
14
+ `,{mode:384})}function Aa(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Re(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Re(e.defaultRepo.trim())}:{}}}function Lt(e){return Aa(e)}function jv(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()||rs()?.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 Vv(e,r,t=Hv()){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=Ve({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=ya({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:sa(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}:{maxConcurrentWorkers:nr(s,l),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}}return{maxConcurrentWorkers:sa(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function jn(){if(!Cd(ir))return{};try{return JSON.parse(Pa(ir,"utf8"))}catch{return{}}}function Pd(e){_d(_s,{recursive:!0}),xd(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){Pd({...jn(),apiKey:e})}function wd(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){Pd({...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 Ed(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 Gv(e,r){let t=e||wd(r)||(r?void 0:wd(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 Ia(e,r,t){let n=Gv(e,r);if(n)return{ok:!0,secret:n};let o=Q(),s=Vn(t?.baseUrl);if(o&&r&&s)try{let i=await Kr(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 Ia(e,r,t);if(n.ok)return n.secret;Ee(n.reason)}async function Ad(e,r){let t=Q(),n=Vn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Kr(e,{baseUrl:n,apiKey:t});return Cr(e,o),o}catch{return null}}async function Id(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 Kr(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 Kr(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 Od(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 Kr(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 Nd(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 Td(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 Dd(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 Md(e){let r=y().agentOsId,t=(e.agentOsId?String(e.agentOsId):r)||"",n=process.env.KYNVER_RUNNER_TOKEN?.trim(),o=(()=>{try{let u=Pa(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 Ps(e){let r=y(),t=Ve({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=ya({totalMemBytes:Fv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=Vv(r,e),s=Aa({...r,...jv(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(xs(s.agentOsId)),de(s);let i=xe(process.env,s),a=Ss(s,e);a.configUpdated&&(s=y());let l,c=Q(),u=s.agentOsId;if(c&&u)try{let d=await Kr(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(Cs),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 Ud(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(()=>(xa(),Sd));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:B(ir)},null,2))}var _s,Cs,ir,$v,Kv,DM,MM,N=U(()=>{"use strict";ts();Me();C();Pe();bn();gs();wn();Fn();_s=Ea.join(Bv(),".kynver"),Cs=Ea.join(_s,"config.json"),ir=Ea.join(_s,"credentials"),$v=/^[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"]);DM=500*1024*1024,MM=4*1024*1024*1024});N();import{mkdirSync as bR,realpathSync as VN}from"node:fs";import{fileURLToPath as GN}from"node:url";N();C();xa();import Yv from"node:os";function Jv(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 qv(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 Es(e){let r=Jv(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 _a({...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 qv(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 Ps(o),console.log(""),console.log(` Bootstrap complete \u2014 ${Yv.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 LI from"node:os";N();Me();N();import Xv from"node:path";import{homedir as Qv}from"node:os";N();ts();Me();import Wd from"node:path";function zv(e){return Wd.resolve(Rt(e.trim()))}function Bt(e,r,t){let n=e?.trim();return n?{repo:zv(n),source:r,persistedInConfig:t}:null}function Ld(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||Ld(bt({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Bd(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||Ld(rs({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Hd(e,r){let t={...r??y(),defaultRepo:Re(Wd.resolve(e))};return de(t),t}function Yn(e){return{defaultRepo:B(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var Oa=Xv.join(Qv(),".kynver","config.json");function Jn(e){let r=y(),t=Bd({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:B(Oa),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(Oa),resolved:Yn(t),config:Lt(r)};let n=Hd(t.repo,r),o=Yn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:B(Oa),resolved:o,config:Lt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Fd(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 $d(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 Zv,readFileSync as eS,renameSync as rS,writeFileSync as tS}from"node:fs";import{homedir as nS}from"node:os";import jd from"node:path";function Kd(e){return JSON.stringify(Na(e))}function Na(e){if(Array.isArray(e))return e.map(Na);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=Na(e[t]);return r}return e}function Ta(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 Vd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return jd.join(nS(),".kynver",`instruction-bundle-${r}.json`)}function Gd(e,r){try{let t=Vd(e);Zv(jd.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;tS(n,JSON.stringify(r),"utf8"),rS(n,t)}catch{}}function Yd(e){try{let r=eS(Vd(e),"utf8"),t=JSON.parse(r);return qn(t)?t:null}catch{return null}}var oS="embedded-1",sS=[{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"}],iS={"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
- `)},Wv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Ut={version:Dv,generatedAt:"1970-01-01T00:00:00.000Z",personas:Mv,instructions:Uv,policyThresholds:Wv};var Vn=Ut,Od="embedded";function Fr(){return Vn.version}function Sr(){return Od}function Nd(e,r){Vn=e,Od=r}function Gn(e){let r=Vn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Ut.instructions[e];return typeof t=="string"?t:""}function Wt(e,r){let t=Vn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Ut.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Td(e){if(!e)return null;let r=e.trim().toLowerCase();return Vn.personas.find(t=>t.slug===r)??null}import{createPublicKey as Lv,verify as Hv}from"node:crypto";var Bv={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Dd(e,r=process.env){let t=wa(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=Bv[e];return n?wa(n):null}var Fv=Buffer.from("302a300506032b6570032100","hex");function $v(e){return Lv({key:Buffer.concat([Fv,Buffer.from(e)]),format:"der",type:"spki"})}function Kv(e,r){if(!jn(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 Hv(null,n,$v(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(!jn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Dd(e.publicKeyId,r);return t?Kv(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var jv=15*6e4,Vv=1e4,sr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Jn(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):(Jn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Yn(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:Sr(),version:Fr(),updated:!1});if(!e.force&&r-sr.lastAttemptAtMs<jv)return t();sr.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return Sr()==="embedded"&&Yn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Vv);try{let l=De(o);delete l["Content-Type"],sr.etag&&Sr()==="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,Jn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),Sr()==="embedded"&&Yn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Jn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),Sr()==="embedded"&&Yn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Ud(u,"server",e.agentOsId)?Sr()==="embedded"&&Yn(e.agentOsId)?{...t(),updated:!0}:t():(sr.etag=c.headers.get("etag"),Jn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Fr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Jn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),Sr()==="embedded"&&Yn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}N();Pe();hn();os();import Gv 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=ns({config:e,totalMemBytes:Gv.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);kt(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 Yv,readFileSync as Jv,renameSync as qv,writeFileSync as zv}from"node:fs";import{homedir as Xv}from"node:os";import Hd from"node:path";function Fd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Hd.join(Xv(),".kynver",`daemon-heartbeat-${r}.json`)}function $d(e){try{let r=Fd(e.agentOsId);Yv(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}`;zv(n,JSON.stringify(t),"utf8"),qv(n,r)}catch{}}function Kd(e){try{let r=Jv(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 Qv(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Bt(){process.platform==="win32"&&(Qv("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 Zv}from"node:fs";import{homedir as eS}from"node:os";import rS 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 qn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function wr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||rS.join(eS(),".kynver","agent-os-cron.json")}function tS(e=wr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function nS(){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 Ca(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function ir(){let e=wr(),r=tS(e),t=nS(),n=Ca(),o=!!(t&&n),s=Zv(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:qn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:qn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:qn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:qn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:qn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function bs(e=ir()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function oS(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=`${oS(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 sS,existsSync as xa,openSync as iS,readFileSync as aS,unlinkSync as Yd,writeFileSync as lS}from"node:fs";var cS=10*6e4;function Jd(e){if(!xa(e))return null;try{let r=JSON.parse(aS(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function uS(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>cS}function qd(e){if(xa(e)&&!uS(e)){let r=Jd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(xa(e))try{Yd(e)}catch{}try{let r=iS(e,"wx");return lS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),sS(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 dS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function pS(e){return dS.test(e.trim())}function mS(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 zn(e,r,t,n){let o=e.trim();return o==="*"?!0:mS(o,t,n).has(r)}function fS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return zn(n,r.getUTCMinutes(),0,59)&&zn(o,r.getUTCHours(),0,23)&&zn(s,r.getUTCDate(),1,31)&&zn(i,r.getUTCMonth()+1,1,12)&&zn(a,r.getUTCDay(),0,6)}var gS=366*24*60;function hS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Xd(e,r){if(!pS(e))return null;let t=hS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<gS;n++){if(fS(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 _a(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 kS}from"node:fs";async function Zd(e){try{return await kS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function yS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function $r(e=wr()){let r=await Zd(e);return yS(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=wr()){let t=await $r(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=wr()){return await Zd(e)!==null?{created:!1}:(await ep(e,[]),{created:!0})}import{randomBytes as RS}from"node:crypto";import{promises as Xn}from"node:fs";import bS from"node:path";var vs={version:1,jobs:{}};async function vS(e){try{return await Xn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function SS(e){if(!e)return{...vs,jobs:{...vs.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...vs,jobs:{}}:r}catch{return{...vs,jobs:{}}}}async function Ss(e){let r=await vS(e);return SS(r)}async function wS(e,r){await Xn.mkdir(bS.dirname(e),{recursive:!0});let t=RS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await Xn.writeFile(n,`${JSON.stringify(r,null,2)}
20
- `,"utf8");try{await Xn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await Xn.unlink(n).catch(()=>{})}}async function np(e,r){await wS(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 CS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function xS(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 PS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Qd(e.spec,t);return r.nextFireAt=n,n}function ES(e,r,t,n){if(e.paused||xS(r)||CS(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 AS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=_a(e.spec,t))}async function Lt(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 $r(r.storePath),i=e.agentOsIdFilter?s.filter(p=>p.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Ss(r.statePath),l=[];for(let p of i){let g=op(a,p.providerScheduleId);PS(p,g,t),ES(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=_a(p.spec,t),d++;continue}}if(f<=0){d++;continue}g.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),g.lastAttemptAt=t.toISOString(),AS(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 ws(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 NE from"node:path";D();_n();C();import IS from"node:path";function OS(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 Cs(e){let r=B(e),t=[];for(let n of Object.keys(r.workers||{})){let o=x(IS.join(E(r.id),"workers",v(n),"worker.json"),void 0);!o?.taskId||!At(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...OS(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 Kr(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 Kr(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 Kr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function xs(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 Pa(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 NS=["implementation","review","landing"],TS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function DS(e){return NS.includes(e)}function MS(e){return TS.includes(e)}function fp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||DS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:MS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var gp=Ut.personas.map(fp),US=new Map(gp.map(e=>[e.slug,e]));function WS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=US.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 Ea(e){return WS(e)?.defaultRoleLane??null}function hp(){return gp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function kp(e){return(e??"").trim().toLowerCase()}function BS(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 LS(e){let r=kp(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=BS(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 LS(e)??"any"}Rn();It();D();D();function _s(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Aa(e){return e.toLowerCase()}function HS(e){let r=_s(e,"roleLane");if(r)return r;let t=Aa(_s(e,"executorRef")),n=Aa(_s(e,"title")),o=Aa(_s(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=Ea(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=HS(e);return r?{...e,roleLane:r}:e}N();var ar="cursor",FS=new Set(["claude","opus","anthropic"]),$S=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Ia(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function jr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return FS.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ps(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&jr(r))return!0;let t=Ia(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ia(e,"description");if($S.some(s=>s.test(n)))return!0;let o=Ia(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function KS(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&&jr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Ps(t)||r.rule==="explicit:cli"&&jr(r.provider)||!jr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return KS(r.model,o)}function Es(e,r=ar){let t=e?.trim();return t?jr(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 Ht(e){return vp[e]}function Sp(){return Object.values(vp)}import{existsSync as VS}from"node:fs";import{homedir as GS}from"node:os";import xp from"node:path";import{createHash as wp}from"node:crypto";import{statSync as jS}from"node:fs";import{spawnSync as Cp}from"node:child_process";function Ve(e){try{let r=jS(e),t=`${e}|${r.size}|${r.mtimeMs}`;return wp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Ft(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 As(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 YS="codex";function JS(){let e=GS();return[xp.join(e,".codex","auth.json"),xp.join(e,".config","codex","auth.json")]}function _p(e=new Date().toISOString()){let r=Ee(YS,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ft("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=JS().find(s=>VS(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 qS}from"node:fs";import{homedir as zS}from"node:os";import Na from"node:path";function XS(){let e=process.env.HERMES_HOME?.trim(),r=e?Na.resolve(e):Na.join(zS(),".hermes");return Na.join(r,"auth.json")}function Is(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=XS(),o=qS(n),s=As(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 $t(e=new Date().toISOString()){let r=_p(e);if(r.ready)return{...r,path:"codex_cli"};let t=Is(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=Ht(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function QS(e,r){let t=Ht(e.providerId),n=Ht(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(QS)[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 ZS}from"node:fs";import{homedir as ew}from"node:os";import rw from"node:path";var tw="claude";function nw(){let e=ew();return[rw.join(e,".claude",".credentials.json")]}function Ip(e=new Date().toISOString()){let r=Ee(tw,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Ft("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=nw().find(i=>ZS(i)),o=As(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 ow}from"node:fs";import{homedir as sw}from"node:os";import iw from"node:path";var aw="agent";function lw(){let e=sw();return[iw.join(e,".config","cursor","auth.json")]}function Op(e=new Date().toISOString()){let r=Ee(aw,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Ft("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=lw().find(s=>ow(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 cw,readFileSync as uw}from"node:fs";import{homedir as dw}from"node:os";import Da from"node:path";var pw=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function mw(){let e=process.env.HERMES_HOME?.trim(),r=e?Da.resolve(e):Da.join(dw(),".hermes");return Da.join(r,".env")}function fw(e){try{let r=uw(e,"utf8"),t=[];for(let n of pw)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=mw(),o=cw(n),s=o?fw(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=$t(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:Is(r),codexAdapterPath:t.path,readyCount:o}}var gw=[/\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],hw=[/\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 kw(e){let r=Ma(e,"executorRef").toLowerCase(),t=Ma(e,"title").toLowerCase(),n=Ma(e,"description").toLowerCase(),o=`${r}
19
+ `)},aS={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Ht={version:oS,generatedAt:"1970-01-01T00:00:00.000Z",personas:sS,instructions:iS,policyThresholds:aS};var zn=Ht,Jd="embedded";function jr(){return zn.version}function _r(){return Jd}function qd(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 zd(e){if(!e)return null;let r=e.trim().toLowerCase();return zn.personas.find(t=>t.slug===r)??null}import{createPublicKey as cS,verify as uS}from"node:crypto";var lS={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Xd(e,r=process.env){let t=Ta(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=lS[e];return n?Ta(n):null}var dS=Buffer.from("302a300506032b6570032100","hex");function pS(e){return cS({key:Buffer.concat([dS,Buffer.from(e)]),format:"der",type:"spki"})}function mS(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(Kd(e.bundle),"utf8");return uS(null,n,pS(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 Qd(e,r=process.env){if(!qn(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Xd(e.publicKeyId,r);return t?mS(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var fS=15*6e4,gS=1e4,ar={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Zn(e,r){console.error(JSON.stringify({event:e,...r}))}function Zd(e,r,t){let n=Qd(e);return n.ok?(qd(n.bundle,r),r==="server"&&Gd(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=Yd(e);return r?Zd(r,"disk",e):!1}async function ep(e){let r=e.nowMs??Date.now(),t=()=>({source:_r(),version:jr(),updated:!1});if(!e.force&&r-ar.lastAttemptAtMs<fS)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(),gS);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||!Zd(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:jr(),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();gs();import hS from"node:os";function rp(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function tp(e=y(),r=process.env){let t=xe(r,e),n=fs({config:e,totalMemBytes:hS.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)rp("warn",c);for(let c of s)rp("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as kS,readFileSync as yS,renameSync as RS,writeFileSync as bS}from"node:fs";import{homedir as vS}from"node:os";import np from"node:path";function As(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return np.join(vS(),".kynver",`daemon-heartbeat-${r}.json`)}function op(e){try{let r=As(e.agentOsId);kS(np.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}`;bS(n,JSON.stringify(t),"utf8"),RS(n,r)}catch{}}function sp(e){try{let r=yS(As(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function ip(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function SS(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function $t(){process.platform==="win32"&&(SS("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 wS}from"node:fs";import{homedir as CS}from"node:os";import _S from"node:path";function ap(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||_S.join(CS(),".kynver","agent-os-cron.json")}function xS(e=xr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function PS(){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 Da(){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=xS(e),t=PS(),n=Da(),o=!!(t&&n),s=wS(e),i=o&&(s||ap("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:ap("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 Is(e=lr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function ES(e){return e.replace(/\/+$/,"")}async function lp(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${ES(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 AS,existsSync as Ma,openSync as IS,readFileSync as OS,unlinkSync as cp,writeFileSync as NS}from"node:fs";var TS=10*6e4;function up(e){if(!Ma(e))return null;try{let r=JSON.parse(OS(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function DS(e){let r=up(e);if(!r||!F(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>TS}function dp(e){if(Ma(e)&&!DS(e)){let r=up(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(Ma(e))try{cp(e)}catch{}try{let r=IS(e,"wx");return NS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),AS(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function pp(e){try{cp(e)}catch{}}var MS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function US(e){return MS.test(e.trim())}function WS(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:WS(o,t,n).has(r)}function LS(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 BS=366*24*60;function HS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function mp(e,r){if(!US(e))return null;let t=HS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<BS;n++){if(LS(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function fp(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=mp(e.cron.trim(),r);return t?t.toISOString():null}return null}function Ua(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=mp(e.cron.trim(),r);return t?t.toISOString():null}import{promises as FS}from"node:fs";async function gp(e){try{return await FS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function $S(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Vr(e=xr()){let r=await gp(e);return $S(r)}async function hp(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 kp(e,r=xr()){let t=await Vr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await hp(r,t)}async function yp(e=xr()){return await gp(e)!==null?{created:!1}:(await hp(e,[]),{created:!0})}import{randomBytes as KS}from"node:crypto";import{promises as to}from"node:fs";import jS from"node:path";var Os={version:1,jobs:{}};async function VS(e){try{return await to.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function GS(e){if(!e)return{...Os,jobs:{...Os.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...Os,jobs:{}}:r}catch{return{...Os,jobs:{}}}}async function Ns(e){let r=await VS(e);return GS(r)}async function YS(e,r){await to.mkdir(jS.dirname(e),{recursive:!0});let t=KS(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 Rp(e,r){await YS(e,r)}function bp(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 JS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function qS(e){return!!e.completedAt}function zS(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=fp(e.spec,t);return r.nextFireAt=n,n}function QS(e,r,t,n){if(e.paused||qS(r)||JS(r,t)||!zS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function ZS(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Ua(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=dp(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 Vr(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Ns(r.statePath),l=[];for(let m of i){let g=bp(a,m.providerScheduleId);XS(m,g,t),QS(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=Ua(m.spec,t),d++;continue}}if(p<=0){d++;continue}g.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),g.lastAttemptAt=t.toISOString(),ZS(m,g,t);try{let k=await lp({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 Rp(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u,...f.length?{errorDetails:f}:{}}}finally{pp(r.lockPath)}}Ge();C();D();import vp from"node:path";var Sp="mesh-cron-lease.json";function Ts(e){return _(vp.join(E(e),Sp),null)}function wp(e,r){se(vp.join(E(e),Sp),{...r,updatedAt:new Date().toISOString()})}function Cp(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 SA from"node:path";D();In();C();import ew from"node:path";function rw(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 Ds(e){let r=L(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(ew.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,...rw(o)})}return t}N();N();function _p(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 xp(e,r){let t=_p(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 Pp(e,r){let t=_p(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Gr(e,r,t,n){try{return await xp(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 Pp(o,n?.timeoutMs)}}async function te(e,r,t,n){let o=await Gr(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Id(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Gr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Ms(e,r,t){try{return await xp(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 Pp(n,t?.timeoutMs)}}N();function Ep(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function Wa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Ap(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 tw=["implementation","review","landing"],nw=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function ow(e){return tw.includes(e)}function sw(e){return nw.includes(e)}function Ip(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||ow(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:sw(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Op=Ht.personas.map(Ip),iw=new Map(Op.map(e=>[e.slug,e]));function aw(e){if(!e)return null;let r=e.trim().toLowerCase(),t=iw.get(r)??null,n=zd(r);if(!n)return t;let o=Ip(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function La(e){return aw(e)?.defaultRoleLane??null}function Np(){return Op.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Tp(e){return(e??"").trim().toLowerCase()}function lw(e){switch(Tp(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 cw(e){let r=Tp(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=lw(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Dp(e){return cw(e)??"any"}wn();Mt();D();D();function Us(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ba(e){return e.toLowerCase()}function uw(e){let r=Us(e,"roleLane");if(r)return r;let t=Ba(Us(e,"executorRef")),n=Ba(Us(e,"title")),o=Ba(Us(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=La(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Mp(e){let r=uw(e);return r?{...e,roleLane:r}:e}N();var cr="cursor",dw=new Set(["claude","opus","anthropic"]),pw=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Ha(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Yr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return dw.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ws(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Yr(r))return!0;let t=Ha(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ha(e,"description");if(pw.some(s=>s.test(n)))return!0;let o=Ha(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function mw(e,r){return{provider:cr,model:Fa,rule:`policy:cursor_default${r}`,requestedModel:e}}function Up(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Yr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Ws(t)||r.rule==="explicit:cli"&&Yr(r.provider)||!Yr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return mw(r.model,o)}function Ls(e,r=cr){let t=e?.trim();return t?Yr(t)?cr:t==="codex"?"codex":t:r}var Wp={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 Wp[e]}function Lp(){return Object.values(Wp)}import{existsSync as gw}from"node:fs";import{homedir as hw}from"node:os";import no from"node:path";import{createHash as Bp}from"node:crypto";import{statSync as fw}from"node:fs";import{spawnSync as Hp}from"node:child_process";function Ye(e){try{let r=fw(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Bp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Vt(e){return Bp("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 Le(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Hp(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.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 Bs(e,r,t={}){let n=t.timeoutMs??8e3;try{return Hp(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 kw="codex";function yw(){let e=hw();return[process.env.CODEX_HOME?.trim()?no.join(no.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,no.join(e,".codex","auth.json"),no.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Rw(e){return no.dirname(e)}function bw(e){let r,t;for(let n of yw()){if(!gw(n))continue;r??=n;let o=Le(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Rw(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??Le(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Fp(e=new Date().toISOString()){let r=Ie(kw,["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{authPath:t,login:n}=bw(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?Ye(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 vw}from"node:fs";import{homedir as Sw}from"node:os";import $a from"node:path";function ww(){let e=process.env.HERMES_HOME?.trim(),r=e?$a.resolve(e):$a.join(Sw(),".hermes");return $a.join(r,"auth.json")}function Hs(e=new Date().toISOString()){let r=Ie("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Le(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ww(),o=vw(n),s=Bs(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?Ye(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=Fp(e);if(r.ready)return{...r,path:"codex_cli"};let t=Hs(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 $p=["low","medium","high"],Kp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function jp(e,r){let t=jt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Cw(e,r){let t=jt(e.providerId),n=jt(r.providerId),o=$p.indexOf(t.costTier)-$p.indexOf(n.costTier);if(o!==0)return o;let s=Kp[e.binding.authSource]-Kp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ka(e){let r=Lp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&jp(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Cw)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return jp(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 _w}from"node:fs";import{homedir as xw}from"node:os";import Pw from"node:path";var Ew="claude";function Aw(){let e=xw();return[Pw.join(e,".claude",".credentials.json")]}function Vp(e=new Date().toISOString()){let r=Ie(Ew,["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=Le(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Aw().find(i=>_w(i)),o=Bs(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?Ye(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 Iw}from"node:fs";import{homedir as Ow}from"node:os";import Nw from"node:path";var Tw="agent";function Dw(){let e=Ow();return[Nw.join(e,".config","cursor","auth.json")]}function Gp(e=new Date().toISOString()){let r=Ie(Tw,["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=Le(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Dw().find(s=>Iw(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Ye(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 Mw,readFileSync as Uw}from"node:fs";import{homedir as Ww}from"node:os";import ja from"node:path";var Lw=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Bw(){let e=process.env.HERMES_HOME?.trim(),r=e?ja.resolve(e):ja.join(Ww(),".hermes");return ja.join(r,".env")}function Hw(e){try{let r=Uw(e,"utf8"),t=[];for(let n of Lw)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Yp(e=new Date().toISOString()){let r=Ie("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Le(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Bw(),o=Mw(n),s=o?Hw(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?Ye(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:Gp(r),claude:Vp(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},hermes:Yp(r),hermesOpenAiCodex:Hs(r),codexAdapterPath:t.path,readyCount:o}}var Fw=[/\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],$w=[/\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 Va(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Kw(e){let r=Va(e,"executorRef").toLowerCase(),t=Va(e,"title").toLowerCase(),n=Va(e,"description").toLowerCase(),o=`${r}
21
21
  ${t}
22
- ${n}`;return gw.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":hw.some(s=>s.test(o))?"low":"elevated"}function yw(e){let r=Ht(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 Rw(e){let r=e.inventory??Tp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Vr(e){let r=yw({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=kw(r),n=Rw({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:$t())}),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 Vr(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 Vr({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 Vr({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 Vr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Ta({inventory:n,riskClass:t});if(a)return Vr({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 Vr({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"}})}mt();C();import{closeSync as Mp,openSync as Up}from"node:fs";import{spawn as xw}from"node:child_process";var bw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function vw(e){return e.replace(bw,"")}var Sw=/^(?: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 ww=new Set(["cursor"]);function Cw(e){let r=e.trim().toLowerCase();return ww.has(r)?"auto":null}function Wa(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=vw(t).trim()||r;return Sw.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 Kt(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=Cw(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 jt="claude-sonnet-4-6",Wp={name:"claude",defaultModel:jt,preflightModel(e){return Wa(e,jt)},start(e){let r=Wa(e.model,jt);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=xw("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}}};mt();C();import{closeSync as Fp,existsSync as Aw,openSync as $p}from"node:fs";import{spawn as Kp}from"node:child_process";mt();C();import{closeSync as Bp,openSync as Lp}from"node:fs";import{spawn as _w}from"node:child_process";var La=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Pw(){return er({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Ew(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 Kt(e,La)},start(e){let r=Kt(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=Ew(t,e.prompt),l=_w(i,a,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Pw()}));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 Iw(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Gr=Iw();function Ow(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Nw(){return er({...process.env,CI:"1",NO_COLOR:"1"})}function Tw(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Dw(e,r,t){if(!(process.platform!=="win32"&&Aw("/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:Gr,preflightModel(e){return Kt(e,Gr)},start(e){if($t().path==="hermes_openai_codex")return Hp.start(e);let t=Kt(e.model,Gr);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=Ow(),l=Tw(n,e.prompt),c=Dw(a,l,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Nw()}));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 Yp="claude-sonnet-4-6",Oa="composer-2.5";function lr(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Mw(e){if(!e)return;let r=lr(e,"workerModelOverride")||lr(e,"modelOverride");return r||`${lr(e,"title")}
23
- ${lr(e,"description")}
24
- ${lr(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}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||Yp}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 Uw(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:jt,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 Ww(e){let r=Vp(lr(e,"executorRef")),t=lr(e,"title").toLowerCase(),n=lr(e,"priority")||"normal",o=Vp(lr(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Gr,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:Gr,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 Os(e){let r;if(!e.explicitModel?.trim()&&e.task&&Ps(e.task)){let o=Mw(e.task)??Yp;r={model:o,provider:"claude",rule:"task:provider_override",requestedModel:o}}else if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Uw(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=Ww(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"||jr(t.provider)&&(e.explicitProviderIsOperatorOverride||Ps(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??Gr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Jp(e,r,t){return e||r||t||Fa()||jt}function qp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function zp(){return{maxTaskAttempts:qp(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Wt("harness.maxTaskAttempts",4))),dispatchCooldownMs:qp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Wt("harness.dispatchCooldownMs",5e3)))}}N();import Hw from"node:path";D();X();C();var $a="kynver-harness:",Xp="@runner:";function Ka(e){return e?.trim()?e.trim():null}function Bw(e){let r=Ka(e);if(!r?.startsWith($a))return null;let t=r.slice($a.length),n=t.indexOf(Xp);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}${Xp}${n}`}function Va(e,r){let t=Ka(r);return t?Bw(e)===t:!1}function Ns(e){let r=Ka(e.workerLeaseOwner);return r&&Va(r,e.runId)?r:ja(e.runId,e.runnerId)}import Qp from"node:os";Pe();Pe();import Lw from"node:os";function Ts(e,r){let t=(r??Lw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Cr(e){return e?.trim()?e.trim():null}function Ye(e={}){let r=e.env??process.env;return{runnerId:Cr(r.KYNVER_RUNTIME_ID)??Cr(r.OPENCLAW_RUNTIME_ID)??Cr(r.HOSTNAME)??Qp.hostname(),hostname:Cr(r.HOSTNAME)??Qp.hostname(),profile:Cr(r.KYNVER_RUNNER_PROFILE)??Cr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Cr(r.KYNVER_HARNESS_REPO)??Cr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Fr()}}N();async function Vt(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 Ds(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 Vt({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 Zp(e,r){return x(Hw.join(E(e),"workers",v(r),"worker.json"),void 0)}async function Ms(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=Zp(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=Ns({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),g=await Ds({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 em(e,r){let t=B(e);for(let n of Object.keys(t.workers||{})){let o=Zp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||M(o).status==="done"))return!0}return!1}we();D();D();import{existsSync as gx,mkdirSync as hx}from"node:fs";import Yt from"node:path";var Fw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,$w="next-action-fix:";function Us(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function rm(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Us(e)}function Kw(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith($w)||t.includes("repair")||t.includes("unblock"))}function jw(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Fw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Us(String(n.targetPrUrl??n.target_pr_url??"")),s=Us(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?rm(o):null,targetPrBranch:s}}catch{return r}}function tm(e){if(!Kw(e))return null;let r=jw(e.description),t=e.prUrl?rm(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Us(e.branch)}:null}function nm(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 om(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=[...Gn(`worker.prompt.progress.${n}`).split(`
25
- `),o],i=Gn(`worker.prompt.merge_gate.${n}`).split(`
26
- `),a=Gn(`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.",...Gn("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?[...nm({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
29
- `)}C();N();C();mt();import{closeSync as Ja,existsSync as im,mkdirSync as qw,openSync as qa,statSync as zw,unlinkSync as sm}from"node:fs";import{spawn as Xw}from"node:child_process";import Qw from"node:os";import Je from"node:path";import{existsSync as Qn,readdirSync as Vw}from"node:fs";import Yr from"node:path";var Gw=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Yw(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 Jw(e){let r=Yr.join(e,"versions");if(!Qn(r))return null;let t=null,n=-1;for(let o of Vw(r,{withFileTypes:!0})){if(!o.isDirectory()||!Gw.test(o.name))continue;let s=Yw(o.name);s==null||s<=n||(n=s,t=Yr.join(r,o.name))}return t}function Ws(e){let r=e?.trim()||Yr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=Yr.join(r,"node.exe"),n=Yr.join(r,"index.js");if(Qn(t)&&Qn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Jw(r);if(!o)return null;let s=Yr.join(o,"node.exe"),i=Yr.join(o,"index.js");return!Qn(s)||!Qn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var Ya="composer-2.5",Zw=15e3,eC=6e4,rC=3e4;function tC(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function nC(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&im(Je.join(Je.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ws(Je.dirname(e)):t?{nodeExe:e,indexJs:Je.join(Je.dirname(e),"index.js"),versionDir:Je.dirname(e)}:Ws();if(o)return tC(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 oC(){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=Ws(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=Je.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(im(t))return t}return"agent"}function sC(e,r){return er({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:Je.basename(e)||"agent.cmd"}:{}})}function am(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function za(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 iC(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Je.join(Qw.homedir(),".kynver","locks");return qw(e,{recursive:!0}),Je.join(e,"cursor-agent-start.lock")}function aC(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=iC(),r=za("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",eC),t=za("KYNVER_CURSOR_START_LOCK_STALE_MS",rC),n=Date.now();for(;;)try{let o=qa(e,"wx");return Ja(o),()=>{try{sm(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-zw(e).mtimeMs>t){sm(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);am(250)}}var lm={name:"cursor",defaultModel:Ya,preflightModel(e){return Ba(e,Ya)},start(e){let r=Ba(e.model,Ya);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=qa(e.stdoutPath,"a"),o=qa(e.stderrPath,"a"),s=["ignore",n,o],i=oC(),a=nC(i),l=aC(),c;try{c=Xw(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:sC(i,a)})),am(za("KYNVER_CURSOR_START_LOCK_HOLD_MS",Zw))}finally{l(),Ja(n),Ja(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:t}}};var Bs={claude:Wp,codex:jp,cursor:lm},cm=null;function um(e){if(cm)return cm;let r=e?.trim();if(r){let o=Bs[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Bs).join(", ")}`);return o}let t=Es(b().workerProvider),n=Bs[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Bs).join(", ")}`);return n}C();import{spawn as ix}from"node:child_process";import{existsSync as ax,openSync as lx,closeSync as of}from"node:fs";import cx from"node:path";D();function Ls(e){return!!e.completionReportedAt?.trim()}function Xa(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),F(r,e)}function lC(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Qa(e){return!!(lC(e.completionBlocker)||e.completionOutcome==="rejected")}function Jr(e){return Ls(e)&&!Qa(e)}D();X();N();import so from"node:path";function Za(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Zn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var cC=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function dm(e){let r=Za(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=Zn(r.outcome),n=Zn(r.detail)??Zn(r.error),o=Za(r.task),s=Za(r.closedTask),i=o?Zn(o.status):null,a=s?Zn(s.status):null,l=t!==null&&cC.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function pm(e){return e.taskAdvanced}D();Xo();var uC="expert-lane-pr-review:",dC="plan-review-task",pC="scheduledjob:";function mm(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function fm(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(uC)||r===dC||r.startsWith("daemon-review:"))return!0;if(r.startsWith(pC)&&e.parentTaskId){let n=mm(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=mm(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var gm=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,mC=new Set(hp()),fC=/no commits between/i;function hm(e){return!!(e&&fC.test(e))}function he(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function km(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:he(e.head)}function ym(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 gC(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 hC(e,r){if(r.changedFiles.length>0)return!1;let t=he(e.personaSlug)?.toLowerCase();if(t&&mC.has(t))return!0;let n=he(e.routingRule)??"";return!!(n&&gm.test(n))}function kC(e,r){if(e.changedFiles.length>0)return!0;let t=he(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=gC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(he(e.headCommit)||km(e.gitAncestry))}function Rm(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(fm({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&&gm.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(hC(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 kC(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function bm(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:he(r?.headCommit)??km(e.gitAncestry),prUrl:he(r?.prUrl)??null}}import{spawnSync as yC}from"node:child_process";function Sm(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return vm(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return vm(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 vm(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 RC(e,r,t){try{let n=yC(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 Fs={git:(e,r)=>ne(e,r),gh:(e,r)=>RC("gh",e,r)};function bC(e){return e.split(`
30
- `).map(r=>r.trim()).find(Boolean)??""}function wm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Sm(t.stdout)}function qr(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Hs(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 eo(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 Cm(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 xm(e){let r=Hs(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=vC(t.stdout)??Hs(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 vC(e){let t=bC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}C();function _m(e){return`t-${v(e)}-a`}function Pm(e,r){let t=_m(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 ro(e){return e.trim().toLowerCase()}function Em(e,r){if(!e.length)return null;if(r){let t=ro(r),n=e.find(o=>ro(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Am(e,r){let t=ro(r);return e.filter(n=>ro(n.url)!==t).map(n=>n.url)}function Im(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 SC(e){let r=new Set,t=[];for(let n of e){let o=ro(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function wC(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?[]:Im(o.stdout).filter(s=>Pm(s,t))}function CC(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=_m(t);return Im(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Pm(i,t))}function el(e,r,t,n){let o=t.trim();if(!o)return[];let s=wC(e,r,o,n),i=CC(e,r,o,n);return SC([...s,...i])}function xC(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 rl(e){let r=Am(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=xC(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 Om(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 _C(e){return e.gh(process.cwd(),["--version"]).status===0}function PC(e,r){return`AgentOS harness: ${e} (${r})`}function EC(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 nl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function AC(e){return nl(e.prUrlHint)??ym(e.status.finalResult)??nl(e.worker.taskPrUrl)??null}function IC(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=eo({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=Cm({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 tl(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=eo({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=Fs){let t=AC(e),n=bm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Rm({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?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(!_C(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=wm(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??qr(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=eo({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=Em(c);if(S){let P=IC({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=Hs(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=eo({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??qr(n.worktreePath,r)??void 0;let k=p?Om(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=xm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:PC(e.worker.name,e.worker.runId),body:EC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!y.ok||!y.prUrl){if(hm(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();vr();ia();D();X();C();import OC from"node:path";var NC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Nm(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function TC(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 xr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:TC(r);return{finalResult:r??t??"completed",summary:t}}function sl(e,r,t){if(Nm(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=xr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),F(e.runId,e)}function DC(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 Tm(e,r){let t=DC(r);if(t.size===0)return[];let n=B(e),o=[];for(let s of Object.keys(n.workers||{})){let i=x(OC.join(E(n.id),"workers",v(s),"worker.json"),void 0);if(!i?.taskId||Nm(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!NC.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}wn();function $s(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 MC(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 UC(e){let r=zo(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function WC(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 Ks(e){let{worker:r,status:t}=e;if($s(t.finalResult)){let u=ae(r.heartbeatPath),d=nr(u),f=$s(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:f,snapshot:xr(t)}}if(t.alive)return null;let n=St(r.stdoutPath);if($s(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:xr(u)}}let o=ae(r.heartbeatPath),s=nr(o);if($s(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:xr(u)}}let i=UC(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:xr(u)}}let a=MC(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:xr(u)}}let l=WC({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:xr(c)}}function js(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}wn();function Vs(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return n!=="node_modules"&&!n.startsWith("node_modules/")})}function Dm(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function Mm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Um(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Bm(e){let r=Um(e);if(!r)return[];let t=Um(r.worktreeHandoff),n=Mm(t?.disposableArtifactsRemoved);return n.length?n:Mm(r.disposableArtifactsRemoved)}function Wm(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Lm(e,r){let t=Vs(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Wm(o)));return t.every(o=>{let s=Wm(Dm(o));return n.has(s)})}function Gs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Hm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function BC(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 LC(e){let r=Hm(e.disposableArtifactsRemoved),t=Bm(e.finalResult);return[...new Set([...r,...t])]}function Fm(e){let r=Hm(e.changedFiles),t=Vs(r),n=LC(e),o=t.length===0||Lm(r,n);return Gs(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`}:Gs(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`}:Gs(e.artifactBundlePath)||Gs(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}:BC(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 HC from"node:path";var FC=/^[a-z0-9][a-z0-9._-]{0,127}$/i,$C=/^[a-z0-9][a-z0-9._-]{0,63}$/i,il=new Set(["undefined","null"]),$m="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Ys(e){let r=e.trim();if(!FC.test(r))throw new Error(`invalid run id: ${e}`);return r}function KC(e){let r=e.trim();if(!$C.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))&&gr(`missing --run RUN_ID (${$m})`),(!t||il.has(t))&&gr(`missing --name WORKER_NAME (${$m})`),{runId:Ys(r),workerName:KC(t)}}function ll(e){let r=al(e.run);return(!r||il.has(r))&&gr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Ys(r)}function Km(e){let r=HC.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function jm(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 jC(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Vm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function to(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function VC(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function GC(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 Ym(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function YC(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function no(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,F(e.runId,e))}function JC(e){e.completionBlocker&&(delete e.completionBlocker,F(e.runId,e))}function oo(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function qC(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function io(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=B(n.runId),s=M(n,oo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Jr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Qa(n)&&JC(n),!s.finalResult&&s.alive===!1){let _=Ks({worker:n,status:s});_&&js(n,_)&&(F(n.runId,n),n=ue(r,t),s=M(n,oo(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let _=ol({worker:n,run:o,status:s});if(!_.ok)return no(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=M(n,oo(o)),s=qC(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let _=Fm({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let A=_.detail??`worktree completion blocked (${_.state})`;return no(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 Ds({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 jm(p,m,k);if((h.status===401||h.status===403)&&!f){let _=await hd(i,{baseUrl:d});_&&_!==m&&(m=_,h=await jm(p,m,k))}if(h.ok){let _=dm(h.parsed);if(!pm(_)){let I=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;no(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}}no(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=jC(h.parsed)??(y?"runner token unauthorized":"non-2xx response"),P=y?`completion replay rejected (${h.status}): ${S}`:`completion replay failed (${h.status}): ${S}`;return no(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,oo(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 io(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 Jm(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=B(n.runId),s=M(n,oo(o));se(so.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function zC(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 XC(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 QC(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 qm(e,r){let t=XC(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>QC(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:_r(n,"status"),attentionCounts:_r(n,"attention"),lifecycleCounts:_r(n,"lifecycleStage")}),e.controller&&(o.controller=Qm(n)),o}function zm(e){let r=ll(e),t=e.full===!0||e.full==="true",n=qm(t?ao(r):lo(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:zC(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Xm(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=wt({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=Ym(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Vm(n.completionResponse),m=Vm(f?.task),p=to(f?.outcome),g=to(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(A=>typeof A=="string"&&A.trim().length>0):[],h=to(m?.prUrl)??to(f?.prUrl),y=to(n.completionReportedAt),S=VC({finished:ie(o),completionBlocker:c,completionOutcome:p,completionReportedAt:y}),P=GC({completionBlocker:c,completionOutcome:p,completionReportedAt:y,finished:ie(o)}),_=YC({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 ZC(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&&!Ym(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function ex(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 _r(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 Gm(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 Qm(e){let r=e.filter(Gm),t=e.filter(n=>{if(Gm(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 Zm(e,r,t){let n={runId:e.id,name:e.name,status:xn(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:_r(r,"status"),attentionCounts:_r(r,"attention"),lifecycleCounts:_r(r,"lifecycleStage")},n.controller=Qm(r)),n}function rx(e){return e.status==="done"&&e.attention==="done"}function ao(e){let r=B(e),n=Object.keys(r.workers||{}).map(s=>{let i=x(so.join(E(r.id),"workers",v(s),"worker.json"),void 0);return i?Xm({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Zm(r,n,!1);return se(so.join(E(r.id),"last-board.json"),o),o}function lo(e){let r=B(e),n=Object.keys(r.workers||{}).map(i=>{let a=x(so.join(E(r.id),"workers",v(i),"worker.json"),void 0);return a?ZC(a)?ex(i,a):Xm({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!rx(i)),s=Zm(r,o,!0);return s.status=xn(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:_r(n,"status"),allAttentionCounts:_r(n,"attention")},se(so.join(E(r.id),"last-board-compact.json"),s),s}async function ef(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=ao(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 tx(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 rf(e){let r=ll(e),t=e.full===!0||e.full==="true",n=qm(t?ao(r):lo(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=tx(r)),console.log(JSON.stringify(n,null,2))}function tf(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=$o(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=pt(s),a=i?Du(i):s;a&&console.log(a)}}function nf(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(kr(n.pid,"SIGTERM"),Tr(1500),H(n.pid)){kr(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 Js}from"node:fs";import zr from"node:path";import{fileURLToPath as nx}from"node:url";function ox(e,r){let t=zr.resolve(e);for(;;){let n=zr.join(t,r);if(Js(n))return n;let o=zr.dirname(t);if(o===t)return null;t=o}}function sx(e){return ox(e,zr.join("node_modules",".bin","tsx"))??"npx"}function dl(e,r){if(e.endsWith(".ts")){let t=sx(zr.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function qs(e){if(e.explicitCliPath)return Js(e.explicitCliPath)?dl(e.explicitCliPath,e.nodeExecutable):null;let r=nx(new URL(".",e.importMetaUrl)),t=zr.join(r,"cli.js");if(Js(t))return dl(t,e.nodeExecutable);let n=zr.join(r,"cli.ts");return Js(n)?dl(n,e.nodeExecutable):null}var ux=5e3,dx=360*60*1e3,px=3,mx=5e3;function fx(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 Gt(e){let r=fx(e),t=r.pollMs??ux,n=r.maxTotalMs??dx,o=r.completeAttempts??px,s=r.completeBackoffMs??mx,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(Jr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let a=Date.now();for(;;){if(i=ue(r.run,r.name),Jr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=M(i);if(ie(u)||!H(i.pid))break;if(Date.now()-a>n)return{worker:i.name,runId:i.runId,outcome:"timed_out",attempts:0,reason:`worker did not finish within ${n}ms`};Tr(t)}let l,c;for(let u=1;u<=o;u++){let d=await io({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&&Tr(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function sf(e){try{let r=await Gt(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 af(e){let r=e.nodeExecutable??process.execPath,t=qs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!ax(n))return;let o=cx.join(e.workerDir,"auto-complete.log"),s;try{s=lx(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=ix(t.command,a,pe({detached:!0,stdio:i,env:process.env}));return s!==void 0&&of(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{of(s)}catch{}return}}function lf(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 cf(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}:Os({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=um(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=Yt.join(E(e.id),"workers",n);hx(l,{recursive:!0});let c=Yt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(gx(c))throw new Error(`worktree path already exists: ${c}`);me(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?cf(e.repo,c,u):me(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Yt.join(l,"stdout.jsonl"),m=Yt.join(l,"stderr.log"),p=Yt.join(l,"heartbeat.jsonl"),g=om({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=Jp(y.model,i,s.defaultModel),P=b(),_=_e(process.env,P),A=Ye().runnerId,Y=Ts(_.boxKind),K={name:n,runId:e.id,status:"running",pid:y.pid,model:S,provider:o.provider,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:Yt.join(l,"worker.json")}},e.status="running",Te(e),K.agentOsId&&K.taskId){let $;try{$=af({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 uf(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(lf(u)),console.error(pl(u)))}catch(u){console.error(`worker start failed: ${u.message}`),process.exit(1)}if(!i||!l)return;let c=await Gt({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 df}from"node:crypto";function Pr(e){let r=e.replace(/\r\n/g,`
33
- `).trimEnd();return df("sha256").update(r,"utf8").digest("hex")}function Jt(e){if(e==null)return null;let r=e.trim();return r?df("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 co(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 pf(e){return e!=="permanent"}function Xs(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Qs(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function mf(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:Xs(o)}),l=await Qs(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw co(a.status,c)}return l}catch(a){throw a instanceof ee?a:fl(a)}}async function ff(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:zs(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:zs(e)}},p=await o(f,{method:"POST",headers:Xs(n),body:JSON.stringify(m)}),g=await Qs(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${p.status})`;throw co(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:zs(e)},p=await o(f,{method:"PATCH",headers:Xs(n),body:JSON.stringify(m)}),g=await Qs(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${p.status})`;throw co(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:zs(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Xs(n),body:JSON.stringify(l)}),u=await Qs(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw co(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 zs(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as kx}from"node:crypto";function Zs(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:Jt(e.summary),bodyHash:Pr(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return kx("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as gf}from"node:fs";import{homedir as yx}from"node:os";import qt from"node:path";function ei(){let e=process.env.KYNVER_STATE_ROOT;return e?qt.resolve(e):qt.join(yx(),".kynver","state")}function ri(){return qt.join(ei(),"plan-outbox")}function Rx(){return qt.join(ei(),"plan-outbox-archive")}function Xr(){let e=ri(),r=Rx();return gf(e,{recursive:!0}),gf(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function uo(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 gl,readFileSync as kf,renameSync as hf,readdirSync as bx,writeFileSync as hl,unlinkSync as ZH}from"node:fs";import Me from"node:path";import{randomUUID as vx}from"node:crypto";var Sx=12;function zt(){let{outboxDir:e}=Xr(),r=bx(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 zt())if(r.idempotencyKey===e)return r;return null}function yl(e){if(!gl(e))return null;try{return JSON.parse(kf(e,"utf8"))}catch{return null}}function yf(e){let{outboxDir:r}=Xr(),t=Me.join(r,e.bodyPath);return kf(t,"utf8")}function Rl(e,r){let{outboxDir:t}=Xr(),n=new Date().toISOString(),o=r.existing?.id??vx(),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:Zs(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:Pr(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??Sx,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return hl(i,`${JSON.stringify(l,null,2)}
34
- `,{mode:384}),l}function Rf(e){let{outboxDir:r}=Xr(),t=Me.join(r,`${e.id}.json`);hl(t,`${JSON.stringify(e,null,2)}
35
- `,{mode:384})}function bf(e){let{outboxDir:r,archiveDir:t}=Xr(),n=Me.join(r,`${e.id}.json`),o=Me.join(r,e.bodyPath),s=Me.join(t,`${e.id}.json`),i=Me.join(t,e.bodyPath);gl(n)&&hf(n,s),gl(o)&&hf(o,i)}function po(e){let{outboxDir:r}=Xr();return{jsonPath:Me.join(r,`${e.id}.json`),bodyPath:Me.join(r,e.bodyPath)}}function vf(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 Sf(e,r,t={}){let n=await mf(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new ee("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=Jt(r.summary),a=Jt(o.summary);if(i!==a)throw new ee("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new ee("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new ee("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=Pr(l);if(r.bodyHash&&c!==r.bodyHash)throw new ee("verification_failed","body hash mismatch on readback");return{planId:o.id,currentVersionId:o.currentVersionId,versionNumber:s?.versionNumber??null,title:o.title,summary:o.summary,bodyHash:r.bodyHash||c,readAt:new Date().toISOString()}}function wf(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:Pr(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var Cf="persisted and read back",wx="queued for retry",bl="failed and needs action";async function mo(e,r={}){e.bodyPathHint&&uo(e.bodyPathHint);let t=Zs(e),n=kl(t);if(n?.readbackEvidence)return{userStatus:Cf,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return xf(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??ff,s=r.verifyReadback??Sf;try{let i=await o(e,r),a={...e,planId:i.planId},l=wf(a,i),c=await s(e.agentOsSlug,Cx(e,l),r);return n&&bf(n),{userStatus:Cf,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof ee?i:new ee("tool_interruption",i instanceof Error?i.message:String(i));if(!pf(a.kind)){let l=Rl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=po(l),u=_f(l,a.message);return{userStatus:bl,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return xf(e,a.message,a.kind,n)}}function Cx(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function xf(e,r,t,n){let o=Rl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=po(o);if(o.retryCount>=o.maxRetries){let i=_f(o,r);return{userStatus:bl,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:wx,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function _f(e,r){let t={...e,queueStatus:"failed",userStatus:bl,lastError:r,updatedAt:new Date().toISOString()};return Rf(t),t}import xx from"node:path";async function vl(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=yf(s),a=vf(s,i),l=await mo(a,r);l.userStatus==="persisted and read back"?o.succeeded+=1:l.userStatus==="failed and needs action"?o.failed+=1:o.stillQueued+=1,o.results.push({outboxId:s.id,userStatus:l.userStatus,lastError:l.lastError})}return o}function Sl(e){let r=xx.join(ri(),`${e}.json`);return yl(r)}function wl(e){let r=po(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 Cl(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 xl(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await re(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,releaseResponse:t.response??t}}import{spawnSync as Ef}from"node:child_process";import{spawnSync as _x}from"node:child_process";function Pf(){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=_x("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 Af=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),Px=new Set(["CLEAN","HAS_HOOKS"]);function Pl(e){return e?.trim()?["--repo",e.trim()]:[]}function If(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Of(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 fo(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function Ex(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&&Af.has(i))){if(i){n.push(`${fo(s)}=${i}`);continue}if(!(l&&Af.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${fo(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${fo(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${fo(s)}=${a}`);continue}t.push(`${fo(s)}=PENDING`)}}}return{pending:t,failed:n}}function Ax(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 Ix=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,Ox=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,Nx=/^docs[(:]/i,Tx=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function Dx(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=Nx.test(r)||Tx.test(t),o=Ix.test(t),s=Ox.test(t);return n||o||s||e.vercelCheckSuccess===!0}function Mx(e){if(!Dx({title:e.title,body:e.body,vercelCheckSuccess:Ax(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 Ux(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(!Px.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=Ex(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(", ")}`);Mx(e)}function Wx(e){try{return Ux(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function Bx(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 Lx(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 Hx(e,r){if(!r?.trim())return;let t=Ef("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}`)&&Ef("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function Nf(e){let r=e.cwd??process.cwd(),t=e.exec??Fs,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=Pf();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=Of(t,r,["pr","view",n,...Pl(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=Wx(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,...Pl(e.repo),"--squash"]);if(l.status!==0){let u=_l(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=_l(t,r,a,e.repo);c||(c=_l(t,r,a,e.repo));try{let u=Lx(t,r,e.repo);Bx(t,r,u,s.headRefName),Hx(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 _l(e,r,t,n){try{let o=Of(e,r,["pr","view",t,...Pl(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}N();async function Tf(e){let r=await J(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),t=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${t}`,taskId:t,leaseToken:e.task.leaseToken??null,startedAt:o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await re(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Df(){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 Fx="dispatch_start_readback_failed:";function Qr(e){return`${Fx} ${e.trim()}`}function $x(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 Kx(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:Qr("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:Qr(`AgentOS task status=${r.status} (expected running)`),detail:{taskId:r.taskId,status:r.status,leaseOwner:r.leaseOwner,blocker:r.blocker},snapshot:r};let s=r.leaseOwner?.trim()??"";if(!s||s!==t.trim())return{ok:!1,error:Qr(`leaseOwner mismatch (board=${s||"null"}, expected=${t})`),detail:{taskId:r.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:t},snapshot:r};let i=r.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:Qr(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=$x(o);return a?{ok:!1,error:Qr(a),detail:{taskId:o.taskId,worker:o.name},snapshot:r}:r.heartbeatAt?.trim()?o.executorRef?.trim()&&r.executorRef?.trim()&&o.executorRef.trim()!==r.executorRef.trim()?{ok:!1,error:Qr(`executorRef mismatch (board=${r.executorRef}, worker=${o.executorRef})`),detail:{taskId:r.taskId,boardExecutorRef:r.executorRef,workerExecutorRef:o.executorRef},snapshot:r}:{ok:!0,snapshot:r}:{ok:!1,error:Qr("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function Mf(e){let r=await Vt({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return Kx({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}C();D();function Uf(e,r,t){r.pid&&H(r.pid)&&(kr(r.pid,"SIGTERM"),H(r.pid)&&kr(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return F(e,n),n}D();var Ga=3600*1e3;function Wf(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Bf(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function jx(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,f=t.contextEnvelopeReady===!0,m=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,p=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof m?.promptMarkdown=="string"?m.promptMarkdown:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:m,memoryQualityPromptMarkdown:p,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:f}}function Vx(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function Gx(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("",Df());let n=Cl(e);if(n?.outboxId){let o=Sl(n.outboxId);o?t.push("",wl(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
38
- `)}function Yx(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Zr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let lt=function(){return Q.filter(w=>w.started).length},Be=function(w,R){Pa({runId:i.id,agentOsId:a,phase:w,startedCount:lt(),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=lt,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=Yx(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 _=Cs(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:ao(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=Wf(L),R=Bf(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 Nr=zp(),Q=[],mr=[],at=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 Nf({prUrl:j,repo:If(j),cwd:i.repo}),ut=await Tf({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:R,report:le});return ut.ok?(Q.push({taskId:O,started:!0,landPr:!0,outcome:le.outcome,completionStatus:ut.status}),!0):G(R,`land_pr completion POST failed (HTTP ${ut.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 fr(w){let R=w.task,O=jx(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=Vx(R.personaSlug);if(le&&(!O?.personaInjectionReady||!O.personaMarkdown))return G(R,`persona_injection_required: missing anchored context-envelope persona block for "${le}"`);if(em(i.id,j))return ve(R);let ut=Number(R.attempt)||1;if(ut>Nr.maxTaskAttempts)return G(R,`task attempt ${ut} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Nr.maxTaskAttempts})`);let fn=R.leaseToken?String(R.leaseToken).trim():"";if(!fn)return G(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Zy=v(`t-${R.id}-a${R.attempt}`),dt=Os({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Rp(R)});try{let Ki=R.planId?String(R.planId):void 0,Wo=tm({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:Zy,task:Gx(R,a),ownedPaths:e.owned?String(e.owned).split(",").map(eR=>eR.trim()).filter(Boolean):[],model:dt.model,provider:dt.provider,routingRule:dt.rule,requestedModel:dt.requestedModel,agentOsId:a,taskId:String(R.id),planId:Ki,branch:Wo?.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:Wo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Wo?.targetPrUrl,repairTargetBranch:Wo?.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:fn,dispatched:!0}),Bo=await Mf({agentOsId:a,taskId:String(R.id),leaseOwner:m,expectedLeaseToken:fn,worker:Le,baseUrl:l,secret:c});if(!Bo.ok)return Uf(i.id,Le,Bo.error??"dispatch_start_readback_failed"),G(R,Bo.error??"dispatch_start_readback_failed",{readback:Bo.detail??null});Le.leaseToken!==fn&&(Le.leaseToken=fn,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:dt.provider,routingRule:dt.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(Ki){return G(R,Ki.message)}}let Se=new Set;async function Do(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 fr(w);return j||Se.add(O),j}for(let w of L.started)await Do(w);if(mr.push(...L.skipped??[]),h)for(let w of mr){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=lt();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}at+=Number(w.result.inspected)||0,mr.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 Do(O)}}let Mo=Q.filter(w=>w.started).length,ct=Wf(L),Uo=Bf(L),Xc=Mo===0&&(ct?.capacityIdle===!0||Number(L.resourceGate?.slotsAvailable)>0);if(Xc&&ct?.summary){let w=ct.skipReasonCounts?.retry_ceiling_exceeded??0,R=L.overAttemptIdleRecovery??ct.overAttemptIdleRecovery,O=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:w>0?"; over_attempt_recovery not attempted":"",j=Uo?`; dispatch_skip_drain scanned=${Uo.scanned??0} advanced=${Uo.advanced??0}`:"";console.error(`[dispatch] ${ct.summary}${w>0?`; retry_ceiling_exceeded=${w}`:""}${O}${j}`)}let Qc={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:m,startedCount:Mo,capacityIdle:Xc,admissionExhaustion:ct,dispatchSkipDrain:Uo,outcomes:Q,skipped:mr.map(w=>({taskId:w.task.id,skipReason:w.skipReason})),inspected:at,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,Qy=Q.some(Zc),eu=We&&Mo>0?!0:!Qy;if(Pa({runId:i.id,agentOsId:a,phase:"complete",partial:We,startedCount:Mo,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 Jx=1;function Xt(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 qx(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=qx(e);if(t.targetTaskId||t.targetTaskIds){let u=await Zr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Xt(u)}}let n=Math.min(r,Jx),o=Math.max(0,r-n),s=await Zr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Xt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Zr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Xt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Lf(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 zx(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function go(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Xx(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Hf(e,r){let t=zx(r),n=go(t?.recommendedMaxStarts),o=go(t?.actionableReady),s=go(t?.queuedTasks),i=go(t?.boardAdvancedThisTick)??0,a=go(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=Xx("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 A_ from"node:path";D();Mr();X();C();import Qx from"node:path";var Zx=new Set(["running","dispatching","pending","queued","needs_attention"]),cr=new Set(["completed","failed","cancelled","done"]);function et(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(Qx.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),Et(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function ho(){let e=[];for(let r of z()){if(!Zx.has(r.status))continue;let t=et(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();Mr();X();C();vr();wn();import{existsSync as Ir,lstatSync as c_,readdirSync as u_,readlinkSync as d_,renameSync as Ul,unlinkSync as p_}from"node:fs";import ze from"node:path";xe();C();import Ue from"node:path";var e_=`${Ue.sep}runs${Ue.sep}runs${Ue.sep}`;function ti(e){return e.includes(e_)}function Al(e,r){return Ue.join(Ce(ce(e)),v(r))}function Er(e,r,t){return Ue.join(Al(e,r),"workers",v(t))}function Ff(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 rt(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 $f(e){let r=rt(Er(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!ti(e.statusPath)?e.statusPath:r}import{existsSync as Ar,mkdirSync as r_,readdirSync as jf,renameSync as t_,statSync as Ol}from"node:fs";import te from"node:path";vr();xe();D();C();var ko=900*1e3,n_=3600*1e3;function Vf(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(!Ar(e))return[];try{return jf(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(!Ar(r))return[];try{return jf(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Gf(e){return te.join(e,"archived-workers")}function o_(e,r){let t=te.join(Gf(e),v(r));return Ar(t)?`${t}-${Date.now()}`:t}function Kf(e,r,t){if(!Ar(e))return!1;try{let n=r-Ol(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Yf(e,r=Date.now(),t=ko){if(!Ar(e))return!1;let n=rt(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!!(Kf(n.stdoutPath,r,t)||Kf(n.heartbeatPath,r,t))}function s_(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-Ol(te.join(e,"worker.json")).mtimeMs}catch{return 0}}function i_(e,r,t,n){if(Yf(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=s_(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function Qt(e,r=Date.now(),t=ko){for(let n of Tl(e))if(Yf(te.join(e,"workers",n),r,t))return!0;return!1}function a_(){return{repo:je()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function l_(e,r){let t=te.join(Ce(e),v(r));if(!Ar(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=Er(e,r,a);s[a]={workerDir:l,statusPath:te.join(l,"worker.json")}}let i=Qt(t);return{id:r,name:r,...a_(),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(Ar(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=l_(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:Qt(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??n_,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(Gf(l),v(m));if(Ar(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=i_(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let y=o_(l,m);r_(te.dirname(y),{recursive:!0}),t_(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 Jf(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of Nl(n)){let s=te.join(n,o);Qt(s,r)&&t.add(`${e}\0${o}`)}return t}D();C();function m_(e,r){let t=Al(e,r),n;try{n=c_(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=ze.resolve(ze.dirname(t),d_(t));if(Qt(o)||Qt(t))return null;let s=`${t}.materialize-${Date.now()}`;return Ul(o,s),p_(t),Ul(s,t),o}function f_(e){let r=[];for(let t of Il()){let n=ze.join(e.fromDir,t),o=ze.join(e.toDir,t);!Ir(n)||Ir(o)||(Ul(n,o),r.push(t))}return r}function qf(e,r){let t=rt(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 g_(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 h_(e){let r=rt(e.canonicalDir),t=x(r.lastStatusPath,void 0),n=Ir(r.stdoutPath),o=Ir(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?St(r.stdoutPath):{finalResult:null},a=o?ae(r.heartbeatPath):ae(""),l=nr(a),c=g_({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}),qf(u,e.canonicalDir),u}function k_(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Er(r,e.id,o),a=ze.join(i,"worker.json");(ti(s.workerDir)||ti(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 y_(e){let r=[],t=Er(e.harnessRoot,e.run.id,e.workerName),n=Ff(e.harnessRoot,e.run.id,e.workerName),o=rt(t),s=f_({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=$f({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=x(i,void 0);if(!a&&Ir(o.workerJsonPath)&&(a=x(o.workerJsonPath,void 0)),!a){let l=h_({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=Ir(t),u=Il().some(d=>Ir(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 qf(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 R_(e,r){let t=ze.join(E(e.id),"workers");if(!Ir(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of u_(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function zf(){let{harnessRoot:e}=Z(),r=Dl(e),t=[];for(let n of z()){let o=m_(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),k_(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 R_(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Er(e,n.id,i),statusPath:ze.join(Er(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(...y_({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}vr();Zo();X();D();Mr();C();import{execFileSync as Xf}from"node:child_process";import Qf 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 b_(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 v_(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function S_(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 w_(e){let r=null;if(typeof e=="string"?r=xt(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 C_(e){try{let n=Xf("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=Xf("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 x_(e){let r=ae(e.heartbeatPath);return e.completionSnapshot?.finalResult??nr(r)}function __(e){let r=new Map,t=E(e.id);for(let n of fe(e)){let o=x(Qf.join(t,"workers",v(n),"worker.json"),void 0);if(o)for(let s of w_(x_(o))){let i=b_(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function P_(e,r){let t=ae(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,v_(r)].filter(Boolean).join(`
39
- `);return S_(n)}function E_(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Bl(e={}){let r=e.lookupPr??C_,t=[],n=new Map;for(let o of z()){let s=__(o),i=E(o.id);for(let a of fe(o)){let l=Qf.join(i,"workers",v(a),"worker.json"),c=x(l,void 0);if(!c||!E_(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 P_(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 I_=900*1e3;function O_(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Zf(e,r){let t=Ks({worker:e,status:r}),n=t?js(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 yo(){let e=zf();if(O_()){let s=Bl(),i=Ml();return{workers:[],finalizedRuns:ho(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of fe(s)){let a=A_.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=Zf(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=Zf(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>I_,m=Number.isFinite(d)&&t-d>Pt;if(f&&m){kr(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:ho(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function eg(){let e=yo(),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))}It();N();Pe();import N_ from"node:os";function ni(e,r={}){let t=(r.boxKind??Fe(b())).trim().toLowerCase()||"forge",n=r.hostLabel??N_.hostname();return{boxId:r.boxId??Ts(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();Xo();X();N();import T_ from"node:path";D();X();C();async function Ro(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 ef({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=x(T_.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=Ns({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 D_ from"node:path";N();async function rg(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 tg(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(D_.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 rg({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}_n();N();Pe();function M_(e=process.env){let r=b();return Fe(r,e)!=="forge"}function ng(e,r=process.env){if(M_(r))return e?.maxConcurrentWorkers??void 0}async function og(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 xs(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";Qo();import ii from"node:path";we();X();var Ll=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function sg(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!sg(n)})}function tt(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 bo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(tt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}C();function vo(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):gn(e.worktreePath);return Ae(t).length>0}function U_(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=U_(e);if(o&&!H(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):gn(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"}:Ko(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??tt(s)};return e.status=u,u}return vo(e)}X();X();vr();C();function $l(e,r=Date.now(),t=ko){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 oi(e,r=Date.now(),t=ko){return H(e.pid)?!0:$l(e,r,t)}function W_(e,r){return r?r.runTerminalCache.derive(e.run):et(e.run)}function ur(e,r=Date.now()){return oi(e.worker,r)}function Kl(e,r){return cr.has(e.run.status)?!1:W_(e,r)!==null}function ig(e,r,t=Date.now()){if(ur(e,t))return!0;if(cr.has(e.run.status)||Kl(e,r))return!1;let n=vo(e);return ie(n)?!1:!!ur(e,t)}Qo();X();function ag(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ur(e))return!0;let n=r??vo(e);return!!(!ie(n)||bo(n)||Ae(n.changedFiles).length>0||Ct({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:tt(n.finalResult)}).blocked)}we();C();import{existsSync as cg,mkdirSync as B_,writeFileSync as lg}from"node:fs";import si from"node:path";function ug(e,r,t){return si.join(e,"salvage",v(r),v(t))}function dg(e){return cg(si.join(ug(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function pg(e){let r=ug(e.harnessRoot,e.indexed.runId,e.indexed.workerName);B_(r,{recursive:!0});let t=si.join(r,"salvage.patch"),n=!1;if(cg(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(`
40
- `);a.trim()&&(lg(t,a.endsWith(`
22
+ ${n}`;return Fw.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":$w.some(s=>s.test(o))?"low":"elevated"}function jw(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 Vw(e){let r=e.inventory??Jp();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Jr(e){let r=jw({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 qp(e){let r=e.task??{},t=Kw(r),n=Vw({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=Ka({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=Ka({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"}})}yt();C();import{closeSync as zp,openSync as Xp}from"node:fs";import{spawn as Xw}from"node:child_process";var Gw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Yw(e){return e.replace(Gw,"")}var Jw=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ga(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var qw=new Set(["cursor"]);function zw(e){let r=e.trim().toLowerCase();return qw.has(r)?"auto":null}function Ya(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Yw(t).trim()||r;return Jw.test(o)||!Ga(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?Ga(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 Ja(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=zw(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")`}:Ga(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 qr="claude-sonnet-4-6",oo="claude-opus-4-8",Qp={name:"claude",defaultModel:qr,preflightModel(e){return Ya(e,qr)},start(e){let r=Ya(e.model,qr);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Xp(e.stdoutPath,"a"),o=Xp(e.stderrPath,"a"),s=["ignore",n,o],i=Xw("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(zp(n),zp(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 tm,existsSync as rC,openSync as nm}from"node:fs";import{spawn as om}from"node:child_process";yt();C();import{closeSync as Zp,openSync as em}from"node:fs";import{spawn as Qw}from"node:child_process";var qa=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Zw(){return rr({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function eC(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 rm={name:"hermes-codex",defaultModel:qa,preflightModel(e){return Yt(e,qa)},start(e){let r=Yt(e.model,qa);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=em(e.stdoutPath,"a"),o=em(e.stderrPath,"a"),s=["ignore",n,o],i=Ie("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=eC(t,e.prompt),l=Qw(i,a,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Zw()}));if(Zp(n),Zp(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 tC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var zr=tC();function nC(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function oC(){return rr({...process.env,CI:"1",NO_COLOR:"1"})}function sC(e,r){return["--ask-for-approval","never","exec","--sandbox","read-only","--model",e,r]}function iC(e,r,t){if(!(process.platform!=="win32"&&rC("/usr/bin/script")))return om(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return om("script",["-qfc",o,"/dev/null"],t)}var sm={name:"codex",defaultModel:zr,preflightModel(e){return Yt(e,zr)},start(e){if(Gt().path==="hermes_openai_codex")return rm.start(e);let t=Yt(e.model,zr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=nm(e.stdoutPath,"a"),s=nm(e.stderrPath,"a"),i=["ignore",o,s],a=nC(),l=sC(n,e.prompt),c=iC(a,l,pe({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:oC()}));if(tm(o),tm(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 aC="claude-sonnet-4-6",Fa="composer-2.5";function ur(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function lC(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 im(e){return e.toLowerCase()}function Xa(e=y()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||aC}function za(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 cC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Fa,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:qr,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function am(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 uC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function lm(e,r,t){return uC.has(e)?oo:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?oo:qr}function dC(e){let r=im(ur(e,"executorRef")),t=ur(e,"title").toLowerCase(),n=ur(e,"priority")||"normal",o=im(ur(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=lm(o,r,t);return{provider:"claude",model:i,rule:i===oo?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:zr,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:zr,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 am(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(am(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=Xa();return{model:s,provider:za(s),rule:"default:global"}}function Fs(e){let r;if(!e.explicitModel?.trim()&&e.task&&Ws(e.task)){let o=lC(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=lm(a,l,c),i=s===oo?"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=cC(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||za(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=dC(e.task);r={...o,requestedModel:o.model}}else{let o=Xa();r={model:o,provider:e.explicitProvider?.trim()||za(o),rule:"default:global",requestedModel:o}}let t=Up({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"||Yr(t.provider)&&(e.explicitProviderIsOperatorOverride||Ws(e.task)))return t;let n=qp({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model,inventory:e.orchestrationInventory??void 0});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??zr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function cm(e,r,t){return e||r||t||Xa()||qr}function um(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function dm(){return{maxTaskAttempts:um(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ft("harness.maxTaskAttempts",4))),dispatchCooldownMs:um(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ft("harness.dispatchCooldownMs",5e3)))}}N();import fC from"node:path";D();X();C();var Qa="kynver-harness:",pm="@runner:";function Za(e){return e?.trim()?e.trim():null}function pC(e){let r=Za(e);if(!r?.startsWith(Qa))return null;let t=r.slice(Qa.length),n=t.indexOf(pm);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function el(e,r){let t=e.trim(),n=r.trim();return`${Qa}${t}${pm}${n}`}function rl(e,r){let t=Za(r);return t?pC(e)===t:!1}function $s(e){let r=Za(e.workerLeaseOwner);return r&&rl(r,e.runId)?r:el(e.runId,e.runnerId)}import mm from"node:os";Pe();Pe();import mC from"node:os";function Ks(e,r){let t=(r??mC.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)??mm.hostname(),hostname:Pr(r.HOSTNAME)??mm.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:jr()}}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 js(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 fm(e,r){return _(fC.join(E(e),"workers",v(r),"worker.json"),void 0)}async function Vs(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)):tl,a=Je({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=fm(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=$s({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),g=await js({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 gm(e,r){let t=L(e);for(let n of Object.keys(t.workers||{})){let o=fm(e,n);if(!(!o||o.taskId!==r||!F(o.pid)||M(o).status==="done"))return!0}return!1}we();D();D();import{existsSync as ox,mkdirSync as sx}from"node:fs";import zt from"node:path";var gC=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,hC="next-action-fix:";function Gs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function hm(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Gs(e)}function kC(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(hC)||t.includes("repair")||t.includes("unblock"))}function yC(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(gC);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Gs(String(n.targetPrUrl??n.target_pr_url??"")),s=Gs(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?hm(o):null,targetPrBranch:s}}catch{return r}}function km(e){if(!kC(e))return null;let r=yC(e.description),t=e.prUrl?hm(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Gs(e.branch)}:null}function ym(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 Rm(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?[...ym({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
29
+ `)}C();N();C();yt();import{closeSync as ol,existsSync as vm,mkdirSync as wC,openSync as sl,statSync as CC,unlinkSync as bm}from"node:fs";import{spawn as _C}from"node:child_process";import xC from"node:os";import qe from"node:path";import{existsSync as so,readdirSync as RC}from"node:fs";import Xr from"node:path";var bC=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function vC(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 SC(e){let r=Xr.join(e,"versions");if(!so(r))return null;let t=null,n=-1;for(let o of RC(r,{withFileTypes:!0})){if(!o.isDirectory()||!bC.test(o.name))continue;let s=vC(o.name);s==null||s<=n||(n=s,t=Xr.join(r,o.name))}return t}function Ys(e){let r=e?.trim()||Xr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=Xr.join(r,"node.exe"),n=Xr.join(r,"index.js");if(so(t)&&so(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=SC(r);if(!o)return null;let s=Xr.join(o,"node.exe"),i=Xr.join(o,"index.js");return!so(s)||!so(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var nl="composer-2.5",PC=15e3,EC=6e4,AC=3e4;function IC(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function OC(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&vm(qe.join(qe.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ys(qe.dirname(e)):t?{nodeExe:e,indexJs:qe.join(qe.dirname(e),"index.js"),versionDir:qe.dirname(e)}:Ys();if(o)return IC(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 NC(){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=Ys(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(vm(t))return t}return"agent"}function TC(e,r){return rr({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:qe.basename(e)||"agent.cmd"}:{}})}function Sm(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function il(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 DC(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||qe.join(xC.homedir(),".kynver","locks");return wC(e,{recursive:!0}),qe.join(e,"cursor-agent-start.lock")}function MC(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=DC(),r=il("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",EC),t=il("KYNVER_CURSOR_START_LOCK_STALE_MS",AC),n=Date.now();for(;;)try{let o=sl(e,"wx");return ol(o),()=>{try{bm(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-CC(e).mtimeMs>t){bm(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Sm(250)}}var wm={name:"cursor",defaultModel:nl,preflightModel(e){return Ja(e,nl)},start(e){let r=Ja(e.model,nl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=sl(e.stdoutPath,"a"),o=sl(e.stderrPath,"a"),s=["ignore",n,o],i=NC(),a=OC(i),l=MC(),c;try{c=_C(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:TC(i,a)})),Sm(il("KYNVER_CURSOR_START_LOCK_HOLD_MS",PC))}finally{l(),ol(n),ol(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 Js={claude:Qp,codex:sm,cursor:wm},Cm=null;function _m(e){if(Cm)return Cm;let r=e?.trim();if(r){let o=Js[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Js).join(", ")}`);return o}let t=Ls(y().workerProvider),n=Js[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Js).join(", ")}`);return n}C();import{spawn as q_}from"node:child_process";import{existsSync as z_,openSync as X_,closeSync as Cf}from"node:fs";import Q_ from"node:path";D();function qs(e){return!!e.completionReportedAt?.trim()}function al(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),$(r,e)}function UC(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ll(e){return!!(UC(e.completionBlocker)||e.completionOutcome==="rejected")}function Qr(e){return qs(e)&&!ll(e)}D();X();N();import fo from"node:path";function cl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function io(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var WC=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function xm(e){let r=cl(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=io(r.outcome),n=io(r.detail)??io(r.error),o=cl(r.task),s=cl(r.closedTask),i=o?io(o.status):null,a=s?io(s.status):null,l=t!==null&&WC.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function Pm(e){return e.taskAdvanced}D();ls();var LC="expert-lane-pr-review:",BC="plan-review-task",HC="scheduledjob:";function Em(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Am(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(LC)||r===BC||r.startsWith("daemon-review:"))return!0;if(r.startsWith(HC)&&e.parentTaskId){let n=Em(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=Em(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var Im=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,FC=new Set(Np()),$C=/no commits between/i;function Om(e){return!!(e&&$C.test(e))}function he(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Nm(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:he(e.head)}function Tm(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 KC(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 jC(e,r){if(r.changedFiles.length>0)return!1;let t=he(e.personaSlug)?.toLowerCase();if(t&&FC.has(t))return!0;let n=he(e.routingRule)??"";return!!(n&&Im.test(n))}function VC(e,r){if(e.changedFiles.length>0)return!0;let t=he(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=KC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(he(e.headCommit)||Nm(e.gitAncestry))}function Dm(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(Am({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&&Im.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(jC(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 VC(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Mm(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:he(r?.headCommit)??Nm(e.gitAncestry),prUrl:he(r?.prUrl)??null}}import{spawnSync as GC}from"node:child_process";function Wm(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Um(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Um(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 Um(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 YC(e,r,t){try{let n=GC(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 Xs={git:(e,r)=>oe(e,r),gh:(e,r)=>YC("gh",e,r)};function JC(e){return e.split(`
30
+ `).map(r=>r.trim()).find(Boolean)??""}function Lm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Wm(t.stdout)}function Zr(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function zs(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 ao(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=Zr(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Bm(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 Hm(e){let r=zs(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=qC(t.stdout)??zs(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 qC(e){let t=JC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}C();function Fm(e){return`t-${v(e)}-a`}function $m(e,r){let t=Fm(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 lo(e){return e.trim().toLowerCase()}function Km(e,r){if(!e.length)return null;if(r){let t=lo(r),n=e.find(o=>lo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function jm(e,r){let t=lo(r);return e.filter(n=>lo(n.url)!==t).map(n=>n.url)}function Vm(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 zC(e){let r=new Set,t=[];for(let n of e){let o=lo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function XC(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?[]:Vm(o.stdout).filter(s=>$m(s,t))}function QC(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=Fm(t);return Vm(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||$m(i,t))}function ul(e,r,t,n){let o=t.trim();if(!o)return[];let s=XC(e,r,o,n),i=QC(e,r,o,n);return zC([...s,...i])}function ZC(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 dl(e){let r=jm(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=ZC(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 Gm(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 e_(e){return e.gh(process.cwd(),["--version"]).status===0}function r_(e,r){return`AgentOS harness: ${e} (${r})`}function t_(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 ml(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function n_(e){return ml(e.prUrlHint)??Tm(e.status.finalResult)??ml(e.worker.taskPrUrl)??null}function o_(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??Zr(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=ao({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=Bm({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=Zr(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function pl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Zr(e.snapshot.worktreePath,e.exec)??void 0};let r=ao({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 fl(e,r=Xs){let t=n_(e),n=Mm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Dm({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?pl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return pl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!e_(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=Lm(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let S=!1,P=!1,x=n.headCommit??Zr(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=ao({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=ml(e.worker.taskId),c=[];if(l){c=ul(n.worktreePath,i,l,r);let S=Km(c);if(S){let P=o_({snapshot:n,canonical:S,workerName:e.worker.name,exec:r});return P.ok&&P.prUrl&&dl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:P.prUrl,exec:r}),P}}let u=zs(n.worktreePath,i,n.branch,r);if(u)return pl({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=ao({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??Zr(n.worktreePath,r)??void 0;let k=m?Gm(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=Hm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:h.replace(/^origin\//,""),title:r_(e.worker.name,e.worker.runId),body:t_(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!R.ok||!R.prUrl){if(Om(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:ul(n.worktreePath,i,l,r),{url:R.prUrl,number:Number.parseInt(R.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];dl({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();ga();D();X();C();import s_ from"node:path";var i_=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Ym(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function a_(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:a_(r);return{finalResult:r??t??"completed",summary:t}}function gl(e,r,t){if(Ym(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 l_(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=l_(r);if(t.size===0)return[];let n=L(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(s_.join(E(n.id),"workers",v(s),"worker.json"),void 0);if(!i?.taskId||Ym(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!i_.has(a))continue;let l=M(i,{base:n.base,baseCommit:n.baseCommit});gl(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}Pn();function Qs(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 c_(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 u_(e){let r=as(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function d_(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 Zs(e){let{worker:r,status:t}=e;if(Qs(t.finalResult)){let u=ae(r.heartbeatPath),d=or(u),p=Qs(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(Qs(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(Qs(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Er(u)}}let i=u_(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Er(u)}}let a=c_(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=d_({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 ei(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Pn();function ri(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 qm(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 zm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Xm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Zm(e){let r=Xm(e);if(!r)return[];let t=Xm(r.worktreeHandoff),n=zm(t?.disposableArtifactsRemoved);return n.length?n:zm(r.disposableArtifactsRemoved)}function Qm(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function ef(e,r){let t=ri(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Qm(o)));return t.every(o=>{let s=Qm(qm(o));return n.has(s)})}function ti(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function rf(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function p_(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 m_(e){let r=rf(e.disposableArtifactsRemoved),t=Zm(e.finalResult);return[...new Set([...r,...t])]}function tf(e){let r=rf(e.changedFiles),t=ri(r),n=m_(e),o=t.length===0||ef(r,n);return ti(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`}:ti(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`}:ti(e.artifactBundlePath)||ti(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}:p_(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 f_ from"node:path";var g_=/^[a-z0-9][a-z0-9._-]{0,127}$/i,h_=/^[a-z0-9][a-z0-9._-]{0,63}$/i,hl=new Set(["undefined","null"]),nf="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function ni(e){let r=e.trim();if(!g_.test(r))throw new Error(`invalid run id: ${e}`);return r}function k_(e){let r=e.trim();if(!h_.test(r))throw new Error(`invalid worker name: ${e}`);return r}function kl(e){return typeof e=="string"?e.trim():""}function ze(e){let r=kl(e.run),t=kl(e.name);return(!r||hl.has(r))&&kr(`missing --run RUN_ID (${nf})`),(!t||hl.has(t))&&kr(`missing --name WORKER_NAME (${nf})`),{runId:ni(r),workerName:k_(t)}}function yl(e){let r=kl(e.run);return(!r||hl.has(r))&&kr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),ni(r)}function of(e){let r=f_.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}import{existsSync as y_,mkdirSync as R_,readFileSync as b_,writeFileSync as v_}from"node:fs";import{homedir as S_}from"node:os";import sf from"node:path";var w_=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,C_=30,__=5,x_=240;function P_(e){let r=e?.trim();return!!(r&&w_.test(r))}function E_(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function A_(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(x_,Math.max(__,e)):C_}function af(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||sf.join(S_(),".kynver","provider-quota-cooldowns.json")}function co(e){return(e??"").trim().toLowerCase()}function Rl(){let e=af();if(!y_(e))return{};try{let r=JSON.parse(b_(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[co(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function bl(e){let r=af();try{R_(sf.dirname(r),{recursive:!0}),v_(r,`${JSON.stringify(e,null,2)}
32
+ `,"utf8")}catch{}}function I_(e,r,t=Date.now()){let n=co(e);if(!n)return;let o=Rl();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},bl(o)}function O_(e){let r=co(e);if(!r)return!1;let t=Rl();return r in t?(delete t[r],bl(t),!0):!1}function lf(e,r=Date.now()){if(!E_())return{ok:!0};let t=co(e);if(!t)return{ok:!0};let n=Rl(),o=n[t];if(!o)return{ok:!0};let s=Date.parse(o.lastExhaustedAt),i=s+A_()*6e4;if(!Number.isFinite(s)||i<=r)return delete n[t],bl(n),{ok:!0};let a=new Date(i).toISOString();return{ok:!1,provider:t,reason:`provider "${t}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${a}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:a}}function N_(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;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function cf(e){let r=co(e.provider);if(!r)return"none";let t=N_(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?P_(t)?(I_(r,t,e.nowMs??Date.now()),"recorded"):O_(r)?"cleared":"none":"none"}async function uf(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 T_(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function df(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function uo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function D_(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function M_(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 mf(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function U_(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function po(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,$(e.runId,e))}function W_(e){e.completionBlocker&&(delete e.completionBlocker,$(e.runId,e))}function mo(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function L_(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function go(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=L(n.runId),s=M(n,mo(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&&Qr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&ll(n)&&W_(n),!s.finalResult&&s.alive===!1){let x=Zs({worker:n,status:s});x&&ei(n,x)&&($(n.runId,n),n=ue(r,t),s=M(n,mo(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let x=fl({worker:n,run:o,status:s});if(!x.ok)return po(n,x.reason),{ok:!1,reason:x.reason,nextAction:x.nextAction,completionBlocked:!0};(x.prUrl||x.headCommit)&&(s=M(n,mo(o)),s=L_(s,x))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let x=tf({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 po(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}}}try{cf({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}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 js({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 uf(m,f,k);if((h.status===401||h.status===403)&&!p){let x=await Ad(i,{baseUrl:d});x&&x!==f&&(f=x,h=await uf(m,f,k))}if(h.ok){let x=xm(h.parsed);if(!Pm(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")}`;po(n,I);let H={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return al(n,n.runId,H),{ok:!1,httpStatus:h.status,response:h.parsed,reason:I,completionBlocked:!0}}po(n,void 0);let A=x.routeOutcome??"acknowledged",J={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};al(n,n.runId,J),gl(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=T_(h.parsed)??(R?"runner token unauthorized":"non-2xx response"),P=R?`completion replay rejected (${h.status}): ${S}`:`completion replay failed (${h.status}): ${S}`;return po(n,P),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function Sl(e){try{let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=L(n.runId),s=M(n,mo(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 go(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 ff(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=L(n.runId),s=M(n,mo(o));se(fo.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function B_(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 vl(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function H_(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=vl(e.task??e.taskId);t&&(r.task=t);let n=vl(e.worker??e.name);n&&(r.worker=n);let o=vl(e.status);return o&&(r.status=o),r}function F_(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 gf(e,r){let t=H_(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>F_(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=yf(n)),o}function hf(e){let r=yl(e),t=e.full===!0||e.full==="true",n=gf(t?ho(r):ko(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:B_(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function kf(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=mf(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=df(n.completionResponse),f=df(p?.task),m=uo(p?.outcome),g=uo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(A=>typeof A=="string"&&A.trim().length>0):[],h=uo(f?.prUrl)??uo(p?.prUrl),R=uo(n.completionReportedAt),S=D_({finished:ie(o),completionBlocker:c,completionOutcome:m,completionReportedAt:R}),P=M_({completionBlocker:c,completionOutcome:m,completionReportedAt:R,finished:ie(o)}),x=U_({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 $_(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&&!mf(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function K_(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 pf(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 yf(e){let r=e.filter(pf),t=e.filter(n=>{if(pf(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 Rf(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=yf(r)),n}function j_(e){return e.status==="done"&&e.attention==="done"}function ho(e){let r=L(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(fo.join(E(r.id),"workers",v(s),"worker.json"),void 0);return i?kf({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Rf(r,n,!1);return se(fo.join(E(r.id),"last-board.json"),o),o}function ko(e){let r=L(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(fo.join(E(r.id),"workers",v(i),"worker.json"),void 0);return a?$_(a)?K_(i,a):kf({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!j_(i)),s=Rf(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(fo.join(E(r.id),"last-board-compact.json"),s),s}async function bf(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=ho(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 V_(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 vf(e){let r=yl(e),t=e.full===!0||e.full==="true",n=gf(t?ho(r):ko(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=V_(r)),console.log(JSON.stringify(n,null,2))}function Sf(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(`
33
+ `).filter(Boolean)){let i=kt(s),a=i?Ju(i):s;a&&console.log(a)}}function wf(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"),Wr(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 oi}from"node:fs";import et from"node:path";import{fileURLToPath as G_}from"node:url";function Y_(e,r){let t=et.resolve(e);for(;;){let n=et.join(t,r);if(oi(n))return n;let o=et.dirname(t);if(o===t)return null;t=o}}function J_(e){return Y_(e,et.join("node_modules",".bin","tsx"))??"npx"}function wl(e,r){if(e.endsWith(".ts")){let t=J_(et.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function si(e){if(e.explicitCliPath)return oi(e.explicitCliPath)?wl(e.explicitCliPath,e.nodeExecutable):null;let r=G_(new URL(".",e.importMetaUrl)),t=et.join(r,"cli.js");if(oi(t))return wl(t,e.nodeExecutable);let n=et.join(r,"cli.ts");return oi(n)?wl(n,e.nodeExecutable):null}var Z_=5e3,ex=360*60*1e3,rx=3,tx=5e3;function nx(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=nx(e),t=r.pollMs??Z_,n=r.maxTotalMs??ex,o=r.completeAttempts??rx,s=r.completeBackoffMs??tx,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(Qr(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),Qr(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`};Wr(t)}let l,c;for(let u=1;u<=o;u++){let d=await go({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&&Wr(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function _f(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 xf(e){let r=e.nodeExecutable??process.execPath,t=si({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!z_(n))return;let o=Q_.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=q_(t.command,a,pe({detached:!0,stdio:i,env:process.env}));return s!==void 0&&Cf(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Cf(s)}catch{}return}}function Pf(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 Cl(e){return JSON.stringify(e,null,2)}we();function Ef(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 _l(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}:Fs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=_m(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);sx(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(ox(c))throw new Error(`worktree path already exists: ${c}`);me(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?Ef(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=Rm({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=cm(R.model,i,s.defaultModel),P=y(),x=xe(process.env,P),A=Je().runnerId,J=Ks(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=xf({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 Af(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):Ru(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=_l(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(Cl(u)):(console.log(Pf(u)),console.error(Cl(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 If}from"node:crypto";function Ir(e){let r=e.replace(/\r\n/g,`
34
+ `).trimEnd();return If("sha256").update(r,"utf8").digest("hex")}function Xt(e){if(e==null)return null;let r=e.trim();return r?If("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 yo(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 xl(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 Of(e){return e!=="permanent"}function ai(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function li(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function Nf(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:ai(o)}),l=await li(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw yo(a.status,c)}return l}catch(a){throw a instanceof re?a:xl(a)}}async function Tf(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:ii(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:ii(e)}},m=await o(p,{method:"POST",headers:ai(n),body:JSON.stringify(f)}),g=await li(m);if(!m.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${m.status})`;throw yo(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:ii(e)},m=await o(p,{method:"PATCH",headers:ai(n),body:JSON.stringify(f)}),g=await li(m);if(!m.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${m.status})`;throw yo(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:ii(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:ai(n),body:JSON.stringify(l)}),u=await li(c);if(!c.ok){let p=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw yo(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:xl(i)}}function ii(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as ix}from"node:crypto";function ci(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 ix("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as Df}from"node:fs";import{homedir as ax}from"node:os";import Qt from"node:path";function ui(){let e=process.env.KYNVER_STATE_ROOT;return e?Qt.resolve(e):Qt.join(ax(),".kynver","state")}function di(){return Qt.join(ui(),"plan-outbox")}function lx(){return Qt.join(ui(),"plan-outbox-archive")}function rt(){let e=di(),r=lx();return Df(e,{recursive:!0}),Df(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function Ro(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 Pl,readFileSync as Uf,renameSync as Mf,readdirSync as cx,writeFileSync as El,unlinkSync as lF}from"node:fs";import Be from"node:path";import{randomUUID as ux}from"node:crypto";var dx=12;function Zt(){let{outboxDir:e}=rt(),r=cx(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=Il(Be.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function Al(e){for(let r of Zt())if(r.idempotencyKey===e)return r;return null}function Il(e){if(!Pl(e))return null;try{return JSON.parse(Uf(e,"utf8"))}catch{return null}}function Wf(e){let{outboxDir:r}=rt(),t=Be.join(r,e.bodyPath);return Uf(t,"utf8")}function Ol(e,r){let{outboxDir:t}=rt(),n=new Date().toISOString(),o=r.existing?.id??ux(),s=r.existing?.bodyPath??`${o}.body.md`,i=Be.join(t,`${o}.json`),a=Be.join(t,s);r.existing||El(a,e.body,"utf8");let l={id:o,idempotencyKey:ci(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??dx,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return El(i,`${JSON.stringify(l,null,2)}
35
+ `,{mode:384}),l}function Lf(e){let{outboxDir:r}=rt(),t=Be.join(r,`${e.id}.json`);El(t,`${JSON.stringify(e,null,2)}
36
+ `,{mode:384})}function Bf(e){let{outboxDir:r,archiveDir:t}=rt(),n=Be.join(r,`${e.id}.json`),o=Be.join(r,e.bodyPath),s=Be.join(t,`${e.id}.json`),i=Be.join(t,e.bodyPath);Pl(n)&&Mf(n,s),Pl(o)&&Mf(o,i)}function bo(e){let{outboxDir:r}=rt();return{jsonPath:Be.join(r,`${e.id}.json`),bodyPath:Be.join(r,e.bodyPath)}}function Hf(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 Ff(e,r,t={}){let n=await Nf(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 $f(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 Kf="persisted and read back",px="queued for retry",Nl="failed and needs action";async function vo(e,r={}){e.bodyPathHint&&Ro(e.bodyPathHint);let t=ci(e),n=Al(t);if(n?.readbackEvidence)return{userStatus:Kf,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return jf(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??Tf,s=r.verifyReadback??Ff;try{let i=await o(e,r),a={...e,planId:i.planId},l=$f(a,i),c=await s(e.agentOsSlug,mx(e,l),r);return n&&Bf(n),{userStatus:Kf,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(!Of(a.kind)){let l=Ol(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=bo(l),u=Vf(l,a.message);return{userStatus:Nl,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return jf(e,a.message,a.kind,n)}}function mx(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function jf(e,r,t,n){let o=Ol(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=bo(o);if(o.retryCount>=o.maxRetries){let i=Vf(o,r);return{userStatus:Nl,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:px,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function Vf(e,r){let t={...e,queueStatus:"failed",userStatus:Nl,lastError:r,updatedAt:new Date().toISOString()};return Lf(t),t}import fx from"node:path";async function Tl(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=Wf(s),a=Hf(s,i),l=await vo(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 Dl(e){let r=fx.join(di(),`${e}.json`);return Il(r)}function Ml(e){let r=bo(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(`
37
+ `)}function Ul(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 Wl(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 Yf}from"node:child_process";import{spawnSync as gx}from"node:child_process";function Gf(){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=gx("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 Jf=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),hx=new Set(["CLEAN","HAS_HOOKS"]);function Bl(e){return e?.trim()?["--repo",e.trim()]:[]}function qf(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function zf(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 So(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function kx(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&&Jf.has(i))){if(i){n.push(`${So(s)}=${i}`);continue}if(!(l&&Jf.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${So(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${So(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${So(s)}=${a}`);continue}t.push(`${So(s)}=PENDING`)}}}return{pending:t,failed:n}}function yx(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 Rx=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,bx=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,vx=/^docs[(:]/i,Sx=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function wx(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=vx.test(r)||Sx.test(t),o=Rx.test(t),s=bx.test(t);return n||o||s||e.vercelCheckSuccess===!0}function Cx(e){if(!wx({title:e.title,body:e.body,vercelCheckSuccess:yx(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 _x(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(!hx.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=kx(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(", ")}`);Cx(e)}function xx(e){try{return _x(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function Px(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 Ex(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 Ax(e,r){if(!r?.trim())return;let t=Yf("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}`)&&Yf("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function Xf(e){let r=e.cwd??process.cwd(),t=e.exec??Xs,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=Gf();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=zf(t,r,["pr","view",n,...Bl(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","mergedAt","mergeCommit"].join(",")]);if(s.state==="MERGED"||s.mergedAt)return{prUrl:s.url||n,outcome:"skipped",mergeCommit:s.mergeCommit?.oid??null,reason:`PR #${s.number} is already merged \u2014 land_pr no-op (redelivery)`};let i=xx(s);if(i)return e.skipNotReady?{prUrl:s.url||n,outcome:"skipped",reason:i}:{prUrl:s.url||n,outcome:"blocked",reason:i};if(e.dryRun)return{prUrl:s.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};let a=String(s.number),l=t.gh(r,["pr","merge",a,...Bl(e.repo),"--squash"]);if(l.status!==0){let u=Ll(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=Ll(t,r,a,e.repo);c||(c=Ll(t,r,a,e.repo));try{let u=Ex(t,r,e.repo);Px(t,r,u,s.headRefName),Ax(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 Ll(e,r,t,n){try{let o=zf(e,r,["pr","view",t,...Bl(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}N();async function Qf(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 Zf(){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(`
38
+ `)}var Ix="dispatch_start_readback_failed:";function tt(e){return`${Ix} ${e.trim()}`}function Ox(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 Nx(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:tt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:tt(`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:tt(`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:tt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=Ox(o);return a?{ok:!1,error:tt(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:tt(`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:tt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function eg(e){let r=await Jt({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return Nx({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}C();D();function rg(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 tl=3600*1e3;function tg(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function ng(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function Tx(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 Dx(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function Mx(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("",Zf());let n=Ul(e);if(n?.outboxId){let o=Dl(n.outboxId);o?t.push("",Ml(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
39
+ `)}function Ux(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 nt(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ft=function(){return Z.filter(w=>w.started).length},$e=function(w,b){Wa({runId:i.id,agentOsId:a,phase:w,startedCount:ft(),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=ft,n=$e,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=el(i.id,p.runnerId),m=e.diskPath?Ve({diskPath:String(e.diskPath)}):Ve({diskPath:i.repo}),g=sr({runId:i.id}),k=Ux(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=Ds(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)):tl,runnerDiskGate:m,runnerResourceGate:g,activeHarnessWorkers:x,runnerPresence:p,harnessBoardSnapshot:ho(i.id),...e.lane?{lane:Dp(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(b=>b.trim()).filter(Boolean)}:{}}),V=Ep(),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=tg(H),b=ng(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=dm(),Z=[],gr=[],mt=Number(H.inspected)||0,Fe=!1;async function Y(w,b,O){let G=await Wl({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),$e("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 Xf({prUrl:G,repo:qf(G),cwd:i.repo}),ht=await Qf({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:b,report:le});return ht.ok?(Z.push({taskId:O,started:!0,landPr:!0,outcome:le.outcome,completionStatus:ht.status}),!0):Y(b,`land_pr completion POST failed (HTTP ${ht.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 Wl({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),$e("outcome",{lastOutcome:G}),!1}async function hr(w){let b=w.task,O=Tx(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=Dx(b.personaSlug);if(le&&(!O?.personaInjectionReady||!O.personaMarkdown))return Y(b,`persona_injection_required: missing anchored context-envelope persona block for "${le}"`);if(gm(i.id,G))return ve(b);let ht=Number(b.attempt)||1;if(ht>Mr.maxTaskAttempts)return Y(b,`task attempt ${ht} 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 wR=v(`t-${b.id}-a${b.attempt}`),Ur=Fs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Mp(b)}),Yo=lf(Ur.provider);if(!Yo.ok)return Y(b,`provider_quota_exhausted: ${Yo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Yo.provider,retryAt:Yo.retryAtIso}});try{let Qi=b.planId?String(b.planId):void 0,Jo=km({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}),Ke=_l(i,{name:wR,task:Mx(b,a),ownedPaths:e.owned?String(e.owned).split(",").map(CR=>CR.trim()).filter(Boolean):[],model:Ur.model,provider:Ur.provider,routingRule:Ur.rule,requestedModel:Ur.requestedModel,agentOsId:a,taskId:String(b.id),planId:Qi,branch:Jo?.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:Jo?.targetPrUrl??(b.prUrl?String(b.prUrl):void 0),repairTargetPrUrl:Jo?.targetPrUrl,repairTargetBranch:Jo?.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}),qo=await eg({agentOsId:a,taskId:String(b.id),leaseOwner:f,expectedLeaseToken:yn,worker:Ke,baseUrl:l,secret:c});if(!qo.ok)return rg(i.id,Ke,qo.error??"dispatch_start_readback_failed"),Y(b,qo.error??"dispatch_start_readback_failed",{readback:qo.detail??null});Ke.leaseToken!==yn&&(Ke.leaseToken=yn,Ke.leaseOwner=f,$(i.id,Ke));let gu={taskId:b.id,started:!0,worker:Ke.name,pid:Ke.pid,branch:Ke.branch,model:Ke.model,provider:Ur.provider,routingRule:Ur.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(gu),$e("worker_started",{lastOutcome:gu}),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(Qi){return Y(b,Qi.message)}}let Se=new Set;async function jo(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 jo(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),$e("circuit_breaker",{lastOutcome:O});break}let w=await j(1);if(!w.dispatch.ok||!w.result){let O=Ap(w.dispatch.response),G=ft();Fe=O&&G>0;let le={started:!1,error:"dispatch_next request failed during top-up",httpStatus:w.dispatch.status,response:w.dispatch.response,...Fe?{nonFatal:!0,partialTopUp:!0}:{}};Z.push(le),$e("top_up_failed",{partialTopUpInterrupted:Fe,lastOutcome:le});break}mt+=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 jo(O)}}let Vo=Z.filter(w=>w.started).length,gt=tg(H),Go=ng(H),du=Vo===0&&(gt?.capacityIdle===!0||Number(H.resourceGate?.slotsAvailable)>0);if(du&&gt?.summary){let w=gt.skipReasonCounts?.retry_ceiling_exceeded??0,b=H.overAttemptIdleRecovery??gt.overAttemptIdleRecovery,O=b?.attempted===!0?`; over_attempt_recovery minted=${b.minted??0} started=${b.started??0}`:w>0?"; over_attempt_recovery not attempted":"",G=Go?`; dispatch_skip_drain scanned=${Go.scanned??0} advanced=${Go.advanced??0}`:"";console.error(`[dispatch] ${gt.summary}${w>0?`; retry_ceiling_exceeded=${w}`:""}${O}${G}`)}let pu={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:f,startedCount:Vo,capacityIdle:du,admissionExhaustion:gt,dispatchSkipDrain:Go,outcomes:Z,skipped:gr.map(w=>({taskId:w.task.id,skipReason:w.skipReason})),inspected:mt,pagesScanned:H.pagesScanned??null,candidatesExhausted:H.candidatesExhausted??null,diskGate:H.diskGate,resourceGate:H.resourceGate,...Fe?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:V},mu=w=>!w.started&&w.nonFatal!==!0,SR=Z.some(mu),fu=Fe&&Vo>0?!0:!SR;if(Wa({runId:i.id,agentOsId:a,phase:"complete",partial:Fe,startedCount:Vo,ok:fu}),r)return{ok:fu,...pu};console.log(JSON.stringify(pu,null,2)),Z.some(mu)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var Wx=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 Lx(e){let{maxStarts:r,...t}=e;return t}async function Hl(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=Lx(e);if(t.targetTaskId||t.targetTaskIds){let u=await nt({...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,Wx),o=Math.max(0,r-n),s=await nt({...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 nt({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=en(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function og(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 Bx(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function wo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Hx(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function sg(e,r){let t=Bx(r),n=wo(t?.recommendedMaxStarts),o=wo(t?.actionableReady),s=wo(t?.queuedTasks),i=wo(t?.boardAdvancedThisTick)??0,a=wo(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=Hx("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 yP from"node:path";D();Br();X();C();import Fx from"node:path";var $x=new Set(["running","dispatching","pending","queued","needs_attention"]),dr=new Set(["completed","failed","cancelled","done"]);function ot(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=_(Fx.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 Co(){let e=[];for(let r of z()){if(!$x.has(r.status))continue;let t=ot(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();Br();X();C();wr();Pn();import{existsSync as Tr,lstatSync as Qx,readdirSync as Zx,readlinkSync as eP,renameSync as Jl,unlinkSync as rP}from"node:fs";import Xe from"node:path";_e();C();import He from"node:path";var Kx=`${He.sep}runs${He.sep}runs${He.sep}`;function pi(e){return e.includes(Kx)}function Fl(e,r){return He.join(Ce(ce(e)),v(r))}function Or(e,r,t){return He.join(Fl(e,r),"workers",v(t))}function ig(e,r,t){let n=ce(e);return He.join(n,"runs","runs",v(r),"workers",v(t))}function $l(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function st(e){return{workerJsonPath:He.join(e,"worker.json"),stdoutPath:He.join(e,"stdout.jsonl"),stderrPath:He.join(e,"stderr.log"),heartbeatPath:He.join(e,"heartbeat.jsonl"),lastStatusPath:He.join(e,"last-status.json")}}function ag(e){let r=st(Or(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!pi(e.statusPath)?e.statusPath:r}import{existsSync as Nr,mkdirSync as jx,readdirSync as cg,renameSync as Vx,statSync as Kl}from"node:fs";import ne from"node:path";wr();_e();D();C();var _o=900*1e3,Gx=3600*1e3;function ug(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 jl(e){if(!Nr(e))return[];try{return cg(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Vl(e){let r=ne.join(e,"workers");if(!Nr(r))return[];try{return cg(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function dg(e){return ne.join(e,"archived-workers")}function Yx(e,r){let t=ne.join(dg(e),v(r));return Nr(t)?`${t}-${Date.now()}`:t}function lg(e,r,t){if(!Nr(e))return!1;try{let n=r-Kl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function pg(e,r=Date.now(),t=_o){if(!Nr(e))return!1;let n=st(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!!(lg(n.stdoutPath,r,t)||lg(n.heartbeatPath,r,t))}function Jx(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-Kl(ne.join(e,"worker.json")).mtimeMs}catch{return 0}}function qx(e,r,t,n){if(pg(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=Jx(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=_o){for(let n of Vl(e))if(pg(ne.join(e,"workers",n),r,t))return!0;return!1}function zx(){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=Vl(t);if(n.length===0)return null;let o;try{o=Kl(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,...zx(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Gl(e){let r=ce(e??be()),t=Ce(r),n=[];for(let o of jl(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 Yl(e,r={}){let t=ce(e??be()),n=Ce(t),o=r.now??Date.now(),s=r.archiveAgeMs??Gx,i=[];Gl(t);for(let a of jl(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||{}),...Vl(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(dg(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=qx(m,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:f,action:"skipped",reason:h.reason});continue}let R=Yx(l,f);jx(ne.dirname(R),{recursive:!0}),Vx(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 mg(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of jl(n)){let s=ne.join(n,o);rn(s,r)&&t.add(`${e}\0${o}`)}return t}D();C();function tP(e,r){let t=Fl(e,r),n;try{n=Qx(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Xe.resolve(Xe.dirname(t),eP(t));if(rn(o)||rn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Jl(o,s),rP(t),Jl(s,t),o}function nP(e){let r=[];for(let t of $l()){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 fg(e,r){let t=st(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 oP(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 sP(e){let r=st(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=oP({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}),fg(u,e.canonicalDir),u}function iP(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");(pi(s.workerDir)||pi(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 aP(e){let r=[],t=Or(e.harnessRoot,e.run.id,e.workerName),n=ig(e.harnessRoot,e.run.id,e.workerName),o=st(t),s=nP({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=ag({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=sP({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=$l().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 fg(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 lP(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 Zx(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function gg(){let{harnessRoot:e}=ee(),r=Gl(e),t=[];for(let n of z()){let o=tP(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),iP(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 lP(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(...aP({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}wr();us();X();D();Br();C();import{execFileSync as hg}from"node:child_process";import kg from"node:path";function ql(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function cP(e){let r=ql(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function uP(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function dP(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 pP(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=ql(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 mP(e){try{let n=hg("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=hg("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:ql(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 fP(e){let r=ae(e.heartbeatPath);return e.completionSnapshot?.finalResult??or(r)}function gP(e){let r=new Map,t=E(e.id);for(let n of fe(e)){let o=_(kg.join(t,"workers",v(n),"worker.json"),void 0);if(o)for(let s of pP(fP(o))){let i=cP(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function hP(e,r){let t=ae(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,uP(r)].filter(Boolean).join(`
40
+ `);return dP(n)}function kP(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function zl(e={}){let r=e.lookupPr??mP,t=[],n=new Map;for(let o of z()){let s=gP(o),i=E(o.id);for(let a of fe(o)){let l=kg.join(i,"workers",v(a),"worker.json"),c=_(l,void 0);if(!c||!kP(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 hP(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 RP=900*1e3;function bP(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function yg(e,r){let t=Zs({worker:e,status:r}),n=t?ei(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 xo(){let e=gg();if(bP()){let s=zl(),i=Yl();return{workers:[],finalizedRuns:Co(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of fe(s)){let a=yP.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=yg(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=yg(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>RP,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=zl(),o=Yl();return{workers:r,finalizedRuns:Co(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Rg(){let e=xo(),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 vP from"node:os";function mi(e,r={}){let t=(r.boxKind??je(y())).trim().toLowerCase()||"forge",n=r.hostLabel??vP.hostname();return{boxId:r.boxId??Ks(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();ls();X();N();import SP from"node:path";D();X();C();async function Po(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 bf({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let f=_(SP.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=$s({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 wP from"node:path";N();async function bg(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 vg(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=_(wP.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 bg({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 CP(e=process.env){let r=y();return je(r,e)!=="forge"}function Sg(e,r=process.env){if(CP(r))return e?.maxConcurrentWorkers??void 0}async function wg(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 Ms(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";cs();import hi from"node:path";we();X();var Xl=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Cg(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Xl)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!Cg(n)})}function it(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 Eo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Oe(e.changedFiles).length>0:!!(it(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}C();function Ao(e){return e.status||(e.status=M(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Ql(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 _P(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Zl(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=_P(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"}:es(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??it(s)};return e.status=u,u}return Ao(e)}X();X();wr();C();function ec(e,r=Date.now(),t=_o){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 fi(e,r=Date.now(),t=_o){return F(e.pid)?!0:ec(e,r,t)}function xP(e,r){return r?r.runTerminalCache.derive(e.run):ot(e.run)}function pr(e,r=Date.now()){return fi(e.worker,r)}function rc(e,r){return dr.has(e.run.status)?!1:xP(e,r)!==null}function _g(e,r,t=Date.now()){if(pr(e,t))return!0;if(dr.has(e.run.status)||rc(e,r))return!1;let n=Ao(e);return ie(n)?!1:!!pr(e,t)}cs();X();function xg(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(pr(e))return!0;let n=r??Ao(e);return!!(!ie(n)||Eo(n)||Oe(n.changedFiles).length>0||At({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:it(n.finalResult)}).blocked)}we();C();import{existsSync as Eg,mkdirSync as PP,writeFileSync as Pg}from"node:fs";import gi from"node:path";function Ag(e,r,t){return gi.join(e,"salvage",v(r),v(t))}function Ig(e){return Eg(gi.join(Ag(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Og(e){let r=Ag(e.harnessRoot,e.indexed.runId,e.indexed.workerName);PP(r,{recursive:!0});let t=gi.join(r,"salvage.patch"),n=!1;if(Eg(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(`
41
+ `);a.trim()&&(Pg(t,a.endsWith(`
41
42
  `)?a:`${a}
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 lg(si.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
43
- `),o}var L_=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function H_(e){return!L_.has(e.skipReason)||ur(e.indexed,e.now)?!1:dg({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(pg({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function F_(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(cr.has(r.run.status)||e.liveness&&Kl(r,e.liveness)||e.liveness&&ie(Fl(r,e.liveness))&&!ur(r))?n:t}function $_(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:F_(e)}function K_(e,r){if(e.harnessRoot?.trim())return ii.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${ii.sep}runs${ii.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function mg(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=$_(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(ur(r,a))return"active_worker";let c=Fl(r,e.liveness),u=K_(e,r),d=p=>u&&H_({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(ag(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(ig(r,e.liveness,a)||!ie(c))return"run_still_active";if(bo(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(Ct({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:tt(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(ii.resolve(o))||r&&ur(r)?"active_worker":r&&Hl(r,e.gitStatusCache)?"dirty_worktree":null}function fg(e){return jl(e)}var gg=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function hg(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)gg.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||gg.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as bg,readdirSync as vg,statSync as G_}from"node:fs";import Sg from"node:path";D();xe();import kg from"node:path";C();function V_(e,r){return oi(e,r)}function yg(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of qo(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=x(kg.join(bn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=kg.resolve(l.worktreePath);V_(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Jf(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Rg(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}C();function Y_(e,r){try{let t=G_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function J_(e,r){let t=Sg.join(e,"runs",r,"run.json");return bg(t)?x(t,null):null}function wg(e){try{return vg(e).length===0}catch{return!1}}function Cg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Rg(n,r,t,i.liveRunKeys)||!wg(n))return"run_still_active";let a=J_(r,t);return a&&!cr.has(a.status)&&!et(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function xg(e){if(!bg(e.worktreesDir))return[];let r=[],t;try{t=vg(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=Sg.join(e.worktreesDir,o);wg(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Y_(s,e.now)})}return r}we();import{existsSync as Gl,rmSync as Ug}from"node:fs";import{execFileSync as q_}from"node:child_process";import{existsSync as _g,readdirSync as z_,statSync as X_}from"node:fs";import Q_ from"node:path";var Z_=2500;function eP(e,r=Z_){if(!_g(e))return 0;try{let n=q_("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 dr(e,r=5e4){if(!_g(e))return 0;let t=eP(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=z_(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=Q_.join(i,l),u;try{u=X_(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as oP,rmSync as sP}from"node:fs";xe();import{lstatSync as rP,readdirSync as tP}from"node:fs";function Pg(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 Eg(e,r=32){let t=Pg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=tP(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Pg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as nP}from"node:child_process";import Og from"node:path";import Ie from"node:path";function Ag(e,r,t,n){let o=Ie.resolve(e),s=`${Ie.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ie.relative(t,i);if(a.startsWith("..")||Ie.isAbsolute(a))return"path_outside_harness";let l=a.split(Ie.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ie.resolve(r))?"path_outside_harness":null}function ai(e,r,t){return Ag(e,r,t,"node_modules")}function li(e,r,t){return Ag(e,r,t,".next")}function ci(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 Ig(e,r,t){let n=Ie.resolve(e);return ai(n,r,t)===null||li(n,r,t)===null||ci(n,r,t)===null}function Tg(){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 Ng(e){let r=nP("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Dg(e,r,t){if(!Ig(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=Ng(["chown","-R",`${n}:${o}`,Og.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Ng(["rm","-rf",Og.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 iP(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Mg(e,r,t={}){if(!oP(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?br(n):null,i=e.bytes??dr(e.path)??void 0,a=t.removePath??sP,l=t.hasForeignOwnedEntry??Eg;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!iP(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Tg();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=Dg(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||!Vf(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=Mg(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Wg(e,r){return Jl(e,r)}function Bg(e,r){return Jl(e,r)}function Lg(e,r){return Jl(e,r)}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"};try{let n=e.bytes??dr(e.path);return Ug(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 Fg(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??dr(e.path);return n&&me(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Gl(e.path)&&Ug(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 ui,readdirSync as di,statSync as aP}from"node:fs";import Xe from"node:path";function ql(e,r){try{let t=aP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Kg(e,r){let t=Xe.relative(r,e);return t===""||!t.startsWith("..")&&!Xe.isAbsolute(t)}function $g(e,r,t,n){let o=[];for(let s of Ll){if(s===".next")continue;let i=Xe.join(e,s);if(!ui(i))continue;let a=Xe.resolve(i);t.has(a)||Kg(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 jg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...$g(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ui(e.worktreesDir))return r;for(let n of di(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Xe.join(e.worktreesDir,n.name);for(let s of di(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Xe.join(o,s.name);r.push(...$g(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Vg(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;ui(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||!ui(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 di(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=di(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)||Kg(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 Jg,readdirSync as Gg,statSync as lP}from"node:fs";import Zt from"node:path";var cP=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function uP(e,r){try{let t=lP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function dP(e,r){let t=Zt.relative(r,e);return t===""||!t.startsWith("..")&&!Zt.isAbsolute(t)}function pP(e,r,t,n,o,s){if(!Jg(n))return;let i=Zt.resolve(n);r.has(i)||dP(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:uP(i,t.now)}))}function Yg(e,r,t,n,o){for(let s of cP)pP(e,r,t,Zt.join(n,s.dirName),s.kind,o)}function qg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Yg(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Jg(e.worktreesDir))return r;for(let n of Gg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Zt.join(e.worktreesDir,n.name),s;try{s=Gg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Zt.join(o,i.name);Yg(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as zg,statSync as mP}from"node:fs";import Qe from"node:path";function fP(e,r){try{let t=mP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gP(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 hP(e,r){let t=Qe.relative(Qe.resolve(r),Qe.resolve(e));return t!==""&&!t.startsWith("..")&&!Qe.isAbsolute(t)}var kP=200;function Xg(e){if(!e.includeOrphans||!zg(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Qe.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Qe.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=gP(a);for(let c of l){if(i>=kP)break;let u=Qe.resolve(c.path);if(u===Qe.resolve(s)||!hP(u,e.worktreesDir)||t.has(u)||o.has(u)||!zg(u))continue;let f=Qe.relative(e.worktreesDir,u).split(Qe.sep),m=f[0],p=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:p,repo:s,ageMs:fP(u,e.now)})}}return n}D();C();import So from"node:path";function Qg(e,r){let t=So.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?So.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Zg(e){let r=new Map;for(let t of qo(e))for(let n of Object.keys(t.workers||{})){let o=So.join(bn(e,t.id),"workers",v(n),"worker.json"),s=x(o,void 0);s?.worktreePath&&r.set(So.resolve(s.worktreePath),{harnessRoot:e,worktreePath:So.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function wo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function nt(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Ql(e={}){let r=e.execute===!0||e.execute!==!1&&wo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!wo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??nt("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??nt("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??nt("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??nt("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??nt("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||wo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=wo("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),f=e.accountBytes!==!1&&!wo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=nt("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,g=nt("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:f,storagePerRunEntryCap:p,byteAccountingEntryCap:k}}function nh(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 Ql({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 oh}from"node:fs";import Zl from"node:path";C();var yP=1800*1e3;function sh(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??yP;if(!oh(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Zl.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=x(Zl.join(c,"worker.json"),void 0);if(u&&$l(u,r,t))return"active_worker"}let n=Zl.join(e.worktreePath,".git");if(!oh(n))return null;let o=ne(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(Ae(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}xe();import{existsSync as RP,readdirSync as ih,statSync as bP}from"node:fs";import vP from"node:path";function ah(e={}){let r=ce(e.harnessRoot??be()),t=br(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!RP(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=ih(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=vP.join(t,u.name);try{let f=bP(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of ih(d,{withFileTypes:!0}))f.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let f=e.perRunEntryCap??5e4;if(f<=0)s=null;else{let m=dr(d,f);m===null?s=null:s+=m}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}xe();import{existsSync as SP}from"node:fs";import{homedir as wP}from"node:os";import lh from"node:path";var CP=["/var/tmp/kynver-harness",lh.join(wP(),".openclaw","harness")];function ec(e,r,t){if(!t?.trim())return;let n=ce(t.trim());e.has(n)||(e.add(n),r.push(n))}function xP(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 ch(e={}){let r=new Set,t=[];ec(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??[])ec(r,t,o);if(xP(e))for(let o of CP){let s=lh.resolve(o);!r.has(s)&&SP(s)&&ec(r,t,s)}return t}Rn();function _P(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function PP(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function uh(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=PP("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=$e({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function dh(e,r){if(!r.pressured)return e;let t=e.execute||!_P("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}}yn();import{unlinkSync as EP}from"node:fs";function pi(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ph(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function AP(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function mi(e={}){let r=e.execute===!0||pi("KYNVER_WSL_CRASH_DUMP_EXECUTE")||pi("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||pi("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??ph("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=yr({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=AP(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{EP(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 mh(e){return e?pi("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>ph("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}yn();function Oe(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}we();var fi=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ne(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as IP}from"node:child_process";import{existsSync as OP}from"node:fs";import NP from"node:path";var TP=5e3;function DP(e,r){if(!OP(NP.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=IP("git",r,{cwd:e,encoding:"utf8",timeout:TP}),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 fh(e){let r=DP(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 gi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=fh(t)??[];return this.cache.set(t,o),o}};var hi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=et(r);return this.cache.set(r.id,n),n}};function MP(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function gh(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:MP(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 UP(e={}){let r=e.harnessRoot?ce(e.harnessRoot):be(),t=ch({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function WP(e){return typeof e=="string"?{reason:e}:e}function en(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function ki(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:dr(e.path,t)}}function hh(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 BP(e,r){return e.kind==="remove_next_cache"?Bg(e,r):Wg(e,r)}function LP(e,r,t){return e.kind==="remove_next_cache"?li(e.path,r,t):ai(e.path,r,t)}function HP(e){let r=new Map;for(let t of e)for(let[n,o]of Zg(t))r.set(n,o);return r}function kh(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=uh();r=dh(r,t);let n=UP(e);Oe("scan",`${n.scanRoots.length} harness root(s)`);let o=yg(n.scanRoots,n.now),s=r.finalizeStaleRuns?ho().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=HP(n.scanRoots);Oe("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new hi,gitStatusCache:new gi,gitRevCache:new fi},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"),Nr=Qg(i,I),Q={harnessRoot:I,worktreesDir:L,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Nr,now:n.now},mr=r.scanDependencyCaches?qg(Q):[];Oe("dependency",r.scanDependencyCaches?`${mr.length} cache candidate(s) at ${I}`:"skipped (worktree-only sweep)");let at=0;for(let ke of mr){if(f())break;at+=1,at%50===0&&Oe("dependency",`${at}/${mr.length} evaluated`);let G=Ne.resolve(ke.path);if(u.has(G))continue;u.add(G);let W={...ke,path:G},ye=LP(W,I,L);if(ye){en(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=kh(W,L),fr=Nr.get(Ne.resolve(ve))??null,Se=jl({indexed:fr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){en(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(BP(ki(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let ke of jg(Q)){if(f())break;let G=Ne.resolve(ke.path);if(u.has(G))continue;u.add(G);let W={...ke,path:G},ye=ci(W.path,I,L);if(ye){en(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=kh(W,L),fr=Nr.get(Ne.resolve(ve))??null,Se=fg({indexed:fr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){en(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Lg(ki(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let We=[...Vg(Q),...Xg(Q)];Oe("worktrees",`${We.length} candidate(s) at ${I}`);let lt=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(lt.has(G))continue;lt.add(G);let W={...ke,path:G},ye=Nr.get(Ne.resolve(W.path))??null,ve=ye?null:sh({worktreePath:W.path,harnessRoot:I,runId:W.runId,workerName:W.worker,now:n.now}),fr=mg({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(fr){let{reason:Se,detail:Do}=WP(fr);en(l,W.path,Se,Do),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Fg(ki(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let ke of xg({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=Cg({harnessRoot:I,runId:ye,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ve){en(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}c.push(Hg(ki(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?ah({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,P=yr(),_=r.execute&&mh(P),A=_?mi({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=hg(c,l),$=gh({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:hh(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:hh(c,l)},...S?{storage:S}:{},...K.length>0?{preservedLivePaths:K}:{},...p>0?{removedRunDirectories:p}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:$}}function yh(e){let r=nh(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 Rh(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as qP}from"node:fs/promises";import{homedir as zP}from"node:os";import ot from"node:path";Vo();import{existsSync as bh,readFileSync as FP}from"node:fs";import yi from"node:path";var Sh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},wh=Object.keys(Sh),tc={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},$P={"@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 vh(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 Ri(e,r){let t=vh(e),n=vh(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 Ch(e,r){return Ri(e,r)>=0}function KP(e){let r=null;for(let t of e)(!r||Ri(t,r)>0)&&(r=t);return r}function jP(e){try{let r=JSON.parse(FP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function VP(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=yi.resolve(o);if(bh(yi.join(s,"packages/kynver-runtime/package.json"))&&bh(yi.join(s,"package.json")))return s}return gt({cwd:e})?.repo??null}function xh(e={}){let r=e.cwd??process.cwd(),t=VP(r,e.repoRoot);if(!t)return{};let n={};for(let o of wh){let s=yi.join(t,$P[o]),i=jP(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function GP(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function YP(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&Ch(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${GP(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 JP(e){if(e.length===0)return{version:null,source:"unknown"};let r=KP(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 _h(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=wh.map(i=>{let a=Sh[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}=JP(l),p=u?.version??null,g=f?Ch(f,a):!1,k=g?[]:YP({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(`
47
- `)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Ph(e={}){let r=_h(e);if(!r.ok)throw new nc(r);return r}var XP=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function rn(e){let r=e?.trim();return r||null}function QP(e){return[...new Set(e.filter(r=>!!r))]}function ZP(){let e=zP(),r=rn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??rn(process.env.OPENCLAW_NPM_ROOT)??ot.join(e,".openclaw","npm"),t=rn(process.env.KYNVER_NPM_GLOBAL_ROOT)??rn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(rn(process.env.NPM_CONFIG_PREFIX)?ot.join(rn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):ot.join(e,".npm-global","lib","node_modules"));return QP([ot.join(r,"lib","node_modules"),ot.join(r,"node_modules"),t.endsWith("node_modules")?t:ot.join(t,"lib","node_modules")])}async function eE(e){try{let r=JSON.parse(await qP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function rE(e){let r=ZP(),t=new Set,n=[];for(let o of r){let s=ot.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function bi(e=new Date().toISOString()){let r={};for(let t of XP){let n=null;for(let o of rE(t)){let s=await eE(o);s&&(!n||Ri(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 tE}from"node:child_process";var nE=1e4,oE=4*1024*1024,Eh=(e,r,t)=>{try{let n=tE(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??nE,maxBuffer:oE});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 vi(e,r,t){return`${e} ${r} ${t}`}function Co(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 Ah(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 sE=8e3,iE=30,aE=100,lE=400,cE=3600*1e3,oc=0;function ic(){return Date.now()<oc}function uE(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 Ih(e){uE(e)&&(oc=Math.max(oc,Date.now()+cE))}function sc(e,r){if(ic())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Ih(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function dE(e,r,t,n){if(ic())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Ih(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function ac(e){return ic()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function tn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function pE(e){return Array.isArray(e)?e.map(r=>tn(r)).filter(r=>r!==null).slice(0,iE).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function mE(e,r,t){let n=sc(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:pE(n.statuses)}:null}var Oh={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:ac,collect(e,r){let t=Ah(e);if(!t)return null;let n=dE(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=tn(n.author),s=tn(n.mergeCommit),i=tn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,sE):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>tn(u)).filter(u=>u!==null).slice(0,aE).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=>tn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,lE):[];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}}},Nh={provider:"github",kind:"commit_status",version:"1",isAvailable:ac,collect(e,r){let t=Co(e);return t?mE(r,t.repo,t.sha):null}},Th={provider:"github",kind:"branch_reachability",version:"1",isAvailable:ac,collect(e,r){let t=Co(e);if(!t)return null;let n=sc(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=sc(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 fE=5,gE=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,hE=/https:\/\/[^\s]+/,Dh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=Co(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(hE)?.[0];if(!i)continue;let a=s.match(gE)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=fE)break}return{found:o.length>0,deployments:o}}};var lc=[];function Si(e){lc.some(r=>r.provider===e.provider&&r.kind===e.kind)||lc.push(e)}function Mh(e,r){return lc.find(t=>t.provider===e&&t.kind===r)??null}function Uh(){Si(Oh),Si(Nh),Si(Th),Si(Dh)}var kE=1,yE=25e3;function Wh(e,r={}){Uh();let t=r.run??Eh,n=r.now??(()=>new Date),o=r.maxSubjects??kE,s=Date.now()+(r.deadlineMs??yE),i=new Set,a=e.filter(m=>{let p=vi(m.provider,m.kind,m.subject);return i.has(p)?!1:(i.add(p),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,p)=>a[(l+p)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},f=new Map;for(let m of u){let p=vi(m.provider,m.kind,m.subject),g=n(),k=r.cache?.get(p,g)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let h=Mh(m.provider,m.kind);if(!h){d.skipped.push({...m,reason:"no_recipe"});continue}let y=`${h.provider} ${h.kind}`,S=f.get(y);if(S===void 0&&(S=h.isAvailable(t),f.set(y,S)),!S){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,p,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let P=h.collect(m.subject,t);if(P==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let _={provider:m.provider,kind:m.kind,subject:m.subject,payload:P,observedAt:n().toISOString(),collectorVersion:h.version};d.items.push(_),r.cache?.set(p,_,n())}return d}D();C();import wE from"node:path";D();C();import Bh from"node:path";var RE="provider-evidence-wanted.json",bE="provider-evidence-cache.json",vE=600*1e3;function Lh(e){return Bh.join(E(e),RE)}function SE(e){return Bh.join(E(e),bE)}function Hh(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Fh(e){let r=x(Lh(e),null);return Hh(r?.wanted)}function $h(e,r){se(Lh(e),{savedAt:new Date().toISOString(),wanted:r})}function Kh(e,r={}){let t=r.ttlMs??vE,n=SE(e),s={...x(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 jh(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Hh(r):null}var CE="provider-evidence-shared-cache.json",xE=6e4,_E=1,PE=1;function cc(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 EE(){return wE.join(Z().harnessRoot,CE)}function AE(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?_E:PE;return cc(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,cc("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Vh(){return cc("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",xE)}function IE(e){return Math.floor(e.getTime()/6e4)*6e4}function OE(e){return`${e.provider}:${e.kind}`}function Gh(e,r={}){let t=Kh(e,{ttlMs:r.ttlMs??Vh()}),n=r.file??EE(),o=x(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Vh(),l=!1;return{get(u,d){let f=t.get(u,d);if(f)return f;let m=s[u];if(!m)return null;let p=Date.parse(m.observedAt);return!Number.isFinite(p)||d.getTime()-p>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,f){t.set(u,d,f),s[u]=d,l=!0},reserve(u,d,f){let m=AE(u.provider);if(m===0)return!0;let p=OE(u),g=IE(f),k=i[p];return!k||k.windowStartMs!==g?(i[p]={windowStartMs:g,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(se(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}function TE(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function DE(e,r){let t=B(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=x(NE.join(E(t.id),"workers",v(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||At(a))continue;if(Jr(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=wt({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await io({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 ME(e,r,t,n,o){let s=V(n.baseUrl?String(n.baseUrl):void 0),i=await J(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await bi(),c=Cs(r),u=null;try{let g=Fh(r);if(g.length>0){let k=Gh(r);u=Wh(g,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=ws(r),f=await Kr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:lo(r),resourceGate:t,boxResourceSnapshot:ni(t,{harnessRunId:r,boxKind:Fe(b())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Ye({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=jh(f.response);if(m)try{$h(r,m)}catch{}let p=lp(f);if(p)try{ap(r,p)}catch{}return{ok:f.ok,httpStatus:f.status,response:f.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function uc(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";lo(r);let o=await og(t,e),s=ng(o),i=or({runId:r,configuredMaxWorkersOverride:s}),a=Rh()?yh(r):void 0,l=await ME(t,r,i,e,a),c=Tm(r,l),u=await Ms(r,e),d=await DE(r,e),f=or({runId:r,configuredMaxWorkersOverride:s}),m=yo(),p=await tg(r,e),g=Hf(f,l),k=g.maxStarts,h=TE()?await Ro({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},y=null,S=0,P=Lf(l),_=k;if(n&&_>0&&P.length>0){let Y=Math.min(_,P.length),K=await El({...e,run:r,agentOsId:t,targetTaskIds:P.join(",")},Y),$=Xt(K);S+=$,_=Math.max(0,_-$),y={exactTargetTaskIds:P,exact:K,startedCount:S}}if(n&&_>0){let Y=await El({...e,run:r,agentOsId:t},_),K=Xt(Y);S+=K,y=y&&typeof y=="object"?{...y,broad:Y,startedCount:S}:Y}else!n||k<=0?y||(y={ok:!0,skipped:!0,reason:n?f.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:g,...P.length?{exactTargetTaskIds:P,exactOnly:!0}:{}}):y&&typeof y=="object"&&(y={...y,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:f,leaseRenewal:u,completedWorkers:d,staleReconcile:m,harnessCleanup:a,planProgressSync:p,completionAckSync:c,operatorTick:l,sweep:h,dispatchAdvice:g,dispatch:y,idle:A}}N();import eA from"node:os";import{readFileSync as UE}from"node:fs";import{homedir as WE,platform as BE}from"node:os";import LE from"node:path";import{execFileSync as HE}from"node:child_process";function Yh(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 FE(){if(BE()==="darwin")try{let e=HE("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Yh(e.trim())}catch{return null}try{let e=UE(LE.join(WE(),".claude",".credentials.json"),"utf8");return Yh(e)}catch{return null}}function Jh(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=FE();if(s)return{kind:"oauth",token:s}}return null}var $E="You are Claude Code, Anthropic's official CLI for Claude.";function KE(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function jE(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 VE(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*GE(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 YE(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function qh(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:$E},{type:"text",text:n.system}]);let i=await fetch(`${YE()}/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=KE();for await(let l of GE(i.body)){let c=jE(a,l);c&&e.onDelta(c)}return VE(a)}var nn=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 XE}from"node:child_process";var JE=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),qE=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),zE=["--secret","--api-key","--keeper-child"];function zh(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(zE.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")}:JE.has(t)?{ok:!0,mutating:!1}:qE.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var QE=10*6e4,ZE=5e3,Xh=2e5;async function Qh(e,r,t={}){let n=zh(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??QE,i=new nn(r);return new Promise(a=>{let l=0,c=!1,u=XE(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=Xh)return;let p=m.toString("utf8").slice(0,Xh-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"),ZE).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 rA=25e3,tA=32e3,nA=5e3,oA=6e4,Zh=5*6e4,sA=5e3,iA="claude-sonnet-4-6";async function aA(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(),sA);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 ek(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=oe();if(!t||!n)return null;let o=await aA(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:eA.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||iA,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function lA(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),tA),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:rA}),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 st(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 cA(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Qh(n,s=>{st(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await st(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await st(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 uA(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||st(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new nn(s),a=Jh(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await st(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await qh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await st(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 st(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 rk(e){let r=await ek();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:Zh}));!r&&!e.shouldStop();){if(!oe()||!b().agentOsId?.trim()||(await dc(Zh,e.shouldStop),e.shouldStop()))return;r=await ek()}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 lA(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await dc(oA,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await cA(r,t):await uA(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await dc(nA,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var dA=6e4,pA=5*6e4,mA=10,fA=250;async function pc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(fA,t);await hr(n),t-=n}}async function wi(e){Bt();let r=In();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)):dA,i=!1,a=0;process.on("SIGINT",()=>{i=!0}),process.on("SIGTERM",()=>{i=!0});let l=Kn();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=rk({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:Fr()});let m=await ba(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=ws(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 Lt({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(Wt("daemon.maxIdleStreak",mA)),k=Math.floor(Wt("daemon.idleIntervalMs",pA)),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 gA}from"node:child_process";C();var hA=15*6e4,tk=2*6e4,nk=1e4,kA=5e3,yA=5*6e4,RA=30*6e4,ok=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:hA}function Ci(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 vA(e,r=kA,t=yA){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function SA(e,r,t=RA){return r-e>=t}function it(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function wA(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 xi(e,r=process.argv.slice(2)){let t=String(T(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=bA(e.stallMs),o=wA(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,it("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),it("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=gA(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),it("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await hr(ok),!(d||i));){if(Date.now()-u<tk)continue;let k=Kd(t),h=k&&k.pid===a.pid?k:null;if(h&&jd(h,n)){it("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await hr(nk),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+tk){it("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await hr(nk),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await hr(ok);if(i)break;let p=Date.now();SA(u,p)&&(l=0),l+=1;let g=vA(l);it("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await hr(g)}it("stopped",{agentOsId:t})}we();D();import{existsSync as OA,mkdirSync as NA}from"node:fs";import TA from"node:path";D();Mr();import{existsSync as CA,readFileSync as xA}from"node:fs";import sk from"node:path";X();C();function _A(e){if(!e||!CA(e))return 0;try{return xA(e,"utf8").trim().length}catch{return 0}}function PA(e,r){let t=sk.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=_A(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:Et(o),completionBlocked:a}}function EA(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 AA(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 IA(e){let r=0;for(let t of fe(e)){let n=sk.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 xo(){return yo(),z().map(e=>{let t=fe(e).map(d=>PA(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}=AA(t),c=IA(e),u=xn(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:EA({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function ik(){console.log(JSON.stringify(xo(),null,2))}C();function DA(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 _i(e){let r=Km(DA(e));cu(r);let t=e.id?Ys(String(e.id)):ou(String(e.name||"run")),n=E(t);OA(n)&&MA(`run already exists: ${t}`),NA(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(TA.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 ak(){ik()}function MA(e){console.error(e),process.exit(1)}D();import{existsSync as Ei}from"node:fs";async function Pi(e=ir()){let r=await $r(e.storePath).catch(()=>[]),t=await Ss(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=bs(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 UA}from"node:os";import WA from"node:path";Ke();var Or="watchdog:board-sweep",BA="*/5 * * * *",LA=["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 lk(e){let r=e.storePath?.trim()||wr(),t=e.envFilePath?.trim()||ge,n=WA.join(UA(),".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:LA,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:BA,dedupeKey:Or,callbackPath:o}}}Ke();async function on(e){let r=e.envFilePath??ge,t=[],n=ir(),o=await Pi(n),s=Br(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:Ei(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Ei(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:Ei(n.storePath),summary:Ei(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 $r(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===Or);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 yk}from"node:fs";import{createHash as HA}from"node:crypto";function ck(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:${HA("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 uk(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 dk(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??Or,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function pk(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 mk(e,r,t=Or){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 fk(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Or&&r.provider==="qstash"&&r.status!=="cancelled")}function FA(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Or&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function gk(e){return FA(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 $A}from"node:crypto";function KA(){return $A(32).toString("base64url")}function hk(e=ge){let r=Ca();if(r)return{secret:r,generated:!1,source:"env"};let n=Br(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:KA(),generated:!0,source:"generated"}}as();cs();D();function kk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=Z().runsDir;return yk(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Ai(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=hk(),i=lk({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=ss(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=kk(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||yk(i.storePath);let m=oe();if(m)try{let p=await Hr(o,{baseUrl:n,apiKey:m});Lr(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 dk(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=mk(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:ck(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 uk(n,o,m),y=fk(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 _=gk(h);if(!_.allowed)a.push(_.reason);else for(let A of y)await pk(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=kk({...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=ls({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:Ot()},r),r&&l.systemd.enabled){let g=b();de({...g,daemonSupervisionOwner:"systemd"})}}}if(!e.skipTestFire&&a.length===0){let p=await Lt({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 on({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 jA=["deployment_provider","cron_secret","env_file","cron_store"];function Rk(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function VA(e){let r=Rk(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Rk(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function GA(e){if(!VA(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await on({config:e})).checks.filter(n=>jA.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function YA(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 bk(e){if(fc(e.args.skipCron))return{action:"skipped"};let r=await GA(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 Ai({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 YA(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}N();Pe();hn();function vk(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`)),kt(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}}cs();as();N();Ke();Un();us();Wn();D();async function Sk(e){let r=ds(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&Mn(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=ls({envFilePath:ge,agentOsId:e.agentOsId,runId:e.runId,kynverBin:Ot()},!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 wk(e){return e.action==="systemd_installed"}function Ck(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 qA(e,r){return e.filter(n=>n.repo===r&&!cr.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function xk(e){Bt();let r=b();(!oe()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await Rs(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)),Ln(t).ok||(console.error(gs(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=vk(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=qA(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=_i({...e,repo:o,name:"agent"}).runId),await bk({config:r,agentOsId:t,runId:i,args:e});let a=await Sk({config:b(),agentOsId:t,runId:i,args:e});if(wk(a)){console.log("");for(let c of Ck())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${JA.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(Ci(l)){await xi(l,zA(i,t,e));return}await wi(l)}function zA(e,r,t){if(!Ln(r).ok)throw new Error(gs(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 XA,rmSync as QA}from"node:fs";import gc from"node:path";function ZA(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function eI(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function rI(e){let{runId:r,workerName:t}=qe(e),n=ue(r,t),o=[...eI(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=ZA(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(!XA(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};QA(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 _k(e){let r=rI(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}N();import PI from"node:path";On();Go();On();var tI=/--max-old-space-size=(\d+)/;function nI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function hc(){return nI(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(tI.test(t))return r;let o=`--max-old-space-size=${hc()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function sn(e=hc()){return`--max-old-space-size=${e}`}is();N();On();Go();import{spawnSync as oI}from"node:child_process";function Oi(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ek(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Oi(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Oi(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Oi(e.perWorkerMemBytes,1610612736),reserveBytes:t??Oi(e.memReserveBytes,2147483648)}}var Ni=0;function bc(){Ni+=1}function vc(){Ni=Math.max(0,Ni-1)}function an(e={}){let r={...Ek(),...e},t=e.memAvailableBytes??kn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Ni,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function sI(e){e<=0||oI(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=an({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)sI(Math.min(r,n-Date.now())),o=an({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as xI}from"node:child_process";C();import{closeSync as cI,existsSync as wc,mkdirSync as uI,openSync as dI,readdirSync as Ik,readFileSync as pI,unlinkSync as xc,writeFileSync as mI}from"node:fs";import _c from"node:path";import{mkdirSync as iI}from"node:fs";import{tmpdir as aI}from"node:os";import Ti from"node:path";function lI(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Ak(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?Ti.resolve(e):lI()?Ti.join(aI(),"kynver","state","heavy-verification"):Ti.join(ei(),"heavy-verification")}function _o(){return Ti.join(Ak(),"slots")}function ln(){let e=_o();return iI(e,{recursive:!0}),e}var cn=120*6e4,Cc=1;function fI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Eo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function Po(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?fI(e,Cc):Cc}function gI(e){return`slot-${e}`}function Ok(e,r=_o()){return _c.join(r,`${e}.json`)}function Pc(e){if(!wc(e))return null;try{let r=JSON.parse(pI(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 Di(e,r=cn){if(!e||!H(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function hI(e,r){let t=Pc(e);if(Di(t,r))try{xc(e)}catch{}}function kI(e){return uI(e,{recursive:!0}),e}function Ui(e={}){let r=kI(e.slotsDir??ln()),t=e.staleMs??cn,n=0;for(let o of Ik(r)){if(!o.endsWith(".json"))continue;let s=_c.join(r,o),i=wc(s);hI(s,t),i&&!wc(s)&&(n+=1)}return n}function Nk(e={}){let r=e.slotsDir??ln(),t=e.staleMs??cn;Ui({slotsDir:r,staleMs:t});let n=[];for(let o of Ik(r)){if(!o.endsWith(".json"))continue;let s=Pc(_c.join(r,o));s&&!Di(s,t)&&n.push(s)}return n}function Mi(e={}){return Nk(e).length}function un(e,r={}){if(Eo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Po(),reason:null};let t=r.slotsDir??ln(),n=r.staleMs??cn,o=r.maxSlots??Po();Ui({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=gI(i),l=Ok(a,t),c=Pc(l);if(c&&Di(c,n))try{xc(l)}catch{}else if(c&&!Di(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=dI(l,"wx");mI(d,JSON.stringify(u,null,2),"utf8"),cI(d);let f=Mi({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=Mi({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function Ao(e,r={}){if(!e)return;let t=Ok(e,r.slotsDir??_o());try{xc(t)}catch{}}function Io(e,r={}){if(Eo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Po(),reason:null};let t=r.slotsDir??ln(),n=r.staleMs??cn,o=r.maxSlots??Po();Ui({slotsDir:t,staleMs:n});let s=Mi({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 yI}from"node:child_process";function RI(e){e<=0||yI(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=un(e,n);for(;!s.admitted&&Date.now()<o;)RI(Math.min(t,o-Date.now())),s=un(e,n);return s}var bI=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,vI=/\b(npm run build\b|next build\b)\b/i,SI=/\b(vercel (build|deploy|--prod))\b/i,wI=/\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?wI.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:SI.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:vI.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:bI.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 Wi="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:{...Io(e),slotId:null}};if(Eo())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Io(e),slotId:null}};let n=r.waitMs??0,o=n>0?Ec(e,n,r.pollMs):un(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Wi,commandClass:t.commandClass,reason:t.reason??o.reason??Wi,verificationGate:o}}xe();import Oc from"node:path";function CI(e){let r=br(be()),t=Oc.relative(r,Oc.resolve(e));return t.length>0&&!t.startsWith("..")&&!Oc.isAbsolute(t)}function Tk(e){return CI(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}}is();function _I(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Dk(e,r){let t=xI(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:sn(),admission:an(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?Sc(r):an();if(!s.admitted)return Ao(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:sn(),admission:s,verificationGate:n,command:e.command};let i=Tk(e.cwd);if(!i.ok)return Ao(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:sn(),admission:s,verificationGate:n,command:e.command};let a=kc({...process.env,...e.env}),l=sn(),c=Tn();bc();try{let u;if(c){let d=pa({cwd:e.cwd,command:["/usr/bin/env",..._I(a),"/bin/bash","-lc",e.command]});u=Dk(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=Dk([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(),Ao(o)}}var Tc=["npm run typecheck","npm run test"];function Bi(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 Mk(e){let r=e.indexOf(":");if(r<=0)throw new Error(`invalid --evidence ${e} (expected type:value)`);return{type:e.slice(0,r),value:e.slice(r+1)}}async function Uk(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(Mk(String(S)));else typeof i=="string"&&s.push(Mk(i));let a=V(e.baseUrl?String(e.baseUrl):void 0),l=await J(e.secret?String(e.secret):void 0,t,{baseUrl:a}),c=`${a}/api/agent-os/by-id/${encodeURIComponent(t)}/plans/${encodeURIComponent(r)}/progress-events`,u=b(),f=`provider:${Es(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 EI(e){let r=T(e.worktree?String(e.worktree):void 0,"worktree"),t=PI.resolve(r),n=Bi(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 Wk(e){let r=T(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){EI(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 AI from"node:path";C();function Bk(e){let r=AI.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=Bi(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(`
52
- `)[0]}`)}process.exit(s.passed?0:1)}N();import{readFileSync as II}from"node:fs";C();var OI=["create","add_version","update_metadata"],NI=["approval_guard","auth","network","server","tool_interruption"];function TI(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:II(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 Lk(e){let r=T(e.operation?String(e.operation):void 0,"operation");if(!OI.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=b(),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}=TI(e);a&&uo(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:DI(e)},c=await mo(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function DI(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!NI.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 Hk(){let e=zt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Fk(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await vl({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function $k(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=rc({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)}yn();function Kk(e){let r=e.execute===!0||e.execute==="true",t=e.json===!0||e.json==="true",n=e["purge-all"]===!0||e["purge-all"]==="true",o=e["keep-newest"]?Number(e["keep-newest"]):void 0;if(r||n){let a=mi({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=yr(),i=s?{...s,dumps:s.dumps.map(a=>({name:a.name,bytes:a.bytes,executableHint:a.executableHint,mtimeMs:a.mtimeMs}))}:{skipped:!0,reason:"not_wsl"};console.log(JSON.stringify(i,null,t?2:0))}function pr(e,r=2400){if(e==null)return;let n=(typeof e=="string"?e:JSON.stringify(e,null,2)).trim();if(n)return n.length<=r?n:`${n.slice(0,r-1).trimEnd()}\u2026`}function Li(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(`
53
- `),diagnostic:pr(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(`
54
- `),diagnostic:pr(e)}}import jI from"node:path";D();X();C();X();C();function jk(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>Pt?{health:"stale",reason:`heartbeat older than ${Math.floor(Pt/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 Vk,mkdirSync as FI,readdirSync as $I,unlinkSync as KI}from"node:fs";import Dc from"node:path";function Gk(){let{harnessRoot:e}=Rt(),r=Dc.join(e,"monitors");return FI(r,{recursive:!0}),r}function dn(e,r){return r?`${v(e)}--${v(r)}`:v(e)}function Mc(e){return Dc.join(Gk(),`${e}.json`)}function pn(e){return x(Mc(e),void 0)}function mn(e){se(Mc(e.monitorId),e)}function Yk(e){let r=Mc(e);return Vk(r)?(KI(r),!0):!1}function Jk(){let e=Gk();if(!Vk(e))return[];let r=[];for(let t of $I(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"),Ls(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"),Et(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 qk(e,r){return x(jI.join(E(e),"workers",v(r),"worker.json"),void 0)}function zk(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 Xk(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=jk({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 Oo(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=zk(r,t),i=[];for(let p of s){let g=qk(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 Vt({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>Xk(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Ms(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 Gt({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 Qk(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=zk(r,t),o=[];for(let s of n){let i=qk(r,s);i&&o.push(Xk(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Wc(){return Jk()}function Zk(e){let r=String(e.run||"");T(r,"--run");let t=dn(r,e.name?String(e.name):void 0),n=pn(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(),mn(n),Yk(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 Gt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}C();var VI=5e3,GI=360*60*1e3;async function ey(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):VI,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):GI,o=Date.now();for(;Date.now()-o<=n;){let s=r?pn(r):void 0;if(s?.stoppedAt)break;let i=await Oo({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Li({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(),mn(s));break}Tr(t)}}C();xe();import{spawn as YI}from"node:child_process";import{closeSync as ry,existsSync as JI,openSync as qI}from"node:fs";import zI from"node:path";function ty(e){let r=e.nodeExecutable??process.execPath,t=qs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!JI(n))return;let o=dn(e.runId,e.workerName),{harnessRoot:s}=Rt(),i=zI.join(s,"monitors",`${o}.log`),a;try{a=qI(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=YI(t.command,c,pe({detached:!0,stdio:u,env:process.env}));a!==void 0&&ry(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 mn(f),{monitorId:o,pid:d.pid,logPath:i,session:f}}catch{if(a!==void 0)try{ry(a)}catch{}return}}C();async function ny(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=dn(r,t),o=pn(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=ty({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 oy(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Oo({...e,autoComplete:!1}):Qk(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Wc()},null,2))}function sy(e){console.log(JSON.stringify(Zk(e),null,2))}function iy(){console.log(JSON.stringify({monitors:Wc()},null,2))}async function ay(e){await ey(e)}async function ly(e){let r=await Oo(e);console.log(JSON.stringify(r,null,2))}import{existsSync as XI,readFileSync as QI}from"node:fs";import{dirname as Lc,join as uy}from"node:path";import{fileURLToPath as cy}from"node:url";function ZI(e){let r=Lc(cy(e));for(let t=0;t<6;t+=1){if(XI(uy(r,"package.json")))return r;let n=Lc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Lc(cy(e))}`)}function dy(e=import.meta.url){let r=uy(ZI(e),"package.json"),t=JSON.parse(QI(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Hi=dy();function eO(e){return e.some(r=>r==="--version"||r==="-v")}function rO(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function py(e,r=import.meta.url,t){return eO(e)?(rO(dy(r),t),!0):!1}function tO(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 nO(e={}){let[r,t]=await Promise.all([bi(),Promise.resolve(xh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Hi;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:tO(r),repo:t,self:n}}async function my(e={}){let r=await nO(e);return Ph(r)}function fy(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 oO(e){let r=e.trim();return r?xo().find(n=>n.name===r&&n.status!=="completed")??null:null}function gy(e){let r=String(T(String(e.name||""),"--name")),t=oO(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 sO from"node:path";function No(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function iO(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=sO.join(E(a.id),"workers",v(l),"worker.json"),u=x(c,void 0);if(!u){s.push(No(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(No(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(No(a.id,l,d,f,m,"completion already reported"));continue}let p=M(u);if(p.finalResult){s.push(No(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(No(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 hy(e){let r=await iO(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 xy from"node:path";He();N();import{accessSync as aO,constants as lO,existsSync as Hc,readFileSync as cO}from"node:fs";import{homedir as Fi}from"node:os";import $i from"node:path";import{spawnSync as uO}from"node:child_process";xe();function ky(e,r){try{let t=uO(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 yy(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function dO(e){if(!Hc(e))return!1;try{return aO(e,lO.W_OK),!0}catch{return!1}}var Ry={packageVersion:()=>Hi,commandOnPath:e=>ky(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>ky(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>$i.join(Fi(),".kynver","config.json"),credentialsFilePath:()=>$i.join(Fi(),".kynver","credentials"),readCredentials:()=>{let e=$i.join(Fi(),".kynver","credentials");if(!Hc(e))return{hasApiKey:!1};try{let r=JSON.parse(cO(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:yy(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:yy(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:bs(),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:()=>$i.join(Fi(),".openclaw","harness"),pathExists:e=>Hc(e),pathWritable:e=>dO(e)};function by(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function pO(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function vy(e){return!!e.openclawCronStorePath}function mO(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Sy(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(mO(e,r)&&!by(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(pO(e,r)&&!by(e,r)){if(vy(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(vy(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();Un();Wn();us();function wy(e,r={}){let t=Nt(),n=ps(e,t),o=[],s=r.envFilePath??ge,a=Br(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=ga();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=ma(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Un();Wn();function Cy(e){let r=e.loadConfig(),t=Nt(),n=ps(r,t),s=wy(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 fO(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 gO(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 hO(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?$n(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 kO(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 yO(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 RO(e){let r=e.harnessRoot(),t=xy.join(r,"runs"),n=xy.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 bO(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 vO(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},Sy(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 _y(e=Ry){let r=[gO(e),hO(e),kO(e),yO(e),RO(e),bO(e),Cy(e),vO(e)],t=fO(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 Py(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Kn();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=_y();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}N();async function Ey(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 xs(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 SO(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=SO()){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 Ay(e){return{...e,deploymentSchedulerProvider:"qstash"}}N();import wO from"node:path";import{homedir as CO}from"node:os";var Iy=wO.join(CO(),".kynver","config.json");function Oy(e=!1){let r=b(),t=Kc(r),n={...t,configPath:q(Iy),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
55
- `),console.log("Deployment (Vercel):");for(let o of Fc)console.log(` - ${o}`);console.log(`
56
- User runner:`);for(let o of $c)console.log(` - ${o}`);if(console.log(`
43
+ `),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 Pg(gi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
44
+ `),o}var EP=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function AP(e){return!EP.has(e.skipReason)||pr(e.indexed,e.now)?!1:Ig({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Og({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function IP(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(dr.has(r.run.status)||e.liveness&&rc(r,e.liveness)||e.liveness&&ie(Zl(r,e.liveness))&&!pr(r))?n:t}function OP(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:IP(e)}function NP(e,r){if(e.harnessRoot?.trim())return hi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${hi.sep}runs${hi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Ng(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=OP(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=Zl(r,e.liveness),u=NP(e,r),d=m=>u&&AP({indexed:r,harnessRoot:u,skipReason:m,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:m;if(xg(r,c)){let m=d("completion_blocked");if(m)return m}if(Ql(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(_g(r,e.liveness,a)||!ie(c))return"run_still_active";if(Eo(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:it(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 tc(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(hi.resolve(o))||r&&pr(r)?"active_worker":r&&Ql(r,e.gitStatusCache)?"dirty_worktree":null}function Tg(e){return tc(e)}var Dg=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Mg(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)Dg.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Dg.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Bg,readdirSync as Hg,statSync as MP}from"node:fs";import Fg from"node:path";D();_e();import Ug from"node:path";C();function DP(e,r){return fi(e,r)}function Wg(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of is(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(Ug.join(Cn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Ug.resolve(l.worktreePath);DP(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of mg(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Lg(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}C();function UP(e,r){try{let t=MP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function WP(e,r){let t=Fg.join(e,"runs",r,"run.json");return Bg(t)?_(t,null):null}function $g(e){try{return Hg(e).length===0}catch{return!1}}function Kg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Lg(n,r,t,i.liveRunKeys)||!$g(n))return"run_still_active";let a=WP(r,t);return a&&!dr.has(a.status)&&!ot(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function jg(e){if(!Bg(e.worktreesDir))return[];let r=[],t;try{t=Hg(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=Fg.join(e.worktreesDir,o);$g(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:UP(s,e.now)})}return r}we();import{existsSync as oc,rmSync as rh}from"node:fs";import{execFileSync as LP}from"node:child_process";import{existsSync as Vg,readdirSync as BP,statSync as HP}from"node:fs";import FP from"node:path";var $P=2500;function KP(e,r=$P){if(!Vg(e))return 0;try{let n=LP("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(!Vg(e))return 0;let t=KP(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=BP(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=FP.join(i,l),u;try{u=HP(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as YP,rmSync as JP}from"node:fs";_e();import{lstatSync as jP,readdirSync as VP}from"node:fs";function Gg(e){try{let r=jP(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 Yg(e,r=32){let t=Gg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=VP(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Gg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as GP}from"node:child_process";import zg from"node:path";import Ne from"node:path";function Jg(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 ki(e,r,t){return Jg(e,r,t,"node_modules")}function yi(e,r,t){return Jg(e,r,t,".next")}function Ri(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 qg(e,r,t){let n=Ne.resolve(e);return ki(n,r,t)===null||yi(n,r,t)===null||Ri(n,r,t)===null}function Qg(){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 Xg(e){let r=GP("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Zg(e,r,t){if(!qg(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=Xg(["chown","-R",`${n}:${o}`,zg.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Xg(["rm","-rf",zg.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 nc="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 qP(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function eh(e,r,t={}){if(!YP(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??JP,l=t.hasForeignOwnedEntry??Yg;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!qP(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Qg();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${nc}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let f=Zg(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}; ${nc}`}}}function sc(e){let r=e.harnessRoot;return!r||!ug(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function ic(e,r){let t=sc(e);if(t)return t;let n=eh(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function th(e,r){return ic(e,r)}function nh(e,r){return ic(e,r)}function oh(e,r){return ic(e,r)}function sh(e,r){let t=sc(e);if(t)return t;if(!oc(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 rh(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 ih(e,r){let t=sc(e);if(t)return t;if(!oc(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}),oc(e.path)&&rh(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 bi,readdirSync as vi,statSync as zP}from"node:fs";import Qe from"node:path";function ac(e,r){try{let t=zP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function lh(e,r){let t=Qe.relative(r,e);return t===""||!t.startsWith("..")&&!Qe.isAbsolute(t)}function ah(e,r,t,n){let o=[];for(let s of Xl){if(s===".next")continue;let i=Qe.join(e,s);if(!bi(i))continue;let a=Qe.resolve(i);t.has(a)||lh(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:ac(a,r.now)}))}return o}function ch(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...ah(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!bi(e.worktreesDir))return r;for(let n of vi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Qe.join(e.worktreesDir,n.name);for(let s of vi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Qe.join(o,s.name);r.push(...ah(i,e,t,{runId:n.name,worker:s.name}))}}return r}function uh(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;bi(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:ac(a,e.now)})))}if(!t||!bi(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 vi(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=vi(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)||lh(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:ac(u,e.now)}))}}return n}import{existsSync as mh,readdirSync as dh,statSync as XP}from"node:fs";import tn from"node:path";var QP=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function ZP(e,r){try{let t=XP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function eE(e,r){let t=tn.relative(r,e);return t===""||!t.startsWith("..")&&!tn.isAbsolute(t)}function rE(e,r,t,n,o,s){if(!mh(n))return;let i=tn.resolve(n);r.has(i)||eE(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:ZP(i,t.now)}))}function ph(e,r,t,n,o){for(let s of QP)rE(e,r,t,tn.join(n,s.dirName),s.kind,o)}function fh(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||ph(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!mh(e.worktreesDir))return r;for(let n of dh(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=dh(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=tn.join(o,i.name);ph(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as gh,statSync as tE}from"node:fs";import Ze from"node:path";function nE(e,r){try{let t=tE(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function oE(e){let r=[],t=null;for(let n of e.split(`
45
+ `)){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 sE(e,r){let t=Ze.relative(Ze.resolve(r),Ze.resolve(e));return t!==""&&!t.startsWith("..")&&!Ze.isAbsolute(t)}var iE=200;function hh(e){if(!e.includeOrphans||!gh(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=oE(a);for(let c of l){if(i>=iE)break;let u=Ze.resolve(c.path);if(u===Ze.resolve(s)||!sE(u,e.worktreesDir)||t.has(u)||o.has(u)||!gh(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:nE(u,e.now)})}}return n}D();C();import Io from"node:path";function kh(e,r){let t=Io.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Io.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function yh(e){let r=new Map;for(let t of is(e))for(let n of Object.keys(t.workers||{})){let o=Io.join(Cn(e,t.id),"workers",v(n),"worker.json"),s=_(o,void 0);s?.worktreePath&&r.set(Io.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Io.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Oo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function at(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function uc(e={}){let r=e.execute===!0||e.execute!==!1&&Oo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Oo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??at("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??at("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??at("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??at("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??at("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Oo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Oo("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&&!Oo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),f=at("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),m=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&f>0?f:null,g=at("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 Sh(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 uc({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 dc,statSync as aE}from"node:fs";import Si from"node:path";C();var lE=1800*1e3;function wh(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??lE;if(!dc(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Si.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=_(Si.join(c,"worker.json"),void 0);if(u&&ec(u,r,t))return"active_worker";if(!u){let d=Si.join(c,"heartbeat.jsonl");if(dc(d))try{let p=r-aE(d).mtimeMs;if(Number.isFinite(p)&&p>=0&&p<t)return"active_worker"}catch{}}}let n=Si.join(e.worktreePath,".git");if(!dc(n))return null;let o=oe(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
46
+ `).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 cE,readdirSync as Ch,statSync as uE}from"node:fs";import dE from"node:path";function _h(e={}){let r=ce(e.harnessRoot??be()),t=Sr(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!cE(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=Ch(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=dE.join(t,u.name);try{let p=uE(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of Ch(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 pE}from"node:fs";import{homedir as mE}from"node:os";import xh from"node:path";var fE=["/var/tmp/kynver-harness",xh.join(mE(),".openclaw","harness")];function pc(e,r,t){if(!t?.trim())return;let n=ce(t.trim());e.has(n)||(e.add(n),r.push(n))}function gE(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 Ph(e={}){let r=new Set,t=[];pc(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??[])pc(r,t,o);if(gE(e))for(let o of fE){let s=xh.resolve(o);!r.has(s)&&pE(s)&&pc(r,t,s)}return t}wn();function hE(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function kE(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Eh(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=kE("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Ve({...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 Ah(e,r){if(!r.pressured)return e;let t=e.execute||!hE("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 yE}from"node:fs";function wi(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Ih(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function RE(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function Ci(e={}){let r=e.execute===!0||wi("KYNVER_WSL_CRASH_DUMP_EXECUTE")||wi("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||wi("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Ih("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=RE(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{yE(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 Oh(e){return e?wi("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Ih("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 _i=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 bE}from"node:child_process";import{existsSync as vE}from"node:fs";import SE from"node:path";var wE=5e3;function CE(e,r){if(!vE(SE.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=bE("git",r,{cwd:e,encoding:"utf8",timeout:wE}),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 Nh(e){let r=CE(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
47
+ `).map(t=>t.trim()).filter(Boolean)}var xi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Nh(t)??[];return this.cache.set(t,o),o}};var Pi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=ot(r);return this.cache.set(r.id,n),n}};function _E(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Th(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:_E(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 xE(e={}){let r=e.harnessRoot?ce(e.harnessRoot):be(),t=Ph({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function PE(e){return typeof e=="string"?{reason:e}:e}function nn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Ei(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:mr(e.path,t)}}function Dh(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 EE(e,r){return e.kind==="remove_next_cache"?nh(e,r):th(e,r)}function AE(e,r,t){return e.kind==="remove_next_cache"?yi(e.path,r,t):ki(e.path,r,t)}function IE(e){let r=new Map;for(let t of e)for(let[n,o]of yh(t))r.set(n,o);return r}function Mh(e,r){return e.runId&&e.worker?De.join(r,e.runId,e.worker):De.resolve(e.path,"..")}function mc(e={}){let r=uc(e),t=Eh();r=Ah(r,t);let n=xE(e);Te("scan",`${n.scanRoots.length} harness root(s)`);let o=Wg(n.scanRoots,n.now),s=r.finalizeStaleRuns?Co().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=IE(n.scanRoots);Te("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Pi,gitStatusCache:new xi,gitRevCache:new _i},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=kh(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?fh(Z):[];Te("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${I}`:"skipped (worktree-only sweep)");let mt=0;for(let ke of gr){if(p())break;mt+=1,mt%50===0&&Te("dependency",`${mt}/${gr.length} evaluated`);let Y=De.resolve(ke.path);if(u.has(Y))continue;u.add(Y);let W={...ke,path:Y},ye=AE(W,I,H);if(ye){nn(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=Mh(W,H),hr=Mr.get(De.resolve(ve))??null,Se=tc({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(EE(Ei(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let ke of ch(Z)){if(p())break;let Y=De.resolve(ke.path);if(u.has(Y))continue;u.add(Y);let W={...ke,path:Y},ye=Ri(W.path,I,H);if(ye){nn(l,W.path,ye),c.push({...W,executed:!1,skipped:!0,skipReason:ye});continue}let ve=Mh(W,H),hr=Mr.get(De.resolve(ve))??null,Se=Tg({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(oh(Ei(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Fe=[...uh(Z),...hh(Z)];Te("worktrees",`${Fe.length} candidate(s) at ${I}`);let ft=new Set,$e=0;for(let ke of Fe){if(p())break;$e+=1,$e%50===0&&Te("worktrees",`${$e}/${Fe.length} evaluated`);let Y=De.resolve(ke.path);if(ft.has(Y))continue;ft.add(Y);let W={...ke,path:Y},ye=Mr.get(De.resolve(W.path))??null,ve=ye?null:wh({worktreePath:W.path,harnessRoot:I,runId:W.runId,workerName:W.worker,now:n.now}),hr=Ng({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:jo}=PE(hr);nn(l,W.path,Se,jo),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(ih(Ei(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let ke of jg({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=Kg({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(sh(Ei(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?_h({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,P=br(),x=r.execute&&Oh(P),A=x?Ci({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=Mg(c,l),j=Th({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:Dh(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:Dh(c,l)},...S?{storage:S}:{},...V.length>0?{preservedLivePaths:V}:{},...m>0?{removedRunDirectories:m}:{},...J?{wslCrashDumps:J}:{},compactSummary:j}}function Uh(e){let r=Sh(e);return mc({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Wh(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as BE}from"node:fs/promises";import{homedir as HE}from"node:os";import lt from"node:path";ts();import{existsSync as Lh,readFileSync as OE}from"node:fs";import Ai from"node:path";var Hh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Fh=Object.keys(Hh),fc={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},NE={"@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 Ii(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 $h(e,r){return Ii(e,r)>=0}function TE(e){let r=null;for(let t of e)(!r||Ii(t,r)>0)&&(r=t);return r}function DE(e){try{let r=JSON.parse(OE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function ME(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=Ai.resolve(o);if(Lh(Ai.join(s,"packages/kynver-runtime/package.json"))&&Lh(Ai.join(s,"package.json")))return s}return bt({cwd:e})?.repo??null}function Kh(e={}){let r=e.cwd??process.cwd(),t=ME(r,e.repoRoot);if(!t)return{};let n={};for(let o of Fh){let s=Ai.join(t,NE[o]),i=DE(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function UE(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function WE(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&$h(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${UE(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 LE(e){if(e.length===0)return{version:null,source:"unknown"};let r=TE(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 jh(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=Fh.map(i=>{let a=Hh[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}=LE(l),m=u?.version??null,g=p?$h(p,a):!1,k=g?[]:WE({packageName:i,minimumVersion:a,effectiveVersion:p,effectiveSource:f,repoVersion:m}),h=g?`${fc[i]} ${p} meets memory-cost minimum ${a} (${f}).`:`${fc[i]} is below memory-cost minimum ${a}`+(p?` (effective ${p} via ${f})`:" (no version detected)")+".";return{packageName:i,displayName:fc[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 gc=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(`
48
+ `)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Vh(e={}){let r=jh(e);if(!r.ok)throw new gc(r);return r}var FE=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function on(e){let r=e?.trim();return r||null}function $E(e){return[...new Set(e.filter(r=>!!r))]}function KE(){let e=HE(),r=on(process.env.KYNVER_OPENCLAW_NPM_ROOT)??on(process.env.OPENCLAW_NPM_ROOT)??lt.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)?lt.join(on(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):lt.join(e,".npm-global","lib","node_modules"));return $E([lt.join(r,"lib","node_modules"),lt.join(r,"node_modules"),t.endsWith("node_modules")?t:lt.join(t,"lib","node_modules")])}async function jE(e){try{let r=JSON.parse(await BE(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function VE(e){let r=KE(),t=new Set,n=[];for(let o of r){let s=lt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Oi(e=new Date().toISOString()){let r={};for(let t of FE){let n=null;for(let o of VE(t)){let s=await jE(o);s&&(!n||Ii(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 GE}from"node:child_process";var YE=1e4,JE=4*1024*1024,Gh=(e,r,t)=>{try{let n=GE(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??YE,maxBuffer:JE});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 Ni(e,r,t){return`${e} ${r} ${t}`}function No(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 Yh(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 qE=8e3,zE=30,XE=100,QE=400,ZE=3600*1e3,hc=0;function yc(){return Date.now()<hc}function eA(e){let r=`${e.stdout}
49
+ ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Jh(e){eA(e)&&(hc=Math.max(hc,Date.now()+ZE))}function kc(e,r){if(yc())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Jh(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function rA(e,r,t,n){if(yc())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Jh(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Rc(e){return yc()?!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 tA(e){return Array.isArray(e)?e.map(r=>sn(r)).filter(r=>r!==null).slice(0,zE).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function nA(e,r,t){let n=kc(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:tA(n.statuses)}:null}var qh={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Rc,collect(e,r){let t=Yh(e);if(!t)return null;let n=rA(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,qE):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,QE):[];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}}},zh={provider:"github",kind:"commit_status",version:"1",isAvailable:Rc,collect(e,r){let t=No(e);return t?nA(r,t.repo,t.sha):null}},Xh={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Rc,collect(e,r){let t=No(e);if(!t)return null;let n=kc(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=kc(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 oA=5,sA=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,iA=/https:\/\/[^\s]+/,Qh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=No(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(`
50
+ `)){let i=s.match(iA)?.[0];if(!i)continue;let a=s.match(sA)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=oA)break}return{found:o.length>0,deployments:o}}};var bc=[];function Ti(e){bc.some(r=>r.provider===e.provider&&r.kind===e.kind)||bc.push(e)}function Zh(e,r){return bc.find(t=>t.provider===e&&t.kind===r)??null}function ek(){Ti(qh),Ti(zh),Ti(Xh),Ti(Qh)}var aA=1,lA=25e3;function rk(e,r={}){ek();let t=r.run??Gh,n=r.now??(()=>new Date),o=r.maxSubjects??aA,s=Date.now()+(r.deadlineMs??lA),i=new Set,a=e.filter(f=>{let m=Ni(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=Ni(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=Zh(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 mA from"node:path";D();C();import tk from"node:path";var cA="provider-evidence-wanted.json",uA="provider-evidence-cache.json",dA=600*1e3;function nk(e){return tk.join(E(e),cA)}function pA(e){return tk.join(E(e),uA)}function ok(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 sk(e){let r=_(nk(e),null);return ok(r?.wanted)}function ik(e,r){se(nk(e),{savedAt:new Date().toISOString(),wanted:r})}function ak(e,r={}){let t=r.ttlMs??dA,n=pA(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 lk(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?ok(r):null}var fA="provider-evidence-shared-cache.json",gA=6e4,hA=1,kA=1;function vc(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 yA(){return mA.join(ee().harnessRoot,fA)}function RA(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?hA:kA;return vc(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,vc("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function ck(){return vc("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",gA)}function bA(e){return Math.floor(e.getTime()/6e4)*6e4}function vA(e){return`${e.provider}:${e.kind}`}function uk(e,r={}){let t=ak(e,{ttlMs:r.ttlMs??ck()}),n=r.file??yA(),o=_(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??ck(),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=RA(u.provider);if(f===0)return!0;let m=vA(u),g=bA(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 wA(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function CA(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=_(SA.join(E(t.id),"workers",v(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Dt(a))continue;if(Qr(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 go({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 _A(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 Oi(),c=Ds(r),u=null;try{let g=sk(r);if(g.length>0){let k=uk(r);u=rk(g,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=Ts(r),p=await Gr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:ko(r),resourceGate:t,boxResourceSnapshot:mi(t,{harnessRunId:r,boxKind:je(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=lk(p.response);if(f)try{ik(r,f)}catch{}let m=Cp(p);if(m)try{wp(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 Sc(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";ko(r);let o=await wg(t,e),s=Sg(o),i=sr({runId:r,configuredMaxWorkersOverride:s}),a=Wh()?Uh(r):void 0,l=await _A(t,r,i,e,a),c=Jm(r,l),u=await Vs(r,e),d=await CA(r,e),p=sr({runId:r,configuredMaxWorkersOverride:s}),f=xo(),m=await vg(r,e),g=sg(p,l),k=g.maxStarts,h=wA()?await Po({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},R=null,S=0,P=og(l),x=k;if(n&&x>0&&P.length>0){let J=Math.min(x,P.length),V=await Hl({...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 Hl({...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 jA from"node:os";import{readFileSync as xA}from"node:fs";import{homedir as PA,platform as EA}from"node:os";import AA from"node:path";import{execFileSync as IA}from"node:child_process";function dk(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 OA(){if(EA()==="darwin")try{let e=IA("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return dk(e.trim())}catch{return null}try{let e=xA(AA.join(PA(),".claude",".credentials.json"),"utf8");return dk(e)}catch{return null}}function pk(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=OA();if(s)return{kind:"oauth",token:s}}return null}var NA="You are Claude Code, Anthropic's official CLI for Claude.";function TA(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function DA(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 MA(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*UA(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(`
51
+ `))!==-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 WA(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function mk(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:NA},{type:"text",text:n.system}]);let i=await fetch(`${WA()}/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=TA();for await(let l of UA(i.body)){let c=DA(a,l);c&&e.onDelta(c)}return MA(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 FA}from"node:child_process";var LA=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),BA=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),HA=["--secret","--api-key","--keeper-child"];function fk(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(HA.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
52
+ `)||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")}:LA.has(t)?{ok:!0,mutating:!1}:BA.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var $A=10*6e4,KA=5e3,gk=2e5;async function hk(e,r,t={}){let n=fk(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??$A,i=new an(r);return new Promise(a=>{let l=0,c=!1,u=FA(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=f=>{if(l>=gk)return;let m=f.toString("utf8").slice(0,gk-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"),KA).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 VA=25e3,GA=32e3,YA=5e3,JA=6e4,kk=5*6e4,qA=5e3,zA="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(),qA);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 yk(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:jA.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||zA,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function QA(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),GA),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:VA}),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 ct(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 ZA(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await hk(n,s=>{ct(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await ct(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await ct(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 eI(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||ct(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new an(s),a=pk(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await ct(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await mk({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await ct(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 ct(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 wc(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Rk(e){let r=await yk();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:kk}));!r&&!e.shouldStop();){if(!Q()||!y().agentOsId?.trim()||(await wc(kk,e.shouldStop),e.shouldStop()))return;r=await yk()}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 QA(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await wc(JA,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await ZA(r,t):await eI(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await wc(YA,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var rI=6e4,tI=5*6e4,nI=10,oI=250;async function Cc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(oI,t);await yr(n),t-=n}}async function Di(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)):rI,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=tp(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=Rk({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{op({agentOsId:n,runId:t,instructionBundleVersion:jr()});let f=await Ia(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 Cc(s,()=>i);continue}p&&(p=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:n}))),await ep({agentOsId:n,baseUrl:Ed(e.baseUrl?String(e.baseUrl):void 0),secret:f.secret});let m=await Sc({run:t,agentOsId:n,execute:o,...e});if(console.error(JSON.stringify({event:"daemon_tick",...m})),u.tickEnabled){let R=Ts(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",nI)),k=Math.floor(Ft("daemon.idleIntervalMs",tI)),h=a>=g?k:s;await Cc(h,()=>i)}catch(f){console.error(JSON.stringify({event:"daemon_tick_error",error:f.message})),await Cc(s,()=>i)}await d,console.error(JSON.stringify({event:"daemon_stop",runId:t,agentOsId:n}))}N();import{spawn as sI}from"node:child_process";C();var iI=15*6e4,bk=2*6e4,vk=1e4,aI=5e3,lI=5*6e4,cI=30*6e4,Sk=5e3;function uI(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:iI}function Mi(e,r=process.env){if(e.keeperChild===!0||e.keeperChild==="true"||e.noSupervise===!0||e.noSupervise==="true"||e.supervised==="false")return!1;let t=(r.KYNVER_DAEMON_SUPERVISED??"").trim().toLowerCase();return!(t==="0"||t==="false"||t==="no"||t==="off")}function dI(e,r=aI,t=lI){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function pI(e,r,t=cI){return r-e>=t}function ut(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function mI(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 Ui(e,r=process.argv.slice(2)){let t=String(T(String(e.agentOsId||y().agentOsId||""),"--agent-os-id")),n=uI(e.stallMs),o=mI(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,ut("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),ut("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,p=null,f=null;for(a=sI(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),ut("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,p=k,f=h});!d&&!i&&(await yr(Sk),!(d||i));){if(Date.now()-u<bk)continue;let k=sp(t),h=k&&k.pid===a.pid?k:null;if(h&&ip(h,n)){ut("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await yr(vk),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+bk){ut("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await yr(vk),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await yr(Sk);if(i)break;let m=Date.now();pI(u,m)&&(l=0),l+=1;let g=dI(l);ut("child_exited",{code:p,signal:f,uptimeMs:m-u,consecutiveFailures:l,respawnInMs:g}),await yr(g)}ut("stopped",{agentOsId:t})}we();D();import{existsSync as vI,mkdirSync as SI}from"node:fs";import wI from"node:path";D();Br();import{existsSync as fI,readFileSync as gI}from"node:fs";import wk from"node:path";X();C();function hI(e){if(!e||!fI(e))return 0;try{return gI(e,"utf8").trim().length}catch{return 0}}function kI(e,r){let t=wk.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=hI(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 yI(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 RI(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 bI(e){let r=0;for(let t of fe(e)){let n=wk.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 To(){return xo(),z().map(e=>{let t=fe(e).map(d=>kI(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}=RI(t),c=bI(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:yI({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Ck(){console.log(JSON.stringify(To(),null,2))}C();function CI(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 Wi(e){let r=of(CI(e));wu(r);let t=e.id?ni(String(e.id)):yu(String(e.name||"run")),n=E(t);vI(n)&&_I(`run already exists: ${t}`),SI(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(wI.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 _k(){Ck()}function _I(e){console.error(e),process.exit(1)}D();import{existsSync as Bi}from"node:fs";async function Li(e=lr()){let r=await Vr(e.storePath).catch(()=>[]),t=await Ns(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=Is(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 xI}from"node:os";import PI from"node:path";Ge();var Dr="watchdog:board-sweep",EI="*/5 * * * *",AI=["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 xk(e){let r=e.storePath?.trim()||xr(),t=e.envFilePath?.trim()||ge,n=PI.join(xI(),".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:AI,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:EI,dedupeKey:Dr,callbackPath:o}}}Ge();async function ln(e){let r=e.envFilePath??ge,t=[],n=lr(),o=await Li(n),s=$r(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:Bi(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Bi(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:Bi(n.storePath),summary:Bi(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 Vr(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 Uk}from"node:fs";import{createHash as II}from"node:crypto";function Pk(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:${II("sha1").update(r).digest("hex").slice(0,16)}`}async function _c(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function Ek(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await _c(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 Ak(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 _c(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 Ik(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await _c(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 Ok(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 Nk(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Dr&&r.provider==="qstash"&&r.status!=="cancelled")}function OI(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Dr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function Tk(e){return OI(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`."}}Ge();Ge();import{randomBytes as NI}from"node:crypto";function TI(){return NI(32).toString("base64url")}function Dk(e=ge){let r=Da();if(r)return{secret:r,generated:!1,source:"env"};let n=$r(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:TI(),generated:!0,source:"generated"}}ys();bs();D();function Mk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=ee().runsDir;return Uk(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Hi(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=Dk(),i=xk({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=hs(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=Mk(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 yp(i.storePath);l.storeInitialized=p.created||Uk(i.storePath);let f=Q();if(f)try{let m=await Kr(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 Ak(n,o,f,void 0,{requireProvider:"kynver-cron"}),g=Ok(o,m.requestedCron,m.dedupeKey),k={providerScheduleId:Pk(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await kp(k,i.storePath),l.watchdog={remoteJobId:m.job.id,provider:m.selectedProvider??m.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await Ek(n,o,f),R=Nk(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=Tk(h);if(!x.allowed)a.push(x.reason);else for(let A of R)await Ik(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=Mk({...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=Rs({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 DI=["deployment_provider","cron_secret","env_file","cron_store"];function Wk(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function MI(e){let r=Wk(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Wk(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function UI(e){if(!MI(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await ln({config:e})).checks.filter(n=>DI.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function WI(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 xc(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Lk(e){if(xc(e.args.skipCron))return{action:"skipped"};let r=await UI(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=xc(e.args.installSystemd)||xc(e.args["install-systemd"]),n=await Hi({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 WI(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}N();Pe();bn();function Bk(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}}bs();ys();N();Ge();Hn();vs();Fn();D();async function Hk(e){let r=Ss(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=Rs({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 Fk(e){return e.action==="systemd_installed"}function $k(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 BI(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 Kk(e){$t();let r=y();(!Q()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await Es(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(xs(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=Bk(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=BI(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=Wi({...e,repo:o,name:"agent"}).runId),await Lk({config:r,agentOsId:t,runId:i,args:e});let a=await Hk({config:y(),agentOsId:t,runId:i,args:e});if(Fk(a)){console.log("");for(let c of $k())console.log(` ${c}`);console.log("");return}console.log(""),console.log(` ${LI.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${o}`),console.log(` run: ${i}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let l={...e,run:i,agentOsId:t};if(Mi(l)){await Ui(l,HI(i,t,e));return}await Di(l)}function HI(e,r,t){if(!Kn(r).ok)throw new Error(xs(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 FI,rmSync as $I}from"node:fs";import Pc from"node:path";function KI(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function jI(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function VI(e){let{runId:r,workerName:t}=ze(e),n=ue(r,t),o=[...jI(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Pc.resolve(n.worktreePath),i=[];for(let c of o){let u=KI(c),d=Pc.resolve(s,u);if(!d.startsWith(s+Pc.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!FI(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};$I(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 jk(e){let r=VI(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}N();import RO from"node:path";Mn();ns();Mn();var GI=/--max-old-space-size=(\d+)/;function YI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ec(){return YI(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Ac(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(GI.test(t))return r;let o=`--max-old-space-size=${Ec()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function cn(e=Ec()){return`--max-old-space-size=${e}`}ks();N();Mn();ns();import{spawnSync as JI}from"node:child_process";function $i(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Gk(e=y()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?$i(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?$i(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??$i(e.perWorkerMemBytes,1610612736),reserveBytes:t??$i(e.memReserveBytes,2147483648)}}var Ki=0;function Nc(){Ki+=1}function Tc(){Ki=Math.max(0,Ki-1)}function un(e={}){let r={...Gk(),...e},t=e.memAvailableBytes??vn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Ki,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function qI(e){e<=0||JI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Dc(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=un({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)qI(Math.min(r,n-Date.now())),o=un({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as hO}from"node:child_process";C();import{closeSync as ZI,existsSync as Mo,mkdirSync as eO,openSync as rO,readdirSync as Jk,readFileSync as tO,statSync as nO,unlinkSync as Uc,writeFileSync as oO}from"node:fs";import Wc from"node:path";import{mkdirSync as zI}from"node:fs";import{tmpdir as XI}from"node:os";import ji from"node:path";function QI(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Yk(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?ji.resolve(e):QI()?ji.join(XI(),"kynver","state","heavy-verification"):ji.join(ui(),"heavy-verification")}function Do(){return ji.join(Yk(),"slots")}function dn(){let e=Do();return zI(e,{recursive:!0}),e}var pn=120*6e4,Mc=1;function sO(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Wo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function Uo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?sO(e,Mc):Mc}function iO(e){return`slot-${e}`}function qk(e,r=Do()){return Wc.join(r,`${e}.json`)}function Lc(e){if(!Mo(e))return null;try{let r=JSON.parse(tO(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 zk(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 Xk(e,r){let t=Lc(e);if(t)return zk(t,r);if(!Mo(e))return!0;try{return Date.now()-nO(e).mtimeMs>r}catch{return!0}}function aO(e,r){if(Xk(e,r))try{Uc(e)}catch{}}function lO(e){return eO(e,{recursive:!0}),e}function Gi(e={}){let r=lO(e.slotsDir??dn()),t=e.staleMs??pn,n=0;for(let o of Jk(r)){if(!o.endsWith(".json"))continue;let s=Wc.join(r,o),i=Mo(s);aO(s,t),i&&!Mo(s)&&(n+=1)}return n}function Qk(e={}){let r=e.slotsDir??dn(),t=e.staleMs??pn;Gi({slotsDir:r,staleMs:t});let n=[];for(let o of Jk(r)){if(!o.endsWith(".json"))continue;let s=Lc(Wc.join(r,o));s&&!zk(s,t)&&n.push(s)}return n}function Vi(e={}){return Qk(e).length}function mn(e,r={}){if(Wo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Uo(),reason:null};let t=r.slotsDir??dn(),n=r.staleMs??pn,o=r.maxSlots??Uo();Gi({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=iO(i),l=qk(a,t),c=Lc(l);if(Xk(l,n))try{Uc(l)}catch{}else if(c||Mo(l))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=rO(l,"wx");oO(d,JSON.stringify(u,null,2),"utf8"),ZI(d);let p=Vi({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=Vi({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function Lo(e,r={}){if(!e)return;let t=qk(e,r.slotsDir??Do());try{Uc(t)}catch{}}function Bo(e,r={}){if(Wo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Uo(),reason:null};let t=r.slotsDir??dn(),n=r.staleMs??pn,o=r.maxSlots??Uo();Gi({slotsDir:t,staleMs:n});let s=Vi({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 cO}from"node:child_process";function uO(e){e<=0||cO(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Bc(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=mn(e,n);for(;!s.admitted&&Date.now()<o;)uO(Math.min(t,o-Date.now())),s=mn(e,n);return s}var dO=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,pO=/\b(npm run build\b|next build\b)\b/i,mO=/\b(vercel (build|deploy|--prod))\b/i,fO=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function Hc(e){let r=e.trim();return r?fO.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:mO.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:pO.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:dO.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 Yi="heavy_verification_token_required";function Fc(e,r={}){let t=Hc(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...Bo(e),slotId:null}};if(Wo())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Bo(e),slotId:null}};let n=r.waitMs??0,o=n>0?Bc(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:Yi,commandClass:t.commandClass,reason:t.reason??o.reason??Yi,verificationGate:o}}_e();import $c from"node:path";function gO(e){let r=Sr(be()),t=$c.relative(r,$c.resolve(e));return t.length>0&&!t.startsWith("..")&&!$c.isAbsolute(t)}function Zk(e){return gO(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}}ks();function kO(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}var yO=[/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 ey(e){return yO.some(r=>r.test(e))}function Kc(e,r){let t=hO(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 jc(e){let r=e.waitForAdmissionMs??6e5,t=Fc(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:cn(),admission:un(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?Dc(r):un();if(!s.admitted)return Lo(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=Zk(e.cwd);if(!i.ok)return Lo(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:cn(),admission:s,verificationGate:n,command:e.command};let a=Ac({...process.env,...e.env}),l=cn(),c=Wn();Nc();try{let u,d=c,p=!1;if(c){let f=va({cwd:e.cwd,command:["/usr/bin/env",...kO(a),"/bin/bash","-lc",e.command]});u=Kc(f,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs}),u.exitCode!==0&&ey(u.stderr)&&(u=Kc([e.command],{cwd:e.cwd,env:a,shell:!0,timeoutMs:e.timeoutMs}),d=!1,p=!0)}else u=Kc([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{Tc(),Lo(o)}}var Vc=["npm run typecheck","npm run test"];function Ji(e,r=Vc,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=jc({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 ry(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 ty(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(ry(String(S)));else typeof i=="string"&&s.push(ry(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:${Ls(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 bO(e){let r=T(e.worktree?String(e.worktree):void 0,"worktree"),t=RO.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)
53
+ `);let i=Ji(t,void 0,{timeoutMs:o,waitForAdmissionMs:s,onBeforeCommand:n?void 0:(l,c,u)=>process.stderr.write(` [${c+1}/${u}] running: ${l}
54
+ `)}),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 ny(e){let r=T(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){bO(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 vO from"node:path";C();function oy(e){let r=vO.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=Ji(r,n.length?n:Vc,{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(`
55
+ `)[0]}`)}process.exit(s.passed?0:1)}N();import{readFileSync as SO}from"node:fs";C();var wO=["create","add_version","update_metadata"],CO=["approval_guard","auth","network","server","tool_interruption"];function _O(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:SO(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 sy(e){let r=T(e.operation?String(e.operation):void 0,"operation");if(!wO.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}=_O(e);a&&Ro(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:xO(e)},c=await vo(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function xO(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!CO.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 iy(){let e=Zt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function ay(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await Tl({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function ly(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=mc({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 cy(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=Ci({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 qi(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(`
56
+ `),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(`
57
+ `),diagnostic:fr(e)}}import UO from"node:path";D();X();C();X();C();function uy(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!rl(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 dy,mkdirSync as TO,readdirSync as DO,unlinkSync as MO}from"node:fs";import Gc from"node:path";function py(){let{harnessRoot:e}=Ct(),r=Gc.join(e,"monitors");return TO(r,{recursive:!0}),r}function fn(e,r){return r?`${v(e)}--${v(r)}`:v(e)}function Yc(e){return Gc.join(py(),`${e}.json`)}function gn(e){return _(Yc(e),void 0)}function hn(e){se(Yc(e.monitorId),e)}function my(e){let r=Yc(e);return dy(r)?(MO(r),!0):!1}function fy(){let e=py();if(!dy(e))return[];let r=[];for(let t of DO(e)){if(!t.endsWith(".json"))continue;let n=_(Gc.join(e,t),void 0);n?.monitorId&&r.push({monitorId:n.monitorId,runId:n.runId,workerName:n.workerName,agentOsId:n.agentOsId,pid:n.pid,alive:n.pid?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"),qs(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 gy(e,r){return _(UO.join(E(e),"workers",v(r),"worker.json"),void 0)}function hy(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 ky(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=uy({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 Ho(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=hy(r,t),i=[];for(let m of s){let g=gy(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=>ky(m,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Vs(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 yy(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=hy(r,t),o=[];for(let s of n){let i=gy(r,s);i&&o.push(ky(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function qc(){return fy()}function Ry(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),my(t),{monitorId:t,stopped:!0,pid:n.pid}}async function zc(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 WO=5e3,LO=360*60*1e3;async function by(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):WO,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):LO,o=Date.now();for(;Date.now()-o<=n;){let s=r?gn(r):void 0;if(s?.stoppedAt)break;let i=await Ho({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=qi({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}Wr(t)}}C();_e();import{spawn as BO}from"node:child_process";import{closeSync as vy,existsSync as HO,openSync as FO}from"node:fs";import $O from"node:path";function Sy(e){let r=e.nodeExecutable??process.execPath,t=si({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!HO(n))return;let o=fn(e.runId,e.workerName),{harnessRoot:s}=Ct(),i=$O.join(s,"monitors",`${o}.log`),a;try{a=FO(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=BO(t.command,c,pe({detached:!0,stdio:u,env:process.env}));a!==void 0&&vy(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{vy(a)}catch{}return}}C();async function wy(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=Sy({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 Cy(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Ho({...e,autoComplete:!1}):yy(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:qc()},null,2))}function _y(e){console.log(JSON.stringify(Ry(e),null,2))}function xy(){console.log(JSON.stringify({monitors:qc()},null,2))}async function Py(e){await by(e)}async function Ey(e){let r=await Ho(e);console.log(JSON.stringify(r,null,2))}import{existsSync as KO,readFileSync as jO}from"node:fs";import{dirname as Xc,join as Iy}from"node:path";import{fileURLToPath as Ay}from"node:url";function VO(e){let r=Xc(Ay(e));for(let t=0;t<6;t+=1){if(KO(Iy(r,"package.json")))return r;let n=Xc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Xc(Ay(e))}`)}function Oy(e=import.meta.url){let r=Iy(VO(e),"package.json"),t=JSON.parse(jO(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var dt=Oy();function GO(e){return e.some(r=>r==="--version"||r==="-v")}function YO(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Ny(e,r=import.meta.url,t){return GO(e)?(YO(Oy(r),t),!0):!1}function JO(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 qO(e={}){let[r,t]=await Promise.all([Oi(),Promise.resolve(Kh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:dt;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:JO(r),repo:t,self:n}}async function Ty(e={}){let r=await qO(e);return Vh(r)}function Dy(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 zO(e){let r=e.trim();return r?To().find(n=>n.name===r&&n.status!=="completed")??null:null}function My(e){let r=String(T(String(e.name||""),"--name")),t=zO(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 Fo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function QO(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(Fo(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(Fo(a.id,l,d,p,f,"not a fully-leased dispatched worker"));continue}if(t&&p!==t)continue;if(u.completionReportedAt){s.push(Fo(a.id,l,d,p,f,"completion already reported"));continue}let m=M(u);if(m.finalResult){s.push(Fo(a.id,l,d,p,f,"has final result \u2014 let pipeline tick complete it"));continue}if(m.alive){s.push(Fo(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 Uy(e){let r=await QO(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 Vy from"node:path";Me();N();import{accessSync as ZO,constants as eN,existsSync as Qc,readFileSync as rN}from"node:fs";import{homedir as zi}from"node:os";import Xi from"node:path";import{spawnSync as tN}from"node:child_process";_e();function Wy(e,r){try{let t=tN(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 Ly(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function nN(e){if(!Qc(e))return!1;try{return ZO(e,eN.W_OK),!0}catch{return!1}}var By={packageVersion:()=>dt,commandOnPath:e=>Wy(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Wy(e,["--version"]),loadConfig:()=>y(),configFilePath:()=>Xi.join(zi(),".kynver","config.json"),credentialsFilePath:()=>Xi.join(zi(),".kynver","credentials"),readCredentials:()=>{let e=Xi.join(zi(),".kynver","credentials");if(!Qc(e))return{hasApiKey:!1};try{let r=JSON.parse(rN(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:Ly(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:Ly(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:Is(),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:()=>Xi.join(zi(),".openclaw","harness"),pathExists:e=>Qc(e),pathWritable:e=>nN(e)};function Hy(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function oN(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Fy(e){return!!e.openclawCronStorePath}function sN(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function $y(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(sN(e,r)&&!Hy(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(oN(e,r)&&!Hy(e,r)){if(Fy(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(Fy(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"}}}Ge();Hn();Fn();vs();function Ky(e,r={}){let t=Wt(),n=ws(e,t),o=[],s=r.envFilePath??ge,a=$r(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=Ca();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=Sa(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Hn();Fn();function jy(e){let r=e.loadConfig(),t=Wt(),n=ws(r,t),s=Ky(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 iN(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 aN(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 lN(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=$d(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 cN(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 uN(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 dN(e){let r=e.harnessRoot(),t=Vy.join(r,"runs"),n=Vy.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 pN(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 mN(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},$y(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 Gy(e=By){let r=[aN(e),lN(e),cN(e),uN(e),dN(e),pN(e),jy(e),mN(e)],t=iN(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 Yy(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=Gy();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}N();import{existsSync as $o,readFileSync as qy}from"node:fs";import{homedir as fN}from"node:os";import Zc from"node:path";import{spawnSync as gN}from"node:child_process";Me();var zy=Zc.join(fN(),".kynver"),jX=Zc.join(zy,"config.json"),pt=Zc.join(zy,"credentials"),Jy=(()=>{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 hN(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 kN(e){try{let r=gN(process.platform==="win32"?"where":"which",[e],{encoding:"utf8",timeout:3e3});return r.status===0&&!!r.stdout?.trim()}catch{return!1}}function yN(){if(!$o(pt))return{hasApiKey:!1};try{let e=JSON.parse(qy(pt,"utf8"));return{hasApiKey:!!e.apiKey?.trim(),runnerToken:e.runnerToken?.trim()||void 0,runnerTokenAgentOsId:e.runnerTokenAgentOsId?.trim()||void 0}}catch{return{hasApiKey:!1}}}function RN(){let e=kN("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 ${dt} is running`,details:{version:dt}},{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 bN(e,r){return{id:"stage_2_login",label:"Stage 2 \u2014 Device Login",checks:[{id:"login_credentials_file",label:"Credentials file present",status:$o(pt)?"pass":"fail",summary:$o(pt)?`${B(pt)} exists`:`${B(pt)} missing \u2014 not logged in`,remediation:$o(pt)?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 vN(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 SN(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 wN(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 CN(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=As(e),t=$o(r),n=!1,o=null,s=null;if(t)try{let a=JSON.parse(qy(r,"utf8"));a.observedAt&&(o=Date.now()-new Date(a.observedAt).getTime(),n=o<Jy),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:Jy,pid:s}}),{id:"stage_6_daemon",label:"Stage 6 \u2014 Supervised Daemon",checks:i}}function Xy(){let e=y(),r=yN(),t=e.agentOsId?.trim()||void 0,n=e.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||void 0,o=RN(),s=bN(r,n),i=vN(t,n),a=SN(t),l=wN(r,t),c=CN(t),u=[o,s,i,a,l,c],d=hN(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 Qy(){let e=Xy();console.log(JSON.stringify(e,null,2)),e.ready||(process.exitCode=1)}N();async function Zy(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 Ms(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 eu=["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"],ru=["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 _N(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 tu(e,r=_N()){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:[...eu],runnerSteps:[...ru]}}function eR(e){return{...e,deploymentSchedulerProvider:"qstash"}}N();import xN from"node:path";import{homedir as PN}from"node:os";var rR=xN.join(PN(),".kynver","config.json");function tR(e=!1){let r=y(),t=tu(r),n={...t,configPath:B(rR),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
58
+ `),console.log("Deployment (Vercel):");for(let o of eu)console.log(` - ${o}`);console.log(`
59
+ User runner:`);for(let o of ru)console.log(` - ${o}`);if(console.log(`
57
60
  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(`
58
61
  Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
59
- No local blockers detected on this runner.`)}function Ny(e=!1){let r=b(),t=Kc(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=Ay(r);de(n);let o={ok:!0,attested:!0,configPath:q(Iy),deploymentSchedulerProvider:"qstash",config:Dt(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}`)}Ke();async function Ty(e){In();let r=await Pi();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 Dy(e){In();let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await Lt({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 xO(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 My(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await Ai({execute:r?!1:xO(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)
62
+ No local blockers detected on this runner.`)}function nR(e=!1){let r=y(),t=tu(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=eR(r);de(n);let o={ok:!0,attested:!0,configPath:B(rR),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}`)}Ge();async function oR(e){Dn();let r=await Li();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 sR(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 EN(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 iR(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await Hi({execute:r?!1:EN(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)
60
63
  `:`Kynver Cron install
61
64
  `),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(`
62
65
  Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
63
- 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 Uy(e){let r=b(),t=await on({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"}
64
- `);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 PO from"node:os";N();Pe();It();C();var To={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 _O}from"node:child_process";import Wy from"node:path";function By(e,r,t){let o=[Wy.join(r,To.landScript),String(e),...To.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=_O("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 Ly(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?Wy.resolve(r):je()?.repo??process.cwd()}async function Hy(e){let r=String(T(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||To.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=or({runId:s??"fleet-lane-tick"}),a={...ni(i,{harnessRunId:s,boxKind:Fe(b()),hostLabel:PO.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=V(e.baseUrl?String(e.baseUrl):void 0),c=await J(e.secret?String(e.secret):void 0,r,{baseUrl:l}),u=`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/tick`,f=(await Kr(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,m=[],p=Ly(e),g=Array.isArray(f?.localActions)?f.localActions:[],k=a.boxId;for(let h of g){if(h.kind==="land_pr"&&typeof h.prNumber=="number"){let y=By(h.prNumber,p,o);if(m.push({action:y.action,executed:y.executed,exitCode:y.exitCode}),o&&y.executed){let S=y.exitCode===0,P=typeof h.prUrl=="string"&&h.prUrl.trim()?h.prUrl.trim():`https://github.com/${t}/pull/${h.prNumber}`;try{await Kr(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:P,holderBoxId:k,merged:S})}catch{}}continue}m.push({action:h,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:f,localOutcomes:m}}async function Fy(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await Hy(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();Mr();It();import OO from"node:path";C();vr();_n();D();C();import EO from"node:path";function $y(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ky(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&&!$y(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function jc(e){return typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!H(e.pid)?!1:rs(e)}function AO(e,r){let t=e.completionBlocker?.trim();if(t&&!$y(t))return{attention:"blocked",attentionReason:t,status:"blocked"};if(r.heartbeatBlocker)return{attention:"blocked",attentionReason:r.heartbeatBlocker,status:"blocked"};if(Ky(e))return{attention:"done",attentionReason:"completion acknowledged",status:"done"};let n=jc(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 IO(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||Ky(e)?!1:jc(e)}function Vc(e,r){let t=x(EO.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}=AO(t,n),a=jc(t),l=IO(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 Gc(e,r){let t={};for(let n of e){let o=r(n).trim()||"unknown";t[o]=(t[o]??0)+1}return t}function jy(e){return e.filter(r=>r.attention==="blocked"||r.attention==="needs_attention"||r.attention==="stale").map(r=>({runId:r.runId,worker:r.worker,taskId:r.taskId,reason:r.completionBlocker??r.heartbeatBlocker??r.attentionReason??r.attention}))}function Vy(e){return e.filter(r=>r.isActive&&r.taskId).map(r=>r.taskId.trim())}function NO(){let e=[];for(let r of z())for(let t of fe(r)){let n=Vc(r,t);n&&e.push(n)}return e}function TO(e){let r=e.match(/-a(\d+)$/i);return r&&Number.parseInt(r[1],10)||0}function Gy(e){if(!e)return 0;let r=Date.parse(e);return Number.isFinite(r)?r:0}function DO(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 MO(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),DO(e)&&(t+=1e3),t+=TO(e.name)*10,t+=Math.floor(Math.max(Gy(e.completionReportedAt),Gy(e.startedAt))/1e9),t}function UO(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=x(OO.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=Vc(n,o);if(!a)continue;let l=MO(s,a);(!t||l>t.score)&&(t={row:a,score:l})}return t?.row??null}function Yc(e){if(e.mode==="full")return{mode:"full",runs:xo()};let r=b(),{harnessRoot:t}=Z(),n=z(),o=NO(),s=o.filter(l=>l.isActive).length,i=or({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:Gc(n,l=>l.status),workerCount:o.length,workerStatusCounts:Gc(o,l=>l.status),workerAttentionCounts:Gc(o,l=>l.attention),activeTaskIds:Vy(o),blocked:jy(o).slice(0,25),workers:o};if(e.mode==="task"){let l=e.taskId?.trim()??"",c=l?UO(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:jy(l).slice(0,25),activeTaskIds:Vy(l)}}return a}function Jc(e,r=72){let t=e.trim();return t.length<=r?t:`${t.slice(0,r-1)}\u2026`}function WO(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=${Jc(e.currentTask,48)}`),r.join(" \xB7 ")}function BO(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}: ${Jc(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(`
65
- `)}function LO(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(`
66
- `);for(let n of e.workers)t.push(WO(n));return t.join(`
67
- `)}function HO(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=${Jc(r.currentTask)}`:null,r.completionBlocker??r.heartbeatBlocker??r.attentionReason??null].filter(n=>!!n).join(" \xB7 ")}function Yy(e){return e.mode==="workers"?LO(e):e.mode==="task"?HO(e):BO(e)}function FO(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 Jy(e){let r=FO(e);if(r==="full"){let n=Yc({mode:"full"});console.log(JSON.stringify(n,null,2));return}let t=Yc({mode:r,taskId:typeof e.task=="string"?e.task:void 0});if(r==="json"){console.log(JSON.stringify(t,null,2));return}console.log(Yy(t))}function qc(e){return e==="help"||e==="--help"||e==="-h"}function Xy(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),zc(1)}function zc(e=0){(e===0?console.log:console.error)(["Usage:"," kynver login [--api-key KEY] [--api-base-url URL] (omit --api-key to authorize in the browser)"," kynver bootstrap [--api-base-url URL] [--api-key KEY] [--repo PATH] (login + setup + runner credential in one shot)"," kynver start [--repo PATH] [--api-base-url URL] [--run RUN_ID] [--interval-ms MS] [--chat-oauth] [--install-systemd] (bring your agent online: bootstrap if needed + run + keeper-supervised daemon; --install-systemd enables Linux user unit)"," kynver runner credential [--agent-os-id ID] [--base-url URL]"," kynver setup [--api-base-url URL] [--agent-os-id ID] [--agent-os-slug SLUG] [--box-kind forge|ghost] [--repo PATH] [--discover-repo] [--max-workers N] [--provider claude|cursor] [--chat-oauth]"," kynver daemon --run RUN_ID --agent-os-id AOS_ID [--execute] [--interval-ms MS] [--stall-ms MS] [--no-supervise]"," kynver status [--compact] [--workers] [--task TASK_ID] [--json] [--full] # factory-wide harness summary"," kynver run list"," kynver run resolve --name RUN_NAME"," kynver run status --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--target-task-id TASK_ID] [--executor harness] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--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 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(`
68
- `)),process.exit(e)}async function KO(e=process.argv.slice(2)){if(py(e,import.meta.url,"kynver"))return;if(e.length===0||qc(e[0]))return zc(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&&qc(t)||n.some(qc))return zc(0);let o=ks(n),{runsDir:s,worktreesDir:i}=Z();if(qy(s,{recursive:!0}),qy(i,{recursive:!0}),r==="daemon"&&Bt(),fy(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=B(l).repo}catch{a=void 0}await my({repoRoot:a,cwd:a})}if(r==="login")return void await Rd(o);if(r==="bootstrap")return void await Rs(o);if(r==="start")return void await xk(o);if(r==="runner"&&t==="credential")return void await yd(o);if(r==="setup")return void await ys(o);if(r==="status")return Jy(o);if(r==="daemon")return Ci(o)?void await xi(o):void await wi(o);if(r==="plan"&&t==="progress")return void await Uk(o);if(r==="plan"&&t==="verify")return void await Wk(o);if(r==="harness"&&t==="verify")return Bk(o);if(r==="plan"&&t==="persist")return void await Lk(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Hk();if(a==="drain")return void await Fk(ks(n));Xy("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return $k(o);if(r==="wsl-crashes")return Kk(o);if(r==="config"&&t==="ensure-default-repo")return Cd(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return Py(o);if(r==="scheduler"&&t==="cutover-check")return Oy(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return Ny(o.json===!0);if(r==="cron"&&t==="install")return void await My(o);if(r==="cron"&&t==="verify")return void await Uy(o);if(r==="cron"&&t==="status")return void await Ty(o.json===!0);if(r==="cron"&&t==="tick")return void await Dy(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await Fy(ks(n),a)}if(r==="board"&&t==="contract")return void await Ey(o);if(r==="run"&&t==="create")return void _i(o);if(r==="run"&&t==="list")return ak();if(r==="run"&&t==="resolve")return gy(o);if(r==="run"&&t==="status")return rf(o);if(r==="run"&&t==="dispatch")return void await Zr(o);if(r==="run"&&t==="sweep")return void await Ro(o);if(r==="run"&&t==="reconcile")return eg();if(r==="run"&&t==="unblock")return void await hy(o);if(r==="worker"&&t==="start")return void await uf(o);if(r==="worker"&&t==="list")return zm(o);if(r==="worker"&&t==="status")return Jm(o);if(r==="worker"&&t==="tail")return tf(o);if(r==="worker"&&t==="stop")return nf(o);if(r==="worker"&&t==="complete")return void await ul(o);if(r==="worker"&&t==="discard-disposable")return _k(o);if(r==="worker"&&t==="auto-complete")return void await sf(o);if(r==="monitor"&&t==="start"){let a=await ny(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await oy(o);if(r==="monitor"&&t==="stop")return sy(o);if(r==="monitor"&&t==="list")return iy();if(r==="monitor"&&t==="tick")return void await ly(o);if(r==="monitor"&&t==="auto-complete")return void await Bc(o);if(r==="monitor"&&t==="run-loop")return void await ay(o);Xy(r,t)}var jO=process.argv[1]&&zy.native(process.argv[1])===zy.native($O(import.meta.url));jO&&KO().catch(e=>{console.error(e),process.exit(1)});export{KO as main,zc as usage};
66
+ 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 aR(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"}
67
+ `);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 IN from"node:os";N();Pe();Mt();C();var Ko={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 AN}from"node:child_process";import lR from"node:path";function cR(e,r,t){let o=[lR.join(r,Ko.landScript),String(e),...Ko.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=AN("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 uR(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?lR.resolve(r):Ae()?.repo??process.cwd()}async function dR(e){let r=String(T(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Ko.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={...mi(i,{harnessRunId:s,boxKind:je(y()),hostLabel:IN.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 Gr(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,f=[],m=uR(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=cR(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 Gr(`${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 pR(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await dR(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();Br();Mt();import DN from"node:path";C();wr();In();D();C();import ON from"node:path";function mR(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function fR(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&&!mR(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function nu(e){return typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!F(e.pid)?!1:ps(e)}function NN(e,r){let t=e.completionBlocker?.trim();if(t&&!mR(t))return{attention:"blocked",attentionReason:t,status:"blocked"};if(r.heartbeatBlocker)return{attention:"blocked",attentionReason:r.heartbeatBlocker,status:"blocked"};if(fR(e))return{attention:"done",attentionReason:"completion acknowledged",status:"done"};let n=nu(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 TN(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||fR(e)?!1:nu(e)}function ou(e,r){let t=_(ON.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}=NN(t,n),a=nu(t),l=TN(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 su(e,r){let t={};for(let n of e){let o=r(n).trim()||"unknown";t[o]=(t[o]??0)+1}return t}function gR(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 hR(e){return e.filter(r=>r.isActive&&r.taskId).map(r=>r.taskId.trim())}function MN(){let e=[];for(let r of z())for(let t of fe(r)){let n=ou(r,t);n&&e.push(n)}return e}function UN(e){let r=e.match(/-a(\d+)$/i);return r&&Number.parseInt(r[1],10)||0}function kR(e){if(!e)return 0;let r=Date.parse(e);return Number.isFinite(r)?r:0}function WN(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 LN(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),WN(e)&&(t+=1e3),t+=UN(e.name)*10,t+=Math.floor(Math.max(kR(e.completionReportedAt),kR(e.startedAt))/1e9),t}function BN(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=_(DN.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=ou(n,o);if(!a)continue;let l=LN(s,a);(!t||l>t.score)&&(t={row:a,score:l})}return t?.row??null}function iu(e){if(e.mode==="full")return{mode:"full",runs:To()};let r=y(),{harnessRoot:t}=ee(),n=z(),o=MN(),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:su(n,l=>l.status),workerCount:o.length,workerStatusCounts:su(o,l=>l.status),workerAttentionCounts:su(o,l=>l.attention),activeTaskIds:hR(o),blocked:gR(o).slice(0,25),workers:o};if(e.mode==="task"){let l=e.taskId?.trim()??"",c=l?BN(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:gR(l).slice(0,25),activeTaskIds:hR(l)}}return a}function au(e,r=72){let t=e.trim();return t.length<=r?t:`${t.slice(0,r-1)}\u2026`}function HN(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=${au(e.currentTask,48)}`),r.join(" \xB7 ")}function FN(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}: ${au(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(`
68
+ `)}function $N(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(`
69
+ `);for(let n of e.workers)t.push(HN(n));return t.join(`
70
+ `)}function KN(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=${au(r.currentTask)}`:null,r.completionBlocker??r.heartbeatBlocker??r.attentionReason??null].filter(n=>!!n).join(" \xB7 ")}function yR(e){return e.mode==="workers"?$N(e):e.mode==="task"?KN(e):FN(e)}function jN(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 RR(e){let r=jN(e);if(r==="full"){let n=iu({mode:"full"});console.log(JSON.stringify(n,null,2));return}let t=iu({mode:r,taskId:typeof e.task=="string"?e.task:void 0});if(r==="json"){console.log(JSON.stringify(t,null,2));return}console.log(yR(t))}function lu(e){return e==="help"||e==="--help"||e==="-h"}function cu(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),uu(1)}function uu(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(`
71
+ `)),process.exit(e)}async function YN(e=process.argv.slice(2)){if(Ny(e,import.meta.url,"kynver"))return;if(e.length===0||lu(e[0]))return uu(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&&lu(t)||n.some(lu))return uu(0);let o=Gn(n),{runsDir:s,worktreesDir:i}=ee();if(bR(s,{recursive:!0}),bR(i,{recursive:!0}),r==="daemon"&&$t(),Dy(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=L(l).repo}catch{a=void 0}await Ty({repoRoot:a,cwd:a})}if(r==="login")return void await Ud(o);if(r==="bootstrap")return void await Es(o);if(r==="start")return void await Kk(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 Od(l);if(a==="status")return void Md(l);if(a==="list")return void await Nd(l);if(a==="revoke")return void await Td(l);if(a==="rotate")return void await Dd(l);cu("runner credential",a)}if(r==="setup")return void await Ps(o);if(r==="status")return RR(o);if(r==="daemon")return Mi(o)?void await Ui(o):void await Di(o);if(r==="plan"&&t==="progress")return void await ty(o);if(r==="plan"&&t==="verify")return void await ny(o);if(r==="harness"&&t==="verify")return oy(o);if(r==="plan"&&t==="persist")return void await sy(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await iy();if(a==="drain")return void await ay(Gn(n));cu("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return ly(o);if(r==="wsl-crashes")return cy(o);if(r==="config"&&t==="ensure-default-repo")return Fd(o.json===!0);if(r==="doctor"&&t==="runner-install")return Qy();if(r==="doctor"&&t==="runtime-takeover")return Yy(o);if(r==="scheduler"&&t==="cutover-check")return tR(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return nR(o.json===!0);if(r==="cron"&&t==="install")return void await iR(o);if(r==="cron"&&t==="verify")return void await aR(o);if(r==="cron"&&t==="status")return void await oR(o.json===!0);if(r==="cron"&&t==="tick")return void await sR(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await pR(Gn(n),a)}if(r==="board"&&t==="contract")return void await Zy(o);if(r==="run"&&t==="create")return void Wi(o);if(r==="run"&&t==="list")return _k();if(r==="run"&&t==="resolve")return My(o);if(r==="run"&&t==="status")return vf(o);if(r==="run"&&t==="dispatch")return void await nt(o);if(r==="run"&&t==="sweep")return void await Po(o);if(r==="run"&&t==="reconcile")return Rg();if(r==="run"&&t==="unblock")return void await Uy(o);if(r==="worker"&&t==="start")return void await Af(o);if(r==="worker"&&t==="list")return hf(o);if(r==="worker"&&t==="status")return ff(o);if(r==="worker"&&t==="tail")return Sf(o);if(r==="worker"&&t==="stop")return wf(o);if(r==="worker"&&t==="complete")return void await Sl(o);if(r==="worker"&&t==="discard-disposable")return jk(o);if(r==="worker"&&t==="auto-complete")return void await _f(o);if(r==="monitor"&&t==="start"){let a=await wy(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await Cy(o);if(r==="monitor"&&t==="stop")return _y(o);if(r==="monitor"&&t==="list")return xy();if(r==="monitor"&&t==="tick")return void await Ey(o);if(r==="monitor"&&t==="auto-complete")return void await zc(o);if(r==="monitor"&&t==="run-loop")return void await Py(o);cu(r,t)}function vR(e){let r=e?.trim();if(!r||r==="-")return null;try{return VN.native(r)}catch{return null}}var JN=vR(process.argv[1])===vR(GN(import.meta.url));JN&&YN().catch(e=>{console.error(e),process.exit(1)});export{YN as main,uu as usage};