@kynver-app/runtime 0.1.154 → 0.1.157

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,66 +1,68 @@
1
1
  #!/usr/bin/env node
2
- var Qy=Object.defineProperty;var M=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Zy=(e,r)=>{for(var t in r)Qy(e,t,{get:r[t],enumerable:!0})};import{existsSync as eR,mkdirSync as rR,readFileSync as Hi,readdirSync as LO,statSync as Zc,writeFileSync as tR}from"node:fs";import eu from"node:path";function pr(e){console.error(e),process.exit(1)}function de(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function T(e,r){return e||pr(`missing ${r}`),e}function ut(e){try{return JSON.parse(e)}catch{return null}}function C(e,r){try{return JSON.parse(Hi(e,"utf8"))}catch(t){if(arguments.length>1)return r;pr(`failed to read ${e}: ${t.message}`)}}function se(e,r){rR(eu.dirname(e),{recursive:!0}),tR(e,`${JSON.stringify(r,null,2)}
3
- `)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function ru(e){return v(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Qe(e){return String(e).replace(/\/+$/,"")}function Uo(e){return String(e||"").replace(/\s+/g," ").trim()}function Wo(e){try{return Zc(e).size}catch{return 0}}function Lo(e){try{return Zc(e).mtime.toISOString()}catch{return null}}function Bo(e,r){return eR(e)?Hi(e,"utf8").split(`
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(`
4
4
  `).slice(-r).join(`
5
- `):""}function tu(e){return e?Hi(eu.resolve(e),"utf8"):""}function Or(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function mr(e){return new Promise(r=>setTimeout(r,e))}function H(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function fr(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function nu(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 Fi(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=M(()=>{"use strict"});function iR(e){return oR.has(e)?!0:sR.some(r=>e.endsWith(r))}function Ze(e){let r={...e};for(let t of Object.keys(r))iR(t)&&delete r[t];return r}var nR,oR,sR,dt=M(()=>{"use strict";nR=["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(nR),sR=["_SECRET","_API_KEY"]});import{spawnSync as su}from"node:child_process";function pe(e,r,t={}){let n=su("git",r,de({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=`git ${r.join(" ")} failed: ${n.stderr||n.stdout}`;if(t.throwError)throw new Error(o);pr(o)}return n.stdout||""}function iu(e){pe(e,["rev-parse","--show-toplevel"])}function fn(e){return pe(e,["status","--short"],{allowFailure:!0}).split(`
6
- `).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=su("git",r,de({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function ou(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 Ho(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 $i(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return $i(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 $i(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=ou(e,i,a),c=ou(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 $i(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var we=M(()=>{"use strict";w();dt()});import{homedir as Ki}from"node:os";import Nr from"node:path";function au(e){return e==="~"?Ki():e.startsWith("~/")||e.startsWith("~\\")?Nr.join(Ki(),e.slice(2)):e}function pt(e){return Nr.resolve(au(e))}function ye(e){let r=au(e),t=Nr.resolve(r),n=Nr.resolve(Ki());return t===n?"~":t.startsWith(`${n}${Nr.sep}`)?`~/${Nr.relative(n,t).split(Nr.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function q(e){return ye(e)}var He=M(()=>{"use strict"});import{existsSync as Vi,readFileSync as cu}from"node:fs";import{homedir as aR}from"node:os";import er from"node:path";import{fileURLToPath as lR}from"node:url";function uR(e){let r=er.join(e,"package.json");if(!Vi(r))return null;try{let t=JSON.parse(cu(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function dR(e){return uR(e)==="kynver"}function lu(e){let r=er.resolve(e);if(!Vi(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?er.resolve(n):null}function pR(e=import.meta.url){let r=er.dirname(lR(e));for(let t=0;t<8;t+=1){let n=er.join(r,"package.json");if(Vi(n))try{if(JSON.parse(cu(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=er.dirname(r);if(o===r)break;r=o}return null}function ji(e,r,t,n){if(!t)return;let o=er.resolve(t);e.has(o)||dR(o)&&(e.add(o),r.push({repo:o,source:n}))}function uu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ji(t,n,lu(r),"cwd_git");let o=pR(e?.runtimeModuleUrl??import.meta.url);o&&ji(t,n,lu(o),"runtime_checkout");let s=aR();for(let i of cR)ji(t,n,pt(er.join(s,i)),"well_known_path");return n}function mt(e){return uu(e)[0]??null}function mR(e){let r=er.resolve(e).replace(/\\/g,"/");return r.includes("/.kynver/harness/worktrees/")||r.includes("/.openclaw/harness/worktrees/")||r.includes("/kynver-harness/")||r.includes("/openclaw/harness/worktrees/")}function Fo(e){let r=uu(e);return r.find(n=>!mR(n.repo))??r[0]??null}var cR,$o=M(()=>{"use strict";we();He();cR=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function ft(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 du(e,r){return e[r]?.trim()||null}function _e(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:ft(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=du(e,"KYNVER_BOX_KIND");if(o)return{boxKind:ft(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=du(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=M(()=>{"use strict"});function Gi(e,r){return e==="forge"?4:Math.max(1,r)}function rr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}function gt(e,r){return e==="forge"&&r>4}var gn=M(()=>{"use strict"});import{readFileSync as fR}from"node:fs";import pu from"node:os";function hn(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:pu.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 pu.freemem()}var Ko=M(()=>{"use strict"});import{existsSync as gR,readFileSync as hR,statfsSync as kR}from"node:fs";function Yi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!gR(e))continue;let r=hR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function mu(e={}){if(!(e.forceWsl===void 0?Yi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ht,n=e.wslHostFreeWarnBytes??yR,o=e.wslHostFreeCriticalBytes??RR,s=e.statfs??kR,i;try{i=s(t)}catch(h){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${h.message}`,probeError:h.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),p=null;return f||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${bR()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function bR(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var yR,RR,ht,Ji=M(()=>{"use strict";yR=25*1024*1024*1024,RR=12*1024*1024*1024,ht="/mnt/c"});import{execFileSync as fu}from"node:child_process";import{existsSync as Vo,readFileSync as gu,readdirSync as vR,statSync as SR}from"node:fs";import qi from"node:path";function jo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function hu(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=fu("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()||ht;return r&&Vo(qi.join(t,"Users",r))?r:null}function PR(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()||ht,n=e.windowsUser??hu();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function ER(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 AR(){try{if(Vo("/proc/sys/kernel/core_pattern"))return gu("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return fu("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function IR(e){return!!(e&&/wsl-capture-crash/i.test(e))}function OR(e,r=ht){let t=qi.join(r,"Users",e,".wslconfig");if(!Vo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=gu(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 NR(e){if(!Vo(e))return[];let r=vR(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=qi.join(e,n.name);try{let s=SR(o),i=ER(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function gr(e={}){if(!(e.forceWsl===void 0?Yi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ht,n=e.windowsUser??hu(),o=e.warnBelowBytes??jo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",wR),s=e.criticalBelowBytes??jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",CR),i=e.warnCount??jo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",xR),a=e.criticalCount??jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",_R),l=(e.readCorePattern??AR)(),c=IR(l),u=null;n&&(u=(e.readWslConfig??OR)(n,t));let d=u?.maxCrashDumpCount??null,f=d===-1,m=PR({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??NR)(m)}catch(F){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}: ${F.message}`,probeError:F.message}}let h=p.reduce((F,I)=>F+I.bytes,0),k=p.length,g=[...new Set(p.map(F=>F.executableHint).filter(F=>!!F))],y=h>=s,x=h>=o,_=k>=a,P=k>=i,Y=!(y||_||x||P),K=null;if(!Y){let F=y||_?"critical":"warning",I=(h/1024**3).toFixed(1),B=g.length>0?g.join(", "):"unknown";K=`WSL crash dumps ${F}: ${k} file(s), ${I} GiB at ${m} (executables: ${B}). `+TR({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:Y,path:m,windowsUser:n,dumpCount:k,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:g,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:K,probeError:null}}function TR(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 wR,CR,xR,_R,kn=M(()=>{"use strict";Ji();wR=5*1024*1024*1024,CR=10*1024*1024*1024,xR=2,_R=4});import{statfsSync as DR}from"node:fs";function $e(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??MR,n=e.diskFreeCriticalBytes??UR,o=e.diskMaxUsedPercent??WR,s=e.diskHardMaxUsedPercent??LR,i=DR(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,f=a<t*2,m=f&&c>o,p=f&&c>s,h=!u&&!d&&!m&&!p,k=e.skipWslHostCheck?null:mu(e.wslHost),g=e.skipWslCrashDumpCheck?null:gr(e.wslCrashDumps),y=h&&(k?k.ok:!0)&&(g?g.ok:!0),x=null;return y||(x=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,g&&!g.ok?g.reason:null].filter(Boolean).join("; ")),BR({ok:y,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:x,wslHost:k,wslCrashDumps:g?{ok:g.ok,path:g.path,dumpCount:g.dumpCount,totalBytes:g.totalBytes,executables:g.executables,wslCaptureEnabled:g.wslCaptureEnabled,dumpsDisabledInWslConfig:g.dumpsDisabledInWslConfig,reason:g.reason,probeError:g.probeError}:null})}function BR(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 MR,UR,WR,LR,yn=M(()=>{"use strict";kn();Ji();MR=30*1024*1024*1024,UR=15*1024*1024*1024,WR=80,LR=90});import{existsSync as ku}from"node:fs";import{homedir as Ru}from"node:os";import hr from"node:path";function ce(e){let r=hr.resolve(pt(e.trim()));for(;HR.has(hr.basename(r));)r=hr.dirname(r);return r}function Re(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ce(e);let r=b().harnessRoot?.trim();if(r)return ce(r);let t=hr.join(Ru(),".kynver","harness");return ku(t)?t:ku(yu)?yu:t}function Ce(e){return hr.join(ce(e),"runs")}function kr(e){return hr.join(ce(e),"worktrees")}function kt(){let e=Re();return{harnessRoot:e,runsDir:Ce(e),worktreesDir:kr(e)}}function yt(e,r){return hr.join(e,v(r))}var yu,HR,xe=M(()=>{"use strict";N();He();w();yu=hr.join(Ru(),".openclaw","harness"),HR=new Set(["runs","worktrees"])});import{existsSync as FR,readdirSync as $R,statSync as KR}from"node:fs";import Rt from"node:path";function Z(){return kt()}function L(e){let{runsDir:r}=Z();return C(Rt.join(yt(r,v(e)),"run.json"))}function z(){let{runsDir:e}=Z();return bu(e)}function Go(e){return bu(Ce(e))}function jR(e){try{return KR(e).isDirectory()}catch{return!1}}function bu(e){if(!FR(e))return[];let r=[];for(let t of $R(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Rt.join(e,t.name);if(!jR(n))continue;let o=C(Rt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function me(e,r){let{runsDir:t}=Z();return C(Rt.join(yt(t,v(e)),"workers",v(r),"worker.json"))}function Te(e){let{runsDir:r}=Z();se(Rt.join(yt(r,e.id),"run.json"),e)}function $(e,r){let{runsDir:t}=Z();se(Rt.join(yt(t,e),"workers",r.name,"worker.json"),r)}function E(e){let{harnessRoot:r}=Z();return Rn(r,e)}function Rn(e,r){return yt(Ce(e),v(r))}var D=M(()=>{"use strict";xe();w()});import{existsSync as VR,readdirSync as GR}from"node:fs";import YR from"node:path";function fe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=YR.join(E(e.id),"workers");if(!VR(t))return[...r];for(let n of GR(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Tr=M(()=>{"use strict";D();w()});function zi(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function vu(e){let r=e.trim();if(!r)return null;let t=zi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=zi(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=zi(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Su(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?vu(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=vu(t);return n||t}var wu=M(()=>{"use strict"});import{existsSync as JR,readFileSync as qR}from"node:fs";function Cu(e){return e==="complete"}function tr(e){return Cu(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(!JR(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=ut(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)),Cu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Su(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,yr=M(()=>{"use strict";wu();w();zR=6e4});function QR(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function ZR(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 eb(e){let r=QR(e[0]);return!!(r&&XR.has(r))}function Xi(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Qi(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function rb(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function tb(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;xu.has(n)&&(t+=1);continue}r.push(n)}}return r}function nb(e){let r=!1,t=e.map((o,s)=>{let i=rb(o),a=e[s-1];return a&&xu.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=tb(t);if(n.length===2){let[o,s]=n;if(Qi(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(Xi(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 Zi(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=ZR(i.trim());if(!a.length||!eb(a))return i;let l=nb(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function _u(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}=_u(e);return r?Qi(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Xi(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function sb(e){let{pattern:r,target:t}=_u(e);if(!r)return null;if(Qi(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Xi(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function ib(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 ab(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 ea(e){let r=e.meta?.trim()||(e.command?ab(e.command):null)||null;if(r){let t=ob(r),n=ib(t);if(n)return n;let o=sb(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=Zi(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 XR,xu,Pu=M(()=>{"use strict";XR=new Set(["rg","ripgrep","grep"]),xu=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function bn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function db(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 vn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function pb(e){let r=e.metadata;if(!vn(r))return null;let t=r.vulnerabilities;if(!vn(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 mb(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(vn(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?bn(o.split(`
8
- `).find(Boolean)??o,160):"npm audit failed"}function gb(e){let r=`${e.stdout}
9
- ${e.stderr}`.trim(),t=db(r);if(!t||!vn(t)){let o=bn(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(vn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${fb(t,e.stderr)}`};let n=pb(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:mb(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function hb(e){return lb.test(e)}function kb(e){return cb.test(e)}function yb(e){let r=ea({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&&ub.test(n)){let i=bn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Zi(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=bn(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 ra(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(hb(e.command)){let i=r.trim()||n.trim()||t.trim();return gb({exitCode:e.exitCode,stdout:i,stderr:t})}if(kb(e.command))return yb({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ea({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=bn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var lb,cb,ub,Eu=M(()=>{"use strict";Pu();lb=/\bnpm\s+audit\b/i,cb=/\b(rg|ripgrep)\b/i,ub=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Rb,readFileSync as bb}from"node:fs";function vb(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Au(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 Sb(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 Iu(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 wb(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function bt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Rb(e))return r;let t=bb(e,"utf8").split(`
10
- `).filter(Boolean);for(let n of t){let o=ut(n);if(!o)continue;let s=vb(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=Au(a);l&&(r.currentTool=l)}let i=Iu(o);i&&wb(r,ra({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Sb(r,o)}return r}function Cb(e){let r=Iu(e);if(!r)return;let t=ra({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Uo(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 Ou(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] ${Uo(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"?Cb(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=Au(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Uo(String(e.result||""))}`.trim()}var Sn=M(()=>{"use strict";Eu();w()});function _b(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Yo(e){let r=(e??"").trim();if(!r)return null;for(let t of xb)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${_b(r)}`};return null}var xb,ta=M(()=>{"use strict";xb=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"}]});function Nu(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Pb(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 Eb(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Nu(e.head)}function Ab(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 vt(e){if(e.alive||Pb(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Nu(e.headCommit)??Eb(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:Ab(s,r,t)}}var Jo=M(()=>{"use strict"});function wn(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){if(wn(e.headCommit)||wn(e.prUrl)||wn(e.artifactBundlePath)||wn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&wn(r.head))}function St(e){return Ib(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Ob(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 Tu(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var qo=M(()=>{"use strict"});function na(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Du(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function wt(e){let r=e.trim();if(!r)return null;let t=na(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=na(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=na(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Du(l);for(let u of n){let d=Du(u);d>c&&(l=u,c=d)}return l}var zo=M(()=>{"use strict"});function Mu(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 Uu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Nb(e){return new Set(e.map(r=>Uu(Mu(r)??r)).filter(Boolean))}function Wu(e,r,t){let n=Mu(e)??e;if(!n)return"unrelated";let o=Uu(n);return Nb(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Lu=M(()=>{"use strict"});function Ct(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=="object"?Object.keys(e).length>0:!0}function Dr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ct(e)}function Xo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Bu(e){let r=null;if(typeof e=="string"){let o=wt(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Dr(String(s.prUrl??s.pr_url??"")),a=Ct(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ct(s.mergeCommit??s.merge_commit),reason:Ct(s.reason)})}return n}function Hu(e,r){let t=[],n=Dr(Ct(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Dr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Fu(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(!Tb(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?Dr(Ct(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Dr(r.targetPrUrls[0]):null):null;if(s){let d=Hu(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let h of d)if(h!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${h} instead of canonical target ${s}`}}let p=Bu(n).find(h=>h.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Bu(n),a=new Map(i.map(d=>[Xo(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Xo(Dr(d)??d)).filter(Boolean)),c=Hu(t,n);if(r.landingOnly)for(let d of c){let f=a.get(Xo(d)),m=Wu(d,r.targetPrUrls,f);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let f=Xo(Dr(d)??d),m=a.get(f);if(!m){u.push(f);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function $u(e){if(e.blocked)return e.detail??e.reason}var Ku=M(()=>{"use strict";zo();Lu()});function Mb(e){let r=Date.now();if(e.completionBlocker&&!ju(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Wb(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=St(o);if(s.blocked){let i=Tu(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Fu({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=$u(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(Ub(e))return{state:"done",reason:"empty abandoned worker record"};let o=Yo(e.error);if(o)return{state:"blocked",reason:o.reason};let s=vt({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>Db)return{state:"needs_attention",reason:`no first stream event ${Fi(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>xt?{state:"stale",reason:`no log/event/heartbeat activity for ${Fi(n)}s`}:{state:"ok",reason:"recent activity"}}function ju(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ub(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 Wb(e){let r=null;if(typeof e=="string"?r=wt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Lb(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??tr(t))}function U(e,r={}){let t=bt(e.stdoutPath),n=ae(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Lb(e,t.finalResult,n),i=o?!1:H(e.pid),a=Wo(e.stdoutPath),l=Wo(e.stderrPath),c=Wo(e.heartbeatPath),u=fn(e.worktreePath),d=Ho(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=nu([t.lastEventAt,n.lastHeartbeatAt,Lo(e.stdoutPath),Lo(e.stderrPath),Lo(e.heartbeatPath)]),m=t.error||!i&&!s&&Bo(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,h=ju(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,g=Mb({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:m,changedFiles:u,gitAncestry:d,completionBlocker:h,landingContract:k,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),y=h||g.state==="blocked"?"blocked":o||g.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:y,attention:g,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:m,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function _t(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Cn(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var Db,xt,X=M(()=>{"use strict";yr();Sn();ta();Jo();we();qo();Ku();zo();w();Db=18e4,xt=6e5});import{readFileSync as Bb}from"node:fs";function Hb(e){if(!e||process.platform!=="linux")return null;try{return Bb(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Qo(e){if(!e.pid||process.platform!=="linux")return!0;let r=Hb(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 Pt(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=U(e);return r.alive&&!Qo(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var xn=M(()=>{"use strict";X()});import Gu from"node:os";import Fb from"node:path";function Vu(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function $b(e=b(),r,t){let n=Vu(e.perWorkerMemBytes,_n),o=Vu(e.memReserveBytes,Pn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):En)),i=es({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Gu.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function oa(e,r={}){let t=r.perWorkerMemBytes??_n,n=r.memReserveBytes??Pn,o=r.memUtilization??En,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Zo)}function Kb(){return hn()}function jb(e){let r=0;for(let t of fe(e)){let n=C(Fb.join(E(e.id),"workers",v(t),"worker.json"),void 0);!n||!Pt(n)||r++}return r}function Vb(){let e=0;for(let r of z())e+=jb(r);return e}function nr(e){let r=e.config??b(),t=e.totalMemBytes??Gu.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=$b(r,e.configuredMaxWorkersOverride,t),c=Fe(r),u=e.freeMemBytes??Kb(),d=e.activeWorkers??Vb(),f=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(f/n)),p=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,k=rr(c,i??h),g=Math.max(0,Math.min(k,m)),y=Math.max(0,g-d),_=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&&(_=0);let Y=null;return _<=0&&(A&&!A.ok?Y=A.reason??"disk gate blocked worker admission":d>=g?Y=`at worker limit (${d}/${g} running)`:p<=0?Y="insufficient free memory \u2014 waiting for workers to finish":Y="no worker slots available"),{ok:_>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:m,maxConcurrentWorkers:g,activeWorkers:d,slotsAvailable:_,reason:Y,...A?{diskGate:A}:{}}}var _n,Pn,En,Zo,Et=M(()=>{"use strict";Ko();N();Pe();gn();rs();yn();D();Tr();xn();w();_n=500*1024*1024,Pn=4*1024*1024*1024,En=.85,Zo=64});function Mr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function es(e){let r=e.config??{},t=e.env??process.env,n=Mr(r.perWorkerMemBytes,_n),o=Mr(r.memReserveBytes,Pn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):En)),i=oa(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Mr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Mr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Zo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Mr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Zo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function sa(e={}){let r=e.totalMemBytes??0,t=oa(r,{perWorkerMemBytes:Mr(e.config?.perWorkerMemBytes,_n),memReserveBytes:Mr(e.config?.memReserveBytes,Pn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):En}),n=e.diskGateOk??!0,o=n?t:Math.max(1,Math.min(t,4));return{totalMemBytes:r,autoCap:t,recommendedMaxWorkers:o,diskPath:e.diskPath??"/",diskGateOk:n,diskFreeBytes:e.diskFreeBytes??null}}var rs=M(()=>{"use strict";Et()});import{existsSync as Yu,mkdirSync as Gb,readFileSync as Ju,writeFileSync as Yb}from"node:fs";import{homedir as Jb}from"node:os";import qu from"node:path";function ia(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 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.
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 At(e=be){return Yu(e)?ia(Ju(e,"utf8")):new Map}function ts(e,r={}){let t=r.filePath??be,n=Yu(t)?Ju(t,"utf8"):"",o=ia(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=ia(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&&(Gb(qu.dirname(t),{recursive:!0}),Yb(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var be,Rr=M(()=>{"use strict";be=qu.join(Jb(),".kynver",".env")});var aa,An=M(()=>{"use strict";aa="1.5G"});import{spawnSync as zb}from"node:child_process";function On(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:In!==void 0?In:process.platform!=="linux"?(In=!1,!1):(In=zb("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,In)}function la(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??aa,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 In,ns=M(()=>{"use strict";An()});import{realpathSync as Xb}from"node:fs";function It(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 Xb.native(t)}catch{return t}}function Xu(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var os=M(()=>{"use strict"});import{existsSync as Qb,mkdirSync as Zb,writeFileSync as ev}from"node:fs";import{homedir as rv}from"node:os";import Zu from"node:path";import{spawnSync as Qu}from"node:child_process";function tv(){return Zu.join(rv(),".config","systemd","user")}function nv(e){let r=Xu(e.kynverBin?.trim()||It());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 ss(e,r){if(!On())return{supported:!1,unitPath:null,written:!1,enabled:!1,started:!1,note:process.platform==="linux"?"systemd-run not available \u2014 install user service manually or run `kynver daemon` under your supervisor.":"systemd user units are only supported on Linux; use `kynver daemon` manually on macOS/Windows."};let t=tv(),n=Zu.join(t,Nn),o=nv(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."};Zb(t,{recursive:!0});let s=Qb(n);ev(n,o,"utf8");let i=Qu("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=Qu("systemctl",["--user","enable","--now",Nn],{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 ${Nn}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}var Nn,is=M(()=>{"use strict";ns();os();Nn="kynver-cron-daemon.service"});import{existsSync as ov,readFileSync as sv}from"node:fs";function Ot(){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=sv("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}function Tn(e){return e==="linux"}var Dn=M(()=>{"use strict"});function ed(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}function iv(e){return"keeper"}function rd(e,r,t={}){if(ed(t.installSystemd)||ed(t["install-systemd"]))return Tn(r)?"systemd":"keeper";let n=e.daemonSupervisionOwner;return n==="systemd"&&Tn(r)?"systemd":n==="keeper"?"keeper":iv(r)}function av(){return{KYNVER_CRON_DAEMON_PRESENT:"1"}}function ca(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 ua(e,r={},t){let n=t??Ot(),o=rd(e,n,r);return{hostKind:n,owner:o,envUpdates:av(),guidance:ca(n,o)}}var as=M(()=>{"use strict";Dn()});import{existsSync as lv}from"node:fs";import td from"node:path";import{homedir as nd}from"node:os";function cv(){return td.join(nd(),".config","systemd","user",Nn)}function da(){return lv(cv())}function ls(e,r={},t){let n=ua(e,r,t),o={};e.daemonSupervisionOwner||(o.daemonSupervisionOwner=n.owner);let s={...e,...o},i=!1;Object.keys(o).length>0&&(ue(s),i=!0);let a=ts(n.envUpdates,{filePath:be});return{policy:n,configPath:q(td.join(nd(),".kynver","config.json")),envFilePath:q(a.path),envChanged:a.changed,configUpdated:i}}function cs(e,r){return e.daemonSupervisionOwner==="systemd"&&da()?"systemd":e.daemonSupervisionOwner??"keeper"}var Mn=M(()=>{"use strict";Rr();He();N();is();as()});var sd={};Zy(sd,{runDeviceLogin:()=>pa});import od from"node:os";function uv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Qe(String(r)):void 0}async function dv(e){await new Promise(r=>setTimeout(r,e))}async function pa(e){let r=uv(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=`${od.hostname()} (${od.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 dv(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?(Un(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 ma=M(()=>{"use strict";N();w()});import{existsSync as ad,mkdirSync as ld,readFileSync as cd,writeFileSync as ud}from"node:fs";import{homedir as pv,totalmem as mv}from"node:os";import fa from"node:path";import fv from"node:os";function Wn(e){let r=String(e??"").trim();if(!r)return{ok:!1,reason:"missing"};let t=r.toLowerCase();return hv.has(t)?{ok:!1,value:r,reason:"placeholder"}:gv.test(r)?{ok:!0,value:r}:{ok:!1,value:r,reason:"not a UUID"}}function ps(e){let r=Wn(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(!ad(us))return{};try{return JSON.parse(cd(us,"utf8"))}catch{return{}}}function ue(e){ld(ds,{recursive:!0}),ud(us,`${JSON.stringify(ga(e),null,2)}
14
- `,{mode:384})}function ga(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:ye(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:ye(e.defaultRepo.trim())}:{}}}function Tt(e){return ga(e)}function kv(e,r){let t=Ln(),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"?mt()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||Fo()?.repo,a=(typeof r.harnessRoot=="string"?r.harnessRoot:void 0)||e.harnessRoot?.trim()||process.env.KYNVER_HARNESS_ROOT?.trim()||process.env.OPUS_HARNESS_ROOT?.trim();return{...n?{apiBaseUrl:Qe(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function yv(e,r,t=mv()){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:ft(o)}:{}}).boxKind,i=$e({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=sa({totalMemBytes:t,diskPath:i.path,diskGateOk:i.ok,diskFreeBytes:i.freeBytes,config:e});if(n){let l=Math.max(1,Math.floor(Number(n)));return{maxConcurrentWorkers:rr(s,l),maxConcurrentWorkersSource:"setup-flag",boxKind:s}}if(e.maxConcurrentWorkers!==void 0&&e.maxConcurrentWorkers!==null){let l=Math.max(1,Math.floor(Number(e.maxConcurrentWorkers)));return gt(s,l)?{maxConcurrentWorkers:Gi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}:{maxConcurrentWorkers:rr(s,l),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}}return{maxConcurrentWorkers:Gi(s,a.recommendedMaxWorkers),maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function Ln(){if(!ad(Nt))return{};try{return JSON.parse(cd(Nt,"utf8"))}catch{return{}}}function dd(e){ld(ds,{recursive:!0}),ud(Nt,`${JSON.stringify(e,null,2)}
15
- `,{mode:384})}function oe(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Ln().apiKey}function Un(e){dd({...Ln(),apiKey:e})}function id(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Ln();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Ur(e,r){dd({...Ln(),runnerToken:r,runnerTokenAgentOsId:e})}function V(e){let r=Bn(e);return r||ms("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function pd(e){return Bn(e)}function Bn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||b().apiBaseUrl;return r?Qe(String(r)):void 0}function Rv(e,r){let t=e||id(r)||(r?void 0:id(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 ha(e,r,t){let n=Rv(e,r);if(n)return{ok:!0,secret:n};let o=oe(),s=Bn(t?.baseUrl);if(o&&r&&s)try{let i=await Wr(r,{baseUrl:s,apiKey:o});return Ur(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function J(e,r,t){let n=await ha(e,r,t);if(n.ok)return n.secret;ms(n.reason)}async function md(e,r){let t=oe(),n=Bn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Wr(e,{baseUrl:n,apiKey:t});return Ur(e,o),o}catch{return null}}async function fd(e,r,t){let n=oe(),o=Bn(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await Wr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Ur(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function Wr(e,r){let t=r?.apiKey||oe();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${V(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}async function gd(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||ms("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Wr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Ur(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:q(Nt),tokenPrefix:`${t.slice(0,12)}\u2026`,note:"Scoped runner token saved; callbacks use X-Kynver-Runner-Token."},null,2))}catch(t){console.error(t instanceof Error?t.message:String(t)),process.exit(1)}}function ms(e){console.error(e),process.exit(1)}function fs(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 gs(e){let r=b(),t=$e({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=sa({totalMemBytes:fv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=yv(r,e),s=ga({...r,...kv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});s.agentOsId&&!Wn(s.agentOsId).ok&&ms(ps(s.agentOsId)),ue(s);let i=_e(process.env,s),a=ls(s,e);a.configUpdated&&(s=b());let l,c=oe(),u=s.agentOsId;if(c&&u)try{let d=await Wr(u,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:c});Ur(u,d),l="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{l="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:q(us),config:Tt(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,daemonSupervision:{hostKind:a.policy.hostKind,owner:a.policy.owner,envFilePath:a.envFilePath},...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:l??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function hd(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){Un(r),console.log(JSON.stringify({ok:!0,credentialsPath:q(Nt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(ma(),sd));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:q(Nt)},null,2))}var ds,us,Nt,gv,hv,vD,SD,N=M(()=>{"use strict";$o();He();w();Pe();gn();rs();yn();Mn();ds=fa.join(pv(),".kynver"),us=fa.join(ds,"config.json"),Nt=fa.join(ds,"credentials"),gv=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,hv=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);vD=500*1024*1024,SD=4*1024*1024*1024});N();import{mkdirSync as Gy,realpathSync as Yy}from"node:fs";import{fileURLToPath as TO}from"node:url";N();w();ma();import bv from"node:os";function vv(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Qe(String(r)):void 0}async function Sv(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 hs(e){let r=vv(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"?Un(e.apiKey):(await pa({...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 Sv(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 gs(o),console.log(""),console.log(` Bootstrap complete \u2014 ${bv.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online with Kynver-owned keeper supervision + local Kynver Cron when needed."),console.log(" Persistent background (Linux): `kynver start --install-systemd` or `kynver cron install --install-systemd`."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}N();import jA from"node:os";N();He();N();import Cv from"node:path";import{homedir as xv}from"node:os";N();$o();He();import kd from"node:path";function wv(e){return kd.resolve(pt(e.trim()))}function Dt(e,r,t){let n=e?.trim();return n?{repo:wv(n),source:r,persistedInConfig:t}:null}function yd(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ke(e={}){let r=e.env??process.env,t=e.config??b(),n=Dt(t.defaultRepo,"config",!0);if(n)return n;let o=Dt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Dt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||yd(mt({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function Rd(e={}){let r=e.env??process.env,t=e.config??b(),n=Dt(t.defaultRepo,"config",!0);if(n)return n;let o=Dt(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Dt(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||yd(Fo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function bd(e,r){let t={...r??b(),defaultRepo:ye(kd.resolve(e))};return ue(t),t}function Hn(e){return{defaultRepo:q(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var ka=Cv.join(xv(),".kynver","config.json");function Fn(e){let r=b(),t=Rd({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(ka),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(ka),resolved:Hn(t),config:Tt(r)};let n=bd(t.repo,r),o=Hn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(ka),resolved:o,config:Tt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function vd(e=!1){let r=Fn();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 Sd(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 _v,readFileSync as Pv,renameSync as Ev,writeFileSync as Av}from"node:fs";import{homedir as Iv}from"node:os";import Cd from"node:path";function wd(e){return JSON.stringify(ya(e))}function ya(e){if(Array.isArray(e))return e.map(ya);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ya(e[t]);return r}return e}function Ra(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 $n(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 xd(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Cd.join(Iv(),".kynver",`instruction-bundle-${r}.json`)}function _d(e,r){try{let t=xd(e);_v(Cd.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Av(n,JSON.stringify(r),"utf8"),Ev(n,t)}catch{}}function Pd(e){try{let r=Pv(xd(e),"utf8"),t=JSON.parse(r);return $n(t)?t:null}catch{return null}}var Ov="embedded-1",Nv=[{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"}],Tv={"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 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(`
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
- `)},Dv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:Ov,generatedAt:"1970-01-01T00:00:00.000Z",personas:Nv,instructions:Tv,policyThresholds:Dv};var Kn=Mt,Ed="embedded";function Lr(){return Kn.version}function br(){return Ed}function Ad(e,r){Kn=e,Ed=r}function jn(e){let r=Kn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function Ut(e,r){let t=Kn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Id(e){if(!e)return null;let r=e.trim().toLowerCase();return Kn.personas.find(t=>t.slug===r)??null}import{createPublicKey as Uv,verify as Wv}from"node:crypto";var Mv={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Od(e,r=process.env){let t=Ra(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=Mv[e];return n?Ra(n):null}var Lv=Buffer.from("302a300506032b6570032100","hex");function Bv(e){return Uv({key:Buffer.concat([Lv,Buffer.from(e)]),format:"der",type:"spki"})}function Hv(e,r){if(!$n(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(wd(e.bundle),"utf8");return Wv(null,n,Bv(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 Nd(e,r=process.env){if(!$n(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Od(e.publicKeyId,r);return t?Hv(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var Fv=15*6e4,$v=1e4,or={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Gn(e,r){console.error(JSON.stringify({event:e,...r}))}function Td(e,r,t){let n=Nd(e);return n.ok?(Ad(n.bundle,r),r==="server"&&_d(t,e),!0):(Gn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Vn(e){if(or.diskCacheTried)return!1;or.diskCacheTried=!0;let r=Pd(e);return r?Td(r,"disk",e):!1}async function Dd(e){let r=e.nowMs??Date.now(),t=()=>({source:br(),version:Lr(),updated:!1});if(!e.force&&r-or.lastAttemptAtMs<Fv)return t();or.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),$v);try{let l=De(o);delete l["Content-Type"],or.etag&&br()==="server"&&(l["If-None-Match"]=or.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return or.routeMissingLogged||(or.routeMissingLogged=!0,Gn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Gn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Td(u,"server",e.agentOsId)?br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t():(or.etag=c.headers.get("etag"),Gn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Lr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Gn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}N();Pe();gn();rs();import Kv from"node:os";function Md(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Ud(e=b(),r=process.env){let t=_e(r,e),n=es({config:e,totalMemBytes:Kv.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=rr(t.boxKind,i);gt(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)Md("warn",c);for(let c of s)Md("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as jv,readFileSync as Vv,renameSync as Gv,writeFileSync as Yv}from"node:fs";import{homedir as Jv}from"node:os";import Wd from"node:path";function Ld(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Wd.join(Jv(),".kynver",`daemon-heartbeat-${r}.json`)}function Bd(e){try{let r=Ld(e.agentOsId);jv(Wd.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;Yv(n,JSON.stringify(t),"utf8"),Gv(n,r)}catch{}}function Hd(e){try{let r=Vv(Ld(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Fd(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 Wt(){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 Xv}from"node:os";import Qv from"node:path";function $d(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 Yn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function vr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Qv.join(Xv(),".kynver","agent-os-cron.json")}function Zv(e=vr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function eS(){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 ba(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function sr(){let e=vr(),r=Zv(e),t=eS(),n=ba(),o=!!(t&&n),s=zv(e),i=o&&(s||$d("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:$d("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Yn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Yn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Yn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Yn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Yn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function ks(e=sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function rS(e){return e.replace(/\/+$/,"")}async function Kd(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${rS(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:De(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as tS,existsSync as va,openSync as nS,readFileSync as oS,unlinkSync as jd,writeFileSync as sS}from"node:fs";var iS=10*6e4;function Vd(e){if(!va(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 aS(e){let r=Vd(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>iS}function Gd(e){if(va(e)&&!aS(e)){let r=Vd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(va(e))try{jd(e)}catch{}try{let r=nS(e,"wx");return sS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),tS(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Yd(e){try{jd(e)}catch{}}var lS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function cS(e){return lS.test(e.trim())}function uS(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 Jn(e,r,t,n){let o=e.trim();return o==="*"?!0:uS(o,t,n).has(r)}function dS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Jn(n,r.getUTCMinutes(),0,59)&&Jn(o,r.getUTCHours(),0,23)&&Jn(s,r.getUTCDate(),1,31)&&Jn(i,r.getUTCMonth()+1,1,12)&&Jn(a,r.getUTCDay(),0,6)}var pS=366*24*60;function mS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Jd(e,r){if(!cS(e))return null;let t=mS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<pS;n++){if(dS(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=Jd(e.cron.trim(),r);return t?t.toISOString():null}return null}function Sa(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Jd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as fS}from"node:fs";async function zd(e){try{return await fS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function gS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Br(e=vr()){let r=await zd(e);return gS(r)}async function Xd(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 Qd(e,r=vr()){let t=await Br(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Xd(r,t)}async function Zd(e=vr()){return await zd(e)!==null?{created:!1}:(await Xd(e,[]),{created:!0})}import{randomBytes as hS}from"node:crypto";import{promises as qn}from"node:fs";import kS from"node:path";var ys={version:1,jobs:{}};async function yS(e){try{return await qn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function RS(e){if(!e)return{...ys,jobs:{...ys.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...ys,jobs:{}}:r}catch{return{...ys,jobs:{}}}}async function Rs(e){let r=await yS(e);return RS(r)}async function bS(e,r){await qn.mkdir(kS.dirname(e),{recursive:!0});let t=hS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await qn.writeFile(n,`${JSON.stringify(r,null,2)}
20
- `,"utf8");try{await qn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await qn.unlink(n).catch(()=>{})}}async function ep(e,r){await bS(e,r)}function rp(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 vS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function SS(e){return!!e.completedAt}function wS(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 CS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=qd(e.spec,t);return r.nextFireAt=n,n}function xS(e,r,t,n){if(e.paused||SS(r)||vS(r,t)||!wS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function _S(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Sa(e.spec,t))}async function Lt(e={}){let r=e.env??sr(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=Gd(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await Br(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Rs(r.statePath),l=[];for(let m of i){let p=rp(a,m.providerScheduleId);CS(m,p,t),xS(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let h=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:m,job:p}of l){if(r.missedRunPolicy==="skip"&&m.spec.scheduleKind==="cron"){let h=Date.parse(p.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){p.nextFireAt=Sa(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),_S(m,p,t);try{let h=await Kd({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,h.ok?(p.lastFiredAt=t.toISOString(),p.consecutiveFailures=0,m.spec.scheduleKind==="runAt"&&(p.completedAt=t.toISOString(),p.nextFireAt=null),c++,f--):(p.consecutiveFailures+=1,u++)}catch{p.inflightUntil=null,p.consecutiveFailures+=1,u++}}return await ep(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Yd(r.lockPath)}}w();D();import tp from"node:path";var np="mesh-cron-lease.json";function bs(e){return C(tp.join(E(e),np),null)}function op(e,r){se(tp.join(E(e),np),{...r,updatedAt:new Date().toISOString()})}function sp(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}w();import EE from"node:path";D();xn();w();import PS from"node:path";function ES(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 vs(e){let r=L(e),t=[];for(let n of Object.keys(r.workers||{})){let o=C(PS.join(E(r.id),"workers",v(n),"worker.json"),void 0);!o?.taskId||!Pt(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...ES(o)})}return t}N();N();function ip(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 ap(e,r){let t=ip(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 lp(e,r){let t=ip(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Hr(e,r,t,n){try{return await ap(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 lp(o,n?.timeoutMs)}}async function re(e,r,t,n){let o=await Hr(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await fd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Hr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Ss(e,r,t){try{return await ap(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 lp(n,t?.timeoutMs)}}N();function cp(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function wa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function up(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 AS=["implementation","review","landing"],IS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function OS(e){return AS.includes(e)}function NS(e){return IS.includes(e)}function dp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||OS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:NS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var pp=Mt.personas.map(dp),TS=new Map(pp.map(e=>[e.slug,e]));function DS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=TS.get(r)??null,n=Id(r);if(!n)return t;let o=dp(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function Ca(e){return DS(e)?.defaultRoleLane??null}function mp(){return pp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function fp(e){return(e??"").trim().toLowerCase()}function MS(e){switch(fp(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 US(e){let r=fp(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=MS(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function gp(e){return US(e)??"any"}yn();Et();D();D();function ws(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function xa(e){return e.toLowerCase()}function WS(e){let r=ws(e,"roleLane");if(r)return r;let t=xa(ws(e,"executorRef")),n=xa(ws(e,"title")),o=xa(ws(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=Ca(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function hp(e){let r=WS(e);return r?{...e,roleLane:r}:e}N();var ir="cursor",LS=new Set(["claude","opus","anthropic"]),BS=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function _a(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Fr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return LS.has(r)?!0:r.includes("claude")||r.includes("opus")}function Pa(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Fr(r))return!0;let t=_a(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=_a(e,"description");if(BS.some(s=>s.test(n)))return!0;let o=_a(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function HS(e,r){return{provider:ir,model:Ea,rule:`policy:cursor_default${r}`,requestedModel:e}}function kp(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Fr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Pa(t)||r.rule==="explicit:cli"&&Fr(r.provider)||!Fr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return HS(r.model,o)}function Cs(e,r=ir){let t=e?.trim();return t?Fr(t)?ir:t==="codex"?"codex":t:r}var yp={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 Bt(e){return yp[e]}function Rp(){return Object.values(yp)}import{existsSync as $S}from"node:fs";import{homedir as KS}from"node:os";import Sp from"node:path";import{createHash as bp}from"node:crypto";import{statSync as FS}from"node:fs";import{spawnSync as vp}from"node:child_process";function je(e){try{let r=FS(e),t=`${e}|${r.size}|${r.mtimeMs}`;return bp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Ht(e){return bp("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 Ve(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=vp(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 xs(e,r,t={}){let n=t.timeoutMs??8e3;try{return vp(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 jS="codex";function VS(){let e=KS();return[Sp.join(e,".codex","auth.json"),Sp.join(e,".config","codex","auth.json")]}function wp(e=new Date().toISOString()){let r=Ee(jS,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=VS().find(s=>$S(s)),n=Ve(r,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"}),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?je(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no ~/.codex/auth.json"].filter(Boolean).join("; ")}}import{existsSync as GS}from"node:fs";import{homedir as YS}from"node:os";import Aa from"node:path";function JS(){let e=process.env.HERMES_HOME?.trim(),r=e?Aa.resolve(e):Aa.join(YS(),".hermes");return Aa.join(r,"auth.json")}function _s(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=JS(),o=GS(n),s=xs(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?je(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Ft(e=new Date().toISOString()){let r=wp(e);if(r.ready)return{...r,path:"codex_cli"};let t=_s(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 Cp=["low","medium","high"],xp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function _p(e,r){let t=Bt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function qS(e,r){let t=Bt(e.providerId),n=Bt(r.providerId),o=Cp.indexOf(t.costTier)-Cp.indexOf(n.costTier);if(o!==0)return o;let s=xp[e.binding.authSource]-xp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ia(e){let r=Rp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&_p(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 _p(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 XS}from"node:os";import QS from"node:path";var ZS="claude";function ew(){let e=XS();return[QS.join(e,".claude",".credentials.json")]}function Pp(e=new Date().toISOString()){let r=Ee(ZS,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ew().find(i=>zS(i)),o=xs(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as rw}from"node:fs";import{homedir as tw}from"node:os";import nw from"node:path";var ow="agent";function sw(){let e=tw();return[nw.join(e,".config","cursor","auth.json")]}function Ep(e=new Date().toISOString()){let r=Ee(ow,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=sw().find(s=>rw(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as iw,readFileSync as aw}from"node:fs";import{homedir as lw}from"node:os";import Oa from"node:path";var cw=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function uw(){let e=process.env.HERMES_HOME?.trim(),r=e?Oa.resolve(e):Oa.join(lw(),".hermes");return Oa.join(r,".env")}function dw(e){try{let r=aw(e,"utf8"),t=[];for(let n of cw)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Ap(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=uw(),o=iw(n),s=o?dw(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?je(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Ip(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ft(r),n={codex:t,cursor:Ep(r),claude:Pp(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:Ap(r),hermesOpenAiCodex:_s(r),codexAdapterPath:t.path,readyCount:o}}var pw=[/\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],mw=[/\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 Na(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function fw(e){let r=Na(e,"executorRef").toLowerCase(),t=Na(e,"title").toLowerCase(),n=Na(e,"description").toLowerCase(),o=`${r}
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}
21
21
  ${t}
22
- ${n}`;return pw.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":mw.some(s=>s.test(o))?"low":"elevated"}function gw(e){let r=Bt(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 hw(e){let r=e.inventory??Ip();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function $r(e){let r=gw({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 Op(e){let r=e.task??{},t=fw(r),n=hw({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ft())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=ir;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Ia({inventory:n,riskClass:t});return $r(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return $r({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return $r({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return $r({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Ia({inventory:n,riskClass:t});if(a)return $r({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return $r({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}dt();w();import{closeSync as Np,openSync as Tp}from"node:fs";import{spawn as Sw}from"node:child_process";var kw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function yw(e){return e.replace(kw,"")}var Rw=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ta(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var bw=new Set(["cursor"]);function vw(e){let r=e.trim().toLowerCase();return bw.has(r)?"auto":null}function Da(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=yw(t).trim()||r;return Rw.test(o)||!Ta(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function $t(e,r){let t=(e??"").trim();return t?Ta(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 Ma(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=vw(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")`}:Ta(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var Kt="claude-sonnet-4-6",Dp={name:"claude",defaultModel:Kt,preflightModel(e){return Da(e,Kt)},start(e){let r=Da(e.model,Kt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Tp(e.stdoutPath,"a"),o=Tp(e.stderrPath,"a"),s=["ignore",n,o],i=Sw("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],de({cwd:e.worktreePath,detached:!0,stdio:s,env:Ze(process.env)}));if(Np(n),Np(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}}};dt();w();import{closeSync as Lp,existsSync as _w,openSync as Bp}from"node:fs";import{spawn as Hp}from"node:child_process";dt();w();import{closeSync as Mp,openSync as Up}from"node:fs";import{spawn as ww}from"node:child_process";var Ua=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Cw(){return Ze({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function xw(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Wp={name:"hermes-codex",defaultModel:Ua,preflightModel(e){return $t(e,Ua)},start(e){let r=$t(e.model,Ua);if(!r.ok)throw new Error(`hermes-codex 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=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=xw(t,e.prompt),l=ww(i,a,de({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Cw()}));if(Mp(n),Mp(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 Pw(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Kr=Pw();function Ew(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Aw(){return Ze({...process.env,CI:"1",NO_COLOR:"1"})}function Iw(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Ow(e,r,t){if(!(process.platform!=="win32"&&_w("/usr/bin/script")))return Hp(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Hp("script",["-qfc",o,"/dev/null"],t)}var Fp={name:"codex",defaultModel:Kr,preflightModel(e){return $t(e,Kr)},start(e){if(Ft().path==="hermes_openai_codex")return Wp.start(e);let t=$t(e.model,Kr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Bp(e.stdoutPath,"a"),s=Bp(e.stderrPath,"a"),i=["ignore",o,s],a=Ew(),l=Iw(n,e.prompt),c=Ow(a,l,de({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Aw()}));if(Lp(o),Lp(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 Nw="claude-sonnet-4-6",Ea="composer-2.5";function Ps(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function $p(e){return e.toLowerCase()}function La(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Nw}function Wa(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 Tw(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ea,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Kt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Kp(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function Dw(e){let r=$p(Ps(e,"executorRef")),t=Ps(e,"title").toLowerCase(),n=Ps(e,"priority")||"normal",o=$p(Ps(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Kr,rule:"lane:codex_orchestration"};if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Kr,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Kp(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Kp(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=La();return{model:s,provider:Wa(s),rule:"default:global"}}function Es(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Tw(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Wa(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Dw(e.task);r={...o,requestedModel:o.model}}else{let o=La();r={model:o,provider:e.explicitProvider?.trim()||Wa(o),rule:"default:global",requestedModel:o}}let t=kp({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});if(!e.task||Object.keys(e.task).length===0||t.rule==="explicit:model_provider_alias"||t.rule==="explicit:model_provider_alias_overrode_provider"||t.rule==="explicit:cli"||Fr(t.provider)&&(e.explicitProviderIsOperatorOverride||Pa(e.task)))return t;let n=Op({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Kr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function jp(e,r,t){return e||r||t||La()||Kt}function Vp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Gp(){return{maxTaskAttempts:Vp(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ut("harness.maxTaskAttempts",4))),dispatchCooldownMs:Vp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ut("harness.dispatchCooldownMs",5e3)))}}N();import Ww from"node:path";D();X();w();var Ba="kynver-harness:",Yp="@runner:";function Ha(e){return e?.trim()?e.trim():null}function Mw(e){let r=Ha(e);if(!r?.startsWith(Ba))return null;let t=r.slice(Ba.length),n=t.indexOf(Yp);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Fa(e,r){let t=e.trim(),n=r.trim();return`${Ba}${t}${Yp}${n}`}function $a(e,r){let t=Ha(r);return t?Mw(e)===t:!1}function As(e){let r=Ha(e.workerLeaseOwner);return r&&$a(r,e.runId)?r:Fa(e.runId,e.runnerId)}import Jp from"node:os";Pe();Pe();import Uw from"node:os";function Is(e,r){let t=(r??Uw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Sr(e){return e?.trim()?e.trim():null}function Ge(e={}){let r=e.env??process.env;return{runnerId:Sr(r.KYNVER_RUNTIME_ID)??Sr(r.OPENCLAW_RUNTIME_ID)??Sr(r.HOSTNAME)??Jp.hostname(),hostname:Sr(r.HOSTNAME)??Jp.hostname(),profile:Sr(r.KYNVER_RUNNER_PROFILE)??Sr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Sr(r.KYNVER_HARNESS_REPO)??Sr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Lr()}}N();async function jt(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=V(e.baseUrl);try{let o=await J(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await re(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}D();async function Os(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await 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 qp(e,r){return C(Ww.join(E(e),"workers",v(r),"worker.json"),void 0)}async function Ns(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=V(r.baseUrl?String(r.baseUrl):void 0),s=await J(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ka,a=Ge({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=qp(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!H(f.pid)){u.push(d);continue}if(U(f).status==="done"){u.push(d);continue}let p=As({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await Os({worker:f,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,g=await re(k,s,{leaseOwner:h.leaseOwner??p,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(g.ok){l.push(d);continue}let y=g.response&&typeof g.response=="object"&&"reason"in g.response?String(g.response.reason??`http ${g.status}`):`http ${g.status}`;c.push({worker:d,reason:y})}return{renewed:l,failed:c,skipped:u}}function zp(e,r){let t=L(e);for(let n of Object.keys(t.workers||{})){let o=qp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||U(o).status==="done"))return!0}return!1}we();D();D();import{existsSync as cx,mkdirSync as ux}from"node:fs";import Gt from"node:path";var Lw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Bw="next-action-fix:";function Ts(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ts(e)}function Hw(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Bw)||t.includes("repair")||t.includes("unblock"))}function Fw(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Lw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Ts(String(n.targetPrUrl??n.target_pr_url??"")),s=Ts(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Xp(o):null,targetPrBranch:s}}catch{return r}}function Qp(e){if(!Hw(e))return null;let r=Fw(e.description),t=e.prUrl?Xp(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Ts(e.branch)}:null}function Zp(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 em(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=[...jn(`worker.prompt.progress.${n}`).split(`
23
- `),o],i=jn(`worker.prompt.merge_gate.${n}`).split(`
24
- `),a=jn(`worker.prompt.plan_artifacts.${n}`).split(`
25
- `);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.",...jn("worker.prompt.core_rules").split(`
26
- `),"",...s,"",...i,"",...a,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...Zp({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
27
- `)}w();N();w();dt();import{closeSync as Va,existsSync as tm,mkdirSync as Gw,openSync as Ga,statSync as Yw,unlinkSync as rm}from"node:fs";import{spawn as Jw}from"node:child_process";import qw from"node:os";import Ye from"node:path";import{existsSync as zn,readdirSync as $w}from"node:fs";import jr from"node:path";var Kw=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function jw(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 Vw(e){let r=jr.join(e,"versions");if(!zn(r))return null;let t=null,n=-1;for(let o of $w(r,{withFileTypes:!0})){if(!o.isDirectory()||!Kw.test(o.name))continue;let s=jw(o.name);s==null||s<=n||(n=s,t=jr.join(r,o.name))}return t}function Ds(e){let r=e?.trim()||jr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=jr.join(r,"node.exe"),n=jr.join(r,"index.js");if(zn(t)&&zn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Vw(r);if(!o)return null;let s=jr.join(o,"node.exe"),i=jr.join(o,"index.js");return!zn(s)||!zn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var ja="composer-2.5",zw=15e3,Xw=6e4,Qw=3e4;function Zw(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function eC(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&tm(Ye.join(Ye.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ds(Ye.dirname(e)):t?{nodeExe:e,indexJs:Ye.join(Ye.dirname(e),"index.js"),versionDir:Ye.dirname(e)}:Ds();if(o)return Zw(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 rC(){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=Ds(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=Ye.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(tm(t))return t}return"agent"}function tC(e,r){return Ze({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:Ye.basename(e)||"agent.cmd"}:{}})}function nm(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Ya(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 nC(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Ye.join(qw.homedir(),".kynver","locks");return Gw(e,{recursive:!0}),Ye.join(e,"cursor-agent-start.lock")}function oC(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=nC(),r=Ya("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",Xw),t=Ya("KYNVER_CURSOR_START_LOCK_STALE_MS",Qw),n=Date.now();for(;;)try{let o=Ga(e,"wx");return Va(o),()=>{try{rm(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Yw(e).mtimeMs>t){rm(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);nm(250)}}var om={name:"cursor",defaultModel:ja,preflightModel(e){return Ma(e,ja)},start(e){let r=Ma(e.model,ja);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Ga(e.stdoutPath,"a"),o=Ga(e.stderrPath,"a"),s=["ignore",n,o],i=rC(),a=eC(i),l=oC(),c;try{c=Jw(a.executable,[...a.prefixArgs,"-p","--force","--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt],de({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:tC(i,a)})),nm(Ya("KYNVER_CURSOR_START_LOCK_HOLD_MS",zw))}finally{l(),Va(n),Va(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 Ms={claude:Dp,codex:Fp,cursor:om},sm=null;function im(e){if(sm)return sm;let r=e?.trim();if(r){let o=Ms[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Ms).join(", ")}`);return o}let t=Cs(b().workerProvider),n=Ms[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Ms).join(", ")}`);return n}w();import{spawn as ex}from"node:child_process";import{existsSync as rx,openSync as tx,closeSync as ef}from"node:fs";import nx from"node:path";D();function Us(e){return!!e.completionReportedAt?.trim()}function Ja(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),$(r,e)}function sC(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function qa(e){return!!(sC(e.completionBlocker)||e.completionOutcome==="rejected")}function Vr(e){return Us(e)&&!qa(e)}D();X();N();import to from"node:path";function za(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Xn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var iC=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function am(e){let r=za(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=Xn(r.outcome),n=Xn(r.detail)??Xn(r.error),o=za(r.task),s=za(r.closedTask),i=o?Xn(o.status):null,a=s?Xn(s.status):null,l=t!==null&&iC.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function lm(e){return e.taskAdvanced}D();Jo();var aC="expert-lane-pr-review:",lC="plan-review-task",cC="scheduledjob:";function cm(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function um(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(aC)||r===lC||r.startsWith("daemon-review:"))return!0;if(r.startsWith(cC)&&e.parentTaskId){let n=cm(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}let t=(e.title??"").toLowerCase();if(t.includes("expert pr review"))return!0;if(e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))){let n=cm(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var dm=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,uC=new Set(mp()),dC=/no commits between/i;function pm(e){return!!(e&&dC.test(e))}function ge(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mm(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ge(e.head)}function fm(e){if(e==null)return null;let t=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return t?ge(t[0]):null}function pC(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 mC(e,r){if(r.changedFiles.length>0)return!1;let t=ge(e.personaSlug)?.toLowerCase();if(t&&uC.has(t))return!0;let n=ge(e.routingRule)??"";return!!(n&&dm.test(n))}function fC(e,r){if(e.changedFiles.length>0)return!0;let t=ge(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=pC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(ge(e.headCommit)||mm(e.gitAncestry))}function gm(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(um({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=ge(e.routingRule)??"";if(r&&dm.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(mC(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(ge(e.patchPath)||ge(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(ge(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(ge(e.prUrl)??ge(e.taskPrUrl)??ge(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return fC(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function hm(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:ge(r?.headCommit)??mm(e.gitAncestry),prUrl:ge(r?.prUrl)??null}}import{spawnSync as gC}from"node:child_process";function ym(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return km(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return km(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 km(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 hC(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 Ls={git:(e,r)=>ne(e,r),gh:(e,r)=>hC("gh",e,r)};function kC(e){return e.split(`
28
- `).map(r=>r.trim()).find(Boolean)??""}function Rm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:ym(t.stdout)}function Gr(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Ws(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 Qn(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=Gr(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 vm(e){let r=Ws(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=yC(t.stdout)??Ws(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 yC(e){let t=kC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}w();function Sm(e){return`t-${v(e)}-a`}function wm(e,r){let t=Sm(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 Zn(e){return e.trim().toLowerCase()}function Cm(e,r){if(!e.length)return null;if(r){let t=Zn(r),n=e.find(o=>Zn(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function xm(e,r){let t=Zn(r);return e.filter(n=>Zn(n.url)!==t).map(n=>n.url)}function _m(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 RC(e){let r=new Set,t=[];for(let n of e){let o=Zn(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function bC(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?[]:_m(o.stdout).filter(s=>wm(s,t))}function vC(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=Sm(t);return _m(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||wm(i,t))}function Xa(e,r,t,n){let o=t.trim();if(!o)return[];let s=bC(e,r,o,n),i=vC(e,r,o,n);return RC([...s,...i])}function SC(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 Qa(e){let r=xm(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=SC(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 Pm(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 wC(e){return e.gh(process.cwd(),["--version"]).status===0}function CC(e,r){return`AgentOS harness: ${e} (${r})`}function xC(e,r,t){return["Automated PR-ready handoff from the Kynver harness runtime.","",e?`AgentOS task: \`${e}\``:"",`Harness worker: \`${r}\` \xB7 run \`${t}\``,"","Opened by orchestrator completion enforcement so production review receives a reviewable artifact."].filter(Boolean).join(`
29
- `)}function el(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _C(e){return el(e.prUrlHint)??fm(e.status.finalResult)??el(e.worker.taskPrUrl)??null}function PC(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??Gr(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=Qn({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=Gr(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Za(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Gr(e.snapshot.worktreePath,e.exec)??void 0};let r=Qn({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 rl(e,r=Ls){let t=_C(e),n=hm(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!gm({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?Za({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Za({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!wC(r)){let x=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${x?`${x} 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=Rm(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 x=!1,_=!1,P=n.headCommit??Gr(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Qn({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`."};x=A.committed,_=A.pushed,P=A.headCommit??P}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`."};_=A.status===0}return{ok:!0,prUrl:a,headCommit:P,committed:x,pushed:_}}let l=el(e.worker.taskId),c=[];if(l){c=Xa(n.worktreePath,i,l,r);let x=Cm(c);if(x){let _=PC({snapshot:n,canonical:x,workerName:e.worker.name,exec:r});return _.ok&&_.prUrl&&Qa({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:_.prUrl,exec:r}),_}}let u=Ws(n.worktreePath,i,n.branch,r);if(u)return Za({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,h=Qn({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:d,exec:r});if(d&&!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(f=h.committed,m=h.pushed,!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.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 x=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(x.status!==0&&!/already up to date/i.test(x.stderr||x.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${x.stderr||x.stdout||x.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=x.status===0}p=h.headCommit??p??Gr(n.worktreePath,r)??void 0;let k=p?Pm(n.worktreePath,i,p,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:p,committed:f,pushed:m,created:!1};let g=e.run.base?.trim()||"main",y=vm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:g.replace(/^origin\//,""),title:CC(e.worker.name,e.worker.runId),body:xC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!y.ok||!y.prUrl){if(pm(y.detail))return{ok:!0,headCommit:p??void 0,committed:f,pushed:m};let x=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${x?`${x} 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 _=[...c.length>0?c:Xa(n.worktreePath,i,l,r),{url:y.prUrl,number:Number.parseInt(y.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Qa({worktreePath:n.worktreePath,repo:i,rows:_,canonicalPrUrl:y.prUrl,exec:r})}return{ok:!0,prUrl:y.prUrl,headCommit:p??void 0,committed:f,pushed:m,created:y.created}}X();Sn();function Bs(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 Em(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 Am(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Im(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Nm(e){let r=Im(e);if(!r)return[];let t=Im(r.worktreeHandoff),n=Am(t?.disposableArtifactsRemoved);return n.length?n:Am(r.disposableArtifactsRemoved)}function Om(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Tm(e,r){let t=Bs(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Om(o)));return t.every(o=>{let s=Om(Em(o));return n.has(s)})}function Hs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Dm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function EC(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 AC(e){let r=Dm(e.disposableArtifactsRemoved),t=Nm(e.finalResult);return[...new Set([...r,...t])]}function Mm(e){let r=Dm(e.changedFiles),t=Bs(r),n=AC(e),o=t.length===0||Tm(r,n);return Hs(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`}:Hs(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`}:Hs(e.artifactBundlePath)||Hs(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}:EC(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}D();X();w();import IC from"node:path";var OC=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Um(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function NC(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Yr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:NC(r);return{finalResult:r??t??"completed",summary:t}}function tl(e,r,t){if(Um(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Yr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),$(e.runId,e)}function TC(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 Wm(e,r){let t=TC(r);if(t.size===0)return[];let n=L(e),o=[];for(let s of Object.keys(n.workers||{})){let i=C(IC.join(E(n.id),"workers",v(s),"worker.json"),void 0);if(!i?.taskId||Um(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!OC.has(a))continue;let l=U(i,{base:n.base,baseCommit:n.baseCommit});tl(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import DC from"node:path";var MC=/^[a-z0-9][a-z0-9._-]{0,127}$/i,UC=/^[a-z0-9][a-z0-9._-]{0,63}$/i,nl=new Set(["undefined","null"]),Lm="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Fs(e){let r=e.trim();if(!MC.test(r))throw new Error(`invalid run id: ${e}`);return r}function WC(e){let r=e.trim();if(!UC.test(r))throw new Error(`invalid worker name: ${e}`);return r}function ol(e){return typeof e=="string"?e.trim():""}function Je(e){let r=ol(e.run),t=ol(e.name);return(!r||nl.has(r))&&pr(`missing --run RUN_ID (${Lm})`),(!t||nl.has(t))&&pr(`missing --name WORKER_NAME (${Lm})`),{runId:Fs(r),workerName:WC(t)}}function sl(e){let r=ol(e.run);return(!r||nl.has(r))&&pr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Fs(r)}function Bm(e){let r=DC.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function Hm(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 LC(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Fm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function eo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function BC(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function HC(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function Km(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function FC(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function ro(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,$(e.runId,e))}function $C(e){e.completionBlocker&&(delete e.completionBlocker,$(e.runId,e))}function $s(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function KC(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function no(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=L(n.runId),s=U(n,$s(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!ie(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Vr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&qa(n)&&$C(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=rl({worker:n,run:o,status:s});if(!P.ok)return ro(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=U(n,$s(o)),s=KC(s,P))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let P=Mm({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!P.allowed){let A=P.detail??`worktree completion blocked (${P.state})`;return ro(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 Os({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=me(r,t));let p=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,h={...s};n.disposableArtifactsRemoved?.length&&(h.disposableArtifactsRemoved=n.disposableArtifactsRemoved);let k={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),status:n.leaseToken?{...h,leaseToken:n.leaseToken}:h,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},g=await Hm(p,m,k);if((g.status===401||g.status===403)&&!f){let P=await md(i,{baseUrl:d});P&&P!==m&&(m=P,g=await Hm(p,m,k))}if(g.ok){let P=am(g.parsed);if(!lm(P)){let I=`completion acknowledged but board not advanced: ${P.detail??(P.routeOutcome?`harness completion returned ${P.routeOutcome}`:"harness completion did not advance the linked task")}`;ro(n,I);let B={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:g.parsed};return Ja(n,n.runId,B),{ok:!1,httpStatus:g.status,response:g.parsed,reason:I,completionBlocked:!0}}ro(n,void 0);let A=P.routeOutcome??"acknowledged",Y={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:g.parsed};Ja(n,n.runId,Y),tl(n,s,{source:"harness-completion"});let K=s.prUrl;return{ok:!0,httpStatus:g.status,response:g.parsed,reason:A,...K?{prHandoff:{prUrl:K}}:{}}}let y=g.status===401||g.status===403,x=LC(g.parsed)??(y?"runner token unauthorized":"non-2xx response"),_=y?`completion replay rejected (${g.status}): ${x}`:`completion replay failed (${g.status}): ${x}`;return ro(n,_),{ok:!1,httpStatus:g.status,response:g.parsed,completionBlocked:!0}}async function al(e){try{let{runId:r,workerName:t}=Je(e),n=me(r,t),o=L(n.runId),s=U(n,$s(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 no(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}=Je(e),n=me(r,t),o=L(n.runId),s=U(n,$s(o));se(to.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function jC(e){return{full:`kynver worker list --run ${e} --full`,blocked:`kynver worker list --run ${e} --blocked`,running:`kynver worker list --run ${e} --running`,task:`kynver worker list --run ${e} --task <task-id>`,worker:`kynver worker list --run ${e} --worker <worker>`,runFull:`kynver run status --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`}}function il(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function VC(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=il(e.task??e.taskId);t&&(r.task=t);let n=il(e.worker??e.name);n&&(r.worker=n);let o=il(e.status);return o&&(r.status=o),r}function GC(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 Vm(e,r){let t=VC(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>GC(s,t)),o={...e,workerCount:n.length,needsAttention:n.filter(s=>s.attention&&s.attention!=="ok"&&s.attention!=="done").map(s=>s.worker),workers:n,activeFilters:t};return e.summary&&(o.summary={statusCounts:wr(n,"status"),attentionCounts:wr(n,"attention"),lifecycleCounts:wr(n,"lifecycleStage")}),e.controller&&(o.controller=Jm(n)),o}function Gm(e){let r=sl(e),t=e.full===!0||e.full==="true",n=Vm(t?oo(r):so(r),e),o=n.workers;console.log(JSON.stringify({runId:n.runId,status:n.status,projection:t?"full":"compact",workerCount:n.workerCount,...n.activeFilters?{activeFilters:n.activeFilters}:{},...t?{}:{resultContract:{projection:"compact",rawWorkerPayloadsOmitted:!0,deepDetailAvailableVia:["--full","worker status","worker tail","run status --full"]},drilldownCommands:jC(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Ym(e){let{run:r,workerName:t,worker:n}=e,o=U(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=vt({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=Km(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Fm(n.completionResponse),m=Fm(f?.task),p=eo(f?.outcome),h=eo(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(A=>typeof A=="string"&&A.trim().length>0):[],g=eo(m?.prUrl)??eo(f?.prUrl),y=eo(n.completionReportedAt),x=BC({finished:ie(o),completionBlocker:c,completionOutcome:p,completionReportedAt:y}),_=HC({completionBlocker:c,completionOutcome:p,completionReportedAt:y,finished:ie(o)}),P=FC({changedFiles:o.changedFiles,headCommit:s,prUrl:g??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let 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:g,handoffState:P,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:x,completionReportedAt:y,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:p,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:_,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function YC(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&&!Km(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function JC(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function wr(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function $m(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function Jm(e){let r=e.filter($m),t=e.filter(n=>{if($m(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function qm(e,r,t){let n={runId:e.id,name:e.name,status:Cn(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:wr(r,"status"),attentionCounts:wr(r,"attention"),lifecycleCounts:wr(r,"lifecycleStage")},n.controller=Jm(r)),n}function qC(e){return e.status==="done"&&e.attention==="done"}function oo(e){let r=L(e),n=Object.keys(r.workers||{}).map(s=>{let i=C(to.join(E(r.id),"workers",v(s),"worker.json"),void 0);return i?Ym({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=qm(r,n,!1);return se(to.join(E(r.id),"last-board.json"),o),o}function so(e){let r=L(e),n=Object.keys(r.workers||{}).map(i=>{let a=C(to.join(E(r.id),"workers",v(i),"worker.json"),void 0);return a?YC(a)?JC(i,a):Ym({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!qC(i)),s=qm(r,o,!0);return s.status=Cn(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:wr(n,"status"),allAttentionCounts:wr(n,"attention")},se(to.join(E(r.id),"last-board-compact.json"),s),s}async function zm(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=oo(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 zC(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 Xm(e){let r=sl(e),t=e.full===!0||e.full==="true",n=Vm(t?oo(r):so(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=zC(r)),console.log(JSON.stringify(n,null,2))}function Qm(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=Bo(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
30
- `).filter(Boolean)){let i=ut(s),a=i?Ou(i):s;a&&console.log(a)}}function Zm(e){let{runId:r,workerName:t}=Je(e),n=me(r,t);if(!H(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(fr(n.pid,"SIGTERM"),Or(1500),H(n.pid)){fr(n.pid,"SIGKILL"),console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"sigkill_sent"},null,2));return}console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"stopped"},null,2))}w();import{existsSync as Ks}from"node:fs";import Jr from"node:path";import{fileURLToPath as XC}from"node:url";function QC(e,r){let t=Jr.resolve(e);for(;;){let n=Jr.join(t,r);if(Ks(n))return n;let o=Jr.dirname(t);if(o===t)return null;t=o}}function ZC(e){return QC(e,Jr.join("node_modules",".bin","tsx"))??"npx"}function ll(e,r){if(e.endsWith(".ts")){let t=ZC(Jr.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function js(e){if(e.explicitCliPath)return Ks(e.explicitCliPath)?ll(e.explicitCliPath,e.nodeExecutable):null;let r=XC(new URL(".",e.importMetaUrl)),t=Jr.join(r,"cli.js");if(Ks(t))return ll(t,e.nodeExecutable);let n=Jr.join(r,"cli.ts");return Ks(n)?ll(n,e.nodeExecutable):null}var ox=5e3,sx=360*60*1e3,ix=3,ax=5e3;function lx(e){let{runId:r,workerName:t}=Je(e);return{run:r,name:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,maxTotalMs:Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):void 0,completeAttempts:Number(e.completeAttempts)>0?Math.floor(Number(e.completeAttempts)):void 0,completeBackoffMs:Number(e.completeBackoffMs)>0?Math.floor(Number(e.completeBackoffMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}}async function Vt(e){let r=lx(e),t=r.pollMs??ox,n=r.maxTotalMs??sx,o=r.completeAttempts??ix,s=r.completeBackoffMs??ax,i=me(r.run,r.name);if(!i.agentOsId||!i.taskId)return{worker:i.name,runId:i.runId,outcome:"missing_link",attempts:0,reason:"worker has no agentOsId/taskId \u2014 nothing to attribute completion to"};if(Vr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let a=Date.now();for(;;){if(i=me(r.run,r.name),Vr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=U(i);if(ie(u)||!H(i.pid))break;if(Date.now()-a>n)return{worker:i.name,runId:i.runId,outcome:"timed_out",attempts:0,reason:`worker did not finish within ${n}ms`};Or(t)}let l,c;for(let u=1;u<=o;u++){let d=await no({run:r.run,name:r.name,...r.agentOsId?{agentOsId:r.agentOsId}:{},...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.secret?{secret:r.secret}:{}});if(l=d.httpStatus,d.ok)return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:d.httpStatus,attempts:u};if(d.httpStatus===401||d.httpStatus===403)return c=typeof d.reason=="string"?d.reason:"completion replay refused",{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:d.httpStatus,attempts:u,reason:c};c=typeof d.reason=="string"?d.reason:"transient failure",u<o&&Or(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function rf(e){try{let r=await Vt(e);console.log(JSON.stringify(r,null,2)),(r.outcome==="missing_link"||r.outcome==="timed_out")&&process.exit(1),process.exit(0)}catch(r){console.error(`worker auto-complete failed: ${r.message}`),process.exit(1)}}function tf(e){let r=e.nodeExecutable??process.execPath,t=js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!rx(n))return;let o=nx.join(e.workerDir,"auto-complete.log"),s;try{s=tx(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=ex(t.command,a,de({detached:!0,stdio:i,env:process.env}));return s!==void 0&&ef(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{ef(s)}catch{}return}}function nf(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 of(e,r,t){pe(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Pe();N();function ul(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=v(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Es({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=im(o.provider),i=o.model;if(s.preflightModel){let F=s.preflightModel(r.model);if(!F.ok)throw new Error(`model preflight failed for provider "${s.name}": ${F.note??"invalid model/provider combination"}`);F.normalized&&console.error(`[supervisor] ${n}: ${F.note}`),i=F.model}let{worktreesDir:a}=Z(),l=Gt.join(E(e.id),"workers",n);ux(l,{recursive:!0});let c=Gt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(cx(c))throw new Error(`worktree path already exists: ${c}`);pe(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?of(e.repo,c,u):pe(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Gt.join(l,"stdout.jsonl"),m=Gt.join(l,"stderr.log"),p=Gt.join(l,"heartbeat.jsonl"),h=em({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:p,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,g=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let y;try{y=s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:p,prompt:h})}catch(F){throw pe(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),pe(e.repo,["branch","-D",d],{allowFailure:!0}),F}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,g===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=g}let x=jp(y.model,i,s.defaultModel),_=b(),P=_e(process.env,_),A=Ge().runnerId,Y=Is(P.boxKind),K={name:n,runId:e.id,status:"running",pid:y.pid,model:x,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:P.boxKind,boxId:Y,runtimeId:A,startedAt:new Date().toISOString()};if($(e.id,K),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Gt.join(l,"worker.json")}},e.status="running",Te(e),K.agentOsId&&K.taskId){let F;try{F=tf({runId:e.id,workerName:n,workerDir:l,agentOsId:K.agentOsId})}catch(I){let B=`completion sidecar failed to spawn: ${I.message}`;K.completionBlocker=B,$(e.id,K)}if(F)F.pid&&(K.completionSidecarPid=F.pid,$(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(),$(e.id,K)}}return K}async function sf(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):tu(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=ul(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(nf(u)),console.error(cl(u)))}catch(u){console.error(`worker start failed: ${u.message}`),process.exit(1)}if(!i||!l)return;let c=await Vt({run:String(e.run),name:l.name,...l.agentOsId?{agentOsId:l.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...c})),c.outcome==="timed_out"&&(process.exitCode=1)}w();import{createHash as af}from"node:crypto";function Cr(e){let r=e.replace(/\r\n/g,`
31
- `).trimEnd();return af("sha256").update(r,"utf8").digest("hex")}function Yt(e){if(e==null)return null;let r=e.trim();return r?af("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 io(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 dl(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 lf(e){return e!=="permanent"}function Gs(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Ys(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function cf(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:Gs(o)}),l=await Ys(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw io(a.status,c)}return l}catch(a){throw a instanceof ee?a:dl(a)}}async function uf(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:Vs(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Vs(e)}},p=await o(f,{method:"POST",headers:Gs(n),body:JSON.stringify(m)}),h=await Ys(p);if(!p.ok){let g=typeof h=="object"&&h&&"error"in h?String(h.error):`create plan failed (${p.status})`;throw io(p.status,g)}let k=h;return{planId:k.plan.id,versionId:k.version.id,versionNumber:k.version.versionNumber}}let i=e.planId;if(!i)throw new 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:Vs(e)},p=await o(f,{method:"PATCH",headers:Gs(n),body:JSON.stringify(m)}),h=await Ys(p);if(!p.ok){let g=typeof h=="object"&&h&&"error"in h?String(h.error):`update plan failed (${p.status})`;throw io(p.status,g)}let k=h;return{planId:k.id,versionId:k.currentVersionId,versionNumber:null}}let a=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}/versions`,l={title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Vs(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Gs(n),body:JSON.stringify(l)}),u=await Ys(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw io(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:dl(i)}}function Vs(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as dx}from"node:crypto";function Js(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:Yt(e.summary),bodyHash:Cr(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return dx("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as df}from"node:fs";import{homedir as px}from"node:os";import Jt from"node:path";function qs(){let e=process.env.KYNVER_STATE_ROOT;return e?Jt.resolve(e):Jt.join(px(),".kynver","state")}function zs(){return Jt.join(qs(),"plan-outbox")}function mx(){return Jt.join(qs(),"plan-outbox-archive")}function qr(){let e=zs(),r=mx();return df(e,{recursive:!0}),df(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function ao(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=Jt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(Jt.join("/var","folders"))}import{existsSync as pl,readFileSync as mf,renameSync as pf,readdirSync as fx,writeFileSync as ml,unlinkSync as LH}from"node:fs";import Me from"node:path";import{randomUUID as gx}from"node:crypto";var hx=12;function qt(){let{outboxDir:e}=qr(),r=fx(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=gl(Me.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function fl(e){for(let r of qt())if(r.idempotencyKey===e)return r;return null}function gl(e){if(!pl(e))return null;try{return JSON.parse(mf(e,"utf8"))}catch{return null}}function ff(e){let{outboxDir:r}=qr(),t=Me.join(r,e.bodyPath);return mf(t,"utf8")}function hl(e,r){let{outboxDir:t}=qr(),n=new Date().toISOString(),o=r.existing?.id??gx(),s=r.existing?.bodyPath??`${o}.body.md`,i=Me.join(t,`${o}.json`),a=Me.join(t,s);r.existing||ml(a,e.body,"utf8");let l={id:o,idempotencyKey:Js(e),operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??r.existing?.planId??null,planSlug:e.planSlug??r.existing?.planSlug??null,title:e.title,summary:e.summary??null,bodyPath:s,bodyHash:Cr(e.body),author:e.author??null,model:e.model??null,sourceRefs:e.sourceRefs??null,changeSummary:e.changeSummary??null,markCurrent:e.markCurrent??!0,createdAt:r.existing?.createdAt??n,updatedAt:n,retryCount:(r.existing?.retryCount??0)+(r.existing?1:0),maxRetries:e.maxRetries??r.existing?.maxRetries??hx,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return ml(i,`${JSON.stringify(l,null,2)}
32
- `,{mode:384}),l}function gf(e){let{outboxDir:r}=qr(),t=Me.join(r,`${e.id}.json`);ml(t,`${JSON.stringify(e,null,2)}
33
- `,{mode:384})}function hf(e){let{outboxDir:r,archiveDir:t}=qr(),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);pl(n)&&pf(n,s),pl(o)&&pf(o,i)}function lo(e){let{outboxDir:r}=qr();return{jsonPath:Me.join(r,`${e.id}.json`),bodyPath:Me.join(r,e.bodyPath)}}function kf(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 yf(e,r,t={}){let n=await cf(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new ee("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=Yt(r.summary),a=Yt(o.summary);if(i!==a)throw new ee("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new ee("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new ee("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=Cr(l);if(r.bodyHash&&c!==r.bodyHash)throw new ee("verification_failed","body hash mismatch on readback");return{planId:o.id,currentVersionId:o.currentVersionId,versionNumber:s?.versionNumber??null,title:o.title,summary:o.summary,bodyHash:r.bodyHash||c,readAt:new Date().toISOString()}}function Rf(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:Cr(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var bf="persisted and read back",kx="queued for retry",kl="failed and needs action";async function co(e,r={}){e.bodyPathHint&&ao(e.bodyPathHint);let t=Js(e),n=fl(t);if(n?.readbackEvidence)return{userStatus:bf,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return vf(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??uf,s=r.verifyReadback??yf;try{let i=await o(e,r),a={...e,planId:i.planId},l=Rf(a,i),c=await s(e.agentOsSlug,yx(e,l),r);return n&&hf(n),{userStatus:bf,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(!lf(a.kind)){let l=hl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=lo(l),u=Sf(l,a.message);return{userStatus:kl,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return vf(e,a.message,a.kind,n)}}function yx(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function vf(e,r,t,n){let o=hl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=lo(o);if(o.retryCount>=o.maxRetries){let i=Sf(o,r);return{userStatus:kl,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:kx,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function Sf(e,r){let t={...e,queueStatus:"failed",userStatus:kl,lastError:r,updatedAt:new Date().toISOString()};return gf(t),t}import Rx from"node:path";async function yl(e={},r={}){let t=qt().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=ff(s),a=kf(s,i),l=await co(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 Rl(e){let r=Rx.join(zs(),`${e}.json`);return gl(r)}function bl(e){let r=lo(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
34
- `)}function vl(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 Sl(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 Cf}from"node:child_process";import{spawnSync as bx}from"node:child_process";function wf(){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=bx("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 xf=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),vx=new Set(["CLEAN","HAS_HOOKS"]);function Cl(e){return e?.trim()?["--repo",e.trim()]:[]}function _f(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Pf(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 uo(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function Sx(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&&xf.has(i))){if(i){n.push(`${uo(s)}=${i}`);continue}if(!(l&&xf.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${uo(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${uo(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${uo(s)}=${a}`);continue}t.push(`${uo(s)}=PENDING`)}}}return{pending:t,failed:n}}function wx(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 Cx=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,xx=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,_x=/^docs[(:]/i,Px=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function Ex(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=_x.test(r)||Px.test(t),o=Cx.test(t),s=xx.test(t);return n||o||s||e.vercelCheckSuccess===!0}function Ax(e){if(!Ex({title:e.title,body:e.body,vercelCheckSuccess:wx(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 Ix(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(!vx.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=Sx(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(", ")}`);Ax(e)}function Ox(e){try{return Ix(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function Nx(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 Tx(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 Dx(e,r){if(!r?.trim())return;let t=Cf("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}`)&&Cf("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function Ef(e){let r=e.cwd??process.cwd(),t=e.exec??Ls,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=wf();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=Pf(t,r,["pr","view",n,...Cl(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=Ox(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,...Cl(e.repo),"--squash"]);if(l.status!==0){let u=wl(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=wl(t,r,a,e.repo);c||(c=wl(t,r,a,e.repo));try{let u=Tx(t,r,e.repo);Nx(t,r,u,s.headRefName),Dx(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 wl(e,r,t,n){try{let o=Pf(e,r,["pr","view",t,...Cl(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}N();async function Af(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 If(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "liveReadback": "<prod readback string from acceptance.liveReadbackQuery>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface.","When the subject carries an acceptance snapshot, include liveReadback \u2014 the server oracle rejects passed if the original symptom still appears."].join(`
35
- `)}var Mx="dispatch_start_readback_failed:";function zr(e){return`${Mx} ${e.trim()}`}function Ux(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 Wx(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:zr("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:zr(`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:zr(`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:zr(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=Ux(o);return a?{ok:!1,error:zr(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:zr(`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:zr("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function Of(e){let r=await jt({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return Wx({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}w();D();function Nf(e,r,t){r.pid&&H(r.pid)&&(fr(r.pid,"SIGTERM"),H(r.pid)&&fr(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return $(e,n),n}D();var Ka=3600*1e3;function Tf(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Df(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function Lx(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,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 Bx(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function Hx(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("",If());let n=vl(e);if(n?.outboxId){let o=Rl(n.outboxId);o?t.push("",bl(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
36
- `)}function Fx(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 Xr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let it=function(){return Q.filter(S=>S.started).length},Le=function(S,R){wa({runId:i.id,agentOsId:a,phase:S,startedCount:it(),outcomeCount:Q.length,cappedStarts:_,...R})},he=function(){return Q.some(S=>(typeof S.error=="string"?S.error:"").startsWith("dispatch_start_readback_failed:"))},W=function(S){return S.landPrDispatch===!0?!0:S.task?.executor==="land_pr"};var t=it,n=Le,o=he,s=W;let i=L(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=Ge({runId:i.id}),m=Fa(i.id,f.runnerId),p=e.diskPath?$e({diskPath:String(e.diskPath)}):$e({diskPath:i.repo}),h=nr({runId:i.id}),k=Fx(e),g=k.size>0,y=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,x=g?Math.min(y,k.size):y,_=d?x:Math.min(x,h.slotsAvailable);if(!d&&_<=0){let S={runId:i.id,agentOsId:a,dryRun:!1,skipped:!0,reason:h.reason??"no resource slots",resourceGate:h};if(r)return{ok:!0,...S};console.log(JSON.stringify(S,null,2));return}let P=vs(i.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let S=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/lane-hygiene`;try{await re(S,c,{agentOsId:a,dryRun:!1,includeBoardReconcile:!0},{agentOsId:a,baseUrl:l})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let A=`${l}/api/agent-os/by-id/${encodeURIComponent(a)}/tasks/dispatch-next`,Y=S=>({agentOsId:a,dryRun:d,maxStarts:S,leaseOwner:m,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Ka,runnerDiskGate:p,runnerResourceGate:h,activeHarnessWorkers:P,runnerPresence:f,harnessBoardSnapshot:oo(i.id),...e.lane?{lane:gp(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=cp(),F=async S=>{let R=await re(A,c,Y(S),{agentOsId:a,baseUrl:l,timeoutMs:K})??{ok:!1,status:0,response:null},O=R.response;return{dispatch:R,result:O?.result}},I=await F(g||d?_:1);if(!I.dispatch.ok||!I.result){let S={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,...S};console.log(JSON.stringify(S,null,2)),process.exit(1)}let B=I.result;if(d){let S=Tf(B),R=Df(B),O={runId:i.id,agentOsId:a,dryRun:!0,wouldStart:B.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:B.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:B.diskGate,resourceGate:B.resourceGate,inspected:B.inspected,pagesScanned:B.pagesScanned??null,candidatesExhausted:B.candidatesExhausted??null,capacityIdle:S?.capacityIdle===!0,admissionExhaustion:S,dispatchSkipDrain:R};if(r)return{ok:!0,...O};console.log(JSON.stringify(O,null,2));return}let Ir=Gp(),Q=[],ur=[],st=Number(B.inspected)||0,We=!1;async function G(S,R,O){let j=await Sl({baseUrl:l,secret:c,agentOsId:a,taskId:String(S.id),leaseOwner:m,failureDetail:R}),le={taskId:S.id,started:!1,error:R,released:j.released,releaseResponse:j.releaseResponse,...O};return Q.push(le),Le("outcome",{lastOutcome:le}),!1}async function ke(S){let R=S.task,O=String(R.id);if(g&&!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 Ef({prUrl:j,repo:_f(j),cwd:i.repo}),lt=await Af({baseUrl:l,secret:c,agentOsId:a,runId:i.id,task:R,report:le});return lt.ok?(Q.push({taskId:O,started:!0,landPr:!0,outcome:le.outcome,completionStatus:lt.status}),!0):G(R,`land_pr completion POST failed (HTTP ${lt.status})`,{landPr:!0,outcome:le.outcome})}catch(le){return G(R,le.message)}}async function ve(S){let R="duplicate_dispatch_prevented: live local worker already owns this task",O=await Sl({baseUrl:l,secret:c,agentOsId:a,taskId:String(S.id),leaseOwner:m,failureDetail:R}),j={taskId:S.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:O.released,releaseResponse:O.releaseResponse};return Q.push(j),Le("outcome",{lastOutcome:j}),!1}async function dr(S){let R=S.task,O=Lx(S),j=String(R.id);if(g&&!k.has(j))return G(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...k]});let le=Bx(R.personaSlug);if(le&&(!O?.personaInjectionReady||!O.personaMarkdown))return G(R,`persona_injection_required: missing anchored context-envelope persona block for "${le}"`);if(zp(i.id,j))return ve(R);let lt=Number(R.attempt)||1;if(lt>Ir.maxTaskAttempts)return G(R,`task attempt ${lt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Ir.maxTaskAttempts})`);let mn=R.leaseToken?String(R.leaseToken).trim():"";if(!mn)return G(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let zy=v(`t-${R.id}-a${R.attempt}`),ct=Es({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:hp(R)});try{let Bi=R.planId?String(R.planId):void 0,Do=Qp({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),Be=ul(i,{name:zy,task:Hx(R,a),ownedPaths:e.owned?String(e.owned).split(",").map(Xy=>Xy.trim()).filter(Boolean):[],model:ct.model,provider:ct.provider,routingRule:ct.rule,requestedModel:ct.requestedModel,agentOsId:a,taskId:String(R.id),planId:Bi,branch:Do?.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:Do?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Do?.targetPrUrl,repairTargetBranch:Do?.targetPrBranch??void 0,instructionPolicyMarkdown:O?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyEvidence:O?.instructionPolicyEvidence??null,memoryQualityCapture:O?.memoryQualityCapture??null,memoryQualityPromptMarkdown:O?.memoryQualityPromptMarkdown??null,personaMarkdown:O?.personaMarkdown??null,personaSlug:O?.personaSlug??le,personaEvidence:O?.personaEvidence??null,contextEnvelopeMarkdown:O?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:O?.contextEnvelopeEvidence??null,leaseOwner:m,leaseToken:mn,dispatched:!0}),Mo=await Of({agentOsId:a,taskId:String(R.id),leaseOwner:m,expectedLeaseToken:mn,worker:Be,baseUrl:l,secret:c});if(!Mo.ok)return Nf(i.id,Be,Mo.error??"dispatch_start_readback_failed"),G(R,Mo.error??"dispatch_start_readback_failed",{readback:Mo.detail??null});Be.leaseToken!==mn&&(Be.leaseToken=mn,Be.leaseOwner=m,$(i.id,Be));let Qc={taskId:R.id,started:!0,worker:Be.name,pid:Be.pid,branch:Be.branch,model:Be.model,provider:ct.provider,routingRule:ct.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(Qc),Le("worker_started",{lastOutcome:Qc}),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(Bi){return G(R,Bi.message)}}let Se=new Set;async function Oo(S){let R=S.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(S)?await ke(S):await dr(S);return j||Se.add(O),j}for(let S of B.started)await Oo(S);if(ur.push(...B.skipped??[]),g)for(let S of ur){let R=String(S.task.id);k.has(R)&&Q.push({taskId:R,started:!1,error:`exact_target_not_started:${S.skipReason}`,skipReason:S.skipReason,detail:S.reason??null,requestedTargetTaskIds:[...k]})}for(;!g&&Q.length<_;){if(he()){let O={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};Q.push(O),Le("circuit_breaker",{lastOutcome:O});break}let S=await F(1);if(!S.dispatch.ok||!S.result){let O=up(S.dispatch.response),j=it();We=O&&j>0;let le={started:!1,error:"dispatch_next request failed during top-up",httpStatus:S.dispatch.status,response:S.dispatch.response,...We?{nonFatal:!0,partialTopUp:!0}:{}};Q.push(le),Le("top_up_failed",{partialTopUpInterrupted:We,lastOutcome:le});break}st+=Number(S.result.inspected)||0,ur.push(...S.result.skipped??[]);let R=S.result.started??[];if(R.length===0)break;for(let O of R){if(Q.length>=_)break;await Oo(O)}}let No=Q.filter(S=>S.started).length,at=Tf(B),To=Df(B),Jc=No===0&&(at?.capacityIdle===!0||Number(B.resourceGate?.slotsAvailable)>0);if(Jc&&at?.summary){let S=at.skipReasonCounts?.retry_ceiling_exceeded??0,R=B.overAttemptIdleRecovery??at.overAttemptIdleRecovery,O=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:S>0?"; over_attempt_recovery not attempted":"",j=To?`; dispatch_skip_drain scanned=${To.scanned??0} advanced=${To.advanced??0}`:"";console.error(`[dispatch] ${at.summary}${S>0?`; retry_ceiling_exceeded=${S}`:""}${O}${j}`)}let qc={runId:i.id,agentOsId:a,dryRun:!1,leaseOwner:m,startedCount:No,capacityIdle:Jc,admissionExhaustion:at,dispatchSkipDrain:To,outcomes:Q,skipped:ur.map(S=>({taskId:S.task.id,skipReason:S.skipReason})),inspected:st,pagesScanned:B.pagesScanned??null,candidatesExhausted:B.candidatesExhausted??null,diskGate:B.diskGate,resourceGate:B.resourceGate,...We?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:K},zc=S=>!S.started&&S.nonFatal!==!0,qy=Q.some(zc),Xc=We&&No>0?!0:!qy;if(wa({runId:i.id,agentOsId:a,phase:"complete",partial:We,startedCount:No,ok:Xc}),r)return{ok:Xc,...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 $x=1;function zt(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function Kx(e){let{maxStarts:r,...t}=e;return t}async function xl(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=Kx(e);if(t.targetTaskId||t.targetTaskIds){let u=await Xr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:zt(u)}}let n=Math.min(r,$x),o=Math.max(0,r-n),s=await Xr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=zt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Xr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=zt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Mf(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function jx(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function po(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Vx(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Uf(e,r){let t=jx(r),n=po(t?.recommendedMaxStarts),o=po(t?.actionableReady),s=po(t?.queuedTasks),i=po(t?.boardAdvancedThisTick)??0,a=po(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=Vx("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 x_ from"node:path";D();Tr();X();w();import Gx from"node:path";var Yx=new Set(["running","dispatching","pending","queued","needs_attention"]),ar=new Set(["completed","failed","cancelled","done"]);function Qr(e){let r=fe(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=C(Gx.join(E(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let l=U(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),_t(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function mo(){let e=[];for(let r of z()){if(!Yx.has(r.status))continue;let t=Qr(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();Tr();yr();ta();Sn();function Xs(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 Jx(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 qx(e){let r=Yo(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function Wf(e){let{worker:r,status:t}=e;if(Xs(t.finalResult)){let l=ae(r.heartbeatPath),c=tr(l),u=Xs(c)&&JSON.stringify(c)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:u,snapshot:Yr(t)}}if(t.alive)return null;let n=bt(r.stdoutPath);if(Xs(n.finalResult)){let l={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Yr(l)}}let o=ae(r.heartbeatPath),s=tr(o);if(Xs(s)){let l={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Yr(l)}}let i=qx(t.error??n.error);if(i){let l={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Yr(l)}}let a=Jx(o);if(a){let l={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Yr(l)}}return null}function Lf(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}X();w();yr();Sn();import{existsSync as Pr,lstatSync as s_,readdirSync as i_,readlinkSync as a_,renameSync as Tl,unlinkSync as l_}from"node:fs";import qe from"node:path";xe();w();import Ue from"node:path";var zx=`${Ue.sep}runs${Ue.sep}runs${Ue.sep}`;function Qs(e){return e.includes(zx)}function _l(e,r){return Ue.join(Ce(ce(e)),v(r))}function xr(e,r,t){return Ue.join(_l(e,r),"workers",v(t))}function Bf(e,r,t){let n=ce(e);return Ue.join(n,"runs","runs",v(r),"workers",v(t))}function Pl(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Zr(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 Hf(e){let r=Zr(xr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Qs(e.statusPath)?e.statusPath:r}import{existsSync as _r,mkdirSync as Xx,readdirSync as $f,renameSync as Qx,statSync as El}from"node:fs";import te from"node:path";yr();xe();D();w();var fo=900*1e3,Zx=3600*1e3;function Kf(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 Al(e){if(!_r(e))return[];try{return $f(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Il(e){let r=te.join(e,"workers");if(!_r(r))return[];try{return $f(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function jf(e){return te.join(e,"archived-workers")}function e_(e,r){let t=te.join(jf(e),v(r));return _r(t)?`${t}-${Date.now()}`:t}function Ff(e,r,t){if(!_r(e))return!1;try{let n=r-El(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Vf(e,r=Date.now(),t=fo){if(!_r(e))return!1;let n=Zr(e),o=C(n.workerJsonPath,void 0);if(o?.status==="running"&&H(o.pid))return!0;let s=ae(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Ff(n.stdoutPath,r,t)||Ff(n.heartbeatPath,r,t))}function r_(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-El(te.join(e,"worker.json")).mtimeMs}catch{return 0}}function t_(e,r,t,n){if(Vf(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=r_(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function Xt(e,r=Date.now(),t=fo){for(let n of Il(e))if(Vf(te.join(e,"workers",n),r,t))return!0;return!1}function n_(){return{repo:Ke()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function o_(e,r){let t=te.join(Ce(e),v(r));if(!_r(t))return null;let n=Il(t);if(n.length===0)return null;let o;try{o=El(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=xr(e,r,a);s[a]={workerDir:l,statusPath:te.join(l,"worker.json")}}let i=Xt(t);return{id:r,name:r,...n_(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Ol(e){let r=ce(e??Re()),t=Ce(r),n=[];for(let o of Al(t)){let s=te.join(t,o,"run.json");if(_r(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=o_(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Te(i),n.push({runId:o,action:"repaired_run_json",reason:Xt(te.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Nl(e,r={}){let t=ce(e??Re()),n=Ce(t),o=r.now??Date.now(),s=r.archiveAgeMs??Zx,i=[];Ol(t);for(let a of Al(n)){let l=te.join(n,a),c=te.join(l,"run.json"),u=C(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...Il(l)]),f=!1;for(let m of d){let p=te.join(l,"workers",v(m)),h=te.join(p,"worker.json"),k=C(h,void 0);if(!k){let x=te.join(jf(l),v(m));if(_r(x)&&(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:x});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let g=t_(p,k,o,s);if(!g.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:g.reason});continue}let y=e_(l,m);Xx(te.dirname(y),{recursive:!0}),Qx(p,y),delete u.workers[v(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:g.reason,archivePath:y})}f&&Te(u)}return{workers:i}}function Gf(e,r=Date.now()){let t=new Set,n=Ce(e);for(let o of Al(n)){let s=te.join(n,o);Xt(s,r)&&t.add(`${e}\0${o}`)}return t}D();w();function c_(e,r){let t=_l(e,r),n;try{n=s_(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=qe.resolve(qe.dirname(t),a_(t));if(Xt(o)||Xt(t))return null;let s=`${t}.materialize-${Date.now()}`;return Tl(o,s),l_(t),Tl(s,t),o}function u_(e){let r=[];for(let t of Pl()){let n=qe.join(e.fromDir,t),o=qe.join(e.toDir,t);!Pr(n)||Pr(o)||(Tl(n,o),r.push(t))}return r}function Yf(e,r){let t=Zr(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function d_(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 p_(e){let r=Zr(e.canonicalDir),t=C(r.lastStatusPath,void 0),n=Pr(r.stdoutPath),o=Pr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?bt(r.stdoutPath):{finalResult:null},a=o?ae(r.heartbeatPath):ae(""),l=tr(a),c=d_({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:qe.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Yf(u,e.canonicalDir),u}function m_(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=xr(r,e.id,o),a=qe.join(i,"worker.json");(Qs(s.workerDir)||Qs(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 f_(e){let r=[],t=xr(e.harnessRoot,e.run.id,e.workerName),n=Bf(e.harnessRoot,e.run.id,e.workerName),o=Zr(t),s=u_({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=Hf({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=C(i,void 0);if(!a&&Pr(o.workerJsonPath)&&(a=C(o.workerJsonPath,void 0)),!a){let l=p_({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=Pr(t),u=Pl().some(d=>Pr(qe.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:qe.join(Z().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return $(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 Yf(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 g_(e,r){let t=qe.join(E(e.id),"workers");if(!Pr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of i_(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Jf(){let{harnessRoot:e}=Z(),r=Ol(e),t=[];for(let n of z()){let o=c_(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),m_(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 g_(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:xr(e,n.id,i),statusPath:qe.join(xr(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(...f_({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}yr();zo();X();D();Tr();w();import{execFileSync as qf}from"node:child_process";import zf from"node:path";function Dl(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function h_(e){let r=Dl(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function k_(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function y_(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 R_(e){let r=null;if(typeof e=="string"?r=wt(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=Dl(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 b_(e){try{let n=qf("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=qf("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:Dl(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 v_(e){let r=ae(e.heartbeatPath);return e.completionSnapshot?.finalResult??tr(r)}function S_(e){let r=new Map,t=E(e.id);for(let n of fe(e)){let o=C(zf.join(t,"workers",v(n),"worker.json"),void 0);if(o)for(let s of R_(v_(o))){let i=h_(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function w_(e,r){let t=ae(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,k_(r)].filter(Boolean).join(`
37
- `);return y_(n)}function C_(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Ml(e={}){let r=e.lookupPr??b_,t=[],n=new Map;for(let o of z()){let s=S_(o),i=E(o.id);for(let a of fe(o)){let l=zf.join(i,"workers",v(a),"worker.json"),c=C(l,void 0);if(!c||!C_(c))continue;let u=U(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of w_(c,u.finalResult)){if(d=s.get(m)??null,!d){let p=o.repo||c.worktreePath,h=`${p}#${m}`,k=n.has(h)?n.get(h)??null:r({repoDir:p,prNumber:m});n.has(h)||n.set(h,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",$(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 __=900*1e3;function P_(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Xf(e,r){let t=Wf({worker:e,status:r}),n=t?Lf(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 go(){let e=Jf();if(P_()){let s=Ml(),i=Nl();return{workers:[],finalizedRuns:mo(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of z())for(let i of fe(s)){let a=x_.join(E(s.id),"workers",v(i),"worker.json"),l=C(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=U(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Xf(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=Xf(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&&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>__,m=Number.isFinite(d)&&t-d>xt;if(f&&m){fr(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=Ml(),o=Nl();return{workers:r,finalizedRuns:mo(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Qf(){let e=go(),r=e.workers.filter(l=>l.action==="marked_exited").length,t=e.workers.filter(l=>l.action==="killed_stale").length,n=e.workers.filter(l=>l.action==="skipped").length,o=e.metadataReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),s=e.localPrAttentionReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),i=e.metadataReconcile.runMetadataRetention.runs.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),a=e.terminalWorkerArchive.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{});console.log(JSON.stringify({ok:!0,workers:{markedExited:r,killedStale:t,skipped:n,total:e.workers.length},metadataReconcile:{totals:o,total:e.metadataReconcile.workers.length,runMetadataRetention:{totals:i,total:e.metadataReconcile.runMetadataRetention.runs.length}},localPrAttentionReconcile:{totals:s,total:e.localPrAttentionReconcile.workers.length},terminalWorkerArchive:{totals:a,total:e.terminalWorkerArchive.workers.length},finalizedRuns:e.finalizedRuns.length,details:{workers:e.workers,metadataReconcile:e.metadataReconcile.workers,localPrAttentionReconcile:e.localPrAttentionReconcile.workers,terminalWorkerArchive:e.terminalWorkerArchive.workers,runMetadataRetention:e.metadataReconcile.runMetadataRetention.runs,finalizedRuns:e.finalizedRuns}},null,2))}Et();N();Pe();import E_ from"node:os";function Zs(e,r={}){let t=(r.boxKind??Fe(b())).trim().toLowerCase()||"forge",n=r.hostLabel??E_.hostname();return{boxId:r.boxId??Is(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();Jo();X();N();import A_ from"node:path";D();X();w();async function ho(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=V(e.baseUrl?String(e.baseUrl):void 0),s=await J(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Ge({runId:t.id}).runnerId,a=await zm({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=C(A_.join(E(t.id),"workers",v(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let p=U(m);if(p.alive||p.finalResult||m.completionReportedAt)continue;let h=As({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,g;try{g=await re(k,s,{agentOsId:n,leaseOwner:h},{agentOsId:n,baseUrl:o})}catch(y){g={ok:!1,error:y.message}}l.push({worker:f,taskId:m.taskId,pid:m.pid,released:g.ok===!0||g.response?.ok===!0,response:g.response??g})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await re(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}w();X();D();w();import I_ from"node:path";N();async function Zf(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 eg(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=C(I_.join(E(t.id),"workers",v(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=U(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 Zf({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}xn();N();Pe();function O_(e=process.env){let r=b();return Fe(r,e)!=="forge"}function rg(e,r=process.env){if(O_(r))return e?.maxConcurrentWorkers??void 0}async function tg(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 Ss(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 ti from"node:path";we();X();var Ul=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function ng(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Ul)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!ng(n)})}function et(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 ko(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(et(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function yo(e){return e.status||(e.status=U(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Wl(e,r){if(e.status)return Ae(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):fn(e.worktreePath);return Ae(t).length>0}function N_(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Ll(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=N_(e);if(o&&!H(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):fn(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:Ho(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??et(s)};return e.status=u,u}return yo(e)}X();X();yr();w();function Bl(e,r=Date.now(),t=fo){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 ei(e,r=Date.now(),t=fo){return H(e.pid)?!0:Bl(e,r,t)}function T_(e,r){return r?r.runTerminalCache.derive(e.run):Qr(e.run)}function lr(e,r=Date.now()){return ei(e.worker,r)}function Hl(e,r){return ar.has(e.run.status)?!1:T_(e,r)!==null}function og(e,r,t=Date.now()){if(lr(e,t))return!0;if(ar.has(e.run.status)||Hl(e,r))return!1;let n=yo(e);return ie(n)?!1:!!lr(e,t)}qo();X();function sg(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(lr(e))return!0;let n=r??yo(e);return!!(!ie(n)||ko(n)||Ae(n.changedFiles).length>0||St({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:et(n.finalResult)}).blocked)}we();w();import{existsSync as ag,mkdirSync as D_,writeFileSync as ig}from"node:fs";import ri from"node:path";function lg(e,r,t){return ri.join(e,"salvage",v(r),v(t))}function cg(e){return ag(ri.join(lg(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function ug(e){let r=lg(e.harnessRoot,e.indexed.runId,e.indexed.workerName);D_(r,{recursive:!0});let t=ri.join(r,"salvage.patch"),n=!1;if(ag(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
38
- `);a.trim()&&(ig(t,a.endsWith(`
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(`
39
41
  `)?a:`${a}
40
- `),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return ig(ri.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
41
- `),o}var M_=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function U_(e){return!M_.has(e.skipReason)||lr(e.indexed,e.now)?!1:cg({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(ug({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function W_(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(ar.has(r.run.status)||e.liveness&&Hl(r,e.liveness)||e.liveness&&ie(Ll(r,e.liveness))&&!lr(r))?n:t}function L_(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:W_(e)}function B_(e,r){if(e.harnessRoot?.trim())return ti.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${ti.sep}runs${ti.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function dg(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=L_(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(lr(r,a))return"active_worker";let c=Ll(r,e.liveness),u=B_(e,r),d=p=>u&&U_({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(sg(r,c)){let p=d("completion_blocked");if(p)return p}if(Wl(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(og(r,e.liveness,a)||!ie(c))return"run_still_active";if(ko(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(St({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:et(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 Fl(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(ti.resolve(o))||r&&lr(r)?"active_worker":r&&Wl(r,e.gitStatusCache)?"dirty_worktree":null}function pg(e){return Fl(e)}var mg=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function fg(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)mg.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||mg.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as yg,readdirSync as Rg,statSync as $_}from"node:fs";import bg from"node:path";D();xe();import gg from"node:path";w();function F_(e,r){return ei(e,r)}function hg(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Go(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=C(gg.join(Rn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=gg.resolve(l.worktreePath);F_(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Gf(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function kg(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function K_(e,r){try{let t=$_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function j_(e,r){let t=bg.join(e,"runs",r,"run.json");return yg(t)?C(t,null):null}function vg(e){try{return Rg(e).length===0}catch{return!1}}function Sg(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(kg(n,r,t,i.liveRunKeys)||!vg(n))return"run_still_active";let a=j_(r,t);return a&&!ar.has(a.status)&&!Qr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function wg(e){if(!yg(e.worktreesDir))return[];let r=[],t;try{t=Rg(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=bg.join(e.worktreesDir,o);vg(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:K_(s,e.now)})}return r}we();import{existsSync as Kl,rmSync as Dg}from"node:fs";import{execFileSync as V_}from"node:child_process";import{existsSync as Cg,readdirSync as G_,statSync as Y_}from"node:fs";import J_ from"node:path";var q_=2500;function z_(e,r=q_){if(!Cg(e))return 0;try{let n=V_("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function cr(e,r=5e4){if(!Cg(e))return 0;let t=z_(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=G_(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=J_.join(i,l),u;try{u=Y_(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as eP,rmSync as rP}from"node:fs";xe();import{lstatSync as X_,readdirSync as Q_}from"node:fs";function xg(e){try{let r=X_(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 _g(e,r=32){let t=xg(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Q_(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=xg(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Z_}from"node:child_process";import Ag from"node:path";import Ie from"node:path";function Pg(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 ni(e,r,t){return Pg(e,r,t,"node_modules")}function oi(e,r,t){return Pg(e,r,t,".next")}function si(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 Eg(e,r,t){let n=Ie.resolve(e);return ni(n,r,t)===null||oi(n,r,t)===null||si(n,r,t)===null}function Og(){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 Ig(e){let r=Z_("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Ng(e,r,t){if(!Eg(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=Ig(["chown","-R",`${n}:${o}`,Ag.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Ig(["rm","-rf",Ag.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 $l="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 tP(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Tg(e,r,t={}){if(!eP(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?kr(n):null,i=e.bytes??cr(e.path)??void 0,a=t.removePath??rP,l=t.hasForeignOwnedEntry??_g;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!tP(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Og();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${$l}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Ng(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}; ${$l}`}}}function jl(e){let r=e.harnessRoot;return!r||!Kf(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Vl(e,r){let t=jl(e);if(t)return t;let n=Tg(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Mg(e,r){return Vl(e,r)}function Ug(e,r){return Vl(e,r)}function Wg(e,r){return Vl(e,r)}function Lg(e,r){let t=jl(e);if(t)return t;if(!Kl(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??cr(e.path);return Dg(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function Bg(e,r){let t=jl(e);if(t)return t;if(!Kl(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??cr(e.path);return n&&pe(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Kl(e.path)&&Dg(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as ii,readdirSync as ai,statSync as nP}from"node:fs";import ze from"node:path";function Gl(e,r){try{let t=nP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Fg(e,r){let t=ze.relative(r,e);return t===""||!t.startsWith("..")&&!ze.isAbsolute(t)}function Hg(e,r,t,n){let o=[];for(let s of Ul){if(s===".next")continue;let i=ze.join(e,s);if(!ii(i))continue;let a=ze.resolve(i);t.has(a)||Fg(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:Gl(a,r.now)}))}return o}function $g(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Hg(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ii(e.worktreesDir))return r;for(let n of ai(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=ze.join(e.worktreesDir,n.name);for(let s of ai(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=ze.join(o,s.name);r.push(...Hg(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Kg(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;ii(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:Gl(a,e.now)})))}if(!t||!ii(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(ze.resolve(i.worktreePath));for(let i of ai(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=ze.join(e.worktreesDir,i.name),l;try{l=ai(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=ze.resolve(ze.join(a,c.name));o.has(u)||s.has(u)||Fg(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Gl(u,e.now)}))}}return n}import{existsSync as Gg,readdirSync as jg,statSync as oP}from"node:fs";import Qt from"node:path";var sP=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function iP(e,r){try{let t=oP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function aP(e,r){let t=Qt.relative(r,e);return t===""||!t.startsWith("..")&&!Qt.isAbsolute(t)}function lP(e,r,t,n,o,s){if(!Gg(n))return;let i=Qt.resolve(n);r.has(i)||aP(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:iP(i,t.now)}))}function Vg(e,r,t,n,o){for(let s of sP)lP(e,r,t,Qt.join(n,s.dirName),s.kind,o)}function Yg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Vg(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Gg(e.worktreesDir))return r;for(let n of jg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Qt.join(e.worktreesDir,n.name),s;try{s=jg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Qt.join(o,i.name);Vg(r,t,e,a,{runId:n.name,worker:i.name})}}return r}we();import{existsSync as Jg,statSync as cP}from"node:fs";import Xe from"node:path";function uP(e,r){try{let t=cP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function dP(e){let r=[],t=null;for(let n of e.split(`
42
- `)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function pP(e,r){let t=Xe.relative(Xe.resolve(r),Xe.resolve(e));return t!==""&&!t.startsWith("..")&&!Xe.isAbsolute(t)}var mP=200;function qg(e){if(!e.includeOrphans||!Jg(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Xe.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Xe.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=pe(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=dP(a);for(let c of l){if(i>=mP)break;let u=Xe.resolve(c.path);if(u===Xe.resolve(s)||!pP(u,e.worktreesDir)||t.has(u)||o.has(u)||!Jg(u))continue;let f=Xe.relative(e.worktreesDir,u).split(Xe.sep),m=f[0],p=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:p,repo:s,ageMs:uP(u,e.now)})}}return n}D();w();import Ro from"node:path";function zg(e,r){let t=Ro.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ro.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Xg(e){let r=new Map;for(let t of Go(e))for(let n of Object.keys(t.workers||{})){let o=Ro.join(Rn(e,t.id),"workers",v(n),"worker.json"),s=C(o,void 0);s?.worktreePath&&r.set(Ro.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ro.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function bo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function rt(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&&bo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!bo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??rt("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??rt("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??rt("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??rt("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??rt("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||bo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=bo("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&&!bo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=rt("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,h=rt("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(h)&&h>0?Math.floor(h):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:f,storagePerRunEntryCap:p,byteAccountingEntryCap:k}}function rh(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 th}from"node:fs";import zl from"node:path";w();var fP=1800*1e3;function nh(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??fP;if(!th(e.worktreePath))return null;if(e.runId&&e.workerName){let c=zl.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=C(zl.join(c,"worker.json"),void 0);if(u&&Bl(u,r,t))return"active_worker"}let n=zl.join(e.worktreePath,".git");if(!th(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
43
- `).map(c=>c.trim()).filter(c=>c.length>0);if(Ae(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}xe();import{existsSync as gP,readdirSync as oh,statSync as hP}from"node:fs";import kP from"node:path";function sh(e={}){let r=ce(e.harnessRoot??Re()),t=kr(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!gP(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=oh(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=kP.join(t,u.name);try{let f=hP(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of oh(d,{withFileTypes:!0}))f.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let f=e.perRunEntryCap??5e4;if(f<=0)s=null;else{let m=cr(d,f);m===null?s=null:s+=m}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}xe();import{existsSync as yP}from"node:fs";import{homedir as RP}from"node:os";import ih from"node:path";var bP=["/var/tmp/kynver-harness",ih.join(RP(),".openclaw","harness")];function Xl(e,r,t){if(!t?.trim())return;let n=ce(t.trim());e.has(n)||(e.add(n),r.push(n))}function vP(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 ah(e={}){let r=new Set,t=[];Xl(r,t,e.harnessRoot??Re());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Xl(r,t,o);if(vP(e))for(let o of bP){let s=ih.resolve(o);!r.has(s)&&yP(s)&&Xl(r,t,s)}return t}yn();function SP(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function wP(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function lh(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=wP("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 ch(e,r){if(!r.pressured)return e;let t=e.execute||!SP("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}}kn();import{unlinkSync as CP}from"node:fs";function li(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function uh(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function xP(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function ci(e={}){let r=e.execute===!0||li("KYNVER_WSL_CRASH_DUMP_EXECUTE")||li("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||li("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??uh("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=gr({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=xP(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{CP(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 dh(e){return e?li("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>uh("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}kn();function Oe(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}we();var ui=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 _P}from"node:child_process";import{existsSync as PP}from"node:fs";import EP from"node:path";var AP=5e3;function IP(e,r){if(!PP(EP.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=_P("git",r,{cwd:e,encoding:"utf8",timeout:AP}),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 ph(e){let r=IP(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
44
- `).map(t=>t.trim()).filter(Boolean)}var di=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=ph(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=Qr(r);return this.cache.set(r.id,n),n}};function OP(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function mh(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:OP(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 NP(e={}){let r=e.harnessRoot?ce(e.harnessRoot):Re(),t=ah({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function TP(e){return typeof e=="string"?{reason:e}:e}function Zt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function mi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:cr(e.path,t)}}function fh(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 DP(e,r){return e.kind==="remove_next_cache"?Ug(e,r):Mg(e,r)}function MP(e,r,t){return e.kind==="remove_next_cache"?oi(e.path,r,t):ni(e.path,r,t)}function UP(e){let r=new Map;for(let t of e)for(let[n,o]of Xg(t))r.set(n,o);return r}function gh(e,r){return e.runId&&e.worker?Ne.join(r,e.runId,e.worker):Ne.resolve(e.path,"..")}function Ql(e={}){let r=ql(e),t=lh();r=ch(r,t);let n=NP(e);Oe("scan",`${n.scanRoots.length} harness root(s)`);let o=hg(n.scanRoots,n.now),s=r.finalizeStaleRuns?mo().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=UP(n.scanRoots);Oe("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new pi,gitStatusCache:new di,gitRevCache:new ui},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 B=Ne.join(I,"worktrees"),Ir=zg(i,I),Q={harnessRoot:I,worktreesDir:B,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Ir,now:n.now},ur=r.scanDependencyCaches?Yg(Q):[];Oe("dependency",r.scanDependencyCaches?`${ur.length} cache candidate(s) at ${I}`:"skipped (worktree-only sweep)");let st=0;for(let he of ur){if(f())break;st+=1,st%50===0&&Oe("dependency",`${st}/${ur.length} evaluated`);let G=Ne.resolve(he.path);if(u.has(G))continue;u.add(G);let W={...he,path:G},ke=MP(W,I,B);if(ke){Zt(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}let ve=gh(W,B),dr=Ir.get(Ne.resolve(ve))??null,Se=Fl({indexed:dr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){Zt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(DP(mi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of $g(Q)){if(f())break;let G=Ne.resolve(he.path);if(u.has(G))continue;u.add(G);let W={...he,path:G},ke=si(W.path,I,B);if(ke){Zt(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}let ve=gh(W,B),dr=Ir.get(Ne.resolve(ve))??null,Se=pg({indexed:dr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ve,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Se){Zt(l,W.path,Se),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Wg(mi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let We=[...Kg(Q),...qg(Q)];Oe("worktrees",`${We.length} candidate(s) at ${I}`);let it=new Set,Le=0;for(let he of We){if(f())break;Le+=1,Le%50===0&&Oe("worktrees",`${Le}/${We.length} evaluated`);let G=Ne.resolve(he.path);if(it.has(G))continue;it.add(G);let W={...he,path:G},ke=Ir.get(Ne.resolve(W.path))??null,ve=ke?null:nh({worktreePath:W.path,harnessRoot:I,runId:W.runId,workerName:W.worker,now:n.now}),dr=dg({indexed:ke,worktreePath:Ne.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:ve,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:I,writeSalvageEvidence:r.execute});if(dr){let{reason:Se,detail:Oo}=TP(dr);Zt(l,W.path,Se,Oo),c.push({...W,executed:!1,skipped:!0,skipReason:Se});continue}c.push(Bg(mi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of wg({harnessRoot:I,worktreesDir:B,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let G=Ne.resolve(he.path);if(u.has(G))continue;u.add(G);let W={...he,path:G},ke=W.runId??Ne.basename(G),ve=Sg({harnessRoot:I,runId:ke,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ve){Zt(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}c.push(Lg(mi(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,h=0,k=0,g=0,y=0;for(let I of c)I.bytes&&(m+=I.bytes),!I.skipped&&!I.executed&&I.bytes&&(h+=I.bytes),I.executed?(g+=1,k+=I.bytes??0,I.kind==="remove_run_directory"&&(p+=1)):I.skipped&&(y+=1,I.skipReason==="dry_run"&&I.bytes&&(h+=I.bytes));let x=r.accountBytes?sh({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,_=gr(),P=r.execute&&dh(_),A=P?ci({execute:!0}):null,Y=_?{observed:!0,execute:P,dumpCount:_.dumpCount,totalBytes:_.totalBytes,removedCount:A?.removed.length??0,removedBytes:A?.removedBytes??0,executables:_.executables,path:_.path,reason:_.reason}:void 0;A&&A.removed.length>0&&(k+=A.removedBytes,g+=A.removed.length,Oe("wsl-crashes",`removed ${A.removed.length} dump(s), ${A.removedBytes} bytes`)),Oe("complete",`${c.length} action(s), ${y} skipped, ${g} removed`);let K=fg(c,l),F=mh({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:fh(c,l)},...x?{storage:x}:{},...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:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:fh(c,l)},...x?{storage:x}:{},...K.length>0?{preservedLivePaths:K}:{},...p>0?{removedRunDirectories:p}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:F}}function hh(e){let r=rh(e);return Ql({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function kh(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as VP}from"node:fs/promises";import{homedir as GP}from"node:os";import tt from"node:path";$o();import{existsSync as yh,readFileSync as WP}from"node:fs";import fi from"node:path";var bh={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},vh=Object.keys(bh),Zl={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},LP={"@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 Rh(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 gi(e,r){let t=Rh(e),n=Rh(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 Sh(e,r){return gi(e,r)>=0}function BP(e){let r=null;for(let t of e)(!r||gi(t,r)>0)&&(r=t);return r}function HP(e){try{let r=JSON.parse(WP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function FP(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=fi.resolve(o);if(yh(fi.join(s,"packages/kynver-runtime/package.json"))&&yh(fi.join(s,"package.json")))return s}return mt({cwd:e})?.repo??null}function wh(e={}){let r=e.cwd??process.cwd(),t=FP(r,e.repoRoot);if(!t)return{};let n={};for(let o of vh){let s=fi.join(t,LP[o]),i=HP(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function $P(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function KP(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&Sh(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${$P(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=BP(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 Ch(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=vh.map(i=>{let a=bh[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,h=f?Sh(f,a):!1,k=h?[]:KP({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),g=h?`${Zl[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${Zl[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:Zl[i],minimumVersion:a,effectiveVersion:f,effectiveSource:m,ok:h,summary:g,remediation:k}}),n=t.filter(i=>!i.ok),o=n.length===0,s=o?"All managed AgentOS packages meet memory-cost minimum versions.":`Memory-cost package guard blocked ${n.length} stale package(s): ${n.map(i=>`${i.packageName} < ${i.minimumVersion}`).join("; ")}.`;return{ok:o,summary:s,packages:t}}var ec=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
45
- `)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function xh(e={}){let r=Ch(e);if(!r.ok)throw new ec(r);return r}var YP=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function en(e){let r=e?.trim();return r||null}function JP(e){return[...new Set(e.filter(r=>!!r))]}function qP(){let e=GP(),r=en(process.env.KYNVER_OPENCLAW_NPM_ROOT)??en(process.env.OPENCLAW_NPM_ROOT)??tt.join(e,".openclaw","npm"),t=en(process.env.KYNVER_NPM_GLOBAL_ROOT)??en(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(en(process.env.NPM_CONFIG_PREFIX)?tt.join(en(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):tt.join(e,".npm-global","lib","node_modules"));return JP([tt.join(r,"lib","node_modules"),tt.join(r,"node_modules"),t.endsWith("node_modules")?t:tt.join(t,"lib","node_modules")])}async function zP(e){try{let r=JSON.parse(await VP(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function XP(e){let r=qP(),t=new Set,n=[];for(let o of r){let s=tt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function hi(e=new Date().toISOString()){let r={};for(let t of YP){let n=null;for(let o of XP(t)){let s=await zP(o);s&&(!n||gi(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 QP}from"node:child_process";var ZP=1e4,eE=4*1024*1024,_h=(e,r,t)=>{try{let n=QP(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??ZP,maxBuffer:eE});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 ki(e,r,t){return`${e} ${r} ${t}`}function vo(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 Ph(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 rE=8e3,tE=30,nE=100,oE=400,sE=3600*1e3,rc=0;function nc(){return Date.now()<rc}function iE(e){let r=`${e.stdout}
46
- ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Eh(e){iE(e)&&(rc=Math.max(rc,Date.now()+sE))}function tc(e,r){if(nc())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Eh(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function aE(e,r,t,n){if(nc())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Eh(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function oc(e){return nc()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function lE(e){return Array.isArray(e)?e.map(r=>rn(r)).filter(r=>r!==null).slice(0,tE).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function cE(e,r,t){let n=tc(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:lE(n.statuses)}:null}var Ah={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:oc,collect(e,r){let t=Ph(e);if(!t)return null;let n=aE(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=rn(n.author),s=rn(n.mergeCommit),i=rn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,rE):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>rn(u)).filter(u=>u!==null).slice(0,nE).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=>rn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,oE):[];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}}},Ih={provider:"github",kind:"commit_status",version:"1",isAvailable:oc,collect(e,r){let t=vo(e);return t?cE(r,t.repo,t.sha):null}},Oh={provider:"github",kind:"branch_reachability",version:"1",isAvailable:oc,collect(e,r){let t=vo(e);if(!t)return null;let n=tc(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=tc(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 uE=5,dE=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,pE=/https:\/\/[^\s]+/,Nh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=vo(e);if(!t)return null;let n=r("vercel",["list","--prod","--meta",`githubCommitSha=${t.sha}`]);if(!n.ok)return null;let o=[];for(let s of n.stdout.split(`
47
- `)){let i=s.match(pE)?.[0];if(!i)continue;let a=s.match(dE)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=uE)break}return{found:o.length>0,deployments:o}}};var sc=[];function yi(e){sc.some(r=>r.provider===e.provider&&r.kind===e.kind)||sc.push(e)}function Th(e,r){return sc.find(t=>t.provider===e&&t.kind===r)??null}function Dh(){yi(Ah),yi(Ih),yi(Oh),yi(Nh)}var mE=1,fE=25e3;function Mh(e,r={}){Dh();let t=r.run??_h,n=r.now??(()=>new Date),o=r.maxSubjects??mE,s=Date.now()+(r.deadlineMs??fE),i=new Set,a=e.filter(m=>{let p=ki(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=ki(m.provider,m.kind,m.subject),h=n(),k=r.cache?.get(p,h)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let g=Th(m.provider,m.kind);if(!g){d.skipped.push({...m,reason:"no_recipe"});continue}let y=`${g.provider} ${g.kind}`,x=f.get(y);if(x===void 0&&(x=g.isAvailable(t),f.set(y,x)),!x){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 _=g.collect(m.subject,t);if(_==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let P={provider:m.provider,kind:m.kind,subject:m.subject,payload:_,observedAt:n().toISOString(),collectorVersion:g.version};d.items.push(P),r.cache?.set(p,P,n())}return d}D();w();import RE from"node:path";D();w();import Uh from"node:path";var gE="provider-evidence-wanted.json",hE="provider-evidence-cache.json",kE=600*1e3;function Wh(e){return Uh.join(E(e),gE)}function yE(e){return Uh.join(E(e),hE)}function Lh(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 Bh(e){let r=C(Wh(e),null);return Lh(r?.wanted)}function Hh(e,r){se(Wh(e),{savedAt:new Date().toISOString(),wanted:r})}function Fh(e,r={}){let t=r.ttlMs??kE,n=yE(e),s={...C(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(se(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function $h(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Lh(r):null}var bE="provider-evidence-shared-cache.json",vE=6e4,SE=1,wE=1;function ic(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 CE(){return RE.join(Z().harnessRoot,bE)}function xE(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?SE:wE;return ic(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,ic("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Kh(){return ic("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",vE)}function _E(e){return Math.floor(e.getTime()/6e4)*6e4}function PE(e){return`${e.provider}:${e.kind}`}function jh(e,r={}){let t=Fh(e,{ttlMs:r.ttlMs??Kh()}),n=r.file??CE(),o=C(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Kh(),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=xE(u.provider);if(m===0)return!0;let p=PE(u),h=_E(f),k=i[p];return!k||k.windowStartMs!==h?(i[p]={windowStartMs:h,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 AE(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function IE(e,r){let t=L(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=C(EE.join(E(t.id),"workers",v(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Pt(a))continue;if(Vr(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=U(a);if(!ie(l))continue;let c=vt({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await no({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 OE(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 hi(),c=vs(r),u=null;try{let h=Bh(r);if(h.length>0){let k=jh(r);u=Mh(h,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=bs(r),f=await Hr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:so(r),resourceGate:t,boxResourceSnapshot:Zs(t,{harnessRunId:r,boxKind:Fe(b())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Ge({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=$h(f.response);if(m)try{Hh(r,m)}catch{}let p=sp(f);if(p)try{op(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 ac(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";so(r);let o=await tg(t,e),s=rg(o),i=nr({runId:r,configuredMaxWorkersOverride:s}),a=kh()?hh(r):void 0,l=await OE(t,r,i,e,a),c=Wm(r,l),u=await Ns(r,e),d=await IE(r,e),f=nr({runId:r,configuredMaxWorkersOverride:s}),m=go(),p=await eg(r,e),h=Uf(f,l),k=h.maxStarts,g=AE()?await ho({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},y=null,x=0,_=Mf(l),P=k;if(n&&P>0&&_.length>0){let Y=Math.min(P,_.length),K=await xl({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},Y),F=zt(K);x+=F,P=Math.max(0,P-F),y={exactTargetTaskIds:_,exact:K,startedCount:x}}if(n&&P>0){let Y=await xl({...e,run:r,agentOsId:t},P),K=zt(Y);x+=K,y=y&&typeof y=="object"?{...y,broad:Y,startedCount:x}:Y}else!n||k<=0?y||(y={ok:!0,skipped:!0,reason:n?f.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:h,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):y&&typeof y=="object"&&(y={...y,broadSkipped:!0,startedCount:x});let A=!h.underutilized&&k===0&&d.length===0&&x===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:u,completedWorkers:d,staleReconcile:m,harnessCleanup:a,planProgressSync:p,completionAckSync:c,operatorTick:l,sweep:g,dispatchAdvice:h,dispatch:y,idle:A}}N();import zE from"node:os";import{readFileSync as NE}from"node:fs";import{homedir as TE,platform as DE}from"node:os";import ME from"node:path";import{execFileSync as UE}from"node:child_process";function Vh(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 WE(){if(DE()==="darwin")try{let e=UE("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Vh(e.trim())}catch{return null}try{let e=NE(ME.join(TE(),".claude",".credentials.json"),"utf8");return Vh(e)}catch{return null}}function Gh(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=WE();if(s)return{kind:"oauth",token:s}}return null}var LE="You are Claude Code, Anthropic's official CLI for Claude.";function BE(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function HE(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 FE(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*$E(e){let r=e.getReader(),t=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await r.read();if(o)break;n+=t.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
48
- `))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{r.releaseLock()}}function KE(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function Yh(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:LE},{type:"text",text:n.system}]);let i=await fetch(`${KE()}/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=BE();for await(let l of $E(i.body)){let c=HE(a,l);c&&e.onDelta(c)}return FE(a)}var tn=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 YE}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"]),VE=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),GE=["--secret","--api-key","--keeper-child"];function Jh(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(GE.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
49
- `)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:jE.has(t)?{ok:!0,mutating:!1}:VE.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var JE=10*6e4,qE=5e3,qh=2e5;async function zh(e,r,t={}){let n=Jh(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??JE,i=new tn(r);return new Promise(a=>{let l=0,c=!1,u=YE(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=qh)return;let p=m.toString("utf8").slice(0,qh-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"),qE).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 XE=25e3,QE=32e3,ZE=5e3,eA=6e4,Xh=5*6e4,rA=5e3,tA="claude-sonnet-4-6";async function nA(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(),rA);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 Qh(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=oe();if(!t||!n)return null;let o=await nA(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:zE.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||tA,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function oA(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),QE),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:XE}),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 nt(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 sA(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await zh(n,s=>{nt(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await nt(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await nt(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 iA(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||nt(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new tn(s),a=Gh(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await nt(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Yh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await nt(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 nt(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 lc(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Zh(e){let r=await Qh();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:Xh}));!r&&!e.shouldStop();){if(!oe()||!b().agentOsId?.trim()||(await lc(Xh,e.shouldStop),e.shouldStop()))return;r=await Qh()}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 oA(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await lc(eA,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await sA(r,t):await iA(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await lc(ZE,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var aA=6e4,lA=5*6e4,cA=10,uA=250;async function cc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(uA,t);await mr(n),t-=n}}async function Ri(e){Wt();let r=String(T(String(e.run||""),"--run")),t=String(T(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):aA,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Fn();a.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:a.resolved?.defaultRepo??null,configPath:a.configPath}));let l=Ud(b());l.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:l.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:l.box.boxKind,workerCapSource:l.workerCapSource,maxConcurrentWorkers:l.maxConcurrentWorkers}));let c=sr(),u=Zh({shouldStop:()=>s}).catch(f=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:f instanceof Error?f.message:String(f)}))}),d=!1;for(;!s;)try{Bd({agentOsId:t,runId:r,instructionBundleVersion:Lr()});let f=await ha(e.secret?String(e.secret):void 0,t);if(!f.ok){d||(d=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:f.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await cc(o,()=>s);continue}d&&(d=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Dd({agentOsId:t,baseUrl:pd(e.baseUrl?String(e.baseUrl):void 0),secret:f.secret});let m=await ac({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...m})),c.tickEnabled){let g=bs(r);if(g&&!g.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:g.holderBoxId}));else{let y=await Lt({env:c,agentOsIdFilter:t});y.enabled&&(y.fired>0||y.errors>0||y.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...y}))}}m.idle?i++:i=0;let p=Math.floor(Ut("daemon.maxIdleStreak",cA)),h=Math.floor(Ut("daemon.idleIntervalMs",lA)),k=i>=p?h:o;await cc(k,()=>s)}catch(f){console.error(JSON.stringify({event:"daemon_tick_error",error:f.message})),await cc(o,()=>s)}await u,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}N();import{spawn as dA}from"node:child_process";w();var pA=15*6e4,ek=2*6e4,rk=1e4,mA=5e3,fA=5*6e4,gA=30*6e4,tk=5e3;function hA(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:pA}function bi(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 kA(e,r=mA,t=fA){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function yA(e,r,t=gA){return r-e>=t}function ot(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function RA(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 vi(e,r=process.argv.slice(2)){let t=String(T(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=hA(e.stallMs),o=RA(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,ot("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),ot("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=dA(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),ot("child_spawned",{pid:a.pid??null}),a.on("exit",(k,g)=>{d=!0,f=k,m=g});!d&&!i&&(await mr(tk),!(d||i));){if(Date.now()-u<ek)continue;let k=Hd(t),g=k&&k.pid===a.pid?k:null;if(g&&Fd(g,n)){ot("stall_detected",{pid:a.pid??null,lastBeatAt:g.observedAt,stallMs:n}),a.kill("SIGTERM"),await mr(rk),d||a.kill("SIGKILL");break}if(!g&&Date.now()-u>n+ek){ot("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await mr(rk),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await mr(tk);if(i)break;let p=Date.now();yA(u,p)&&(l=0),l+=1;let h=kA(l);ot("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:h}),await mr(h)}ot("stopped",{agentOsId:t})}we();D();import{existsSync as PA,mkdirSync as EA}from"node:fs";import AA from"node:path";D();Tr();import{existsSync as bA,readFileSync as vA}from"node:fs";import nk from"node:path";X();w();function SA(e){if(!e||!bA(e))return 0;try{return vA(e,"utf8").trim().length}catch{return 0}}function wA(e,r){let t=nk.join(E(e.id),"workers",v(r),"worker.json"),n=C(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=U(n,{base:e.base,baseCommit:e.baseCommit}),s=SA(n.heartbeatPath)===0,i=!o.finalResult&&!o.alive,a=typeof n.completionBlocker=="string"&&n.completionBlocker.length>0;return{worker:r,workerStatus:n.status,attention:o.attention.state,attentionReason:o.attention.reason,missingHeartbeat:s,missingFinalResult:i,landingBlocked:_t(o),completionBlocked:a}}function CA(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 xA(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 _A(e){let r=0;for(let t of fe(e)){let n=nk.join(E(e.id),"workers",v(t),"worker.json"),o=C(n,void 0);if(!o)continue;let s=U(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function So(){return go(),z().map(e=>{let t=fe(e).map(d=>wA(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}=xA(t),c=_A(e),u=Cn(e.status,t.map(d=>({attention:d.attention,status:d.workerStatus})));return{id:e.id,name:e.name,status:e.status,effectiveStatus:u,repo:e.repo,createdAt:e.createdAt,openWorkerCount:c,attention:a,attentionReason:l,finalizeBlockedReason:CA({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function ok(){console.log(JSON.stringify(So(),null,2))}w();function IA(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ke();return t?t.repo:(T("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Si(e){let r=Bm(IA(e));iu(r);let t=e.id?Fs(String(e.id)):ru(String(e.name||"run")),n=E(t);PA(n)&&OA(`run already exists: ${t}`),EA(n,{recursive:!0});let o=String(e.base||"origin/main"),s=pe(r,["rev-parse",o]).trim(),i={id:t,name:String(e.name||t),repo:r,base:o,baseCommit:s,status:"created",createdAt:new Date().toISOString(),workers:{}};se(AA.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 sk(){ok()}function OA(e){console.error(e),process.exit(1)}D();import{existsSync as Ci}from"node:fs";async function wi(e=sr()){let r=await Br(e.storePath).catch(()=>[]),t=await Rs(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=ks(e),s="disabled";return o?s="kynver-cron-daemon":process.env.QSTASH_TOKEN?.trim()&&(s="qstash"),{primary:s,env:{storePath:e.storePath,statePath:e.statePath,tickEnabled:e.tickEnabled,fireBaseUrl:e.fireBaseUrl,missedRunPolicy:e.missedRunPolicy,maxCatchUpPerTick:e.maxCatchUpPerTick,maxRetries:e.maxRetries},jobCount:r.length,stateJobCount:Object.keys(t.jobs).length,credentialsReady:n,daemonPrimary:o}}import{homedir as NA}from"node:os";import TA from"node:path";Rr();var Er="watchdog:board-sweep",DA="*/5 * * * *",MA=["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 ik(e){let r=e.storePath?.trim()||vr(),t=e.envFilePath?.trim()||be,n=TA.join(NA(),".kynver","config.json"),o=`/api/agent-os/by-id/${e.agentOsId}/scheduler/fire`,s=[];e.apiBaseUrl?.trim()||s.push("apiBaseUrl \u2014 run `kynver setup --api-base-url \u2026`"),e.agentOsId?.trim()||s.push("agentOsId \u2014 run `kynver setup --agent-os-id \u2026`");let i={KYNVER_API_URL:e.apiBaseUrl,KYNVER_CRON_SECRET:e.cronSecret,KYNVER_CRON_STORE_PATH:r,KYNVER_CRON_TICK_ENABLED:"1",KYNVER_CRON_DAEMON_PRESENT:"1"},a=["OPENCLAW_CRON_STORE_PATH","OPENCLAW_CRON_SECRET","OPENCLAW_CRON_FIRE_BASE_URL"],l={deploymentSchedulerProvider:"kynver-cron",apiBaseUrl:e.apiBaseUrl,agentOsId:e.agentOsId,...e.defaultDaemonRunId?{defaultDaemonRunId:e.defaultDaemonRunId}:{}};return{envFilePath:t,configPath:n,storePath:r,envUpdates:i,envRemovals:a,configUpdates:l,deploymentSteps:MA,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:DA,dedupeKey:Er,callbackPath:o}}}Rr();async function nn(e){let r=e.envFilePath??be,t=[],n=sr(),o=await wi(n),s=At(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:Ci(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Ci(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:Ci(n.storePath),summary:Ci(n.storePath)?`cron store present (${n.storePath})`:`cron store missing (${n.storePath})`,remediation:"Run `kynver cron install` to initialize the local store."});let a=(await Br(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===Er);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();w();import{existsSync as hk}from"node:fs";import{createHash as UA}from"node:crypto";function ak(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:${UA("sha1").update(r).digest("hex").slice(0,16)}`}async function uc(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function lk(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await uc(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 ck(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 uc(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??Er,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function uk(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await uc(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 dk(e,r,t=Er){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 pk(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Er&&r.provider==="qstash"&&r.status!=="cancelled")}function WA(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Er&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function mk(e){return WA(e)?{allowed:!0}:{allowed:!1,reason:"Cannot cancel QStash watchdog until hosted KYNVER_SCHEDULER_PROVIDER=kynver-cron is live and a kynver-cron watchdog row exists. Set Vercel env, redeploy, re-run `kynver cron install`, then `--confirm-qstash-removal`."}}Rr();Rr();import{randomBytes as LA}from"node:crypto";function BA(){return LA(32).toString("base64url")}function fk(e=be){let r=ba();if(r)return{secret:r,generated:!1,source:"env"};let n=At(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:BA(),generated:!0,source:"generated"}}os();is();D();function gk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=Z().runsDir;return hk(t)?z().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function xi(e={}){let r=e.execute!==!1,t=b(),n=Qe(e.apiBaseUrl?.trim()||t.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||""),o=e.agentOsId?.trim()||t.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||"",s=fk(),i=ik({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=ts(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=gk(u,e.runId);d&&(u.defaultDaemonRunId=d),ue(u),process.env.KYNVER_API_URL=n,process.env.KYNVER_CRON_SECRET=s.secret,process.env.KYNVER_CRON_STORE_PATH=i.storePath,process.env.KYNVER_CRON_TICK_ENABLED="1";let f=await Zd(i.storePath);l.storeInitialized=f.created||hk(i.storePath);let m=oe();if(m)try{let p=await Wr(o,{baseUrl:n,apiKey:m});Ur(o,p)}catch{}if(!e.skipWatchdog)if(!m)l.watchdog={error:"KYNVER_API_KEY required to register watchdog on server"},a.push("login \u2014 run `kynver login --api-key \u2026` to register watchdog remotely");else try{let p=await ck(n,o,m,void 0,{requireProvider:"kynver-cron"}),h=dk(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:ak(h),spec:h,registeredAt:new Date().toISOString(),paused:!1};await Qd(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let g=await lk(n,o,m),y=pk(g),x=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],_=[];if(y.length)if(e.confirmQstashRemoval){let P=mk(g);if(!P.allowed)a.push(P.reason);else for(let A of y)await uk(n,o,A.id,m),_.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(P=>({id:P.id,provider:P.provider,status:P.status})),removed:_,manualSteps:x}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=gk({...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{L(p)}catch{a.push(`harness run ${p} not found`)}if(l.systemd=ss({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:It()},r),r&&l.systemd.enabled){let h=b();ue({...h,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 nn({config:b(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var HA=["deployment_provider","cron_secret","env_file","cron_store"];function kk(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function FA(e){let r=kk(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=kk(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function $A(e){if(!FA(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await nn({config:e})).checks.filter(n=>HA.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function KA(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 dc(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function yk(e){if(dc(e.args.skipCron))return{action:"skipped"};let r=await $A(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=dc(e.args.installSystemd)||dc(e.args["install-systemd"]),n=await xi({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 KA(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}N();Pe();gn();function Rk(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`)),gt(t.boxKind,o??0))o=4,i.maxConcurrentWorkers=4,i.maxConcurrentWorkersSource="setup-auto",s=!0,n.push(`clamped Forge maxConcurrentWorkers to ${4} (was ${e.maxConcurrentWorkers}; workspace aggregate caps are Ghost-only)`);else if(o!=null){let a=rr(t.boxKind,o);a!==o&&(o=a,i.maxConcurrentWorkers=a,s=!0,n.push(`clamped maxConcurrentWorkers to ${a} for ${t.boxKind} pool`))}return s&&ue(i),{repaired:s,boxKind:t.boxKind,maxConcurrentWorkers:o??4,warnings:n}}is();os();N();Rr();Dn();as();Mn();D();async function bk(e){let r=ls(e.config,e.args),{policy:t}=r;if(!(t.owner==="systemd"&&Tn(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=ss({envFilePath:be,agentOsId:e.agentOsId,runId:e.runId,kynverBin:It()},!0),s=[];if(!o.supported)return s.push(o.note??"systemd user units not supported on this host"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};if(!o.enabled)return s.push(o.note??"systemd unit write/enable failed"),{action:"systemd_guided",owner:"keeper",systemd:o,blockers:s};let i=b();return ue({...i,daemonSupervisionOwner:"systemd"}),console.log(""),console.log(" Daemon supervision: systemd user unit enabled (`kynver daemon` with Restart=always)."),o.unitPath&&console.log(` unit: ${o.unitPath}`),console.log(""),{action:"systemd_installed",owner:"systemd",systemd:o}}function vk(e){return e.action==="systemd_installed"}function Sk(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 VA(e,r){return e.filter(n=>n.repo===r&&!ar.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function wk(e){Wt();let r=b();(!oe()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await hs(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)),Wn(t).ok||(console.error(ps(t)),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(ue({...r,chatUseClaudeOauth:!0}),r=b(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let o=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||Ke()?.repo||"";o||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let s=Rk(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=VA(z(),o)??"",i?console.log(` Reusing run ${i} for ${o}.`):i=Si({...e,repo:o,name:"agent"}).runId),await yk({config:r,agentOsId:t,runId:i,args:e});let a=await bk({config:b(),agentOsId:t,runId:i,args:e});if(vk(a)){console.log("");for(let c of Sk())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(bi(l)){await vi(l,GA(i,t,e));return}await Ri(l)}function GA(e,r,t){if(!Wn(r).ok)throw new Error(ps(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 YA,rmSync as JA}from"node:fs";import pc from"node:path";function qA(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function zA(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function XA(e){let{runId:r,workerName:t}=Je(e),n=me(r,t),o=[...zA(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=qA(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(!YA(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};JA(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=U(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function Ck(e){let r=XA(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}N();import wI from"node:path";An();Ko();An();var QA=/--max-old-space-size=(\d+)/;function ZA(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function mc(){return ZA(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function fc(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(QA.test(t))return r;let o=`--max-old-space-size=${mc()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function on(e=mc()){return`--max-old-space-size=${e}`}ns();N();An();Ko();import{spawnSync as eI}from"node:child_process";function Pi(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _k(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Pi(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Pi(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Pi(e.perWorkerMemBytes,1610612736),reserveBytes:t??Pi(e.memReserveBytes,2147483648)}}var Ei=0;function kc(){Ei+=1}function yc(){Ei=Math.max(0,Ei-1)}function sn(e={}){let r={..._k(),...e},t=e.memAvailableBytes??hn(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Ei,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function rI(e){e<=0||eI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Rc(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=sn({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)rI(Math.min(r,n-Date.now())),o=sn({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as vI}from"node:child_process";w();import{closeSync as sI,existsSync as bc,mkdirSync as iI,openSync as aI,readdirSync as Ek,readFileSync as lI,unlinkSync as Sc,writeFileSync as cI}from"node:fs";import wc from"node:path";import{mkdirSync as tI}from"node:fs";import{tmpdir as nI}from"node:os";import Ai from"node:path";function oI(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Pk(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?Ai.resolve(e):oI()?Ai.join(nI(),"kynver","state","heavy-verification"):Ai.join(qs(),"heavy-verification")}function wo(){return Ai.join(Pk(),"slots")}function an(){let e=wo();return tI(e,{recursive:!0}),e}var ln=120*6e4,vc=1;function uI(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function xo(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function Co(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?uI(e,vc):vc}function dI(e){return`slot-${e}`}function Ak(e,r=wo()){return wc.join(r,`${e}.json`)}function Cc(e){if(!bc(e))return null;try{let r=JSON.parse(lI(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 Ii(e,r=ln){if(!e||!H(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function pI(e,r){let t=Cc(e);if(Ii(t,r))try{Sc(e)}catch{}}function mI(e){return iI(e,{recursive:!0}),e}function Ni(e={}){let r=mI(e.slotsDir??an()),t=e.staleMs??ln,n=0;for(let o of Ek(r)){if(!o.endsWith(".json"))continue;let s=wc.join(r,o),i=bc(s);pI(s,t),i&&!bc(s)&&(n+=1)}return n}function Ik(e={}){let r=e.slotsDir??an(),t=e.staleMs??ln;Ni({slotsDir:r,staleMs:t});let n=[];for(let o of Ek(r)){if(!o.endsWith(".json"))continue;let s=Cc(wc.join(r,o));s&&!Ii(s,t)&&n.push(s)}return n}function Oi(e={}){return Ik(e).length}function cn(e,r={}){if(xo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Co(),reason:null};let t=r.slotsDir??an(),n=r.staleMs??ln,o=r.maxSlots??Co();Ni({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=dI(i),l=Ak(a,t),c=Cc(l);if(c&&Ii(c,n))try{Sc(l)}catch{}else if(c&&!Ii(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=aI(l,"wx");cI(d,JSON.stringify(u,null,2),"utf8"),sI(d);let f=Oi({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=Oi({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function _o(e,r={}){if(!e)return;let t=Ak(e,r.slotsDir??wo());try{Sc(t)}catch{}}function Po(e,r={}){if(xo())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Co(),reason:null};let t=r.slotsDir??an(),n=r.staleMs??ln,o=r.maxSlots??Co();Ni({slotsDir:t,staleMs:n});let s=Oi({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 fI}from"node:child_process";function gI(e){e<=0||fI(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function xc(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=cn(e,n);for(;!s.admitted&&Date.now()<o;)gI(Math.min(t,o-Date.now())),s=cn(e,n);return s}var hI=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,kI=/\b(npm run build\b|next build\b)\b/i,yI=/\b(vercel (build|deploy|--prod))\b/i,RI=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function _c(e){let r=e.trim();return r?RI.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:yI.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:kI.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:hI.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var Ti="heavy_verification_token_required";function Pc(e,r={}){let t=_c(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...Po(e),slotId:null}};if(xo())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Po(e),slotId:null}};let n=r.waitMs??0,o=n>0?xc(e,n,r.pollMs):cn(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Ti,commandClass:t.commandClass,reason:t.reason??o.reason??Ti,verificationGate:o}}xe();import Ec from"node:path";function bI(e){let r=kr(Re()),t=Ec.relative(r,Ec.resolve(e));return t.length>0&&!t.startsWith("..")&&!Ec.isAbsolute(t)}function Ok(e){return bI(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}}ns();function SI(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Nk(e,r){let t=vI(e[0],e.slice(1),{cwd:r.cwd,env:r.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:r.shell,timeout:r.timeoutMs});return{exitCode:t.status??1,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}function Ac(e){let r=e.waitForAdmissionMs??6e5,t=Pc(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:on(),admission:sn(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?Rc(r):sn();if(!s.admitted)return _o(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:on(),admission:s,verificationGate:n,command:e.command};let i=Ok(e.cwd);if(!i.ok)return _o(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:on(),admission:s,verificationGate:n,command:e.command};let a=fc({...process.env,...e.env}),l=on(),c=On();kc();try{let u;if(c){let d=la({cwd:e.cwd,command:["/usr/bin/env",...SI(a),"/bin/bash","-lc",e.command]});u=Nk(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=Nk([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{yc(),_o(o)}}var Ic=["npm run typecheck","npm run test"];function Di(e,r=Ic,t={}){let n=[],o=!0;for(let s of r){let i=Ac({cwd:e,command:s,waitForAdmissionMs:t.waitForAdmissionMs,timeoutMs:t.timeoutMs});n.push({command:s,result:i}),i.ok||(o=!1)}return{passed:o,steps:n}}w();function Tk(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 Dk(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 x of i)s.push(Tk(String(x)));else typeof i=="string"&&s.push(Tk(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:${Cs(u.workerProvider,ir)}`,p=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),h={rowKey:e.row?String(e.row):void 0,rowId:e.rowId?String(e.rowId):void 0,taskId:e.task?String(e.task):void 0,reviewTaskId:e.reviewTask?String(e.reviewTask):void 0,roleLane:n,status:o,note:e.note?String(e.note):void 0,remainingWork:e.remaining?String(e.remaining):void 0,evidence:s.length?s:void 0,executorRef:e.executorRef?String(e.executorRef):f};p!==void 0&&(h.proposed=p);let k=await fetch(c,{method:"POST",headers:De(l),body:JSON.stringify(h)}),g=await k.text(),y=null;try{y=JSON.parse(g)}catch{y=g}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:y},null,2)),process.exit(1)),console.log(JSON.stringify(y,null,2))}function CI(e){let r=T(e.worktree?String(e.worktree):void 0,"worktree"),t=wI.resolve(r),n=Di(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 Mk(e){let r=T(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){CI(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 xI from"node:path";w();function Uk(e){let r=xI.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=Di(r,n.length?n:Ic,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
50
- `)[0]}`)}process.exit(s.passed?0:1)}N();import{readFileSync as _I}from"node:fs";w();var PI=["create","add_version","update_metadata"],EI=["approval_guard","auth","network","server","tool_interruption"];function AI(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:_I(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 Wk(e){let r=T(e.operation?String(e.operation):void 0,"operation");if(!PI.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}=AI(e);a&&ao(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:II(e)},c=await co(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function II(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!EI.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 Lk(){let e=qt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Bk(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await yl({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function Hk(e){let r=e.execute===!0||e.execute==="true",t=e.skipFinalize===!0||e.skipFinalize==="true",n=e.accountBytes===!0||e.accountBytes==="true",o=e.compact===!0||e.compact==="true",s=e.nodeModulesAgeMs,i=s!=null&&s!=="",a=i?Number(s):void 0,l=e.worktreesAgeMs?Number(e.worktreesAgeMs):0,c=e.includeOrphans===!0||e.includeOrphans==="true",u=e.harnessRoot?String(e.harnessRoot):void 0,d=Ql({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)}kn();function Fk(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=gr(),i=s?{...s,dumps:s.dumps.map(a=>({name:a.name,bytes:a.bytes,executableHint:a.executableHint,mtimeMs:a.mtimeMs}))}:{skipped:!0,reason:"not_wsl"};console.log(JSON.stringify(i,null,t?2:0))}function Ar(e,r=2400){if(e==null)return;let n=(typeof e=="string"?e:JSON.stringify(e,null,2)).trim();if(n)return n.length<=r?n:`${n.slice(0,r-1).trimEnd()}\u2026`}function Mi(e){let r=[],t=typeof e.monitorId=="string"?e.monitorId:void 0;if(r.push(t?`Harness monitor tick \xB7 ${e.runId} (${t})`:`Harness monitor tick \xB7 ${e.runId}`),!e.workers.length)return r.push("No workers in scope for this poll."),{primary:r.join(`
51
- `),diagnostic:Ar(e)};for(let i of e.workers){let a=i.autoComplete.eligible?"eligible for auto-complete":"not auto-completing",l=i.autoComplete.blockers.length>0?` (${i.autoComplete.blockers.slice(0,2).join("; ")})`:"";r.push(`\u2022 ${i.worker}: ${i.workerStatus}, ${i.health}${i.healthReason?` \u2014 ${i.healthReason}`:""}; ${a}${l}`),i.taskStatus&&r.push(` Board task: ${i.taskStatus}${i.leaseOwner?` (lease: ${i.leaseOwner})`:""}`)}let n=e.autoCompleted?.filter(i=>i.outcome==="completed"&&i.ok)??[],o=e.autoCompleted?.filter(i=>!i.ok&&i.outcome!=="skipped")??[];n.length&&r.push(`Auto-completed: ${n.map(i=>i.worker).join(", ")} \u2014 AgentOS completion should be posted.`),o.length&&r.push(`Auto-complete blocked: ${o.map(i=>`${i.worker}${i.reason?` (${i.reason})`:""}`).join("; ")}`),e.leaseRenewal?.failed?.length&&r.push(`Lease renew failed for: ${e.leaseRenewal.failed.map(i=>i.worker).join(", ")}`);let s=e.workers.length>0&&e.workers.every(i=>i.autoComplete.terminalVerified)&&(e.autoCompleted?.every(i=>i.ok||i.outcome==="skipped")??!0);return r.push(s?"Next: monitor loop should stop \u2014 all workers terminal and handled.":"Next: monitor will poll again until workers are terminal-verified or max time elapses."),{primary:r.join(`
52
- `),diagnostic:Ar(e)}}import LI from"node:path";D();X();w();X();w();function $k(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!$a(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>xt?{health:"stale",reason:`heartbeat older than ${Math.floor(xt/1e3)}s`}:t.alive&&r.pid&&!H(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}xe();w();import{existsSync as Kk,mkdirSync as MI,readdirSync as UI,unlinkSync as WI}from"node:fs";import Oc from"node:path";function jk(){let{harnessRoot:e}=kt(),r=Oc.join(e,"monitors");return MI(r,{recursive:!0}),r}function un(e,r){return r?`${v(e)}--${v(r)}`:v(e)}function Nc(e){return Oc.join(jk(),`${e}.json`)}function dn(e){return C(Nc(e),void 0)}function pn(e){se(Nc(e.monitorId),e)}function Vk(e){let r=Nc(e);return Kk(r)?(WI(r),!0):!1}function Gk(){let e=jk();if(!Kk(e))return[];let r=[];for(let t of UI(e)){if(!t.endsWith(".json"))continue;let n=C(Oc.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 Tc(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"),Us(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),_t(t)&&n.push(t.attention.reason||"landing gate blocked");let o=ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}function Yk(e,r){return C(LI.join(E(e),"workers",v(r),"worker.json"),void 0)}function Jk(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 qk(e,r){let t=L(e.runId),n=U(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=$k({worker:e,status:n,taskLease:o}),i=Tc({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 Eo(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=Jk(r,t),i=[];for(let p of s){let h=Yk(r,p);h&&i.push(h)}let a=n||i.map(p=>p.agentOsId).find(p=>typeof p=="string"&&p.trim())||void 0,l=i.map(p=>p.taskId).filter(p=>!!p),c=await jt({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>qk(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Ns(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let p of u){if(!p.autoComplete.eligible){f.push({worker:p.worker,outcome:"skipped",ok:!1,reason:p.autoComplete.blockers.join("; ")||"not eligible"});continue}let h=await Vt({run:r,name:p.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:p.worker,outcome:h.outcome,ok:h.outcome==="completed",reason:h.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function zk(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=Jk(r,t),o=[];for(let s of n){let i=Yk(r,s);i&&o.push(qk(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Dc(){return Gk()}function Xk(e){let r=String(e.run||"");T(r,"--run");let t=un(r,e.name?String(e.name):void 0),n=dn(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&H(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),pn(n),Vk(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Mc(e){let r=String(e.run||""),t=String(e.name||"");T(r,"--run"),T(t,"--name");let n=me(r,t),o=L(r),s=U(n,{base:o.base,baseCommit:o.baseCommit}),i=Tc({worker:n,status:s});if(!i.eligible){console.log(JSON.stringify({runId:r,worker:t,outcome:"blocked",blockers:i.blockers,terminalVerified:i.terminalVerified},null,2)),process.exitCode=1;return}let a=await Vt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var BI=5e3,HI=360*60*1e3;async function Qk(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):BI,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):HI,o=Date.now();for(;Date.now()-o<=n;){let s=r?dn(r):void 0;if(s?.stoppedAt)break;let i=await Eo({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Mi({monitorId:r,phase:"tick",...i});if(console.log(a.primary),a.diagnostic&&console.error(`[monitor diagnostic] ${a.diagnostic}`),i.workers.length>0&&i.workers.every(c=>c.autoComplete.terminalVerified&&(c.autoComplete.eligible||c.autoComplete.blockers.some(u=>u.includes("already acknowledged"))))&&i.autoCompleted.every(c=>c.ok||c.outcome==="skipped")){r&&s&&(s.stoppedAt=new Date().toISOString(),pn(s));break}Or(t)}}w();xe();import{spawn as FI}from"node:child_process";import{closeSync as Zk,existsSync as $I,openSync as KI}from"node:fs";import jI from"node:path";function ey(e){let r=e.nodeExecutable??process.execPath,t=js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!$I(n))return;let o=un(e.runId,e.workerName),{harnessRoot:s}=kt(),i=jI.join(s,"monitors",`${o}.log`),a;try{a=KI(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=FI(t.command,c,de({detached:!0,stdio:u,env:process.env}));a!==void 0&&Zk(a),d.unref();let f={monitorId:o,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:d.pid,startedAt:new Date().toISOString(),pollMs:l,logPath:i};return pn(f),{monitorId:o,pid:d.pid,logPath:i,session:f}}catch{if(a!==void 0)try{Zk(a)}catch{}return}}w();async function ry(e){let r=String(e.run||"");T(r,"--run");let t=e.name?String(e.name):void 0,n=un(r,t),o=dn(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=ey({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 ty(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Eo({...e,autoComplete:!1}):zk(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Dc()},null,2))}function ny(e){console.log(JSON.stringify(Xk(e),null,2))}function oy(){console.log(JSON.stringify({monitors:Dc()},null,2))}async function sy(e){await Qk(e)}async function iy(e){let r=await Eo(e);console.log(JSON.stringify(r,null,2))}import{existsSync as VI,readFileSync as GI}from"node:fs";import{dirname as Uc,join as ly}from"node:path";import{fileURLToPath as ay}from"node:url";function YI(e){let r=Uc(ay(e));for(let t=0;t<6;t+=1){if(VI(ly(r,"package.json")))return r;let n=Uc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Uc(ay(e))}`)}function cy(e=import.meta.url){let r=ly(YI(e),"package.json"),t=JSON.parse(GI(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Ui=cy();function JI(e){return e.some(r=>r==="--version"||r==="-v")}function qI(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function uy(e,r=import.meta.url,t){return JI(e)?(qI(cy(r),t),!0):!1}function zI(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 XI(e={}){let[r,t]=await Promise.all([hi(),Promise.resolve(wh({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Ui;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:zI(r),repo:t,self:n}}async function dy(e={}){let r=await XI(e);return xh(r)}function py(e,r){return e?e==="daemon"||e==="start"||e==="worker"||e==="monitor"||e==="run"&&(r==="dispatch"||r==="sweep"||r==="reconcile"||r==="unblock")||e==="cron"&&r==="tick":!1}w();function QI(e){let r=e.trim();return r?So().find(n=>n.name===r&&n.status!=="completed")??null:null}function my(e){let r=String(T(String(e.name||""),"--name")),t=QI(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}D();X();w();N();import ZI from"node:path";function Ao(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function eO(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=ZI.join(E(a.id),"workers",v(l),"worker.json"),u=C(c,void 0);if(!u){s.push(Ao(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(Ao(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Ao(a.id,l,d,f,m,"completion already reported"));continue}let p=U(u);if(p.finalResult){s.push(Ao(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Ao(a.id,l,d,f,m,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let h=await J(e.secret?String(e.secret):void 0,f,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(f)}/tasks/${encodeURIComponent(d)}/release`,g=await re(k,h,{agentOsId:f,leaseOwner:m},{agentOsId:f,baseUrl:r});g.ok===!0||g.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"skipped",reason:`release returned ok:false (likely owner mismatch or already released): HTTP ${g.status}`})}catch(h){i.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"error",reason:h.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function fy(e){let r=await eO(e),t={ok:r.errors.length===0,dryRun:r.dryRun,released:r.released.length,skipped:r.skipped.length,errors:r.errors.length,details:r};console.log(JSON.stringify(t,null,2)),r.errors.length>0&&process.exit(1)}import wy from"node:path";He();N();import{accessSync as rO,constants as tO,existsSync as Wc,readFileSync as nO}from"node:fs";import{homedir as Wi}from"node:os";import Li from"node:path";import{spawnSync as oO}from"node:child_process";xe();function gy(e,r){try{let t=oO(e,r,{encoding:"utf8"}),n=(t.stdout||"").trim(),o=(t.stderr||"").trim();return{ok:t.status===0,stdout:n,stderr:o,error:t.error?.message}}catch(t){return{ok:!1,stdout:"",stderr:"",error:t.message}}}function hy(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function sO(e){if(!Wc(e))return!1;try{return rO(e,tO.W_OK),!0}catch{return!1}}var ky={packageVersion:()=>Ui,commandOnPath:e=>gy(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>gy(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Li.join(Wi(),".kynver","config.json"),credentialsFilePath:()=>Li.join(Wi(),".kynver","credentials"),readCredentials:()=>{let e=Li.join(Wi(),".kynver","credentials");if(!Wc(e))return{hasApiKey:!1};try{let r=JSON.parse(nO(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:hy(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:hy(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:ks(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>Re(),legacyOpenclawHarnessRoot:()=>Li.join(Wi(),".openclaw","harness"),pathExists:e=>Wc(e),pathWritable:e=>sO(e)};function yy(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function iO(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Ry(e){return!!e.openclawCronStorePath}function aO(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function by(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(aO(e,r)&&!yy(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(iO(e,r)&&!yy(e,r)){if(Ry(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(Ry(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}Rr();Dn();Mn();as();function vy(e,r={}){let t=Ot(),n=cs(e,t),o=[],s=r.envFilePath??be,a=At(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=da();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=ca(t,n);return o.push({id:"supervision_guidance",ok:!0,summary:l[0]??"Kynver keeper supervises daemon restarts by default."}),o}Dn();Mn();function Sy(e){let r=e.loadConfig(),t=Ot(),n=cs(r,t),s=vy(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 lO(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 cO(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 uO(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=Ke({config:o}),c=l?Hn(l):null,u=Sd(l);s.push({id:"config_api_base_url",label:"Default API base URL",status:i?"pass":"warn",summary:i??"Not set in config (KYNVER_API_URL / --base-url required per command)",remediation:i?void 0:"Set `apiBaseUrl` via `kynver setup --api-base-url https://\u2026`.",details:{apiBaseUrl:i??null}},{id:"config_agent_os_id",label:"Default AgentOS id",status:a?"pass":"warn",summary:a??"Not set (pass --agent-os-id on daemon/dispatch/worker commands)",remediation:a?void 0:"Set `agentOsId` via `kynver setup --agent-os-id <uuid>`.",details:{agentOsId:a??null,agentOsSlug:o.agentOsSlug??null}},{id:"config_default_repo",label:"Default repo path",status:u.status,summary:l?l.persistedInConfig?`${c.defaultRepo} (config)`:`${c.defaultRepo} (${l.source}, not persisted in ~/.kynver/config.json)`:"Not set in ~/.kynver/config.json (`kynver run create` requires --repo)",remediation:u.remediation,details:{defaultRepo:c?.defaultRepo??null,source:c?.source??null,persistedInConfig:c?.persistedInConfig??!1,harnessRoot:o.harnessRoot?ye(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function dO(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 pO(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 mO(e){let r=e.harnessRoot(),t=wy.join(r,"runs"),n=wy.join(r,"worktrees"),o=ye(r),s=ye(t),i=ye(n),a=e.pathExists(t),l=e.pathExists(n);return{id:"harness_dirs",label:"Harness / daemon directories",checks:[{id:"harness_root",label:"Harness root resolved",status:"pass",summary:o,details:{harnessRoot:o}},{id:"harness_runs_dir",label:"Runs directory ready",status:a&&e.pathWritable(t)?"pass":"warn",summary:a?e.pathWritable(t)?`Writable ${s}`:`Exists but not writable: ${s}`:`Will be created on first run: ${s}`,remediation:a&&!e.pathWritable(t)?`Fix permissions on ${s} or set KYNVER_HARNESS_ROOT to a writable path.`:void 0,details:{runsDir:s,exists:a,writable:e.pathWritable(t)}},{id:"harness_worktrees_dir",label:"Worktrees directory ready",status:l&&e.pathWritable(n)?"pass":"warn",summary:l?e.pathWritable(n)?`Writable ${i}`:`Exists but not writable: ${i}`:`Will be created on first worker: ${i}`,remediation:l&&!e.pathWritable(n)?`Fix permissions on ${i}.`:void 0,details:{worktreesDir:i,exists:l,writable:e.pathWritable(n)}}]}}function fO(e){let r=e.loadConfig(),t=e.envSnapshot(),n=t.kynverApiUrl??r.apiBaseUrl?.trim()??t.openclawCronFireBaseUrl,o=!t.kynverApiUrl&&!r.apiBaseUrl&&!!t.openclawCronFireBaseUrl,s=t.openclawCronSecret||t.kynverRuntimeSecret,i=t.kynverRunnerTokenPrefix?.startsWith("krc1."),l=e.readCredentials().runnerTokenPrefix?.startsWith("krc1.");return{id:"callback_auth",label:"Callback auth / config",checks:[{id:"callback_base_url",label:"Callback base URL configured",status:n?o?"warn":"pass":"fail",summary:n?o?`Using legacy OPENCLAW_CRON_FIRE_BASE_URL (${n})`:n:"No KYNVER_API_URL, config apiBaseUrl, or legacy OpenClaw base URL",remediation:n?o?"Migrate to KYNVER_API_URL or `kynver setup --api-base-url` and drop OPENCLAW_CRON_FIRE_BASE_URL.":void 0:"Set KYNVER_API_URL or run `kynver setup --api-base-url https://\u2026`.",details:{source:t.kynverApiUrl?"KYNVER_API_URL":r.apiBaseUrl?"config.apiBaseUrl":t.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL":"none",baseUrl:n??null}},{id:"callback_auth_mode",label:"Callback auth uses scoped runner token",status:i||l?"pass":s?"warn":"fail",summary:i?"KYNVER_RUNNER_TOKEN scoped token will be sent as X-Kynver-Runner-Token":l?"Saved krc1.* token in ~/.kynver/credentials":s?"Deployment-level KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET in use (legacy headers)":"No callback secret configured",remediation:i||l?void 0:"Mint a scoped token: `kynver runner credential --agent-os-id <id>`. Avoid shared OPENCLAW_CRON_SECRET on user runners.",details:{mode:i||l?"scoped":s?"legacy_global_secret":"missing",legacyHeadersWhenNotScoped:["X-OpenClaw-Cron-Secret","X-Kynver-Runtime-Secret"]}}]}}function gO(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=ye(o),a=ye(s),l=r.opusHarnessRoot?ye(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,f=n.runnerTokenPrefix,m=n.runnerTokenAgentOsId,p=!!f&&(!u||!m||m===u),h=!!d?.startsWith("krc1.")||p&&!!f?.startsWith("krc1.");return{id:"openclaw_hotspots",label:"OpenClaw dependency hotspots",checks:[{id:"hotspot_legacy_harness_root",label:"Legacy ~/.openclaw/harness still active",status:c?"warn":"pass",summary:c?`Harness root is legacy ${a}`:r.opusHarnessRoot?`OPUS_HARNESS_ROOT override in use (${l})`:`Using ${i}`,remediation:c?"Set KYNVER_HARNESS_ROOT=~/.kynver/harness (or run setup), migrate artifacts, retire OPUS_HARNESS_ROOT.":r.opusHarnessRoot?"Prefer KYNVER_HARNESS_ROOT over OPUS_HARNESS_ROOT.":void 0,details:{harnessRoot:i,legacyRoot:a,opusHarnessRoot:l}},{id:"hotspot_openclaw_env_secrets",label:"OpenClaw deployment secrets in runner env",status:r.openclawCronSecret||r.openclawCronFireBaseUrl?"warn":"pass",summary:r.openclawCronSecret||r.openclawCronFireBaseUrl?[r.openclawCronSecret?"OPENCLAW_CRON_SECRET set":null,r.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL set":null].filter(Boolean).join("; "):"No OpenClaw cron env overrides on this runner",remediation:r.openclawCronSecret||r.openclawCronFireBaseUrl?"Move to KYNVER_API_URL + scoped runner tokens; unset OpenClaw cron env on user-hosted runners.":void 0},by(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:h,deploymentSchedulerProvider:t.deploymentSchedulerProvider==="qstash"||t.deploymentSchedulerProvider==="kynver-cron"||t.deploymentSchedulerProvider==="openclaw-cron"?t.deploymentSchedulerProvider:void 0}),{id:"hotspot_lease_source_names",label:"Harness lease/completion source names",status:"pass",summary:"Runtime uses kynver-harness:* lease owners and completion source kynver-harness (OpenClaw names retired in runtime)",details:{leaseOwnerPattern:"kynver-harness:<runId>",completionSource:"kynver-harness",note:"OpenClaw adapter remains optional in packages/kynver-openclaw-agent-os only"}}]}}function Cy(e=ky){let r=[cO(e),uO(e),dO(e),pO(e),mO(e),fO(e),Sy(e),gO(e)],t=lO(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 xy(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Fn();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=Cy();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}N();async function _y(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 Ss(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 Lc=["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"],Bc=["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 hO(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 Hc(e,r=hO()){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:[...Lc],runnerSteps:[...Bc]}}function Py(e){return{...e,deploymentSchedulerProvider:"qstash"}}N();import kO from"node:path";import{homedir as yO}from"node:os";var Ey=kO.join(yO(),".kynver","config.json");function Ay(e=!1){let r=b(),t=Hc(r),n={...t,configPath:q(Ey),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
53
- `),console.log("Deployment (Vercel):");for(let o of Lc)console.log(` - ${o}`);console.log(`
54
- User runner:`);for(let o of Bc)console.log(` - ${o}`);if(console.log(`
42
+ `),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return 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(`
55
57
  This host:`),console.log(` config: ${n.configPath}`),console.log(` deploymentSchedulerProvider: ${t.deploymentSchedulerProvider??"(unset)"}`),console.log(` KYNVER_SCHEDULER_PROVIDER: ${t.runnerEnv.kynverSchedulerProvider??"(unset)"}`),console.log(` KYNVER_CRON_STORE_PATH: ${t.runnerEnv.kynverCronStorePath??"(unset)"}`),console.log(` OPENCLAW_CRON_STORE_PATH (legacy): ${t.runnerEnv.openclawCronStorePath??"(unset)"}`),t.blockers.length){console.log(`
56
58
  Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
57
- No local blockers detected on this runner.`)}function Iy(e=!1){let r=b(),t=Hc(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=Py(r);ue(n);let o={ok:!0,attested:!0,configPath:q(Ey),deploymentSchedulerProvider:"qstash",config:Tt(n),note:"Recorded deploymentSchedulerProvider=qstash in ~/.kynver/config.json. Confirm Vercel has KYNVER_SCHEDULER_PROVIDER=qstash and QSTASH_TOKEN before relying on hosted schedules."};if(e){console.log(JSON.stringify(o,null,2));return}console.log(o.note),console.log(` config: ${o.configPath}`)}async function Oy(e){let r=await wi();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 Ny(e){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 RO(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 Ty(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await xi({execute:r?!1:RO(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)
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)
58
60
  `:`Kynver Cron install
59
61
  `),console.log(` config: ${t.configPath}`),console.log(` env file: ${t.plan.envFilePath}`),console.log(` store: ${t.plan.storePath}`),t.secretGenerated&&console.log(" generated new KYNVER_CRON_SECRET"),t.envFile&&console.log(` env merge: ${t.envFile.changed?"updated":"unchanged"} (${t.envFile.keysWritten.join(", ")||"no key changes"})`),t.watchdog?.remoteJobId?console.log(` watchdog: job ${t.watchdog.remoteJobId} provider=${t.watchdog.provider} local=${t.watchdog.localProviderScheduleId}`):t.watchdog?.error&&console.log(` watchdog: ERROR ${t.watchdog.error}`),t.qstashWatchdog?.found.length){console.log(` qstash watchdog leftovers: ${t.qstashWatchdog.found.length}`);for(let n of t.qstashWatchdog.found)console.log(` - ${n.id} (${n.status})`);t.qstashWatchdog.removed.length&&console.log(` removed: ${t.qstashWatchdog.removed.join(", ")}`)}t.systemd&&console.log(` systemd: ${t.systemd.note??(t.systemd.started?"running":"not started")}`),t.testFire&&!t.testFire.skipped&&console.log(` test fire: fired=${t.testFire.fired} errors=${t.testFire.errors}`),console.log(`
60
62
  Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
61
- Blockers:`);for(let n of t.blockers)console.log(` ! ${n}`);process.exitCode=1;return}console.log("\nInstall complete \u2014 run `kynver cron verify` to re-check.")}async function Dy(e){let r=b(),t=await nn({config:r});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}console.log(`Kynver Cron verify: ${t.ok?"PASS":"FAIL"}
62
- `);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}N();import vO from"node:os";N();Pe();Et();w();var Io={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 bO}from"node:child_process";import My from"node:path";function Uy(e,r,t){let o=[My.join(r,Io.landScript),String(e),...Io.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=bO("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 Wy(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?My.resolve(r):Ke()?.repo??process.cwd()}async function Ly(e){let r=String(T(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Io.defaultRepo).trim(),n=e.fleet===!0||e.fleet==="true",o=e.execute===!0||e.execute==="true",s=e.run?String(e.run):void 0,i=nr({runId:s??"fleet-lane-tick"}),a={...Zs(i,{harnessRunId:s,boxKind:Fe(b()),hostLabel:vO.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=V(e.baseUrl?String(e.baseUrl):void 0),c=await J(e.secret?String(e.secret):void 0,r,{baseUrl:l}),u=`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/tick`,f=(await Hr(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,m=[],p=Wy(e),h=Array.isArray(f?.localActions)?f.localActions:[],k=a.boxId;for(let g of h){if(g.kind==="land_pr"&&typeof g.prNumber=="number"){let y=Uy(g.prNumber,p,o);if(m.push({action:y.action,executed:y.executed,exitCode:y.exitCode}),o&&y.executed){let x=y.exitCode===0,_=typeof g.prUrl=="string"&&g.prUrl.trim()?g.prUrl.trim():`https://github.com/${t}/pull/${g.prNumber}`;try{await Hr(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:_,holderBoxId:k,merged:x})}catch{}}continue}m.push({action:g,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:f,localOutcomes:m}}async function By(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await Ly(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();Tr();Et();import xO from"node:path";w();yr();xn();D();w();import SO from"node:path";function Hy(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Fy(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&&!Hy(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function Fc(e){return typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!H(e.pid)?!1:Qo(e)}function wO(e,r){let t=e.completionBlocker?.trim();if(t&&!Hy(t))return{attention:"blocked",attentionReason:t,status:"blocked"};if(r.heartbeatBlocker)return{attention:"blocked",attentionReason:r.heartbeatBlocker,status:"blocked"};if(Fy(e))return{attention:"done",attentionReason:"completion acknowledged",status:"done"};let n=Fc(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 CO(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||Fy(e)?!1:Fc(e)}function $c(e,r){let t=C(SO.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}=wO(t,n),a=Fc(t),l=CO(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 Kc(e,r){let t={};for(let n of e){let o=r(n).trim()||"unknown";t[o]=(t[o]??0)+1}return t}function $y(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 Ky(e){return e.filter(r=>r.isActive&&r.taskId).map(r=>r.taskId.trim())}function _O(){let e=[];for(let r of z())for(let t of fe(r)){let n=$c(r,t);n&&e.push(n)}return e}function PO(e){let r=e.trim().toLowerCase();if(!r)return null;for(let t of z())for(let n of fe(t)){let s=C(xO.join(E(t.id),"workers",v(n),"worker.json"),void 0)?.taskId?.trim();if(s&&(s.toLowerCase()===r||s.toLowerCase().endsWith(r)))return $c(t,n)}return null}function jc(e){if(e.mode==="full")return{mode:"full",runs:So()};let r=b(),{harnessRoot:t}=Z(),n=z(),o=_O(),s=o.filter(l=>l.isActive).length,i=nr({runId:n[0]?.id??"fleet",activeWorkers:s}),a={generatedAt:new Date().toISOString(),mode:e.mode,harnessRoot:t,agentOsId:r.agentOsId?.trim()||null,resourceGate:i,runCount:n.length,runStatusCounts:Kc(n,l=>l.status),workerCount:o.length,workerStatusCounts:Kc(o,l=>l.status),workerAttentionCounts:Kc(o,l=>l.attention),activeTaskIds:Ky(o),blocked:$y(o).slice(0,25),workers:o};if(e.mode==="task"){let l=e.taskId?.trim()??"",c=l?PO(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:$y(l).slice(0,25),activeTaskIds:Ky(l)}}return a}function Vc(e,r=72){let t=e.trim();return t.length<=r?t:`${t.slice(0,r-1)}\u2026`}function EO(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=${Vc(e.currentTask,48)}`),r.join(" \xB7 ")}function AO(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}: ${Vc(n.reason)}`)}e.blocked.length>8&&t.push(` \xB7 \u2026and ${e.blocked.length-8} more (use kynver status --workers)`)}else t.push("Blocked: none");return t.push("Drilldown: kynver status --workers | --task <id> | --json | --full"),t.join(`
63
- `)}function IO(e){let r=e.resourceGate,t=[];if(t.push(`Worker slots ${r.activeWorkers}/${r.maxConcurrentWorkers} \xB7 available ${r.slotsAvailable}`),e.workers.length===0)return t.push("No active or attention workers."),t.join(`
64
- `);for(let n of e.workers)t.push(EO(n));return t.join(`
65
- `)}function OO(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=${Vc(r.currentTask)}`:null,r.completionBlocker??r.heartbeatBlocker??r.attentionReason??null].filter(n=>!!n).join(" \xB7 ")}function jy(e){return e.mode==="workers"?IO(e):e.mode==="task"?OO(e):AO(e)}function NO(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 Vy(e){let r=NO(e);if(r==="full"){let n=jc({mode:"full"});console.log(JSON.stringify(n,null,2));return}let t=jc({mode:r,taskId:typeof e.task=="string"?e.task:void 0});if(r==="json"){console.log(JSON.stringify(t,null,2));return}console.log(jy(t))}function Gc(e){return e==="help"||e==="--help"||e==="-h"}function Jy(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),Yc(1)}function Yc(e=0){(e===0?console.log:console.error)(["Usage:"," kynver login [--api-key KEY] [--api-base-url URL] (omit --api-key to authorize in the browser)"," kynver bootstrap [--api-base-url URL] [--api-key KEY] [--repo PATH] (login + setup + runner credential in one shot)"," kynver start [--repo PATH] [--api-base-url URL] [--run RUN_ID] [--interval-ms MS] [--chat-oauth] [--install-systemd] (bring your agent online: bootstrap if needed + run + keeper-supervised daemon; --install-systemd enables Linux user unit)"," kynver runner credential [--agent-os-id ID] [--base-url URL]"," kynver setup [--api-base-url URL] [--agent-os-id ID] [--agent-os-slug SLUG] [--box-kind forge|ghost] [--repo PATH] [--discover-repo] [--max-workers N] [--provider claude|cursor] [--chat-oauth]"," kynver daemon --run RUN_ID --agent-os-id AOS_ID [--execute] [--interval-ms MS] [--stall-ms MS] [--no-supervise]"," kynver status [--compact] [--workers] [--task TASK_ID] [--json] [--full] # factory-wide harness summary"," kynver run list"," kynver run resolve --name RUN_NAME"," kynver run status --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--target-task-id TASK_ID] [--executor harness] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--model claude-opus-4-8] [--disk-path /] [--reconcile-stale-blockers]"," kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]",' kynver worker start --run RUN_ID --name worker --task "..." [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID] [--wait] [--emit-json]'," kynver worker list --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver worker status --run RUN_ID --name worker"," kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]"," kynver worker stop --run RUN_ID --name worker"," kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"," kynver worker discard-disposable --run RUN_ID --name worker --path scripts/helper.mjs[,other]"," kynver worker auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--poll-ms 5000] [--max-total-ms 21600000] [--complete-attempts 3] [--complete-backoff-ms 5000] [--base-url URL] [--secret SECRET]"," kynver run reconcile"," kynver run unblock [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET] [--dry-run]"," kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]"," kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override] [--local]"," kynver harness verify --worktree PATH [--command CMD] [--json] [--wait-for-admission-ms MS] [--timeout-ms MS]"," kynver plan persist --operation create|add_version|update_metadata --title TITLE (--body-file PATH | --body TEXT) [--slug SLUG] [--plan PLAN_ID] [--summary TEXT] [--failure-kind approval_guard|auth|network|server|tool_interruption]"," kynver plan outbox list"," kynver plan outbox drain [--max N] [--id OUTBOX_ID]"," kynver cleanup [--execute] [--compact] [--node-modules-age-ms MS] [--worktrees-age-ms MS] [--harness-root PATH] [--include-orphans] [--skip-finalize] [--account-bytes]"," kynver wsl-crashes [--json] [--execute] [--purge-all] [--keep-newest N]"," --include-orphans also scans whole worktree directories (<harnessRoot>/worktrees/<runId>/<workerId>/) that no run/worker.json references; orphans pass salvage gates (recent heartbeat, dirty git, ahead of origin/main) before removal."," Dry-run defaults to fast scan (no byte accounting). Pass --account-bytes for reclaimable byte totals. Pass --compact for a bounded operator summary (no full action list)."," kynver monitor start --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS]"," kynver monitor status [--run RUN_ID] [--name worker] [--tick]"," kynver monitor stop --run RUN_ID [--name worker]"," kynver monitor list"," kynver monitor tick --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--auto-complete] [--renew-leases]"," kynver monitor auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET]"," kynver monitor run-loop --run RUN_ID --monitor-id ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS] [--auto-complete] [--renew-leases]"," kynver config ensure-default-repo [--json]"," kynver doctor runtime-takeover [--remediate-default-repo]"," kynver scheduler cutover-check [--json]"," kynver scheduler attest-cutover [--json]"," kynver cron install [--dry-run] [--json] [--install-systemd] [--confirm-qstash-removal] [--skip-watchdog] [--skip-test-fire] [--agent-os-id ID] [--api-base-url URL] [--run RUN_ID]"," kynver cron verify [--json]"," kynver cron status [--json]"," kynver cron tick [--agent-os-id AOS_ID] [--json]"," kynver lane tick landing-maintainer [--fleet] [--repo OWNER/NAME] [--agent-os-id AOS_ID] [--execute] [--json]"," kynver board contract [--agent-os-id ID] [--base-url URL] [--since ISO] [--limit N]"].join(`
66
- `)),process.exit(e)}async function DO(e=process.argv.slice(2)){if(uy(e,import.meta.url,"kynver"))return;if(e.length===0||Gc(e[0]))return Yc(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&&Gc(t)||n.some(Gc))return Yc(0);let o=fs(n),{runsDir:s,worktreesDir:i}=Z();if(Gy(s,{recursive:!0}),Gy(i,{recursive:!0}),r==="daemon"&&Wt(),py(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=L(l).repo}catch{a=void 0}await dy({repoRoot:a,cwd:a})}if(r==="login")return void await hd(o);if(r==="bootstrap")return void await hs(o);if(r==="start")return void await wk(o);if(r==="runner"&&t==="credential")return void await gd(o);if(r==="setup")return void await gs(o);if(r==="status")return Vy(o);if(r==="daemon")return bi(o)?void await vi(o):void await Ri(o);if(r==="plan"&&t==="progress")return void await Dk(o);if(r==="plan"&&t==="verify")return void await Mk(o);if(r==="harness"&&t==="verify")return Uk(o);if(r==="plan"&&t==="persist")return void await Wk(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Lk();if(a==="drain")return void await Bk(fs(n));Jy("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return Hk(o);if(r==="wsl-crashes")return Fk(o);if(r==="config"&&t==="ensure-default-repo")return vd(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return xy(o);if(r==="scheduler"&&t==="cutover-check")return Ay(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return Iy(o.json===!0);if(r==="cron"&&t==="install")return void await Ty(o);if(r==="cron"&&t==="verify")return void await Dy(o);if(r==="cron"&&t==="status")return void await Oy(o.json===!0);if(r==="cron"&&t==="tick")return void await Ny(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await By(fs(n),a)}if(r==="board"&&t==="contract")return void await _y(o);if(r==="run"&&t==="create")return void Si(o);if(r==="run"&&t==="list")return sk();if(r==="run"&&t==="resolve")return my(o);if(r==="run"&&t==="status")return Xm(o);if(r==="run"&&t==="dispatch")return void await Xr(o);if(r==="run"&&t==="sweep")return void await ho(o);if(r==="run"&&t==="reconcile")return Qf();if(r==="run"&&t==="unblock")return void await fy(o);if(r==="worker"&&t==="start")return void await sf(o);if(r==="worker"&&t==="list")return Gm(o);if(r==="worker"&&t==="status")return jm(o);if(r==="worker"&&t==="tail")return Qm(o);if(r==="worker"&&t==="stop")return Zm(o);if(r==="worker"&&t==="complete")return void await al(o);if(r==="worker"&&t==="discard-disposable")return Ck(o);if(r==="worker"&&t==="auto-complete")return void await rf(o);if(r==="monitor"&&t==="start"){let a=await ry(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await ty(o);if(r==="monitor"&&t==="stop")return ny(o);if(r==="monitor"&&t==="list")return oy();if(r==="monitor"&&t==="tick")return void await iy(o);if(r==="monitor"&&t==="auto-complete")return void await Mc(o);if(r==="monitor"&&t==="run-loop")return void await sy(o);Jy(r,t)}var MO=process.argv[1]&&Yy.native(process.argv[1])===Yy.native(TO(import.meta.url));MO&&DO().catch(e=>{console.error(e),process.exit(1)});export{DO as main,Yc as usage};
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};