@kynver-app/runtime 0.1.134 → 0.1.135
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 +45 -45
- package/dist/index.js +54 -54
- package/dist/server/cleanup.js +13 -13
- package/dist/server/default-repo.js +1 -1
- package/dist/server/heavy-verification.d.ts +1 -0
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/monitor.js +6 -6
- package/dist/server/repo-search.js +1 -1
- package/dist/server/worker-policy.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function
|
|
2
|
+
var Yh=Object.defineProperty;var F=(e,r)=>()=>(e&&(r=e(e=0)),r);var Jh=(e,r)=>{for(var t in r)Yh(e,t,{get:r[t],enumerable:!0})};import{existsSync as qh,mkdirSync as zh,readFileSync as Hs,readdirSync as _E,statSync as Tl,writeFileSync as Xh}from"node:fs";import Dl from"node:path";function nr(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function N(e,r){return e||nr(`missing ${r}`),e}function Yr(e){try{return JSON.parse(e)}catch{return null}}function _(e,r){try{return JSON.parse(Hs(e,"utf8"))}catch(t){if(arguments.length>1)return r;nr(`failed to read ${e}: ${t.message}`)}}function le(e,r){zh(Dl.dirname(e),{recursive:!0}),Xh(e,`${JSON.stringify(r,null,2)}
|
|
3
|
+
`)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Ml(e){return R(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Ye(e){return String(e).replace(/\/+$/,"")}function Qn(e){return String(e||"").replace(/\s+/g," ").trim()}function Zn(e){try{return Tl(e).size}catch{return 0}}function eo(e){try{return Tl(e).mtime.toISOString()}catch{return null}}function ro(e,r){return qh(e)?Hs(e,"utf8").split(`
|
|
4
4
|
`).slice(-r).join(`
|
|
5
|
-
`):""}function
|
|
6
|
-
`).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=Wl("git",r,ae({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 Bl(e,r,t){let n=Q(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 to(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 $s(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return $s(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=Q(e,["rev-parse",n]);if(f.status!==0)return $s(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=Bl(e,i,a),c=Bl(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 $s(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ye=F(()=>{"use strict";w();Jr()});import{homedir as Ks}from"node:os";import br from"node:path";function Hl(e){return e==="~"?Ks():e.startsWith("~/")||e.startsWith("~\\")?br.join(Ks(),e.slice(2)):e}function qr(e){return br.resolve(Hl(e))}function pe(e){let r=Hl(e),t=br.resolve(r),n=br.resolve(Ks());return t===n?"~":t.startsWith(`${n}${br.sep}`)?`~/${br.relative(n,t).split(br.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Y(e){return pe(e)}var qe=F(()=>{"use strict"});import{existsSync as Vs,readFileSync as $l}from"node:fs";import{homedir as rk}from"node:os";import sr from"node:path";import{fileURLToPath as tk}from"node:url";function ok(e){let r=sr.join(e,"package.json");if(!Vs(r))return null;try{let t=JSON.parse($l(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function sk(e){return ok(e)==="kynver"}function Fl(e){let r=sr.resolve(e);if(!Vs(r))return null;let t=Q(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?sr.resolve(n):null}function ik(e=import.meta.url){let r=sr.dirname(tk(e));for(let t=0;t<8;t+=1){let n=sr.join(r,"package.json");if(Vs(n))try{if(JSON.parse($l(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=sr.dirname(r);if(o===r)break;r=o}return null}function js(e,r,t,n){if(!t)return;let o=sr.resolve(t);e.has(o)||sk(o)&&(e.add(o),r.push({repo:o,source:n}))}function ak(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];js(t,n,Fl(r),"cwd_git");let o=ik(e?.runtimeModuleUrl??import.meta.url);o&&js(t,n,Fl(o),"runtime_checkout");let s=rk();for(let i of nk)js(t,n,qr(sr.join(s,i)),"well_known_path");return n}function vr(e){return ak(e)[0]??null}var nk,no=F(()=>{"use strict";ye();qe();nk=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function zr(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 Kl(e,r){return e[r]?.trim()||null}function Ue(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:zr(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Kl(e,"KYNVER_BOX_KIND");if(o)return{boxKind:zr(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Kl(e,"KYNVER_AGENT_OS_SLUG");return s&&t.push(`KYNVER_AGENT_OS_SLUG=${s} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!s,warnings:t}}function Be(e={},r=process.env){return Ue(r,e).boxKind}var Ee=F(()=>{"use strict"});import{readFileSync as lk}from"node:fs";import jl from"node:os";function Gt(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:jl.freemem()}if(process.platform==="linux")try{let t=lk("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return jl.freemem()}var oo=F(()=>{"use strict"});import{existsSync as ck,readFileSync as uk,statfsSync as dk}from"node:fs";function gk(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ck(e))continue;let r=uk(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Vl(e={}){if(!(e.forceWsl===void 0?gk():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||fk,n=e.wslHostFreeWarnBytes??pk,o=e.wslHostFreeCriticalBytes??mk,s=e.statfs??dk,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. ${hk()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function hk(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP%); 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. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var pk,mk,fk,Gl=F(()=>{"use strict";pk=25*1024*1024*1024,mk=12*1024*1024*1024,fk="/mnt/c"});import{statfsSync as kk}from"node:fs";function We(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??yk,n=e.diskFreeCriticalBytes??Rk,o=e.diskMaxUsedPercent??bk,s=e.diskHardMaxUsedPercent??vk,i=kk(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:Vl(e.wslHost),h=g&&(k?k.ok:!0),S=null;return h||(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].filter(Boolean).join("; ")),Sk({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function Sk(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 yk,Rk,bk,vk,Yt=F(()=>{"use strict";Gl();yk=30*1024*1024*1024,Rk=15*1024*1024*1024,bk=80,vk=90});import{existsSync as Yl}from"node:fs";import{homedir as ql}from"node:os";import ir from"node:path";function ne(e){let r=ir.resolve(qr(e.trim()));for(;wk.has(ir.basename(r));)r=ir.dirname(r);return r}function me(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ne(e);let r=b().harnessRoot?.trim();if(r)return ne(r);let t=ir.join(ql(),".kynver","harness");return Yl(t)?t:Yl(Jl)?Jl:t}function Re(e){return ir.join(ne(e),"runs")}function ar(e){return ir.join(ne(e),"worktrees")}function Xr(){let e=me();return{harnessRoot:e,runsDir:Re(e),worktreesDir:ar(e)}}function Qr(e,r){return ir.join(e,R(r))}var Jl,wk,be=F(()=>{"use strict";O();qe();w();Jl=ir.join(ql(),".openclaw","harness"),wk=new Set(["runs","worktrees"])});import{existsSync as Ck,readdirSync as _k,statSync as xk}from"node:fs";import Zr from"node:path";function te(){return Xr()}function U(e){let{runsDir:r}=te();return _(Zr.join(Qr(r,R(e)),"run.json"))}function ee(){let{runsDir:e}=te();return zl(e)}function so(e){return zl(Re(e))}function Pk(e){try{return xk(e).isDirectory()}catch{return!1}}function zl(e){if(!Ck(e))return[];let r=[];for(let t of _k(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Zr.join(e,t.name);if(!Pk(n))continue;let o=_(Zr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function fe(e,r){let{runsDir:t}=te();return _(Zr.join(Qr(t,R(e)),"workers",R(r),"worker.json"))}function Ae(e){let{runsDir:r}=te();le(Zr.join(Qr(r,e.id),"run.json"),e)}function V(e,r){let{runsDir:t}=te();le(Zr.join(Qr(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=te();return Jt(r,e)}function Jt(e,r){return Qr(Re(e),R(r))}var B=F(()=>{"use strict";be();w()});import{existsSync as Ek,readdirSync as Ak}from"node:fs";import Ik from"node:path";function ve(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=Ik.join(x(e.id),"workers");if(!Ek(t))return[...r];for(let n of Ak(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var et=F(()=>{"use strict";B();w()});function Gs(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 Xl(e){let r=e.trim();if(!r)return null;let t=Gs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Gs(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Gs(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Ql(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Xl(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Xl(t);return n||t}var Zl=F(()=>{"use strict"});import{existsSync as Ok,readFileSync as Nk}from"node:fs";function ec(e){return e==="complete"}function rt(e){return ec(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Ok(e))return r;let t=Date.now()+Tk,n=new Date(t).toISOString(),o=Nk(e,"utf8").split(`
|
|
7
|
-
`).filter(Boolean);for(let s of o){let i=Yr(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)),
|
|
5
|
+
`):""}function Ul(e){return e?Hs(Dl.resolve(e),"utf8"):""}function Rr(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function or(e){return new Promise(r=>setTimeout(r,e))}function $(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function jt(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function Bl(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 Fs(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=F(()=>{"use strict"});function rk(e){return Zh.has(e)?!0:ek.some(r=>e.endsWith(r))}function Je(e){let r={...e};for(let t of Object.keys(r))rk(t)&&delete r[t];return r}var Qh,Zh,ek,Jr=F(()=>{"use strict";Qh=["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"],Zh=new Set(Qh),ek=["_SECRET","_API_KEY"]});import{spawnSync as Ll}from"node:child_process";function ce(e,r,t={}){let n=Ll("git",r,ae({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);nr(o)}return n.stdout||""}function Hl(e){ce(e,["rev-parse","--show-toplevel"])}function Vt(e){return ce(e,["status","--short"],{allowFailure:!0}).split(`
|
|
6
|
+
`).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=Ll("git",r,ae({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 Wl(e,r,t){let n=Q(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 to(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 $s(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return $s(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=Q(e,["rev-parse",n]);if(f.status!==0)return $s(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=Wl(e,i,a),c=Wl(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 $s(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ye=F(()=>{"use strict";w();Jr()});import{homedir as Ks}from"node:os";import br from"node:path";function Fl(e){return e==="~"?Ks():e.startsWith("~/")||e.startsWith("~\\")?br.join(Ks(),e.slice(2)):e}function qr(e){return br.resolve(Fl(e))}function pe(e){let r=Fl(e),t=br.resolve(r),n=br.resolve(Ks());return t===n?"~":t.startsWith(`${n}${br.sep}`)?`~/${br.relative(n,t).split(br.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Y(e){return pe(e)}var qe=F(()=>{"use strict"});import{existsSync as Vs,readFileSync as Kl}from"node:fs";import{homedir as tk}from"node:os";import sr from"node:path";import{fileURLToPath as nk}from"node:url";function sk(e){let r=sr.join(e,"package.json");if(!Vs(r))return null;try{let t=JSON.parse(Kl(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function ik(e){return sk(e)==="kynver"}function $l(e){let r=sr.resolve(e);if(!Vs(r))return null;let t=Q(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?sr.resolve(n):null}function ak(e=import.meta.url){let r=sr.dirname(nk(e));for(let t=0;t<8;t+=1){let n=sr.join(r,"package.json");if(Vs(n))try{if(JSON.parse(Kl(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=sr.dirname(r);if(o===r)break;r=o}return null}function js(e,r,t,n){if(!t)return;let o=sr.resolve(t);e.has(o)||ik(o)&&(e.add(o),r.push({repo:o,source:n}))}function lk(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];js(t,n,$l(r),"cwd_git");let o=ak(e?.runtimeModuleUrl??import.meta.url);o&&js(t,n,$l(o),"runtime_checkout");let s=tk();for(let i of ok)js(t,n,qr(sr.join(s,i)),"well_known_path");return n}function vr(e){return lk(e)[0]??null}var ok,no=F(()=>{"use strict";ye();qe();ok=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function zr(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 jl(e,r){return e[r]?.trim()||null}function Ue(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:zr(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=jl(e,"KYNVER_BOX_KIND");if(o)return{boxKind:zr(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=jl(e,"KYNVER_AGENT_OS_SLUG");return s&&t.push(`KYNVER_AGENT_OS_SLUG=${s} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!s,warnings:t}}function Be(e={},r=process.env){return Ue(r,e).boxKind}var Ee=F(()=>{"use strict"});import{readFileSync as ck}from"node:fs";import Vl from"node:os";function Gt(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Vl.freemem()}if(process.platform==="linux")try{let t=ck("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Vl.freemem()}var oo=F(()=>{"use strict"});import{existsSync as uk,readFileSync as dk,statfsSync as pk}from"node:fs";function hk(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!uk(e))continue;let r=dk(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Gl(e={}){if(!(e.forceWsl===void 0?hk():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||gk,n=e.wslHostFreeWarnBytes??mk,o=e.wslHostFreeCriticalBytes??fk,s=e.statfs??pk,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. ${kk()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function kk(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP%); 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. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var mk,fk,gk,Yl=F(()=>{"use strict";mk=25*1024*1024*1024,fk=12*1024*1024*1024,gk="/mnt/c"});import{statfsSync as yk}from"node:fs";function We(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Rk,n=e.diskFreeCriticalBytes??bk,o=e.diskMaxUsedPercent??vk,s=e.diskHardMaxUsedPercent??Sk,i=yk(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:Gl(e.wslHost),h=g&&(k?k.ok:!0),S=null;return h||(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].filter(Boolean).join("; ")),wk({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function wk(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 Rk,bk,vk,Sk,Yt=F(()=>{"use strict";Yl();Rk=30*1024*1024*1024,bk=15*1024*1024*1024,vk=80,Sk=90});import{existsSync as Jl}from"node:fs";import{homedir as zl}from"node:os";import ir from"node:path";function ne(e){let r=ir.resolve(qr(e.trim()));for(;Ck.has(ir.basename(r));)r=ir.dirname(r);return r}function me(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ne(e);let r=b().harnessRoot?.trim();if(r)return ne(r);let t=ir.join(zl(),".kynver","harness");return Jl(t)?t:Jl(ql)?ql:t}function Re(e){return ir.join(ne(e),"runs")}function ar(e){return ir.join(ne(e),"worktrees")}function Xr(){let e=me();return{harnessRoot:e,runsDir:Re(e),worktreesDir:ar(e)}}function Qr(e,r){return ir.join(e,R(r))}var ql,Ck,be=F(()=>{"use strict";O();qe();w();ql=ir.join(zl(),".openclaw","harness"),Ck=new Set(["runs","worktrees"])});import{existsSync as _k,readdirSync as xk,statSync as Pk}from"node:fs";import Zr from"node:path";function te(){return Xr()}function U(e){let{runsDir:r}=te();return _(Zr.join(Qr(r,R(e)),"run.json"))}function ee(){let{runsDir:e}=te();return Xl(e)}function so(e){return Xl(Re(e))}function Ek(e){try{return Pk(e).isDirectory()}catch{return!1}}function Xl(e){if(!_k(e))return[];let r=[];for(let t of xk(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Zr.join(e,t.name);if(!Ek(n))continue;let o=_(Zr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function fe(e,r){let{runsDir:t}=te();return _(Zr.join(Qr(t,R(e)),"workers",R(r),"worker.json"))}function Ae(e){let{runsDir:r}=te();le(Zr.join(Qr(r,e.id),"run.json"),e)}function V(e,r){let{runsDir:t}=te();le(Zr.join(Qr(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=te();return Jt(r,e)}function Jt(e,r){return Qr(Re(e),R(r))}var B=F(()=>{"use strict";be();w()});import{existsSync as Ak,readdirSync as Ik}from"node:fs";import Ok from"node:path";function ve(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=Ok.join(x(e.id),"workers");if(!Ak(t))return[...r];for(let n of Ik(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var et=F(()=>{"use strict";B();w()});function Gs(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 Ql(e){let r=e.trim();if(!r)return null;let t=Gs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Gs(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Gs(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Zl(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Ql(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Ql(t);return n||t}var ec=F(()=>{"use strict"});import{existsSync as Nk,readFileSync as Tk}from"node:fs";function rc(e){return e==="complete"}function rt(e){return rc(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Nk(e))return r;let t=Date.now()+Dk,n=new Date(t).toISOString(),o=Tk(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let s of o){let i=Yr(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)),rc(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Zl(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 Dk,tt=F(()=>{"use strict";ec();w();Dk=6e4});function Uk(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Bk(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 Wk(e){let r=Uk(e[0]);return!!(r&&Mk.has(r))}function Ys(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Js(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Lk(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Hk(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;tc.has(n)&&(t+=1);continue}r.push(n)}}return r}function Fk(e){let r=!1,t=e.map((o,s)=>{let i=Lk(o),a=e[s-1];return a&&tc.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Hk(t);if(n.length===2){let[o,s]=n;if(Js(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(Ys(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 qs(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=Bk(i.trim());if(!a.length||!Wk(a))return i;let l=Fk(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function nc(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 $k(e){let{pattern:r,target:t}=nc(e);return r?Js(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Ys(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Kk(e){let{pattern:r,target:t}=nc(e);if(!r)return null;if(Js(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Ys(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function jk(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 Vk(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 zs(e){let r=e.meta?.trim()||(e.command?Vk(e.command):null)||null;if(r){let t=$k(r),n=jk(t);if(n)return n;let o=Kk(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=qs(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 Mk,tc,oc=F(()=>{"use strict";Mk=new Set(["rg","ripgrep","grep"]),tc=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function qt(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function qk(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 zt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function zk(e){let r=e.metadata;if(!zt(r))return null;let t=r.vulnerabilities;if(!zt(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 Xk(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 Qk(e,r){let t=e.error;if(zt(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?qt(o.split(`
|
|
8
8
|
`).find(Boolean)??o,160):"npm audit failed"}function Zk(e){let r=`${e.stdout}
|
|
9
|
-
${e.stderr}`.trim(),t=qk(r);if(!t||!zt(t)){let o=qt(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(zt(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Qk(t,e.stderr)}`};let n=zk(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:Xk(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function ey(e){return Gk.test(e)}function ry(e){return Yk.test(e)}function ty(e){let r=
|
|
10
|
-
`).filter(Boolean);for(let n of t){let o=Yr(n);if(!o)continue;let s=sy(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=sc(a);l&&(r.currentTool=l)}let i=ic(o);i&&ay(r,zs({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&iy(r,o)}return r}function ly(e){let r=ic(e);if(!r)return;let t=zs({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Qn(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 ac(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] ${Qn(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"?ly(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=sc(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Qn(String(e.result||""))}`.trim()}var ao=F(()=>{"use strict";oc();w()});function uy(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function lc(e){let r=(e??"").trim();if(!r)return null;for(let t of cy)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${uy(r)}`};return null}var cy,cc=F(()=>{"use strict";cy=[{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 uc(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function dy(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 py(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:uc(e.head)}function my(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 nt(e){if(e.alive||dy(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=uc(e.headCommit)??py(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:my(s,r,t)}}var lo=F(()=>{"use strict"});function Xt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function fy(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 gy(e){if(Xt(e.headCommit)||Xt(e.prUrl)||Xt(e.artifactBundlePath)||Xt(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Xt(r.head))}function ot(e){return fy(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:gy(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 dc(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var co=F(()=>{"use strict"});function Xs(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 pc(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function st(e){let r=e.trim();if(!r)return null;let t=Xs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Xs(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Xs(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=pc(l);for(let u of n){let d=pc(u);d>c&&(l=u,c=d)}return l}var uo=F(()=>{"use strict"});function it(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function hy(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Sr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:it(e)}function po(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function mc(e){let r=null;if(typeof e=="string"){let o=st(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Sr(String(s.prUrl??s.pr_url??"")),a=it(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:it(s.mergeCommit??s.merge_commit),reason:it(s.reason)})}return n}function fc(e,r){let t=[],n=Sr(it(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Sr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function gc(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(!hy(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?Sr(it(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Sr(r.targetPrUrls[0]):null):null;if(s){let d=fc(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=mc(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=mc(n),a=new Map(i.map(d=>[po(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>po(Sr(d)??d)).filter(Boolean)),c=fc(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(po(d)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`};if(l.size===0)return{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let f=po(Sr(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 hc(e){if(e.blocked)return e.detail??e.reason}var kc=F(()=>{"use strict";uo()});function yy(e){let r=Date.now();if(e.completionBlocker&&!yc(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&by(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=ot(o);if(s.blocked){let i=dc(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=gc({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=hc(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(Ry(e))return{state:"done",reason:"empty abandoned worker record"};let o=lc(e.error);if(o)return{state:"blocked",reason:o.reason};let s=nt({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>ky)return{state:"needs_attention",reason:`no first stream event ${Fs(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>at?{state:"stale",reason:`no log/event/heartbeat activity for ${Fs(n)}s`}:{state:"ok",reason:"recent activity"}}function yc(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ry(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 by(e){let r=null;if(typeof e=="string"?r=st(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function vy(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??rt(t))}function T(e,r={}){let t=io(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=vy(e,t.finalResult,n),i=o?!1:$(e.pid),a=Zn(e.stdoutPath),l=Zn(e.stderrPath),c=Zn(e.heartbeatPath),u=Vt(e.worktreePath),d=to(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=Ul([t.lastEventAt,n.lastHeartbeatAt,eo(e.stdoutPath),eo(e.stderrPath),eo(e.heartbeatPath)]),m=t.error||!i&&!s&&ro(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=yc(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=yy({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}),S=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:S,attention:h,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:m,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function re(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function lt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Qt(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 ky,at,G=F(()=>{"use strict";tt();ao();cc();lo();ye();co();kc();uo();w();ky=18e4,at=6e5});import{readFileSync as Sy}from"node:fs";function wy(e){if(!e||process.platform!=="linux")return null;try{return Sy(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Rc(e){if(!e.pid||process.platform!=="linux")return!0;let r=wy(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 mo(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!Rc(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Qs=F(()=>{"use strict";G()});import vc from"node:os";import Cy from"node:path";function bc(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _y(e=b(),r,t){let n=bc(e.perWorkerMemBytes,Zt),o=bc(e.memReserveBytes,en),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):rn)),i=go({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??vc.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Zs(e,r={}){let t=r.perWorkerMemBytes??Zt,n=r.memReserveBytes??en,o=r.memUtilization??rn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,fo)}function xy(){return Gt()}function Py(e){let r=0;for(let t of ve(e)){let n=_(Cy.join(x(e.id),"workers",R(t),"worker.json"),void 0);!n||!mo(n)||r++}return r}function Ey(){let e=0;for(let r of ee())e+=Py(r);return e}function wr(e){let r=e.config??b(),t=e.totalMemBytes??vc.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=_y(r,e.configuredMaxWorkersOverride,t),c=Be(r),u=e.freeMemBytes??xy(),d=e.activeWorkers??Ey(),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,h=Math.max(0,Math.min(i??g,m)),S=Math.max(0,h-d),L=Math.min(S,p),v=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:We({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});v&&!v.ok&&(L=0);let E=null;return L<=0&&(v&&!v.ok?E=v.reason??"disk gate blocked worker admission":d>=h?E=`at worker limit (${d}/${h} running)`:p<=0?E="insufficient free memory \u2014 waiting for workers to finish":E="no worker slots available"),{ok:L>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:L,reason:E,...v?{diskGate:v}:{}}}var Zt,en,rn,fo,tn=F(()=>{"use strict";oo();O();Ee();ho();Yt();B();et();Qs();w();Zt=500*1024*1024,en=4*1024*1024*1024,rn=.85,fo=64});function Cr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function go(e){let r=e.config??{},t=e.env??process.env,n=Cr(r.perWorkerMemBytes,Zt),o=Cr(r.memReserveBytes,en),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):rn)),i=Zs(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Cr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Cr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,fo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Cr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,fo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function ei(e={}){let r=e.totalMemBytes??0,t=Zs(r,{perWorkerMemBytes:Cr(e.config?.perWorkerMemBytes,Zt),memReserveBytes:Cr(e.config?.memReserveBytes,en),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):rn}),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 ho=F(()=>{"use strict";tn()});var wc={};Yh(wc,{runDeviceLogin:()=>ri});import Sc from"node:os";function Ay(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?Ye(String(r)):void 0}async function Iy(e){await new Promise(r=>setTimeout(r,e))}async function ri(e){let r=Ay(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=`${Sc.hostname()} (${Sc.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 Iy(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?(nn(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 ti=F(()=>{"use strict";O();w()});import{existsSync as _c,mkdirSync as xc,readFileSync as Pc,writeFileSync as Ec}from"node:fs";import{homedir as Oy,totalmem as Ny}from"node:os";import ni from"node:path";import Ty from"node:os";function b(){if(!_c(ko))return{};try{return JSON.parse(Pc(ko,"utf8"))}catch{return{}}}function ze(e){xc(yo,{recursive:!0}),Ec(ko,`${JSON.stringify(oi(e),null,2)}
|
|
11
|
-
`,{mode:384})}function
|
|
12
|
-
`,{mode:384})}function Z(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:on().apiKey}function nn(e){Ac({...on(),apiKey:e})}function Cc(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=on();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function _r(e,r){Ac({...on(),runnerToken:r,runnerTokenAgentOsId:e})}function W(e){let r=sn(e);return r||ii("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Ic(e){return sn(e)}function sn(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?Ye(String(r)):void 0}function Uy(e,r){let t=e||Cc(r)||(r?void 0:Cc(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 si(e,r,t){let n=Uy(e,r);if(n)return{ok:!0,secret:n};let o=Z(),s=sn(t?.baseUrl);if(o&&r&&s)try{let i=await xr(r,{baseUrl:s,apiKey:o});return _r(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 K(e,r,t){let n=await si(e,r,t);if(n.ok)return n.secret;ii(n.reason)}async function Oc(e,r){let t=Z(),n=sn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await xr(e,{baseUrl:n,apiKey:t});return _r(e,o),o}catch{return null}}async function Nc(e,r,t){let n=Z(),o=sn(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 xr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(_r(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 xr(e,r){let t=r?.apiKey||Z();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${W(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 Tc(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||ii("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await xr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});_r(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(ct),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 ii(e){console.error(e),process.exit(1)}function Ro(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 bo(e){let r=b(),t=We({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=ei({totalMemBytes:Ty.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=My(r,e),s=oi({...r,...Dy(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});ze(s);let i=Ue(process.env,s),a,l=Z(),c=s.agentOsId;if(l&&c)try{let u=await xr(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});_r(c,u),a="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{a="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:Y(ko),config:ut(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:a??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function Dc(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){nn(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(ct)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(ti(),wc));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(ct)},null,2))}var yo,ko,ct,bI,vI,O=F(()=>{"use strict";no();qe();w();Ee();ho();Yt();yo=ni.join(Oy(),".kynver"),ko=ni.join(yo,"config.json"),ct=ni.join(yo,"credentials");bI=500*1024*1024,vI=4*1024*1024*1024});O();import{mkdirSync as Fh,realpathSync as $h}from"node:fs";import{fileURLToPath as bE}from"node:url";O();w();ti();import By from"node:os";function Wy(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?Ye(String(r)):void 0}async function Ly(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 vo(e){let r=Wy(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)),Z()||(typeof e.apiKey=="string"?nn(e.apiKey):(await ri({...e,apiBaseUrl:r})).ok||process.exit(1));let t=Z();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await Ly(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 bo(o),console.log(""),console.log(` Bootstrap complete \u2014 ${By.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online and configures local Kynver Cron when needed."),console.log(" Persistent background service (Linux): `kynver cron install --install-systemd` after your first start."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}O();import Lx from"node:os";O();function Ie(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 Hy,readFileSync as Fy,renameSync as $y,writeFileSync as Ky}from"node:fs";import{homedir as jy}from"node:os";import Uc from"node:path";function Mc(e){return JSON.stringify(ai(e))}function ai(e){if(Array.isArray(e))return e.map(ai);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ai(e[t]);return r}return e}function li(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 an(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 Bc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Uc.join(jy(),".kynver",`instruction-bundle-${r}.json`)}function Wc(e,r){try{let t=Bc(e);Hy(Uc.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Ky(n,JSON.stringify(r),"utf8"),$y(n,t)}catch{}}function Lc(e){try{let r=Fy(Bc(e),"utf8"),t=JSON.parse(r);return an(t)?t:null}catch{return null}}var Vy="embedded-1",Gy=[{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"}],Yy={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete`. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
9
|
+
${e.stderr}`.trim(),t=qk(r);if(!t||!zt(t)){let o=qt(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(zt(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Qk(t,e.stderr)}`};let n=zk(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:Xk(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function ey(e){return Gk.test(e)}function ry(e){return Yk.test(e)}function ty(e){let r=zs({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&&Jk.test(n)){let i=qt(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=qs(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=qt(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 Xs(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(ey(e.command)){let i=r.trim()||n.trim()||t.trim();return Zk({exitCode:e.exitCode,stdout:i,stderr:t})}if(ry(e.command))return ty({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=zs({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=qt(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Gk,Yk,Jk,sc=F(()=>{"use strict";oc();Gk=/\bnpm\s+audit\b/i,Yk=/\b(rg|ripgrep)\b/i,Jk=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as ny,readFileSync as oy}from"node:fs";function sy(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function ic(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 iy(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 ac(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 ay(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function io(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!ny(e))return r;let t=oy(e,"utf8").split(`
|
|
10
|
+
`).filter(Boolean);for(let n of t){let o=Yr(n);if(!o)continue;let s=sy(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=ic(a);l&&(r.currentTool=l)}let i=ac(o);i&&ay(r,Xs({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&iy(r,o)}return r}function ly(e){let r=ac(e);if(!r)return;let t=Xs({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Qn(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 lc(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] ${Qn(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"?ly(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=ic(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Qn(String(e.result||""))}`.trim()}var ao=F(()=>{"use strict";sc();w()});function uy(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function cc(e){let r=(e??"").trim();if(!r)return null;for(let t of cy)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${uy(r)}`};return null}var cy,uc=F(()=>{"use strict";cy=[{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 dc(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function dy(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 py(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:dc(e.head)}function my(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 nt(e){if(e.alive||dy(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=dc(e.headCommit)??py(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:my(s,r,t)}}var lo=F(()=>{"use strict"});function Xt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function fy(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 gy(e){if(Xt(e.headCommit)||Xt(e.prUrl)||Xt(e.artifactBundlePath)||Xt(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Xt(r.head))}function ot(e){return fy(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:gy(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 pc(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var co=F(()=>{"use strict"});function Qs(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 mc(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function st(e){let r=e.trim();if(!r)return null;let t=Qs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Qs(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Qs(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=mc(l);for(let u of n){let d=mc(u);d>c&&(l=u,c=d)}return l}var uo=F(()=>{"use strict"});function it(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function hy(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Sr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:it(e)}function po(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function fc(e){let r=null;if(typeof e=="string"){let o=st(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Sr(String(s.prUrl??s.pr_url??"")),a=it(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:it(s.mergeCommit??s.merge_commit),reason:it(s.reason)})}return n}function gc(e,r){let t=[],n=Sr(it(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Sr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function hc(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(!hy(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?Sr(it(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Sr(r.targetPrUrls[0]):null):null;if(s){let d=gc(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=fc(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=fc(n),a=new Map(i.map(d=>[po(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>po(Sr(d)??d)).filter(Boolean)),c=gc(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(po(d)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`};if(l.size===0)return{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let f=po(Sr(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 kc(e){if(e.blocked)return e.detail??e.reason}var yc=F(()=>{"use strict";uo()});function yy(e){let r=Date.now();if(e.completionBlocker&&!Rc(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&by(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=ot(o);if(s.blocked){let i=pc(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=hc({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=kc(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(Ry(e))return{state:"done",reason:"empty abandoned worker record"};let o=cc(e.error);if(o)return{state:"blocked",reason:o.reason};let s=nt({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>ky)return{state:"needs_attention",reason:`no first stream event ${Fs(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>at?{state:"stale",reason:`no log/event/heartbeat activity for ${Fs(n)}s`}:{state:"ok",reason:"recent activity"}}function Rc(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ry(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 by(e){let r=null;if(typeof e=="string"?r=st(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function vy(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??rt(t))}function T(e,r={}){let t=io(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=vy(e,t.finalResult,n),i=o?!1:$(e.pid),a=Zn(e.stdoutPath),l=Zn(e.stderrPath),c=Zn(e.heartbeatPath),u=Vt(e.worktreePath),d=to(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=Bl([t.lastEventAt,n.lastHeartbeatAt,eo(e.stdoutPath),eo(e.stderrPath),eo(e.heartbeatPath)]),m=t.error||!i&&!s&&ro(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Rc(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=yy({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}),S=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:S,attention:h,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:m,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function re(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function lt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Qt(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 ky,at,G=F(()=>{"use strict";tt();ao();uc();lo();ye();co();yc();uo();w();ky=18e4,at=6e5});import{readFileSync as Sy}from"node:fs";function wy(e){if(!e||process.platform!=="linux")return null;try{return Sy(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function bc(e){if(!e.pid||process.platform!=="linux")return!0;let r=wy(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 mo(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!bc(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Zs=F(()=>{"use strict";G()});import Sc from"node:os";import Cy from"node:path";function vc(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _y(e=b(),r,t){let n=vc(e.perWorkerMemBytes,Zt),o=vc(e.memReserveBytes,en),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):rn)),i=go({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Sc.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function ei(e,r={}){let t=r.perWorkerMemBytes??Zt,n=r.memReserveBytes??en,o=r.memUtilization??rn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,fo)}function xy(){return Gt()}function Py(e){let r=0;for(let t of ve(e)){let n=_(Cy.join(x(e.id),"workers",R(t),"worker.json"),void 0);!n||!mo(n)||r++}return r}function Ey(){let e=0;for(let r of ee())e+=Py(r);return e}function wr(e){let r=e.config??b(),t=e.totalMemBytes??Sc.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=_y(r,e.configuredMaxWorkersOverride,t),c=Be(r),u=e.freeMemBytes??xy(),d=e.activeWorkers??Ey(),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,h=Math.max(0,Math.min(i??g,m)),S=Math.max(0,h-d),L=Math.min(S,p),v=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:We({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});v&&!v.ok&&(L=0);let E=null;return L<=0&&(v&&!v.ok?E=v.reason??"disk gate blocked worker admission":d>=h?E=`at worker limit (${d}/${h} running)`:p<=0?E="insufficient free memory \u2014 waiting for workers to finish":E="no worker slots available"),{ok:L>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:L,reason:E,...v?{diskGate:v}:{}}}var Zt,en,rn,fo,tn=F(()=>{"use strict";oo();O();Ee();ho();Yt();B();et();Zs();w();Zt=500*1024*1024,en=4*1024*1024*1024,rn=.85,fo=64});function Cr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function go(e){let r=e.config??{},t=e.env??process.env,n=Cr(r.perWorkerMemBytes,Zt),o=Cr(r.memReserveBytes,en),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):rn)),i=ei(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Cr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Cr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,fo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Cr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,fo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function ri(e={}){let r=e.totalMemBytes??0,t=ei(r,{perWorkerMemBytes:Cr(e.config?.perWorkerMemBytes,Zt),memReserveBytes:Cr(e.config?.memReserveBytes,en),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):rn}),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 ho=F(()=>{"use strict";tn()});var Cc={};Jh(Cc,{runDeviceLogin:()=>ti});import wc from"node:os";function Ay(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?Ye(String(r)):void 0}async function Iy(e){await new Promise(r=>setTimeout(r,e))}async function ti(e){let r=Ay(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=`${wc.hostname()} (${wc.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 Iy(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?(nn(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 ni=F(()=>{"use strict";O();w()});import{existsSync as xc,mkdirSync as Pc,readFileSync as Ec,writeFileSync as Ac}from"node:fs";import{homedir as Oy,totalmem as Ny}from"node:os";import oi from"node:path";import Ty from"node:os";function b(){if(!xc(ko))return{};try{return JSON.parse(Ec(ko,"utf8"))}catch{return{}}}function ze(e){Pc(yo,{recursive:!0}),Ac(ko,`${JSON.stringify(si(e),null,2)}
|
|
11
|
+
`,{mode:384})}function si(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:pe(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:pe(e.defaultRepo.trim())}:{}}}function ut(e){return si(e)}function Dy(e,r){let t=on(),n=(typeof r.apiBaseUrl=="string"?r.apiBaseUrl:void 0)||e.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim(),o=(typeof r.agentOsId=="string"?r.agentOsId:void 0)||e.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||(t.runnerToken?.trim().startsWith("krc1.")?t.runnerTokenAgentOsId?.trim():void 0),i=(typeof r.repo=="string"?r.repo:r.discoverRepo===!0||r.discoverRepo==="true"?vr()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||vr()?.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:Ye(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function My(e,r,t=Ny()){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=Ue(process.env,{...e,...o?{boxKind:zr(o)}:{}}).boxKind,i=We({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=ri({totalMemBytes:t,diskPath:i.path,diskGateOk:i.ok,diskFreeBytes:i.freeBytes,config:e});return n?{maxConcurrentWorkers:Math.max(1,Math.floor(Number(n))),maxConcurrentWorkersSource:"setup-flag",boxKind:s}:e.maxConcurrentWorkers!==void 0&&e.maxConcurrentWorkers!==null?{maxConcurrentWorkers:Math.max(1,Math.floor(Number(e.maxConcurrentWorkers))),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}:{maxConcurrentWorkers:a.recommendedMaxWorkers,maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function on(){if(!xc(ct))return{};try{return JSON.parse(Ec(ct,"utf8"))}catch{return{}}}function Ic(e){Pc(yo,{recursive:!0}),Ac(ct,`${JSON.stringify(e,null,2)}
|
|
12
|
+
`,{mode:384})}function Z(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:on().apiKey}function nn(e){Ic({...on(),apiKey:e})}function _c(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=on();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function _r(e,r){Ic({...on(),runnerToken:r,runnerTokenAgentOsId:e})}function W(e){let r=sn(e);return r||ai("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Oc(e){return sn(e)}function sn(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?Ye(String(r)):void 0}function Uy(e,r){let t=e||_c(r)||(r?void 0:_c(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 ii(e,r,t){let n=Uy(e,r);if(n)return{ok:!0,secret:n};let o=Z(),s=sn(t?.baseUrl);if(o&&r&&s)try{let i=await xr(r,{baseUrl:s,apiKey:o});return _r(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 K(e,r,t){let n=await ii(e,r,t);if(n.ok)return n.secret;ai(n.reason)}async function Nc(e,r){let t=Z(),n=sn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await xr(e,{baseUrl:n,apiKey:t});return _r(e,o),o}catch{return null}}async function Tc(e,r,t){let n=Z(),o=sn(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 xr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(_r(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 xr(e,r){let t=r?.apiKey||Z();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${W(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 Dc(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||ai("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await xr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});_r(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(ct),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 ai(e){console.error(e),process.exit(1)}function Ro(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 bo(e){let r=b(),t=We({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=ri({totalMemBytes:Ty.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=My(r,e),s=si({...r,...Dy(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});ze(s);let i=Ue(process.env,s),a,l=Z(),c=s.agentOsId;if(l&&c)try{let u=await xr(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});_r(c,u),a="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{a="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:Y(ko),config:ut(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:a??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function Mc(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){nn(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(ct)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(ni(),Cc));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(ct)},null,2))}var yo,ko,ct,bI,vI,O=F(()=>{"use strict";no();qe();w();Ee();ho();Yt();yo=oi.join(Oy(),".kynver"),ko=oi.join(yo,"config.json"),ct=oi.join(yo,"credentials");bI=500*1024*1024,vI=4*1024*1024*1024});O();import{mkdirSync as $h,realpathSync as Kh}from"node:fs";import{fileURLToPath as bE}from"node:url";O();w();ni();import By from"node:os";function Wy(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?Ye(String(r)):void 0}async function Ly(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 vo(e){let r=Wy(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)),Z()||(typeof e.apiKey=="string"?nn(e.apiKey):(await ti({...e,apiBaseUrl:r})).ok||process.exit(1));let t=Z();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await Ly(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 bo(o),console.log(""),console.log(` Bootstrap complete \u2014 ${By.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online and configures local Kynver Cron when needed."),console.log(" Persistent background service (Linux): `kynver cron install --install-systemd` after your first start."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}O();import Lx from"node:os";O();function Ie(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 Hy,readFileSync as Fy,renameSync as $y,writeFileSync as Ky}from"node:fs";import{homedir as jy}from"node:os";import Bc from"node:path";function Uc(e){return JSON.stringify(li(e))}function li(e){if(Array.isArray(e))return e.map(li);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=li(e[t]);return r}return e}function ci(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 an(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 Wc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Bc.join(jy(),".kynver",`instruction-bundle-${r}.json`)}function Lc(e,r){try{let t=Wc(e);Hy(Bc.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Ky(n,JSON.stringify(r),"utf8"),$y(n,t)}catch{}}function Hc(e){try{let r=Fy(Wc(e),"utf8"),t=JSON.parse(r);return an(t)?t:null}catch{return null}}var Vy="embedded-1",Gy=[{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"}],Yy={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete`. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
13
13
|
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
14
14
|
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
15
15
|
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
|
16
|
-
`)},Jy={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},dt={version:Vy,generatedAt:"1970-01-01T00:00:00.000Z",personas:Gy,instructions:Yy,policyThresholds:Jy};var ln=dt,Hc="embedded";function Pr(){return ln.version}function lr(){return Hc}function Fc(e,r){ln=e,Hc=r}function cn(e){let r=ln.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=dt.instructions[e];return typeof t=="string"?t:""}function pt(e,r){let t=ln.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=dt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function $c(e){if(!e)return null;let r=e.trim().toLowerCase();return ln.personas.find(t=>t.slug===r)??null}import{createPublicKey as zy,verify as Xy}from"node:crypto";var qy={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Kc(e,r=process.env){let t=li(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=qy[e];return n?li(n):null}var Qy=Buffer.from("302a300506032b6570032100","hex");function Zy(e){return zy({key:Buffer.concat([Qy,Buffer.from(e)]),format:"der",type:"spki"})}function eR(e,r){if(!an(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(Mc(e.bundle),"utf8");return Xy(null,n,Zy(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 jc(e,r=process.env){if(!an(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Kc(e.publicKeyId,r);return t?eR(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var rR=15*6e4,tR=1e4,Xe={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function dn(e,r){console.error(JSON.stringify({event:e,...r}))}function Vc(e,r,t){let n=jc(e);return n.ok?(Fc(n.bundle,r),r==="server"&&Wc(t,e),!0):(dn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function un(e){if(Xe.diskCacheTried)return!1;Xe.diskCacheTried=!0;let r=Lc(e);return r?Vc(r,"disk",e):!1}async function Gc(e){let r=e.nowMs??Date.now(),t=()=>({source:lr(),version:Pr(),updated:!1});if(!e.force&&r-Xe.lastAttemptAtMs<rR)return t();Xe.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),tR);try{let l=Ie(o);delete l["Content-Type"],Xe.etag&&lr()==="server"&&(l["If-None-Match"]=Xe.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 Xe.routeMissingLogged||(Xe.routeMissingLogged=!0,dn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return dn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Vc(u,"server",e.agentOsId)?lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t():(Xe.etag=c.headers.get("etag"),dn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Pr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return dn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ee();ho();import nR from"node:os";function Yc(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Jc(e=b(),r=process.env){let t=Ue(r,e),n=go({config:e,totalMemBytes:nR.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let a=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",l="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";a?s.push(l):o.push(l)}let i=s.length===0;for(let a of o)Yc("warn",a);for(let a of s)Yc("error",a);return{ok:i,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:n.configuredMaxWorkers??n.autoCap,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as oR,readFileSync as sR,renameSync as iR,writeFileSync as aR}from"node:fs";import{homedir as lR}from"node:os";import qc from"node:path";function zc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return qc.join(lR(),".kynver",`daemon-heartbeat-${r}.json`)}function Xc(e){try{let r=zc(e.agentOsId);oR(qc.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}`;aR(n,JSON.stringify(t),"utf8"),iR(n,r)}catch{}}function Qc(e){try{let r=sR(zc(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Zc(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function cR(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function mt(){process.platform==="win32"&&(cR("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}O();import{existsSync as uR}from"node:fs";import{homedir as dR}from"node:os";import pR from"node:path";function eu(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 pn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function cr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||pR.join(dR(),".kynver","agent-os-cron.json")}function mR(e=cr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function fR(){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 ci(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function Qe(){let e=cr(),r=mR(e),t=fR(),n=ci(),o=!!(t&&n),s=uR(e),i=o&&(s||eu("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:eu("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:pn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:pn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:pn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:pn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:pn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function So(e=Qe()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function gR(e){return e.replace(/\/+$/,"")}async function ru(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${gR(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:Ie(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 hR,existsSync as ui,openSync as kR,readFileSync as yR,unlinkSync as tu,writeFileSync as RR}from"node:fs";var bR=10*6e4;function nu(e){if(!ui(e))return null;try{let r=JSON.parse(yR(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function vR(e){let r=nu(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>bR}function ou(e){if(ui(e)&&!vR(e)){let r=nu(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(ui(e))try{tu(e)}catch{}try{let r=kR(e,"wx");return RR(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),hR(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function su(e){try{tu(e)}catch{}}var SR=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function wR(e){return SR.test(e.trim())}function CR(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 mn(e,r,t,n){let o=e.trim();return o==="*"?!0:CR(o,t,n).has(r)}function _R(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return mn(n,r.getUTCMinutes(),0,59)&&mn(o,r.getUTCHours(),0,23)&&mn(s,r.getUTCDate(),1,31)&&mn(i,r.getUTCMonth()+1,1,12)&&mn(a,r.getUTCDay(),0,6)}var xR=366*24*60;function PR(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function iu(e,r){if(!wR(e))return null;let t=PR(r);t=new Date(t.getTime()+6e4);for(let n=0;n<xR;n++){if(_R(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function au(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=iu(e.cron.trim(),r);return t?t.toISOString():null}return null}function di(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=iu(e.cron.trim(),r);return t?t.toISOString():null}import{promises as ER}from"node:fs";async function lu(e){try{return await ER.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function AR(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Er(e=cr()){let r=await lu(e);return AR(r)}async function cu(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 uu(e,r=cr()){let t=await Er(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await cu(r,t)}async function du(e=cr()){return await lu(e)!==null?{created:!1}:(await cu(e,[]),{created:!0})}import{randomBytes as IR}from"node:crypto";import{promises as fn}from"node:fs";import OR from"node:path";var wo={version:1,jobs:{}};async function NR(e){try{return await fn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function TR(e){if(!e)return{...wo,jobs:{...wo.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...wo,jobs:{}}:r}catch{return{...wo,jobs:{}}}}async function Co(e){let r=await NR(e);return TR(r)}async function DR(e,r){await fn.mkdir(OR.dirname(e),{recursive:!0});let t=IR(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await fn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
17
|
-
`,"utf8");try{await fn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await fn.unlink(n).catch(()=>{})}}async function pu(e,r){await DR(e,r)}function mu(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 MR(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function UR(e){return!!e.completedAt}function BR(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 WR(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=au(e.spec,t);return r.nextFireAt=n,n}function LR(e,r,t,n){if(e.paused||UR(r)||MR(r,t)||!BR(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function HR(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=di(e.spec,t))}async function ft(e={}){let r=e.env??Qe(),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=ou(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 Er(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Co(r.statePath),l=[];for(let m of i){let p=mu(a,m.providerScheduleId);WR(m,p,t),LR(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let g=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return g-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 g=Date.parse(p.nextFireAt??"");if(!Number.isNaN(g)&&g<n-r.tickIntervalMs*2){p.nextFireAt=di(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),HR(m,p,t);try{let g=await ru({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,g.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 pu(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{su(r.lockPath)}}w();B();import fu from"node:path";var gu="mesh-cron-lease.json";function _o(e){return _(fu.join(x(e),gu),null)}function hu(e,r){le(fu.join(x(e),gu),{...r,updatedAt:new Date().toISOString()})}function ku(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 p_ from"node:path";B();Qs();w();import FR from"node:path";function $R(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 xo(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(FR.join(x(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!mo(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...$R(o)})}return t}O();O();function yu(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function Ru(e){let r=new AbortController,t=setTimeout(()=>r.abort(),yu());try{return await e(r.signal)}finally{clearTimeout(t)}}function bu(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:yu()}}}async function Ar(e,r,t){let n;try{n=await Ru(s=>fetch(e,{method:"POST",headers:Ie(r),body:JSON.stringify(t),signal:s}))}catch(s){return bu(s)}let o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,response:o}}async function q(e,r,t,n){let o=await Ar(e,r,t);if(o.ok||o.status!==401)return o;let s=await Nc(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Ar(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Po(e,r){let t;try{t=await Ru(o=>fetch(e,{method:"GET",headers:Ie(r),signal:o}))}catch(o){return bu(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}O();var KR=["implementation","review","landing"],jR=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function VR(e){return KR.includes(e)}function GR(e){return jR.includes(e)}function vu(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||VR(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:GR(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Su=dt.personas.map(vu),YR=new Map(Su.map(e=>[e.slug,e]));function JR(e){if(!e)return null;let r=e.trim().toLowerCase(),t=YR.get(r)??null,n=$c(r);if(!n)return t;let o=vu(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function pi(e){return JR(e)?.defaultRoleLane??null}function wu(){return Su.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Cu(e){return(e??"").trim().toLowerCase()}function qR(e){switch(Cu(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 zR(e){let r=Cu(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=qR(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function _u(e){return zR(e)??"any"}Yt();tn();B();B();function Eo(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function mi(e){return e.toLowerCase()}function XR(e){let r=Eo(e,"roleLane");if(r)return r;let t=mi(Eo(e,"executorRef")),n=mi(Eo(e,"title")),o=mi(Eo(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=pi(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function xu(e){let r=XR(e);return r?{...e,roleLane:r}:e}O();var Ze="cursor",QR=new Set(["claude","opus","anthropic"]),ZR=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function fi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ir(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return QR.has(r)?!0:r.includes("claude")||r.includes("opus")}function gi(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ir(r))return!0;let t=fi(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=fi(e,"description");if(ZR.some(s=>s.test(n)))return!0;let o=fi(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function eb(e,r){return{provider:Ze,model:hi,rule:`policy:cursor_default${r}`,requestedModel:e}}function Pu(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ir(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(gi(t)||r.rule==="explicit:cli"&&Ir(r.provider)||!Ir(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return eb(r.model,o)}function Ao(e,r=Ze){let t=e?.trim();return t?Ir(t)?Ze:t==="codex"?"codex":t:r}var Eu={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 gt(e){return Eu[e]}function Au(){return Object.values(Eu)}import{existsSync as tb}from"node:fs";import{homedir as nb}from"node:os";import Nu from"node:path";import{createHash as Iu}from"node:crypto";import{statSync as rb}from"node:fs";import{spawnSync as Ou}from"node:child_process";function Le(e){try{let r=rb(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Iu("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function ht(e){return Iu("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function we(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function He(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Ou(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 Io(e,r,t={}){let n=t.timeoutMs??8e3;try{return Ou(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 ob="codex";function sb(){let e=nb();return[Nu.join(e,".codex","auth.json"),Nu.join(e,".config","codex","auth.json")]}function Tu(e=new Date().toISOString()){let r=we(ob,["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=sb().find(s=>tb(s)),n=He(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?Le(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 ib}from"node:fs";import{homedir as ab}from"node:os";import ki from"node:path";function lb(){let e=process.env.HERMES_HOME?.trim(),r=e?ki.resolve(e):ki.join(ab(),".hermes");return ki.join(r,"auth.json")}function Oo(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=lb(),o=ib(n),s=Io(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?Le(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 kt(e=new Date().toISOString()){let r=Tu(e);if(r.ready)return{...r,path:"codex_cli"};let t=Oo(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 Du=["low","medium","high"],Mu={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Uu(e,r){let t=gt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function cb(e,r){let t=gt(e.providerId),n=gt(r.providerId),o=Du.indexOf(t.costTier)-Du.indexOf(n.costTier);if(o!==0)return o;let s=Mu[e.binding.authSource]-Mu[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function yi(e){let r=Au().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Uu(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(cb)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Uu(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 ub}from"node:fs";import{homedir as db}from"node:os";import pb from"node:path";var mb="claude";function fb(){let e=db();return[pb.join(e,".claude",".credentials.json")]}function Bu(e=new Date().toISOString()){let r=we(mb,["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=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=fb().find(i=>ub(i)),o=Io(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?Le(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 gb}from"node:fs";import{homedir as hb}from"node:os";import kb from"node:path";var yb="agent";function Rb(){let e=hb();return[kb.join(e,".config","cursor","auth.json")]}function Wu(e=new Date().toISOString()){let r=we(yb,["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=He(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Rb().find(s=>gb(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Le(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 bb,readFileSync as vb}from"node:fs";import{homedir as Sb}from"node:os";import Ri from"node:path";var wb=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Cb(){let e=process.env.HERMES_HOME?.trim(),r=e?Ri.resolve(e):Ri.join(Sb(),".hermes");return Ri.join(r,".env")}function _b(e){try{let r=vb(e,"utf8"),t=[];for(let n of wb)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Lu(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Cb(),o=bb(n),s=o?_b(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?Le(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 Hu(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=kt(r),n={codex:t,cursor:Wu(r),claude:Bu(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:Lu(r),hermesOpenAiCodex:Oo(r),codexAdapterPath:t.path,readyCount:o}}var xb=[/\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],Pb=[/\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 bi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Eb(e){let r=bi(e,"executorRef").toLowerCase(),t=bi(e,"title").toLowerCase(),n=bi(e,"description").toLowerCase(),o=`${r}
|
|
16
|
+
`)},Jy={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},dt={version:Vy,generatedAt:"1970-01-01T00:00:00.000Z",personas:Gy,instructions:Yy,policyThresholds:Jy};var ln=dt,Fc="embedded";function Pr(){return ln.version}function lr(){return Fc}function $c(e,r){ln=e,Fc=r}function cn(e){let r=ln.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=dt.instructions[e];return typeof t=="string"?t:""}function pt(e,r){let t=ln.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=dt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Kc(e){if(!e)return null;let r=e.trim().toLowerCase();return ln.personas.find(t=>t.slug===r)??null}import{createPublicKey as zy,verify as Xy}from"node:crypto";var qy={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function jc(e,r=process.env){let t=ci(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=qy[e];return n?ci(n):null}var Qy=Buffer.from("302a300506032b6570032100","hex");function Zy(e){return zy({key:Buffer.concat([Qy,Buffer.from(e)]),format:"der",type:"spki"})}function eR(e,r){if(!an(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(Uc(e.bundle),"utf8");return Xy(null,n,Zy(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 Vc(e,r=process.env){if(!an(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=jc(e.publicKeyId,r);return t?eR(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var rR=15*6e4,tR=1e4,Xe={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function dn(e,r){console.error(JSON.stringify({event:e,...r}))}function Gc(e,r,t){let n=Vc(e);return n.ok?($c(n.bundle,r),r==="server"&&Lc(t,e),!0):(dn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function un(e){if(Xe.diskCacheTried)return!1;Xe.diskCacheTried=!0;let r=Hc(e);return r?Gc(r,"disk",e):!1}async function Yc(e){let r=e.nowMs??Date.now(),t=()=>({source:lr(),version:Pr(),updated:!1});if(!e.force&&r-Xe.lastAttemptAtMs<rR)return t();Xe.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),tR);try{let l=Ie(o);delete l["Content-Type"],Xe.etag&&lr()==="server"&&(l["If-None-Match"]=Xe.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 Xe.routeMissingLogged||(Xe.routeMissingLogged=!0,dn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return dn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Gc(u,"server",e.agentOsId)?lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t():(Xe.etag=c.headers.get("etag"),dn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Pr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return dn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),lr()==="embedded"&&un(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ee();ho();import nR from"node:os";function Jc(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function qc(e=b(),r=process.env){let t=Ue(r,e),n=go({config:e,totalMemBytes:nR.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let a=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",l="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";a?s.push(l):o.push(l)}let i=s.length===0;for(let a of o)Jc("warn",a);for(let a of s)Jc("error",a);return{ok:i,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:n.configuredMaxWorkers??n.autoCap,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as oR,readFileSync as sR,renameSync as iR,writeFileSync as aR}from"node:fs";import{homedir as lR}from"node:os";import zc from"node:path";function Xc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return zc.join(lR(),".kynver",`daemon-heartbeat-${r}.json`)}function Qc(e){try{let r=Xc(e.agentOsId);oR(zc.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}`;aR(n,JSON.stringify(t),"utf8"),iR(n,r)}catch{}}function Zc(e){try{let r=sR(Xc(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function eu(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function cR(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function mt(){process.platform==="win32"&&(cR("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}O();import{existsSync as uR}from"node:fs";import{homedir as dR}from"node:os";import pR from"node:path";function ru(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 pn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function cr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||pR.join(dR(),".kynver","agent-os-cron.json")}function mR(e=cr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function fR(){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 ui(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function Qe(){let e=cr(),r=mR(e),t=fR(),n=ui(),o=!!(t&&n),s=uR(e),i=o&&(s||ru("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:ru("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:pn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:pn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:pn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:pn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:pn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function So(e=Qe()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function gR(e){return e.replace(/\/+$/,"")}async function tu(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${gR(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:Ie(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 hR,existsSync as di,openSync as kR,readFileSync as yR,unlinkSync as nu,writeFileSync as RR}from"node:fs";var bR=10*6e4;function ou(e){if(!di(e))return null;try{let r=JSON.parse(yR(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function vR(e){let r=ou(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>bR}function su(e){if(di(e)&&!vR(e)){let r=ou(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(di(e))try{nu(e)}catch{}try{let r=kR(e,"wx");return RR(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),hR(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function iu(e){try{nu(e)}catch{}}var SR=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function wR(e){return SR.test(e.trim())}function CR(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 mn(e,r,t,n){let o=e.trim();return o==="*"?!0:CR(o,t,n).has(r)}function _R(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return mn(n,r.getUTCMinutes(),0,59)&&mn(o,r.getUTCHours(),0,23)&&mn(s,r.getUTCDate(),1,31)&&mn(i,r.getUTCMonth()+1,1,12)&&mn(a,r.getUTCDay(),0,6)}var xR=366*24*60;function PR(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function au(e,r){if(!wR(e))return null;let t=PR(r);t=new Date(t.getTime()+6e4);for(let n=0;n<xR;n++){if(_R(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function lu(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=au(e.cron.trim(),r);return t?t.toISOString():null}return null}function pi(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=au(e.cron.trim(),r);return t?t.toISOString():null}import{promises as ER}from"node:fs";async function cu(e){try{return await ER.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function AR(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Er(e=cr()){let r=await cu(e);return AR(r)}async function uu(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 du(e,r=cr()){let t=await Er(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await uu(r,t)}async function pu(e=cr()){return await cu(e)!==null?{created:!1}:(await uu(e,[]),{created:!0})}import{randomBytes as IR}from"node:crypto";import{promises as fn}from"node:fs";import OR from"node:path";var wo={version:1,jobs:{}};async function NR(e){try{return await fn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function TR(e){if(!e)return{...wo,jobs:{...wo.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...wo,jobs:{}}:r}catch{return{...wo,jobs:{}}}}async function Co(e){let r=await NR(e);return TR(r)}async function DR(e,r){await fn.mkdir(OR.dirname(e),{recursive:!0});let t=IR(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await fn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
17
|
+
`,"utf8");try{await fn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await fn.unlink(n).catch(()=>{})}}async function mu(e,r){await DR(e,r)}function fu(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 MR(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function UR(e){return!!e.completedAt}function BR(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 WR(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=lu(e.spec,t);return r.nextFireAt=n,n}function LR(e,r,t,n){if(e.paused||UR(r)||MR(r,t)||!BR(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function HR(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=pi(e.spec,t))}async function ft(e={}){let r=e.env??Qe(),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=su(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 Er(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Co(r.statePath),l=[];for(let m of i){let p=fu(a,m.providerScheduleId);WR(m,p,t),LR(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let g=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return g-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 g=Date.parse(p.nextFireAt??"");if(!Number.isNaN(g)&&g<n-r.tickIntervalMs*2){p.nextFireAt=pi(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),HR(m,p,t);try{let g=await tu({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,g.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 mu(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{iu(r.lockPath)}}w();B();import gu from"node:path";var hu="mesh-cron-lease.json";function _o(e){return _(gu.join(x(e),hu),null)}function ku(e,r){le(gu.join(x(e),hu),{...r,updatedAt:new Date().toISOString()})}function yu(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 p_ from"node:path";B();Zs();w();import FR from"node:path";function $R(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 xo(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(FR.join(x(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!mo(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...$R(o)})}return t}O();O();function Ru(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function bu(e){let r=new AbortController,t=setTimeout(()=>r.abort(),Ru());try{return await e(r.signal)}finally{clearTimeout(t)}}function vu(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:Ru()}}}async function Ar(e,r,t){let n;try{n=await bu(s=>fetch(e,{method:"POST",headers:Ie(r),body:JSON.stringify(t),signal:s}))}catch(s){return vu(s)}let o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,response:o}}async function q(e,r,t,n){let o=await Ar(e,r,t);if(o.ok||o.status!==401)return o;let s=await Tc(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Ar(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Po(e,r){let t;try{t=await bu(o=>fetch(e,{method:"GET",headers:Ie(r),signal:o}))}catch(o){return vu(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}O();var KR=["implementation","review","landing"],jR=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function VR(e){return KR.includes(e)}function GR(e){return jR.includes(e)}function Su(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||VR(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:GR(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var wu=dt.personas.map(Su),YR=new Map(wu.map(e=>[e.slug,e]));function JR(e){if(!e)return null;let r=e.trim().toLowerCase(),t=YR.get(r)??null,n=Kc(r);if(!n)return t;let o=Su(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function mi(e){return JR(e)?.defaultRoleLane??null}function Cu(){return wu.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function _u(e){return(e??"").trim().toLowerCase()}function qR(e){switch(_u(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 zR(e){let r=_u(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=qR(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function xu(e){return zR(e)??"any"}Yt();tn();B();B();function Eo(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function fi(e){return e.toLowerCase()}function XR(e){let r=Eo(e,"roleLane");if(r)return r;let t=fi(Eo(e,"executorRef")),n=fi(Eo(e,"title")),o=fi(Eo(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=mi(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Pu(e){let r=XR(e);return r?{...e,roleLane:r}:e}O();var Ze="cursor",QR=new Set(["claude","opus","anthropic"]),ZR=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function gi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ir(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return QR.has(r)?!0:r.includes("claude")||r.includes("opus")}function hi(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ir(r))return!0;let t=gi(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=gi(e,"description");if(ZR.some(s=>s.test(n)))return!0;let o=gi(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function eb(e,r){return{provider:Ze,model:ki,rule:`policy:cursor_default${r}`,requestedModel:e}}function Eu(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ir(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(hi(t)||r.rule==="explicit:cli"&&Ir(r.provider)||!Ir(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return eb(r.model,o)}function Ao(e,r=Ze){let t=e?.trim();return t?Ir(t)?Ze:t==="codex"?"codex":t:r}var Au={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 gt(e){return Au[e]}function Iu(){return Object.values(Au)}import{existsSync as tb}from"node:fs";import{homedir as nb}from"node:os";import Tu from"node:path";import{createHash as Ou}from"node:crypto";import{statSync as rb}from"node:fs";import{spawnSync as Nu}from"node:child_process";function Le(e){try{let r=rb(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Ou("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function ht(e){return Ou("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function we(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function He(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Nu(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 Io(e,r,t={}){let n=t.timeoutMs??8e3;try{return Nu(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 ob="codex";function sb(){let e=nb();return[Tu.join(e,".codex","auth.json"),Tu.join(e,".config","codex","auth.json")]}function Du(e=new Date().toISOString()){let r=we(ob,["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=sb().find(s=>tb(s)),n=He(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?Le(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 ib}from"node:fs";import{homedir as ab}from"node:os";import yi from"node:path";function lb(){let e=process.env.HERMES_HOME?.trim(),r=e?yi.resolve(e):yi.join(ab(),".hermes");return yi.join(r,"auth.json")}function Oo(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=lb(),o=ib(n),s=Io(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?Le(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 kt(e=new Date().toISOString()){let r=Du(e);if(r.ready)return{...r,path:"codex_cli"};let t=Oo(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 Mu=["low","medium","high"],Uu={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Bu(e,r){let t=gt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function cb(e,r){let t=gt(e.providerId),n=gt(r.providerId),o=Mu.indexOf(t.costTier)-Mu.indexOf(n.costTier);if(o!==0)return o;let s=Uu[e.binding.authSource]-Uu[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ri(e){let r=Iu().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Bu(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(cb)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Bu(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 ub}from"node:fs";import{homedir as db}from"node:os";import pb from"node:path";var mb="claude";function fb(){let e=db();return[pb.join(e,".claude",".credentials.json")]}function Wu(e=new Date().toISOString()){let r=we(mb,["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=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=fb().find(i=>ub(i)),o=Io(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?Le(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 gb}from"node:fs";import{homedir as hb}from"node:os";import kb from"node:path";var yb="agent";function Rb(){let e=hb();return[kb.join(e,".config","cursor","auth.json")]}function Lu(e=new Date().toISOString()){let r=we(yb,["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=He(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Rb().find(s=>gb(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Le(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 bb,readFileSync as vb}from"node:fs";import{homedir as Sb}from"node:os";import bi from"node:path";var wb=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Cb(){let e=process.env.HERMES_HOME?.trim(),r=e?bi.resolve(e):bi.join(Sb(),".hermes");return bi.join(r,".env")}function _b(e){try{let r=vb(e,"utf8"),t=[];for(let n of wb)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Hu(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Cb(),o=bb(n),s=o?_b(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?Le(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 Fu(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=kt(r),n={codex:t,cursor:Lu(r),claude:Wu(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:Hu(r),hermesOpenAiCodex:Oo(r),codexAdapterPath:t.path,readyCount:o}}var xb=[/\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],Pb=[/\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 vi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Eb(e){let r=vi(e,"executorRef").toLowerCase(),t=vi(e,"title").toLowerCase(),n=vi(e,"description").toLowerCase(),o=`${r}
|
|
18
18
|
${t}
|
|
19
|
-
${n}`;return xb.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":Pb.some(s=>s.test(o))?"low":"elevated"}function Ab(e){let r=gt(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 Ib(e){let r=e.inventory??Hu();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Or(e){let r=Ab({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 Fu(e){let r=e.task??{},t=Eb(r),n=Ib({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:kt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ze;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=yi({inventory:n,riskClass:t});return Or(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 Or({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 Or({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 Or({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=yi({inventory:n,riskClass:t});if(a)return Or({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 Or({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"}})}Jr();w();import{closeSync as $u,openSync as Ku}from"node:fs";import{spawn as Ub}from"node:child_process";var Ob=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Nb(e){return e.replace(Ob,"")}var Tb=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function vi(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var Db=new Set(["cursor"]);function Mb(e){let r=e.trim().toLowerCase();return Db.has(r)?"auto":null}function Si(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Nb(t).trim()||r;return Tb.test(o)||!vi(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function yt(e,r){let t=(e??"").trim();return t?vi(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 wi(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Mb(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")`}:vi(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 Rt="claude-sonnet-4-6",ju={name:"claude",defaultModel:Rt,preflightModel(e){return Si(e,Rt)},start(e){let r=Si(e.model,Rt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Ku(e.stdoutPath,"a"),o=Ku(e.stderrPath,"a"),s=["ignore",n,o],i=Ub("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],ae({cwd:e.worktreePath,detached:!0,stdio:s,env:Je(process.env)}));if($u(n),$u(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}}};Jr();w();import{closeSync as Ju,existsSync as Hb,openSync as qu}from"node:fs";import{spawn as zu}from"node:child_process";Jr();w();import{closeSync as Vu,openSync as Gu}from"node:fs";import{spawn as Bb}from"node:child_process";var Ci=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Wb(){return Je({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Lb(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 Yu={name:"hermes-codex",defaultModel:Ci,preflightModel(e){return yt(e,Ci)},start(e){let r=yt(e.model,Ci);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Gu(e.stdoutPath,"a"),o=Gu(e.stderrPath,"a"),s=["ignore",n,o],i=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=Lb(t,e.prompt),l=Bb(i,a,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Wb()}));if(Vu(n),Vu(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 Fb(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Nr=Fb();function $b(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Kb(){return Je({...process.env,CI:"1",NO_COLOR:"1"})}function jb(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Vb(e,r,t){if(!(process.platform!=="win32"&&Hb("/usr/bin/script")))return zu(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return zu("script",["-qfc",o,"/dev/null"],t)}var Xu={name:"codex",defaultModel:Nr,preflightModel(e){return yt(e,Nr)},start(e){if(kt().path==="hermes_openai_codex")return Yu.start(e);let t=yt(e.model,Nr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=qu(e.stdoutPath,"a"),s=qu(e.stderrPath,"a"),i=["ignore",o,s],a=$b(),l=jb(n,e.prompt),c=Vb(a,l,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Kb()}));if(Ju(o),Ju(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 Gb="claude-sonnet-4-6",hi="composer-2.5";function No(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Qu(e){return e.toLowerCase()}function xi(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Gb}function _i(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 Yb(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:hi,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Rt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Zu(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 Jb(e){let r=Qu(No(e,"executorRef")),t=No(e,"title").toLowerCase(),n=No(e,"priority")||"normal",o=Qu(No(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Nr,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:Nr,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 Zu(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Zu(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=xi();return{model:s,provider:_i(s),rule:"default:global"}}function To(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Yb(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||_i(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Jb(e.task);r={...o,requestedModel:o.model}}else{let o=xi();r={model:o,provider:e.explicitProvider?.trim()||_i(o),rule:"default:global",requestedModel:o}}let t=Pu({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"||Ir(t.provider)&&(e.explicitProviderIsOperatorOverride||gi(e.task)))return t;let n=Fu({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Nr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function ed(e,r,t){return e||r||t||xi()||Rt}function rd(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function td(){return{maxTaskAttempts:rd(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(pt("harness.maxTaskAttempts",4))),dispatchCooldownMs:rd(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(pt("harness.dispatchCooldownMs",5e3)))}}O();import Xb from"node:path";B();G();w();var Pi="kynver-harness:",nd="@runner:";function Ei(e){return e?.trim()?e.trim():null}function qb(e){let r=Ei(e);if(!r?.startsWith(Pi))return null;let t=r.slice(Pi.length),n=t.indexOf(nd);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ai(e,r){let t=e.trim(),n=r.trim();return`${Pi}${t}${nd}${n}`}function Ii(e,r){let t=Ei(r);return t?qb(e)===t:!1}function Do(e){let r=Ei(e.workerLeaseOwner);return r&&Ii(r,e.runId)?r:Ai(e.runId,e.runnerId)}import od from"node:os";Ee();Ee();import zb from"node:os";function Mo(e,r){let t=(r??zb.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function ur(e){return e?.trim()?e.trim():null}function Fe(e={}){let r=e.env??process.env;return{runnerId:ur(r.KYNVER_RUNTIME_ID)??ur(r.OPENCLAW_RUNTIME_ID)??ur(r.HOSTNAME)??od.hostname(),hostname:ur(r.HOSTNAME)??od.hostname(),profile:ur(r.KYNVER_RUNNER_PROFILE)??ur(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:ur(r.KYNVER_HARNESS_REPO)??ur(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Pr()}}function sd(e,r){return _(Xb.join(x(e),"workers",R(r),"worker.json"),void 0)}async function Uo(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=W(r.baseUrl?String(r.baseUrl):void 0),s=await K(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Oi,a=Fe({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=sd(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!$(f.pid)){u.push(d);continue}if(T(f).status==="done"){u.push(d);continue}let p=Do({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),g=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,k=await q(g,s,{leaseOwner:p,leaseDurationMs:i,...f.leaseToken?{leaseToken:f.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(k.ok){l.push(d);continue}let h=k.response&&typeof k.response=="object"&&"reason"in k.response?String(k.response.reason??`http ${k.status}`):`http ${k.status}`;c.push({worker:d,reason:h})}return{renewed:l,failed:c,skipped:u}}function id(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=sd(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}ye();B();B();import{existsSync as hS,mkdirSync as kS}from"node:fs";import vt from"node:path";var Qb=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Zb="next-action-fix:";function Bo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ad(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Bo(e)}function ev(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Zb)||t.includes("repair")||t.includes("unblock"))}function rv(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Qb);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Bo(String(n.targetPrUrl??n.target_pr_url??"")),s=Bo(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?ad(o):null,targetPrBranch:s}}catch{return r}}function ld(e){if(!ev(e))return null;let r=rv(e.description),t=e.prUrl?ad(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Bo(e.branch)}:null}function cd(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 ud(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=[...cn(`worker.prompt.progress.${n}`).split(`
|
|
19
|
+
${n}`;return xb.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":Pb.some(s=>s.test(o))?"low":"elevated"}function Ab(e){let r=gt(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 Ib(e){let r=e.inventory??Fu();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Or(e){let r=Ab({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 $u(e){let r=e.task??{},t=Eb(r),n=Ib({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:kt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ze;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Ri({inventory:n,riskClass:t});return Or(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 Or({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 Or({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 Or({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Ri({inventory:n,riskClass:t});if(a)return Or({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 Or({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"}})}Jr();w();import{closeSync as Ku,openSync as ju}from"node:fs";import{spawn as Ub}from"node:child_process";var Ob=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Nb(e){return e.replace(Ob,"")}var Tb=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Si(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var Db=new Set(["cursor"]);function Mb(e){let r=e.trim().toLowerCase();return Db.has(r)?"auto":null}function wi(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Nb(t).trim()||r;return Tb.test(o)||!Si(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function yt(e,r){let t=(e??"").trim();return t?Si(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 Ci(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Mb(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")`}:Si(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 Rt="claude-sonnet-4-6",Vu={name:"claude",defaultModel:Rt,preflightModel(e){return wi(e,Rt)},start(e){let r=wi(e.model,Rt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=ju(e.stdoutPath,"a"),o=ju(e.stderrPath,"a"),s=["ignore",n,o],i=Ub("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],ae({cwd:e.worktreePath,detached:!0,stdio:s,env:Je(process.env)}));if(Ku(n),Ku(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}}};Jr();w();import{closeSync as qu,existsSync as Hb,openSync as zu}from"node:fs";import{spawn as Xu}from"node:child_process";Jr();w();import{closeSync as Gu,openSync as Yu}from"node:fs";import{spawn as Bb}from"node:child_process";var _i=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Wb(){return Je({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Lb(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 Ju={name:"hermes-codex",defaultModel:_i,preflightModel(e){return yt(e,_i)},start(e){let r=yt(e.model,_i);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Yu(e.stdoutPath,"a"),o=Yu(e.stderrPath,"a"),s=["ignore",n,o],i=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=Lb(t,e.prompt),l=Bb(i,a,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Wb()}));if(Gu(n),Gu(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 Fb(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Nr=Fb();function $b(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Kb(){return Je({...process.env,CI:"1",NO_COLOR:"1"})}function jb(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Vb(e,r,t){if(!(process.platform!=="win32"&&Hb("/usr/bin/script")))return Xu(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Xu("script",["-qfc",o,"/dev/null"],t)}var Qu={name:"codex",defaultModel:Nr,preflightModel(e){return yt(e,Nr)},start(e){if(kt().path==="hermes_openai_codex")return Ju.start(e);let t=yt(e.model,Nr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=zu(e.stdoutPath,"a"),s=zu(e.stderrPath,"a"),i=["ignore",o,s],a=$b(),l=jb(n,e.prompt),c=Vb(a,l,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Kb()}));if(qu(o),qu(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 Gb="claude-sonnet-4-6",ki="composer-2.5";function No(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Zu(e){return e.toLowerCase()}function Pi(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Gb}function xi(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 Yb(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:ki,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Rt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function ed(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 Jb(e){let r=Zu(No(e,"executorRef")),t=No(e,"title").toLowerCase(),n=No(e,"priority")||"normal",o=Zu(No(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Nr,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:Nr,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 ed(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(ed(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=Pi();return{model:s,provider:xi(s),rule:"default:global"}}function To(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Yb(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||xi(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Jb(e.task);r={...o,requestedModel:o.model}}else{let o=Pi();r={model:o,provider:e.explicitProvider?.trim()||xi(o),rule:"default:global",requestedModel:o}}let t=Eu({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"||Ir(t.provider)&&(e.explicitProviderIsOperatorOverride||hi(e.task)))return t;let n=$u({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Nr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function rd(e,r,t){return e||r||t||Pi()||Rt}function td(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function nd(){return{maxTaskAttempts:td(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(pt("harness.maxTaskAttempts",4))),dispatchCooldownMs:td(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(pt("harness.dispatchCooldownMs",5e3)))}}O();import Xb from"node:path";B();G();w();var Ei="kynver-harness:",od="@runner:";function Ai(e){return e?.trim()?e.trim():null}function qb(e){let r=Ai(e);if(!r?.startsWith(Ei))return null;let t=r.slice(Ei.length),n=t.indexOf(od);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ii(e,r){let t=e.trim(),n=r.trim();return`${Ei}${t}${od}${n}`}function Oi(e,r){let t=Ai(r);return t?qb(e)===t:!1}function Do(e){let r=Ai(e.workerLeaseOwner);return r&&Oi(r,e.runId)?r:Ii(e.runId,e.runnerId)}import sd from"node:os";Ee();Ee();import zb from"node:os";function Mo(e,r){let t=(r??zb.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function ur(e){return e?.trim()?e.trim():null}function Fe(e={}){let r=e.env??process.env;return{runnerId:ur(r.KYNVER_RUNTIME_ID)??ur(r.OPENCLAW_RUNTIME_ID)??ur(r.HOSTNAME)??sd.hostname(),hostname:ur(r.HOSTNAME)??sd.hostname(),profile:ur(r.KYNVER_RUNNER_PROFILE)??ur(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:ur(r.KYNVER_HARNESS_REPO)??ur(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Pr()}}function id(e,r){return _(Xb.join(x(e),"workers",R(r),"worker.json"),void 0)}async function Uo(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=W(r.baseUrl?String(r.baseUrl):void 0),s=await K(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ni,a=Fe({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=id(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!$(f.pid)){u.push(d);continue}if(T(f).status==="done"){u.push(d);continue}let p=Do({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),g=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,k=await q(g,s,{leaseOwner:p,leaseDurationMs:i,...f.leaseToken?{leaseToken:f.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(k.ok){l.push(d);continue}let h=k.response&&typeof k.response=="object"&&"reason"in k.response?String(k.response.reason??`http ${k.status}`):`http ${k.status}`;c.push({worker:d,reason:h})}return{renewed:l,failed:c,skipped:u}}function ad(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=id(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}ye();B();B();import{existsSync as hS,mkdirSync as kS}from"node:fs";import vt from"node:path";var Qb=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Zb="next-action-fix:";function Bo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ld(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Bo(e)}function ev(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Zb)||t.includes("repair")||t.includes("unblock"))}function rv(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Qb);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Bo(String(n.targetPrUrl??n.target_pr_url??"")),s=Bo(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?ld(o):null,targetPrBranch:s}}catch{return r}}function cd(e){if(!ev(e))return null;let r=rv(e.description),t=e.prUrl?ld(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Bo(e.branch)}:null}function ud(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 dd(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=[...cn(`worker.prompt.progress.${n}`).split(`
|
|
20
20
|
`),o],i=cn(`worker.prompt.merge_gate.${n}`).split(`
|
|
21
21
|
`),a=cn(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
22
22
|
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Final response must include files changed, verification commands, and unresolved risks.",...cn("worker.prompt.core_rules").split(`
|
|
23
|
-
`),"",...s,"",...i,"",...a,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...
|
|
24
|
-
`)}w();O();w();Jr();import{closeSync as
|
|
25
|
-
`).map(r=>r.trim()).find(Boolean)??""}function
|
|
26
|
-
`)}function Li(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??kn(e.snapshot.worktreePath,e.exec)??void 0};let r=Ko({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 Hi(e,r=$o){let t=e.prUrlHint??Cd(e.status.finalResult)??null,n=xd(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!_d({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?Li({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Li({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!Tv(r)){let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} 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=Ad(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 k=!1,h=!1,S=n.headCommit??kn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Ko({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`."};k=A.committed,h=A.pushed,S=A.headCommit??S}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`."};h=A.status===0}return{ok:!0,prUrl:a,headCommit:S,committed:k,pushed:h}}let l=Fo(n.worktreePath,i,n.branch,r);if(l)return Li({snapshot:n,prUrl:l,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let c=n.changedFiles.length>0,u=!1,d=!1,f=n.headCommit??void 0,m=Ko({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=m.committed,d=m.pushed,!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let k=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(k.status!==0&&!/already up to date/i.test(k.stderr||k.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${k.stderr||k.stdout||k.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};d=k.status===0}f=m.headCommit??f??kn(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=Id({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:Dv(e.worker.name,e.worker.runId),body:Mv(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Sd(g.detail))return{ok:!0,headCommit:f??void 0,committed:u,pushed:d};let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${g.detail?` (${g.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:u,pushed:d,created:g.created}}G();ao();function jo(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 Od(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 Nd(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Td(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Md(e){let r=Td(e);if(!r)return[];let t=Td(r.worktreeHandoff),n=Nd(t?.disposableArtifactsRemoved);return n.length?n:Nd(r.disposableArtifactsRemoved)}function Dd(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Ud(e,r){let t=jo(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Dd(o)));return t.every(o=>{let s=Dd(Od(o));return n.has(s)})}function Vo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Bd(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Uv(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 Bv(e){let r=Bd(e.disposableArtifactsRemoved),t=Md(e.finalResult);return[...new Set([...r,...t])]}function Wd(e){let r=Bd(e.changedFiles),t=jo(r),n=Bv(e),o=t.length===0||Ud(r,n);return Vo(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`}:Vo(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`}:Vo(e.artifactBundlePath)||Vo(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}:Uv(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`}}B();G();w();import Wv from"node:path";var Lv=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Ld(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function Hv(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 Fv(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:Hv(r);return{finalResult:r??t??"completed",summary:t}}function Fi(e,r,t){if(Ld(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Fv(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function $v(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 Hd(e,r){let t=$v(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(Wv.join(x(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||Ld(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!Lv.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});Fi(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Kv from"node:path";var jv=/^[a-z0-9][a-z0-9._-]{0,127}$/i,Vv=/^[a-z0-9][a-z0-9._-]{0,63}$/i,$i=new Set(["undefined","null"]),Fd="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Go(e){let r=e.trim();if(!jv.test(r))throw new Error(`invalid run id: ${e}`);return r}function Gv(e){let r=e.trim();if(!Vv.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Ki(e){return typeof e=="string"?e.trim():""}function Ke(e){let r=Ki(e.run),t=Ki(e.name);return(!r||$i.has(r))&&nr(`missing --run RUN_ID (${Fd})`),(!t||$i.has(t))&&nr(`missing --name WORKER_NAME (${Fd})`),{runId:Go(r),workerName:Gv(t)}}function ji(e){let r=Ki(e.run);return(!r||$i.has(r))&&nr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Go(r)}function $d(e){let r=Kv.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function Kd(e,r,t){let n=await fetch(e,{method:"POST",headers:Ie(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 Yv(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function jd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function yn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Jv(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function qv(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 Gd(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function zv(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Rn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function Xv(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function Yo(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function Qv(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function vn(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,Yo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(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&&Dr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Bi(n)&&Xv(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=Hi({worker:n,run:o,status:s});if(!P.ok)return Rn(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=T(n,Yo(o)),s=Qv(s,P))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let P=Wd({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!P.allowed){let v=P.detail??`worktree completion blocked (${P.state})`;return Rn(n,v),{ok:!1,reason:v,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=W(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await K(f,i,{baseUrl:d}),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 Kd(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await Oc(i,{baseUrl:d});P&&P!==m&&(m=P,h=await Kd(p,m,k))}if(h.ok){let P=kd(h.parsed);if(!yd(P)){let oe=`completion acknowledged but board not advanced: ${P.detail??(P.routeOutcome?`harness completion returned ${P.routeOutcome}`:"harness completion did not advance the linked task")}`;Rn(n,oe);let De={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Ui(n,n.runId,De),{ok:!1,httpStatus:h.status,response:h.parsed,reason:oe,completionBlocked:!0}}Rn(n,void 0);let v=P.routeOutcome??"acknowledged",E={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Ui(n,n.runId,E),Fi(n,s,{source:"harness-completion"});let H=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:v,...H?{prHandoff:{prUrl:H}}:{}}}let S=h.status===401||h.status===403,A=Yv(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),L=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return Rn(n,L),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function Gi(e){try{let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,Yo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(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 vn(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 Yd(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,Yo(o));le(bn.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function Zv(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 Vi(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function eS(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Vi(e.task??e.taskId);t&&(r.task=t);let n=Vi(e.worker??e.name);n&&(r.worker=n);let o=Vi(e.status);return o&&(r.status=o),r}function rS(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 Jd(e,r){let t=eS(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>rS(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:dr(n,"status"),attentionCounts:dr(n,"attention"),lifecycleCounts:dr(n,"lifecycleStage")}),e.controller&&(o.controller=Xd(n)),o}function qd(e){let r=ji(e),t=e.full===!0||e.full==="true",n=Jd(t?Mr(r):Zd(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:Zv(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function zd(e){let{run:r,workerName:t,worker:n}=e,o=T(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=nt({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=Gd(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=jd(n.completionResponse),m=jd(f?.task),p=yn(f?.outcome),g=yn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(v=>typeof v=="string"&&v.trim().length>0):[],h=yn(m?.prUrl)??yn(f?.prUrl),S=yn(n.completionReportedAt),A=Jv({finished:re(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),L=qv({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:re(o)}),P=zv({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 v=n.instructionPolicyEvidence;if(!v||typeof v!="object")return null;let E=v.ruleSlugs;return Array.isArray(E)?E.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:P,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:A,completionReportedAt:S,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:L,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function tS(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&&!Gd(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function nS(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 dr(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 Vd(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 Xd(e){let r=e.filter(Vd),t=e.filter(n=>{if(Vd(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 Qd(e,r,t){let n={runId:e.id,name:e.name,status:Qt(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:dr(r,"status"),attentionCounts:dr(r,"attention"),lifecycleCounts:dr(r,"lifecycleStage")},n.controller=Xd(r)),n}function oS(e){return e.status==="done"&&e.attention==="done"}function Mr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(bn.join(x(r.id),"workers",R(s),"worker.json"),void 0);return i?zd({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Qd(r,n,!1);return le(bn.join(x(r.id),"last-board.json"),o),o}function Zd(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(bn.join(x(r.id),"workers",R(i),"worker.json"),void 0);return a?tS(a)?nS(i,a):zd({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!oS(i)),s=Qd(r,o,!0);return s.status=Qt(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:dr(n,"status"),allAttentionCounts:dr(n,"attention")},le(bn.join(x(r.id),"last-board-compact.json"),s),s}async function ep(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Mr(t),s=W(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await q(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 sS(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 Sn(e){let r=ji(e),t=e.full===!0||e.full==="true",n=Jd(t?Mr(r):Zd(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=sS(r)),console.log(JSON.stringify(n,null,2))}function rp(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=ro(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
27
|
-
`).filter(Boolean)){let i=Yr(s),a=i?
|
|
28
|
-
`).trimEnd();return
|
|
29
|
-
`,{mode:384}),l}function
|
|
30
|
-
`,{mode:384})}function
|
|
31
|
-
`)}function
|
|
32
|
-
`)}var
|
|
33
|
-
`)}function VS(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 Br(e){let r=e.pipeline===!0||e.pipeline==="true";try{let $t=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=$t;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=W(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,o,{baseUrl:s}),l=!(e.execute===!0||e.execute==="true"),c=Fe({runId:n.id}),u=Ai(n.id,c.runnerId),d=e.diskPath?We({diskPath:String(e.diskPath)}):We({diskPath:n.repo}),f=wr({runId:n.id}),m=VS(e),p=m.size>0,g=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,k=p?Math.min(g,m.size):g,h=l?k:Math.min(k,f.slotsAvailable);if(!l&&h<=0){let C={runId:n.id,agentOsId:o,dryRun:!1,skipped:!0,reason:f.reason??"no resource slots",resourceGate:f};if(r)return{ok:!0,...C};console.log(JSON.stringify(C,null,2));return}let S=xo(n.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let C=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/lane-hygiene`;try{await q(C,i,{agentOsId:o,dryRun:!1,includeBoardReconcile:!0},{agentOsId:o,baseUrl:s})}catch(y){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${y.message}`)}}let A=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/tasks/dispatch-next`,L=C=>({agentOsId:o,dryRun:l,maxStarts:C,leaseOwner:u,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Oi,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Mr(n.id),...e.lane?{lane:_u(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(y=>y.trim()).filter(Boolean)}:{}}),P=async C=>{let y=await q(A,i,L(C),{agentOsId:o,baseUrl:s})??{ok:!1,status:0,response:null},I=y.response;return{dispatch:y,result:I?.result}},v=await P(p||l?h:1);if(!v.dispatch.ok||!v.result){let C={runId:n.id,agentOsId:o,action:"dispatch",httpStatus:v.dispatch.status,response:v.dispatch.response,authRefreshed:v.dispatch.refreshedAuth===!0,authRefreshFailure:v.dispatch.authRefreshFailure};if(r)return{ok:!1,...C};console.log(JSON.stringify(C,null,2)),process.exit(1)}let E=v.result;if(l){let C=Tp(E),y=Dp(E),I={runId:n.id,agentOsId:o,dryRun:!0,wouldStart:E.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:E.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:E.diskGate,resourceGate:E.resourceGate,inspected:E.inspected,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,capacityIdle:C?.capacityIdle===!0,admissionExhaustion:C,dispatchSkipDrain:y};if(r)return{ok:!0,...I};console.log(JSON.stringify(I,null,2));return}let H=td(),M=[],oe=[],De=Number(E.inspected)||0;async function ge(C,y,I){let j=await sa({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,released:j.released,releaseResponse:j.releaseResponse,...I}),!1}async function Kt(C){let y=C.task,I=String(y.id);if(p&&!m.has(I))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let j=y.prUrl?String(y.prUrl):"";if(!j)return ge(y,"land_pr task missing prUrl");try{let Me=await Ip({prUrl:j,repo:Ep(j),cwd:n.repo}),Vr=await Op({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:Me});return Vr.ok?(M.push({taskId:I,started:!0,landPr:!0,outcome:Me.outcome,completionStatus:Vr.status}),!0):ge(y,`land_pr completion POST failed (HTTP ${Vr.status})`,{landPr:!0,outcome:Me.outcome})}catch(Me){return ge(y,Me.message)}}async function he(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",I=await sa({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,alreadyRunning:!0,nonFatal:!0,released:I.released,releaseResponse:I.releaseResponse}),!1}async function X(C){let y=C.task,I=$S(C),j=String(y.id);if(p&&!m.has(j))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let Me=KS(y.personaSlug);if(Me&&(!I?.personaInjectionReady||!I.personaMarkdown))return ge(y,`persona_injection_required: missing anchored context-envelope persona block for "${Me}"`);if(id(n.id,j))return he(y);let Vr=Number(y.attempt)||1;if(Vr>H.maxTaskAttempts)return ge(y,`task attempt ${Vr} exceeds KYNVER_MAX_TASK_ATTEMPTS (${H.maxTaskAttempts})`);let jh=R(`t-${y.id}-a${y.attempt}`),Gr=To({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:xu(y)});try{let Ls=y.planId?String(y.planId):void 0,zn=ld({title:y.title?String(y.title):void 0,description:y.description?String(y.description):null,executorRef:y.executorRef?String(y.executorRef):null,prUrl:y.prUrl?String(y.prUrl):null,branch:y.branch?String(y.branch):null}),Xn=Yi(n,{name:jh,task:jS(y,o),ownedPaths:e.owned?String(e.owned).split(",").map(Vh=>Vh.trim()).filter(Boolean):[],model:Gr.model,provider:Gr.provider,routingRule:Gr.rule,requestedModel:Gr.requestedModel,agentOsId:o,taskId:String(y.id),planId:Ls,branch:zn?.targetPrBranch??void 0,executorRef:y.executorRef?String(y.executorRef):void 0,parentTaskId:y.parentTaskId?String(y.parentTaskId):void 0,taskTitle:y.title?String(y.title):void 0,taskPrUrl:zn?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:zn?.targetPrUrl,repairTargetBranch:zn?.targetPrBranch??void 0,instructionPolicyMarkdown:I?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyEvidence:I?.instructionPolicyEvidence??null,memoryQualityCapture:I?.memoryQualityCapture??null,memoryQualityPromptMarkdown:I?.memoryQualityPromptMarkdown??null,personaMarkdown:I?.personaMarkdown??null,personaSlug:I?.personaSlug??Me,personaEvidence:I?.personaEvidence??null,contextEnvelopeMarkdown:I?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:I?.contextEnvelopeEvidence??null,leaseOwner:u,leaseToken:y.leaseToken?String(y.leaseToken):void 0,dispatched:!0});return M.push({taskId:y.id,started:!0,worker:Xn.name,pid:Xn.pid,branch:Xn.branch,model:Xn.model,provider:Gr.provider,routingRule:Gr.rule,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(I?.instructionPolicyEvidence?.ruleSlugs)?I.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:I?.personaSlug??Me,personaOperatingRuleCount:I?.personaEvidence?.operatingRuleCount??null}),I?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: operating-rules policy injected fingerprint=${I.instructionPolicyFingerprint}`),I?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${I.personaSlug}`),I?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${I.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Ls){return ge(y,Ls.message)}}let D=new Set;async function se(C){let y=C.task,I=String(y.id);if(D.has(I))return ge(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=$t(C)?await Kt(C):await X(C);return j||D.add(I),j}for(let C of E.started)await se(C);if(oe.push(...E.skipped??[]),p)for(let C of oe){let y=String(C.task.id);m.has(y)&&M.push({taskId:y,started:!1,error:`exact_target_not_started:${C.skipReason}`,skipReason:C.skipReason,detail:C.reason??null,requestedTargetTaskIds:[...m]})}for(;!p&&M.length<h;){let C=await P(1);if(!C.dispatch.ok||!C.result){M.push({started:!1,error:"dispatch_next request failed during top-up",httpStatus:C.dispatch.status,response:C.dispatch.response});break}De+=Number(C.result.inspected)||0,oe.push(...C.result.skipped??[]);let y=C.result.started??[];if(y.length===0)break;for(let I of y){if(M.length>=h)break;await se(I)}}let de=M.filter(C=>C.started).length,ke=Tp(E),ie=Dp(E),qn=de===0&&(ke?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(qn&&ke?.summary){let C=ke.skipReasonCounts?.retry_ceiling_exceeded??0,y=E.overAttemptIdleRecovery??ke.overAttemptIdleRecovery,I=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:C>0?"; over_attempt_recovery not attempted":"",j=ie?`; dispatch_skip_drain scanned=${ie.scanned??0} advanced=${ie.advanced??0}`:"";console.error(`[dispatch] ${ke.summary}${C>0?`; retry_ceiling_exceeded=${C}`:""}${I}${j}`)}let Il={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:de,capacityIdle:qn,admissionExhaustion:ke,dispatchSkipDrain:ie,outcomes:M,skipped:oe.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:De,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate},Ol=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(Ol),...Il};console.log(JSON.stringify(Il,null,2)),M.some(Ol)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}var GS=1;function _t(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 YS(e){let{maxStarts:r,...t}=e;return t}async function la(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=YS(e);if(t.targetTaskId||t.targetTaskIds){let u=await Br({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:_t(u)}}let n=Math.min(r,GS),o=Math.max(0,r-n),s=await Br({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=_t(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Br({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=_t(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Mp(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 JS(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function En(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Up(e,r){let t=JS(r),n=En(t?.recommendedMaxStarts),o=En(t?.actionableReady),s=En(t?.queuedTasks),i=En(t?.boardAdvancedThisTick)??0,a=En(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import Pw from"node:path";B();et();G();w();import qS from"node:path";var zS=new Set(["running","dispatching","pending","queued","needs_attention"]),er=new Set(["completed","failed","cancelled","done"]);function Wr(e){let r=ve(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(qS.join(x(e.id),"workers",R(i),"worker.json"),void 0);if(!a)continue;let l=T(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),lt(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function An(){let e=[];for(let r of ee()){if(!zS.has(r.status))continue;let t=Wr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ae(r),e.push({runId:r.id,from:n,to:t})}return e}B();et();G();w();tt();ao();import{existsSync as gr,lstatSync as aw,readdirSync as lw,readlinkSync as cw,renameSync as ka,unlinkSync as uw}from"node:fs";import je from"node:path";be();w();import Ne from"node:path";var XS=`${Ne.sep}runs${Ne.sep}runs${Ne.sep}`;function es(e){return e.includes(XS)}function ca(e,r){return Ne.join(Re(ne(e)),R(r))}function mr(e,r,t){return Ne.join(ca(e,r),"workers",R(t))}function Bp(e,r,t){let n=ne(e);return Ne.join(n,"runs","runs",R(r),"workers",R(t))}function ua(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Lr(e){return{workerJsonPath:Ne.join(e,"worker.json"),stdoutPath:Ne.join(e,"stdout.jsonl"),stderrPath:Ne.join(e,"stderr.log"),heartbeatPath:Ne.join(e,"heartbeat.jsonl"),lastStatusPath:Ne.join(e,"last-status.json")}}function Wp(e){let r=Lr(mr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!es(e.statusPath)?e.statusPath:r}import{existsSync as fr,mkdirSync as ZS,readdirSync as $p,renameSync as ew,statSync as pa}from"node:fs";import z from"node:path";O();no();qe();import Lp from"node:path";function QS(e){return Lp.resolve(qr(e.trim()))}function da(e,r,t){let n=e?.trim();return n?{repo:QS(n),source:r,persistedInConfig:t}:null}function Ce(e={}){let r=e.env??process.env,t=e.config??b(),n=da(t.defaultRepo,"config",!0);if(n)return n;let o=da(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=da(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=vr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function Hp(e,r){let t={...r??b(),defaultRepo:pe(Lp.resolve(e))};return ze(t),t}function In(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}tt();be();B();w();var On=900*1e3,rw=3600*1e3;function Kp(e,r){let t=z.resolve(e),n=z.resolve(Re(r)),o=z.relative(n,t);return o!==".."&&!o.startsWith("..")&&!z.isAbsolute(o)}function ma(e){if(!fr(e))return[];try{return $p(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function fa(e){let r=z.join(e,"workers");if(!fr(r))return[];try{return $p(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function jp(e){return z.join(e,"archived-workers")}function tw(e,r){let t=z.join(jp(e),R(r));return fr(t)?`${t}-${Date.now()}`:t}function Fp(e,r,t){if(!fr(e))return!1;try{let n=r-pa(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Vp(e,r=Date.now(),t=On){if(!fr(e))return!1;let n=Lr(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&$(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Fp(n.stdoutPath,r,t)||Fp(n.heartbeatPath,r,t))}function nw(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-pa(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function ow(e,r,t,n){if(Vp(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=nw(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=On){for(let n of fa(e))if(Vp(z.join(e,"workers",n),r,t))return!0;return!1}function sw(){return{repo:Ce()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function iw(e,r){let t=z.join(Re(e),R(r));if(!fr(t))return null;let n=fa(t);if(n.length===0)return null;let o;try{o=pa(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=mr(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=xt(t);return{id:r,name:r,...sw(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ga(e){let r=ne(e??me()),t=Re(r),n=[];for(let o of ma(t)){let s=z.join(t,o,"run.json");if(fr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=iw(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ae(i),n.push({runId:o,action:"repaired_run_json",reason:xt(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function ha(e,r={}){let t=ne(e??me()),n=Re(t),o=r.now??Date.now(),s=r.archiveAgeMs??rw,i=[];ga(t);for(let a of ma(n)){let l=z.join(n,a),c=z.join(l,"run.json"),u=_(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...fa(l)]),f=!1;for(let m of d){let p=z.join(l,"workers",R(m)),g=z.join(p,"worker.json"),k=_(g,void 0);if(!k){let A=z.join(jp(l),R(m));if(fr(A)&&(u.workers[R(m)]||u.workers[m])){delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:A});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let h=ow(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=tw(l,m);ZS(z.dirname(S),{recursive:!0}),ew(p,S),delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:h.reason,archivePath:S})}f&&Ae(u)}return{workers:i}}function Gp(e,r=Date.now()){let t=new Set,n=Re(e);for(let o of ma(n)){let s=z.join(n,o);xt(s,r)&&t.add(`${e}\0${o}`)}return t}B();w();function dw(e,r){let t=ca(e,r),n;try{n=aw(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=je.resolve(je.dirname(t),cw(t));if(xt(o)||xt(t))return null;let s=`${t}.materialize-${Date.now()}`;return ka(o,s),uw(t),ka(s,t),o}function pw(e){let r=[];for(let t of ua()){let n=je.join(e.fromDir,t),o=je.join(e.toDir,t);!gr(n)||gr(o)||(ka(n,o),r.push(t))}return r}function Yp(e,r){let t=Lr(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 mw(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 fw(e){let r=Lr(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=gr(r.stdoutPath),o=gr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?io(r.stdoutPath):{finalResult:null},a=o?Se(r.heartbeatPath):Se(""),l=rt(a),c=mw({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:je.join(te().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Yp(u,e.canonicalDir),u}function gw(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=mr(r,e.id,o),a=je.join(i,"worker.json");(es(s.workerDir)||es(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ae(e)),t}function hw(e){let r=[],t=mr(e.harnessRoot,e.run.id,e.workerName),n=Bp(e.harnessRoot,e.run.id,e.workerName),o=Lr(t),s=pw({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=Wp({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&gr(o.workerJsonPath)&&(a=_(o.workerJsonPath,void 0)),!a){let l=fw({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return V(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=gr(t),u=ua().some(d=>gr(je.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:je.join(te().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return V(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 Yp(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",V(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 kw(e,r){let t=je.join(x(e.id),"workers");if(!gr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of lw(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Jp(){let{harnessRoot:e}=te(),r=ga(e),t=[];for(let n of ee()){let o=dw(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),gw(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 kw(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:mr(e,n.id,i),statusPath:je.join(mr(e,n.id,i),"worker.json")}},Ae(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(...hw({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}tt();uo();G();B();et();w();import{execFileSync as qp}from"node:child_process";import zp from"node:path";function ya(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function yw(e){let r=ya(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Rw(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function bw(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 vw(e){let r=null;if(typeof e=="string"?r=st(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=ya(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function Sw(e){try{let n=qp("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=qp("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:ya(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function ww(e){let r=Se(e.heartbeatPath);return e.completionSnapshot?.finalResult??rt(r)}function Cw(e){let r=new Map,t=x(e.id);for(let n of ve(e)){let o=_(zp.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of vw(ww(o))){let i=yw(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function _w(e,r){let t=Se(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,Rw(r)].filter(Boolean).join(`
|
|
34
|
-
`);return bw(n)}function xw(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Ra(e={}){let r=e.lookupPr??Sw,t=[],n=new Map;for(let o of ee()){let s=Cw(o),i=x(o.id);for(let a of ve(o)){let l=zp.join(i,"workers",R(a),"worker.json"),c=_(l,void 0);if(!c||!xw(c))continue;let u=T(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,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",V(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 Ew=900*1e3;function Aw(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Nn(){let e=Jp();if(Aw()){let s=Ra(),i=ha();return{workers:[],finalizedRuns:An(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ee())for(let i of ve(s)){let a=Pw.join(x(s.id),"workers",R(i),"worker.json"),l=_(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=T(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c.attention.state==="blocked"?"blocked":c.attention.state==="done"||c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason="synced finished worker record after terminal stdout/heartbeat",V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=c.attention.state==="blocked"?"blocked":c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason=c.attention.reason,V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&$(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||t-u>Ew,m=Number.isFinite(d)&&t-d>at;if(f&&m){jt(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,V(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=Ra(),o=ha();return{workers:r,finalizedRuns:An(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Xp(){let e=Nn(),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))}tn();O();Ee();import Iw from"node:os";function rs(e,r={}){let t=(r.boxKind??Be(b())).trim().toLowerCase()||"forge",n=r.hostLabel??Iw.hostname();return{boxId:r.boxId??Mo(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}:{}}}B();lo();G();O();import Ow from"node:path";B();G();w();async function Tn(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=U(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=W(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Fe({runId:t.id}).runnerId,a=await ep({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=_(Ow.join(x(t.id),"workers",R(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let p=T(m);if(p.alive||p.finalResult||m.completionReportedAt)continue;let g=Do({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 q(k,s,{agentOsId:n,leaseOwner:g},{agentOsId:n,baseUrl:o})}catch(S){h={ok:!1,error:S.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 q(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();G();B();w();import Nw from"node:path";O();async function Qp(e){let r=W(e.baseUrl),t=await K(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 q(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 Zp(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=_(Nw.join(x(t.id),"workers",R(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=T(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await Qp({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,V(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}O();Ee();function Tw(e=process.env){let r=b();return Be(r,e)!=="forge"}function em(e,r=process.env){if(Tw(r))return e?.maxConcurrentWorkers??void 0}async function rm(e,r){let t=W(r.baseUrl?String(r.baseUrl):void 0),n=await K(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Po(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}O();Ee();be();import Pe from"node:path";co();import os from"node:path";ye();G();var ba=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function tm(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of ba)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function _e(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!tm(n)})}function Hr(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 Dn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?_e(e.changedFiles).length>0:!!(Hr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function Mn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function va(e,r){if(e.status)return _e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Vt(e.worktreePath);return _e(t).length>0}function Dw(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Sa(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=Dw(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Vt(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"}:to(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??Hr(s)};return e.status=u,u}return Mn(e)}G();G();tt();w();function wa(e,r=Date.now(),t=On){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function ts(e,r=Date.now(),t=On){return $(e.pid)?!0:wa(e,r,t)}function Mw(e,r){return r?r.runTerminalCache.derive(e.run):Wr(e.run)}function rr(e,r=Date.now()){return ts(e.worker,r)}function Ca(e,r){return er.has(e.run.status)?!1:Mw(e,r)!==null}function nm(e,r,t=Date.now()){if(rr(e,t))return!0;if(er.has(e.run.status)||Ca(e,r))return!1;let n=Mn(e);return re(n)?!1:!!rr(e,t)}co();G();function om(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(rr(e))return!0;let n=r??Mn(e);return!!(!re(n)||Dn(n)||_e(n.changedFiles).length>0||ot({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Hr(n.finalResult)}).blocked)}ye();w();import{existsSync as im,mkdirSync as Uw,writeFileSync as sm}from"node:fs";import ns from"node:path";function am(e,r,t){return ns.join(e,"salvage",R(r),R(t))}function lm(e){return im(ns.join(am(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function cm(e){let r=am(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Uw(r,{recursive:!0});let t=ns.join(r,"salvage.patch"),n=!1;if(im(e.indexed.worktreePath)){let s=Q(e.indexed.worktreePath,["diff","HEAD"]),i=Q(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
35
|
-
`);a.trim()&&(
|
|
23
|
+
`),"",...s,"",...i,"",...a,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...ud({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
24
|
+
`)}w();O();w();Jr();import{closeSync as Di,existsSync as md,mkdirSync as iv,openSync as Mi,statSync as av,unlinkSync as pd}from"node:fs";import{spawn as lv}from"node:child_process";import cv from"node:os";import $e from"node:path";import{existsSync as gn,readdirSync as tv}from"node:fs";import Tr from"node:path";var nv=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function ov(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 sv(e){let r=Tr.join(e,"versions");if(!gn(r))return null;let t=null,n=-1;for(let o of tv(r,{withFileTypes:!0})){if(!o.isDirectory()||!nv.test(o.name))continue;let s=ov(o.name);s==null||s<=n||(n=s,t=Tr.join(r,o.name))}return t}function Wo(e){let r=e?.trim()||Tr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=Tr.join(r,"node.exe"),n=Tr.join(r,"index.js");if(gn(t)&&gn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=sv(r);if(!o)return null;let s=Tr.join(o,"node.exe"),i=Tr.join(o,"index.js");return!gn(s)||!gn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var Ti="composer-2.5",uv=15e3,dv=6e4,pv=3e4;function mv(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function fv(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&md($e.join($e.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Wo($e.dirname(e)):t?{nodeExe:e,indexJs:$e.join($e.dirname(e),"index.js"),versionDir:$e.dirname(e)}:Wo();if(o)return mv(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 gv(){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=Wo(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=$e.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(md(t))return t}return"agent"}function hv(e,r){return Je({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:$e.basename(e)||"agent.cmd"}:{}})}function fd(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Ui(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 kv(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||$e.join(cv.homedir(),".kynver","locks");return iv(e,{recursive:!0}),$e.join(e,"cursor-agent-start.lock")}function yv(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=kv(),r=Ui("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",dv),t=Ui("KYNVER_CURSOR_START_LOCK_STALE_MS",pv),n=Date.now();for(;;)try{let o=Mi(e,"wx");return Di(o),()=>{try{pd(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-av(e).mtimeMs>t){pd(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);fd(250)}}var gd={name:"cursor",defaultModel:Ti,preflightModel(e){return Ci(e,Ti)},start(e){let r=Ci(e.model,Ti);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Mi(e.stdoutPath,"a"),o=Mi(e.stderrPath,"a"),s=["ignore",n,o],i=gv(),a=fv(i),l=yv(),c;try{c=lv(a.executable,[...a.prefixArgs,"-p","--force","--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt],ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:hv(i,a)})),fd(Ui("KYNVER_CURSOR_START_LOCK_HOLD_MS",uv))}finally{l(),Di(n),Di(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 Lo={claude:Vu,codex:Qu,cursor:gd},hd=null;function kd(e){if(hd)return hd;let r=e?.trim();if(r){let o=Lo[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Lo).join(", ")}`);return o}let t=Ao(b().workerProvider),n=Lo[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Lo).join(", ")}`);return n}w();import{spawn as iS}from"node:child_process";import{existsSync as aS,openSync as lS,closeSync as op}from"node:fs";import sp from"node:path";import{fileURLToPath as cS}from"node:url";B();function Ho(e){return!!e.completionReportedAt?.trim()}function Bi(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),V(r,e)}function Rv(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Wi(e){return!!(Rv(e.completionBlocker)||e.completionOutcome==="rejected")}function Dr(e){return Ho(e)&&!Wi(e)}B();G();O();import bn from"node:path";function Li(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function hn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var bv=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function yd(e){let r=Li(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=hn(r.outcome),n=hn(r.detail)??hn(r.error),o=Li(r.task),s=Li(r.closedTask),i=o?hn(o.status):null,a=s?hn(s.status):null,l=t!==null&&bv.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function Rd(e){return e.taskAdvanced}B();lo();var vv="expert-lane-pr-review:",Sv="plan-review-task",wv="scheduledjob:";function bd(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function vd(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(vv)||r===Sv||r.startsWith("daemon-review:"))return!0;if(r.startsWith(wv)&&e.parentTaskId){let n=bd(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=bd(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var Sd=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,Cv=new Set(Cu()),_v=/no commits between/i;function wd(e){return!!(e&&_v.test(e))}function ue(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Cd(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ue(e.head)}function _d(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?ue(t[0]):null}function xv(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 Pv(e,r){if(r.changedFiles.length>0)return!1;let t=ue(e.personaSlug)?.toLowerCase();if(t&&Cv.has(t))return!0;let n=ue(e.routingRule)??"";return!!(n&&Sd.test(n))}function Ev(e,r){if(e.changedFiles.length>0)return!0;let t=ue(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=xv(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(ue(e.headCommit)||Cd(e.gitAncestry))}function xd(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(vd({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=ue(e.routingRule)??"";if(r&&Sd.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(Pv(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(ue(e.patchPath)||ue(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(ue(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(ue(e.prUrl)??ue(e.taskPrUrl)??ue(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 Ev(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Pd(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:ue(r?.headCommit)??Cd(e.gitAncestry),prUrl:ue(r?.prUrl)??null}}import{spawnSync as Av}from"node:child_process";function Ad(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Ed(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Ed(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 Ed(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}ye();function Iv(e,r,t){try{let n=Av(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 $o={git:(e,r)=>Q(e,r),gh:(e,r)=>Iv("gh",e,r)};function Ov(e){return e.split(`
|
|
25
|
+
`).map(r=>r.trim()).find(Boolean)??""}function Id(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Ad(t.stdout)}function kn(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Fo(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 Ko(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=kn(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Od(e){let r=Fo(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=Nv(t.stdout)??Fo(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 Nv(e){let t=Ov(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}function Tv(e){return e.gh(process.cwd(),["--version"]).status===0}function Dv(e,r){return`AgentOS harness: ${e} (${r})`}function Mv(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(`
|
|
26
|
+
`)}function Hi(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??kn(e.snapshot.worktreePath,e.exec)??void 0};let r=Ko({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 Fi(e,r=$o){let t=e.prUrlHint??_d(e.status.finalResult)??null,n=Pd(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!xd({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?Hi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Hi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!Tv(r)){let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} 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=Id(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 k=!1,h=!1,S=n.headCommit??kn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Ko({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`."};k=A.committed,h=A.pushed,S=A.headCommit??S}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`."};h=A.status===0}return{ok:!0,prUrl:a,headCommit:S,committed:k,pushed:h}}let l=Fo(n.worktreePath,i,n.branch,r);if(l)return Hi({snapshot:n,prUrl:l,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let c=n.changedFiles.length>0,u=!1,d=!1,f=n.headCommit??void 0,m=Ko({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=m.committed,d=m.pushed,!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let k=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(k.status!==0&&!/already up to date/i.test(k.stderr||k.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${k.stderr||k.stdout||k.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};d=k.status===0}f=m.headCommit??f??kn(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=Od({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:Dv(e.worker.name,e.worker.runId),body:Mv(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(wd(g.detail))return{ok:!0,headCommit:f??void 0,committed:u,pushed:d};let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${g.detail?` (${g.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:u,pushed:d,created:g.created}}G();ao();function jo(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 Nd(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 Td(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Dd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ud(e){let r=Dd(e);if(!r)return[];let t=Dd(r.worktreeHandoff),n=Td(t?.disposableArtifactsRemoved);return n.length?n:Td(r.disposableArtifactsRemoved)}function Md(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Bd(e,r){let t=jo(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Md(o)));return t.every(o=>{let s=Md(Nd(o));return n.has(s)})}function Vo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Wd(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Uv(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 Bv(e){let r=Wd(e.disposableArtifactsRemoved),t=Ud(e.finalResult);return[...new Set([...r,...t])]}function Ld(e){let r=Wd(e.changedFiles),t=jo(r),n=Bv(e),o=t.length===0||Bd(r,n);return Vo(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`}:Vo(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`}:Vo(e.artifactBundlePath)||Vo(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}:Uv(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`}}B();G();w();import Wv from"node:path";var Lv=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Hd(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function Hv(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 Fv(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:Hv(r);return{finalResult:r??t??"completed",summary:t}}function $i(e,r,t){if(Hd(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Fv(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function $v(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 Fd(e,r){let t=$v(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(Wv.join(x(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||Hd(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!Lv.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});$i(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Kv from"node:path";var jv=/^[a-z0-9][a-z0-9._-]{0,127}$/i,Vv=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Ki=new Set(["undefined","null"]),$d="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Go(e){let r=e.trim();if(!jv.test(r))throw new Error(`invalid run id: ${e}`);return r}function Gv(e){let r=e.trim();if(!Vv.test(r))throw new Error(`invalid worker name: ${e}`);return r}function ji(e){return typeof e=="string"?e.trim():""}function Ke(e){let r=ji(e.run),t=ji(e.name);return(!r||Ki.has(r))&&nr(`missing --run RUN_ID (${$d})`),(!t||Ki.has(t))&&nr(`missing --name WORKER_NAME (${$d})`),{runId:Go(r),workerName:Gv(t)}}function Vi(e){let r=ji(e.run);return(!r||Ki.has(r))&&nr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Go(r)}function Kd(e){let r=Kv.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function jd(e,r,t){let n=await fetch(e,{method:"POST",headers:Ie(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 Yv(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Vd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function yn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Jv(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function qv(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 Yd(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function zv(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Rn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function Xv(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function Yo(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function Qv(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function vn(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,Yo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(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&&Dr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Wi(n)&&Xv(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=Fi({worker:n,run:o,status:s});if(!P.ok)return Rn(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=T(n,Yo(o)),s=Qv(s,P))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let P=Ld({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!P.allowed){let v=P.detail??`worktree completion blocked (${P.state})`;return Rn(n,v),{ok:!1,reason:v,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=W(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await K(f,i,{baseUrl:d}),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 jd(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await Nc(i,{baseUrl:d});P&&P!==m&&(m=P,h=await jd(p,m,k))}if(h.ok){let P=yd(h.parsed);if(!Rd(P)){let oe=`completion acknowledged but board not advanced: ${P.detail??(P.routeOutcome?`harness completion returned ${P.routeOutcome}`:"harness completion did not advance the linked task")}`;Rn(n,oe);let De={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Bi(n,n.runId,De),{ok:!1,httpStatus:h.status,response:h.parsed,reason:oe,completionBlocked:!0}}Rn(n,void 0);let v=P.routeOutcome??"acknowledged",E={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Bi(n,n.runId,E),$i(n,s,{source:"harness-completion"});let H=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:v,...H?{prHandoff:{prUrl:H}}:{}}}let S=h.status===401||h.status===403,A=Yv(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),L=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return Rn(n,L),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function Yi(e){try{let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,Yo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(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 vn(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 Jd(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,Yo(o));le(bn.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function Zv(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 Gi(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function eS(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Gi(e.task??e.taskId);t&&(r.task=t);let n=Gi(e.worker??e.name);n&&(r.worker=n);let o=Gi(e.status);return o&&(r.status=o),r}function rS(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 qd(e,r){let t=eS(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>rS(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:dr(n,"status"),attentionCounts:dr(n,"attention"),lifecycleCounts:dr(n,"lifecycleStage")}),e.controller&&(o.controller=Qd(n)),o}function zd(e){let r=Vi(e),t=e.full===!0||e.full==="true",n=qd(t?Mr(r):ep(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:Zv(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Xd(e){let{run:r,workerName:t,worker:n}=e,o=T(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=nt({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=Yd(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Vd(n.completionResponse),m=Vd(f?.task),p=yn(f?.outcome),g=yn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(v=>typeof v=="string"&&v.trim().length>0):[],h=yn(m?.prUrl)??yn(f?.prUrl),S=yn(n.completionReportedAt),A=Jv({finished:re(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),L=qv({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:re(o)}),P=zv({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 v=n.instructionPolicyEvidence;if(!v||typeof v!="object")return null;let E=v.ruleSlugs;return Array.isArray(E)?E.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:P,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:A,completionReportedAt:S,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:L,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function tS(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&&!Yd(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function nS(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 dr(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 Gd(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 Qd(e){let r=e.filter(Gd),t=e.filter(n=>{if(Gd(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 Zd(e,r,t){let n={runId:e.id,name:e.name,status:Qt(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:dr(r,"status"),attentionCounts:dr(r,"attention"),lifecycleCounts:dr(r,"lifecycleStage")},n.controller=Qd(r)),n}function oS(e){return e.status==="done"&&e.attention==="done"}function Mr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(bn.join(x(r.id),"workers",R(s),"worker.json"),void 0);return i?Xd({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Zd(r,n,!1);return le(bn.join(x(r.id),"last-board.json"),o),o}function ep(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(bn.join(x(r.id),"workers",R(i),"worker.json"),void 0);return a?tS(a)?nS(i,a):Xd({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!oS(i)),s=Zd(r,o,!0);return s.status=Qt(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:dr(n,"status"),allAttentionCounts:dr(n,"attention")},le(bn.join(x(r.id),"last-board-compact.json"),s),s}async function rp(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Mr(t),s=W(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await q(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 sS(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 Sn(e){let r=Vi(e),t=e.full===!0||e.full==="true",n=qd(t?Mr(r):ep(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=sS(r)),console.log(JSON.stringify(n,null,2))}function tp(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=ro(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
27
|
+
`).filter(Boolean)){let i=Yr(s),a=i?lc(i):s;a&&console.log(a)}}function np(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t);if(!$(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(jt(n.pid,"SIGTERM"),Rr(1500),$(n.pid)){jt(n.pid,"SIGKILL"),console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"sigkill_sent"},null,2));return}console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"stopped"},null,2))}w();var uS=5e3,dS=360*60*1e3,pS=3,mS=5e3;function fS(e){let{runId:r,workerName:t}=Ke(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 bt(e){let r=fS(e),t=r.pollMs??uS,n=r.maxTotalMs??dS,o=r.completeAttempts??pS,s=r.completeBackoffMs??mS,i=fe(r.run,r.name);if(!i.agentOsId||!i.taskId)return{worker:i.name,runId:i.runId,outcome:"missing_link",attempts:0,reason:"worker has no agentOsId/taskId \u2014 nothing to attribute completion to"};if(Dr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let a=Date.now();for(;;){if(i=fe(r.run,r.name),Dr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=T(i);if(re(u)||!$(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`};Rr(t)}let l,c;for(let u=1;u<=o;u++){let d=await vn({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&&Rr(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function ip(e){try{let r=await bt(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 gS(){return sp.join(cS(new URL(".",import.meta.url)),"cli.js")}function ap(e){let r=e.cliPath??gS();if(!aS(r))return;let t=sp.join(e.workerDir,"auto-complete.log"),n;try{n=lS(t,"a")}catch{n=void 0}let o=["ignore",n??"ignore",n??"ignore"],s=e.nodeExecutable??process.execPath,i=[r,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&i.push("--agent-os-id",e.agentOsId),e.baseUrl&&i.push("--base-url",e.baseUrl),e.secret&&i.push("--secret",e.secret);try{let a=iS(s,i,ae({detached:!0,stdio:o,env:process.env}));return n!==void 0&&op(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{op(n)}catch{}return}}ye();function lp(e,r,t){ce(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=Q(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=Q(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Ee();O();function Ji(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=R(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||Ze,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:To({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=kd(o.provider),i=o.model;if(s.preflightModel){let M=s.preflightModel(r.model);if(!M.ok)throw new Error(`model preflight failed for provider "${s.name}": ${M.note??"invalid model/provider combination"}`);M.normalized&&console.error(`[supervisor] ${n}: ${M.note}`),i=M.model}let{worktreesDir:a}=te(),l=vt.join(x(e.id),"workers",n);kS(l,{recursive:!0});let c=vt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(hS(c))throw new Error(`worktree path already exists: ${c}`);ce(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?lp(e.repo,c,u):ce(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=vt.join(l,"stdout.jsonl"),m=vt.join(l,"stderr.log"),p=vt.join(l,"heartbeat.jsonl"),g=dd({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 S;try{S=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(M){throw ce(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),ce(e.repo,["branch","-D",d],{allowFailure:!0}),M}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 A=rd(S.model,i,s.defaultModel),L=b(),P=Ue(process.env,L),v=Fe().runnerId,E=Mo(P.boxKind),H={name:n,runId:e.id,status:"running",pid:S.pid,model:A,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:p,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},boxKind:P.boxKind,boxId:E,runtimeId:v,startedAt:new Date().toISOString()};if(V(e.id,H),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:vt.join(l,"worker.json")}},e.status="running",Ae(e),H.agentOsId&&H.taskId){let M;try{M=ap({runId:e.id,workerName:n,workerDir:l,agentOsId:H.agentOsId})}catch(oe){let De=`completion sidecar failed to spawn: ${oe.message}`;H.completionBlocker=De,V(e.id,H)}if(M)M.pid&&(H.completionSidecarPid=M.pid,V(e.id,H));else{let oe="completion sidecar failed to spawn (CLI not found or spawn error)";H.completionBlocker=oe,H.completionSidecarSpawnFailedAt=new Date().toISOString(),V(e.id,H)}}return H}async function cp(e){let r=U(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):Ul(e.taskFile?String(e.taskFile):void 0);n||(console.error("missing --task or --task-file"),process.exit(1));let o=!!(e.agentOsId&&e.taskId),s=e.localOnly===!0||e.localOnly==="true";!o&&!s&&(e.agentOsId||e.taskId)&&(console.error("worker start: board-linked workers require both --agent-os-id and --task-id (or pass --local-only for direct runs)"),process.exit(1));let i=e.wait===!0||e.wait==="true",a;try{a=Ji(r,{name:t,task:n,ownedPaths:e.owned?String(e.owned).split(",").map(c=>c.trim()).filter(Boolean):[],model:e.model?String(e.model):void 0,branch:e.branch?String(e.branch):void 0,agentOsId:e.agentOsId?String(e.agentOsId):void 0,taskId:e.taskId?String(e.taskId):void 0,provider:e.provider?String(e.provider):void 0}),console.log(JSON.stringify({runId:r.id,worker:a.name,pid:a.pid,branch:a.branch,worktreePath:a.worktreePath,workerDir:a.workerDir},null,2))}catch(c){console.error(`worker start failed: ${c.message}`),process.exit(1)}if(!i||!a)return;let l=await bt({run:String(e.run),name:a.name,...a.agentOsId?{agentOsId:a.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...l})),l.outcome==="timed_out"&&(process.exitCode=1)}w();import{createHash as up}from"node:crypto";function pr(e){let r=e.replace(/\r\n/g,`
|
|
28
|
+
`).trimEnd();return up("sha256").update(r,"utf8").digest("hex")}function St(e){if(e==null)return null;let r=e.trim();return r?up("sha256").update(r,"utf8").digest("hex"):null}O();var J=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function wn(e,r){return e===401||e===403?new J("auth",r,e):e>=500?new J("server",r,e):new J("permanent",r,e)}function qi(e){let r=e instanceof Error?e.message:String(e);return/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|fetch failed|network/i.test(r)?new J("network",r):new J("tool_interruption",r)}function dp(e){return e!=="permanent"}function qo(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function zo(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function pp(e,r,t={}){let n=W(t.baseUrl),o=t.apiKey??Z(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:qo(o)}),l=await zo(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw wn(a.status,c)}return l}catch(a){throw a instanceof J?a:qi(a)}}async function mp(e,r={}){let t=W(r.baseUrl),n=r.apiKey??Z(),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:Jo(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Jo(e)}},p=await o(f,{method:"POST",headers:qo(n),body:JSON.stringify(m)}),g=await zo(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${p.status})`;throw wn(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 J("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:Jo(e)},p=await o(f,{method:"PATCH",headers:qo(n),body:JSON.stringify(m)}),g=await zo(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${p.status})`;throw wn(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:Jo(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:qo(n),body:JSON.stringify(l)}),u=await zo(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw wn(c.status,f)}let d=u;return{planId:d.version.planId,versionId:d.version.id,versionNumber:d.version.versionNumber}}catch(i){throw i instanceof J?i:qi(i)}}function Jo(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as yS}from"node:crypto";function Xo(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:St(e.summary),bodyHash:pr(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return yS("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as fp}from"node:fs";import{homedir as RS}from"node:os";import wt from"node:path";function Qo(){let e=process.env.KYNVER_STATE_ROOT;return e?wt.resolve(e):wt.join(RS(),".kynver","state")}function Zo(){return wt.join(Qo(),"plan-outbox")}function bS(){return wt.join(Qo(),"plan-outbox-archive")}function Ur(){let e=Zo(),r=bS();return fp(e,{recursive:!0}),fp(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function Cn(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=wt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(wt.join("/var","folders"))}import{existsSync as zi,readFileSync as hp,renameSync as gp,readdirSync as vS,writeFileSync as Xi,unlinkSync as ZM}from"node:fs";import Oe from"node:path";import{randomUUID as SS}from"node:crypto";var wS=12;function Ct(){let{outboxDir:e}=Ur(),r=vS(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=Zi(Oe.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function Qi(e){for(let r of Ct())if(r.idempotencyKey===e)return r;return null}function Zi(e){if(!zi(e))return null;try{return JSON.parse(hp(e,"utf8"))}catch{return null}}function kp(e){let{outboxDir:r}=Ur(),t=Oe.join(r,e.bodyPath);return hp(t,"utf8")}function ea(e,r){let{outboxDir:t}=Ur(),n=new Date().toISOString(),o=r.existing?.id??SS(),s=r.existing?.bodyPath??`${o}.body.md`,i=Oe.join(t,`${o}.json`),a=Oe.join(t,s);r.existing||Xi(a,e.body,"utf8");let l={id:o,idempotencyKey:Xo(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??wS,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return Xi(i,`${JSON.stringify(l,null,2)}
|
|
29
|
+
`,{mode:384}),l}function yp(e){let{outboxDir:r}=Ur(),t=Oe.join(r,`${e.id}.json`);Xi(t,`${JSON.stringify(e,null,2)}
|
|
30
|
+
`,{mode:384})}function Rp(e){let{outboxDir:r,archiveDir:t}=Ur(),n=Oe.join(r,`${e.id}.json`),o=Oe.join(r,e.bodyPath),s=Oe.join(t,`${e.id}.json`),i=Oe.join(t,e.bodyPath);zi(n)&&gp(n,s),zi(o)&&gp(o,i)}function _n(e){let{outboxDir:r}=Ur();return{jsonPath:Oe.join(r,`${e.id}.json`),bodyPath:Oe.join(r,e.bodyPath)}}function bp(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 vp(e,r,t={}){let n=await pp(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new J("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=St(r.summary),a=St(o.summary);if(i!==a)throw new J("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new J("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new J("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 J("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 Sp(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 wp="persisted and read back",CS="queued for retry",ra="failed and needs action";async function xn(e,r={}){e.bodyPathHint&&Cn(e.bodyPathHint);let t=Xo(e),n=Qi(t);if(n?.readbackEvidence)return{userStatus:wp,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Cp(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??mp,s=r.verifyReadback??vp;try{let i=await o(e,r),a={...e,planId:i.planId},l=Sp(a,i),c=await s(e.agentOsSlug,_S(e,l),r);return n&&Rp(n),{userStatus:wp,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof J?i:new J("tool_interruption",i instanceof Error?i.message:String(i));if(!dp(a.kind)){let l=ea(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=_n(l),u=_p(l,a.message);return{userStatus:ra,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Cp(e,a.message,a.kind,n)}}function _S(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Cp(e,r,t,n){let o=ea(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=_n(o);if(o.retryCount>=o.maxRetries){let i=_p(o,r);return{userStatus:ra,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:CS,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function _p(e,r){let t={...e,queueStatus:"failed",userStatus:ra,lastError:r,updatedAt:new Date().toISOString()};return yp(t),t}import xS from"node:path";async function ta(e={},r={}){let t=Ct().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=kp(s),a=bp(s,i),l=await xn(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 na(e){let r=xS.join(Zo(),`${e}.json`);return Zi(r)}function oa(e){let r=_n(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(`
|
|
31
|
+
`)}function sa(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 ia(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await q(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 Pp}from"node:child_process";import{spawnSync as PS}from"node:child_process";function xp(){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=PS("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 Ep=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),ES=new Set(["CLEAN","HAS_HOOKS"]);function la(e){return e?.trim()?["--repo",e.trim()]:[]}function Ap(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Ip(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 Pn(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function AS(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&&Ep.has(i))){if(i){n.push(`${Pn(s)}=${i}`);continue}if(!(l&&Ep.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${Pn(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${Pn(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${Pn(s)}=${a}`);continue}t.push(`${Pn(s)}=PENDING`)}}}return{pending:t,failed:n}}function IS(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 OS=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,NS=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,TS=/^docs[(:]/i,DS=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function MS(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=TS.test(r)||DS.test(t),o=OS.test(t),s=NS.test(t);return n||o||s||e.vercelCheckSuccess===!0}function US(e){if(!MS({title:e.title,body:e.body,vercelCheckSuccess:IS(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 BS(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(!ES.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=AS(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(", ")}`);US(e)}function WS(e){try{return BS(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function LS(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 HS(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 FS(e,r){if(!r?.trim())return;let t=Pp("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}`)&&Pp("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function Op(e){let r=e.cwd??process.cwd(),t=e.exec??$o,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=xp();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=Ip(t,r,["pr","view",n,...la(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=WS(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,...la(e.repo),"--squash"]);if(l.status!==0){let u=aa(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=aa(t,r,a,e.repo);c||(c=aa(t,r,a,e.repo));try{let u=HS(t,r,e.repo);LS(t,r,u,s.headRefName),FS(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 aa(e,r,t,n){try{let o=Ip(e,r,["pr","view",t,...la(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}O();async function Np(e){let r=await K(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 q(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Tp(){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(`
|
|
32
|
+
`)}var Ni=3600*1e3;function Dp(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Mp(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function $S(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,f=t.contextEnvelopeReady===!0,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 KS(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function jS(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("",Tp());let n=sa(e);if(n?.outboxId){let o=na(n.outboxId);o?t.push("",oa(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
33
|
+
`)}function VS(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 Br(e){let r=e.pipeline===!0||e.pipeline==="true";try{let $t=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=$t;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=W(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,o,{baseUrl:s}),l=!(e.execute===!0||e.execute==="true"),c=Fe({runId:n.id}),u=Ii(n.id,c.runnerId),d=e.diskPath?We({diskPath:String(e.diskPath)}):We({diskPath:n.repo}),f=wr({runId:n.id}),m=VS(e),p=m.size>0,g=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,k=p?Math.min(g,m.size):g,h=l?k:Math.min(k,f.slotsAvailable);if(!l&&h<=0){let C={runId:n.id,agentOsId:o,dryRun:!1,skipped:!0,reason:f.reason??"no resource slots",resourceGate:f};if(r)return{ok:!0,...C};console.log(JSON.stringify(C,null,2));return}let S=xo(n.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let C=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/lane-hygiene`;try{await q(C,i,{agentOsId:o,dryRun:!1,includeBoardReconcile:!0},{agentOsId:o,baseUrl:s})}catch(y){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${y.message}`)}}let A=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/tasks/dispatch-next`,L=C=>({agentOsId:o,dryRun:l,maxStarts:C,leaseOwner:u,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Ni,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Mr(n.id),...e.lane?{lane:xu(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(y=>y.trim()).filter(Boolean)}:{}}),P=async C=>{let y=await q(A,i,L(C),{agentOsId:o,baseUrl:s})??{ok:!1,status:0,response:null},I=y.response;return{dispatch:y,result:I?.result}},v=await P(p||l?h:1);if(!v.dispatch.ok||!v.result){let C={runId:n.id,agentOsId:o,action:"dispatch",httpStatus:v.dispatch.status,response:v.dispatch.response,authRefreshed:v.dispatch.refreshedAuth===!0,authRefreshFailure:v.dispatch.authRefreshFailure};if(r)return{ok:!1,...C};console.log(JSON.stringify(C,null,2)),process.exit(1)}let E=v.result;if(l){let C=Dp(E),y=Mp(E),I={runId:n.id,agentOsId:o,dryRun:!0,wouldStart:E.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:E.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:E.diskGate,resourceGate:E.resourceGate,inspected:E.inspected,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,capacityIdle:C?.capacityIdle===!0,admissionExhaustion:C,dispatchSkipDrain:y};if(r)return{ok:!0,...I};console.log(JSON.stringify(I,null,2));return}let H=nd(),M=[],oe=[],De=Number(E.inspected)||0;async function ge(C,y,I){let j=await ia({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,released:j.released,releaseResponse:j.releaseResponse,...I}),!1}async function Kt(C){let y=C.task,I=String(y.id);if(p&&!m.has(I))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let j=y.prUrl?String(y.prUrl):"";if(!j)return ge(y,"land_pr task missing prUrl");try{let Me=await Op({prUrl:j,repo:Ap(j),cwd:n.repo}),Vr=await Np({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:Me});return Vr.ok?(M.push({taskId:I,started:!0,landPr:!0,outcome:Me.outcome,completionStatus:Vr.status}),!0):ge(y,`land_pr completion POST failed (HTTP ${Vr.status})`,{landPr:!0,outcome:Me.outcome})}catch(Me){return ge(y,Me.message)}}async function he(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",I=await ia({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,alreadyRunning:!0,nonFatal:!0,released:I.released,releaseResponse:I.releaseResponse}),!1}async function X(C){let y=C.task,I=$S(C),j=String(y.id);if(p&&!m.has(j))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let Me=KS(y.personaSlug);if(Me&&(!I?.personaInjectionReady||!I.personaMarkdown))return ge(y,`persona_injection_required: missing anchored context-envelope persona block for "${Me}"`);if(ad(n.id,j))return he(y);let Vr=Number(y.attempt)||1;if(Vr>H.maxTaskAttempts)return ge(y,`task attempt ${Vr} exceeds KYNVER_MAX_TASK_ATTEMPTS (${H.maxTaskAttempts})`);let Vh=R(`t-${y.id}-a${y.attempt}`),Gr=To({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Pu(y)});try{let Ls=y.planId?String(y.planId):void 0,zn=cd({title:y.title?String(y.title):void 0,description:y.description?String(y.description):null,executorRef:y.executorRef?String(y.executorRef):null,prUrl:y.prUrl?String(y.prUrl):null,branch:y.branch?String(y.branch):null}),Xn=Ji(n,{name:Vh,task:jS(y,o),ownedPaths:e.owned?String(e.owned).split(",").map(Gh=>Gh.trim()).filter(Boolean):[],model:Gr.model,provider:Gr.provider,routingRule:Gr.rule,requestedModel:Gr.requestedModel,agentOsId:o,taskId:String(y.id),planId:Ls,branch:zn?.targetPrBranch??void 0,executorRef:y.executorRef?String(y.executorRef):void 0,parentTaskId:y.parentTaskId?String(y.parentTaskId):void 0,taskTitle:y.title?String(y.title):void 0,taskPrUrl:zn?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:zn?.targetPrUrl,repairTargetBranch:zn?.targetPrBranch??void 0,instructionPolicyMarkdown:I?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyEvidence:I?.instructionPolicyEvidence??null,memoryQualityCapture:I?.memoryQualityCapture??null,memoryQualityPromptMarkdown:I?.memoryQualityPromptMarkdown??null,personaMarkdown:I?.personaMarkdown??null,personaSlug:I?.personaSlug??Me,personaEvidence:I?.personaEvidence??null,contextEnvelopeMarkdown:I?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:I?.contextEnvelopeEvidence??null,leaseOwner:u,leaseToken:y.leaseToken?String(y.leaseToken):void 0,dispatched:!0});return M.push({taskId:y.id,started:!0,worker:Xn.name,pid:Xn.pid,branch:Xn.branch,model:Xn.model,provider:Gr.provider,routingRule:Gr.rule,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(I?.instructionPolicyEvidence?.ruleSlugs)?I.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:I?.personaSlug??Me,personaOperatingRuleCount:I?.personaEvidence?.operatingRuleCount??null}),I?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: operating-rules policy injected fingerprint=${I.instructionPolicyFingerprint}`),I?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${I.personaSlug}`),I?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${I.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Ls){return ge(y,Ls.message)}}let D=new Set;async function se(C){let y=C.task,I=String(y.id);if(D.has(I))return ge(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=$t(C)?await Kt(C):await X(C);return j||D.add(I),j}for(let C of E.started)await se(C);if(oe.push(...E.skipped??[]),p)for(let C of oe){let y=String(C.task.id);m.has(y)&&M.push({taskId:y,started:!1,error:`exact_target_not_started:${C.skipReason}`,skipReason:C.skipReason,detail:C.reason??null,requestedTargetTaskIds:[...m]})}for(;!p&&M.length<h;){let C=await P(1);if(!C.dispatch.ok||!C.result){M.push({started:!1,error:"dispatch_next request failed during top-up",httpStatus:C.dispatch.status,response:C.dispatch.response});break}De+=Number(C.result.inspected)||0,oe.push(...C.result.skipped??[]);let y=C.result.started??[];if(y.length===0)break;for(let I of y){if(M.length>=h)break;await se(I)}}let de=M.filter(C=>C.started).length,ke=Dp(E),ie=Mp(E),qn=de===0&&(ke?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(qn&&ke?.summary){let C=ke.skipReasonCounts?.retry_ceiling_exceeded??0,y=E.overAttemptIdleRecovery??ke.overAttemptIdleRecovery,I=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:C>0?"; over_attempt_recovery not attempted":"",j=ie?`; dispatch_skip_drain scanned=${ie.scanned??0} advanced=${ie.advanced??0}`:"";console.error(`[dispatch] ${ke.summary}${C>0?`; retry_ceiling_exceeded=${C}`:""}${I}${j}`)}let Ol={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:de,capacityIdle:qn,admissionExhaustion:ke,dispatchSkipDrain:ie,outcomes:M,skipped:oe.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:De,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate},Nl=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(Nl),...Ol};console.log(JSON.stringify(Ol,null,2)),M.some(Nl)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}var GS=1;function _t(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 YS(e){let{maxStarts:r,...t}=e;return t}async function ca(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=YS(e);if(t.targetTaskId||t.targetTaskIds){let u=await Br({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:_t(u)}}let n=Math.min(r,GS),o=Math.max(0,r-n),s=await Br({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=_t(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Br({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=_t(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Up(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 JS(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function En(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Bp(e,r){let t=JS(r),n=En(t?.recommendedMaxStarts),o=En(t?.actionableReady),s=En(t?.queuedTasks),i=En(t?.boardAdvancedThisTick)??0,a=En(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import Pw from"node:path";B();et();G();w();import qS from"node:path";var zS=new Set(["running","dispatching","pending","queued","needs_attention"]),er=new Set(["completed","failed","cancelled","done"]);function Wr(e){let r=ve(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(qS.join(x(e.id),"workers",R(i),"worker.json"),void 0);if(!a)continue;let l=T(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),lt(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function An(){let e=[];for(let r of ee()){if(!zS.has(r.status))continue;let t=Wr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ae(r),e.push({runId:r.id,from:n,to:t})}return e}B();et();G();w();tt();ao();import{existsSync as gr,lstatSync as aw,readdirSync as lw,readlinkSync as cw,renameSync as ya,unlinkSync as uw}from"node:fs";import je from"node:path";be();w();import Ne from"node:path";var XS=`${Ne.sep}runs${Ne.sep}runs${Ne.sep}`;function es(e){return e.includes(XS)}function ua(e,r){return Ne.join(Re(ne(e)),R(r))}function mr(e,r,t){return Ne.join(ua(e,r),"workers",R(t))}function Wp(e,r,t){let n=ne(e);return Ne.join(n,"runs","runs",R(r),"workers",R(t))}function da(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Lr(e){return{workerJsonPath:Ne.join(e,"worker.json"),stdoutPath:Ne.join(e,"stdout.jsonl"),stderrPath:Ne.join(e,"stderr.log"),heartbeatPath:Ne.join(e,"heartbeat.jsonl"),lastStatusPath:Ne.join(e,"last-status.json")}}function Lp(e){let r=Lr(mr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!es(e.statusPath)?e.statusPath:r}import{existsSync as fr,mkdirSync as ZS,readdirSync as Kp,renameSync as ew,statSync as ma}from"node:fs";import z from"node:path";O();no();qe();import Hp from"node:path";function QS(e){return Hp.resolve(qr(e.trim()))}function pa(e,r,t){let n=e?.trim();return n?{repo:QS(n),source:r,persistedInConfig:t}:null}function Ce(e={}){let r=e.env??process.env,t=e.config??b(),n=pa(t.defaultRepo,"config",!0);if(n)return n;let o=pa(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=pa(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=vr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function Fp(e,r){let t={...r??b(),defaultRepo:pe(Hp.resolve(e))};return ze(t),t}function In(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}tt();be();B();w();var On=900*1e3,rw=3600*1e3;function jp(e,r){let t=z.resolve(e),n=z.resolve(Re(r)),o=z.relative(n,t);return o!==".."&&!o.startsWith("..")&&!z.isAbsolute(o)}function fa(e){if(!fr(e))return[];try{return Kp(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function ga(e){let r=z.join(e,"workers");if(!fr(r))return[];try{return Kp(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Vp(e){return z.join(e,"archived-workers")}function tw(e,r){let t=z.join(Vp(e),R(r));return fr(t)?`${t}-${Date.now()}`:t}function $p(e,r,t){if(!fr(e))return!1;try{let n=r-ma(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Gp(e,r=Date.now(),t=On){if(!fr(e))return!1;let n=Lr(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&$(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!($p(n.stdoutPath,r,t)||$p(n.heartbeatPath,r,t))}function nw(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-ma(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function ow(e,r,t,n){if(Gp(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=nw(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=On){for(let n of ga(e))if(Gp(z.join(e,"workers",n),r,t))return!0;return!1}function sw(){return{repo:Ce()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function iw(e,r){let t=z.join(Re(e),R(r));if(!fr(t))return null;let n=ga(t);if(n.length===0)return null;let o;try{o=ma(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=mr(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=xt(t);return{id:r,name:r,...sw(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ha(e){let r=ne(e??me()),t=Re(r),n=[];for(let o of fa(t)){let s=z.join(t,o,"run.json");if(fr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=iw(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ae(i),n.push({runId:o,action:"repaired_run_json",reason:xt(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function ka(e,r={}){let t=ne(e??me()),n=Re(t),o=r.now??Date.now(),s=r.archiveAgeMs??rw,i=[];ha(t);for(let a of fa(n)){let l=z.join(n,a),c=z.join(l,"run.json"),u=_(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...ga(l)]),f=!1;for(let m of d){let p=z.join(l,"workers",R(m)),g=z.join(p,"worker.json"),k=_(g,void 0);if(!k){let A=z.join(Vp(l),R(m));if(fr(A)&&(u.workers[R(m)]||u.workers[m])){delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:A});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let h=ow(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=tw(l,m);ZS(z.dirname(S),{recursive:!0}),ew(p,S),delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:h.reason,archivePath:S})}f&&Ae(u)}return{workers:i}}function Yp(e,r=Date.now()){let t=new Set,n=Re(e);for(let o of fa(n)){let s=z.join(n,o);xt(s,r)&&t.add(`${e}\0${o}`)}return t}B();w();function dw(e,r){let t=ua(e,r),n;try{n=aw(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=je.resolve(je.dirname(t),cw(t));if(xt(o)||xt(t))return null;let s=`${t}.materialize-${Date.now()}`;return ya(o,s),uw(t),ya(s,t),o}function pw(e){let r=[];for(let t of da()){let n=je.join(e.fromDir,t),o=je.join(e.toDir,t);!gr(n)||gr(o)||(ya(n,o),r.push(t))}return r}function Jp(e,r){let t=Lr(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 mw(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 fw(e){let r=Lr(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=gr(r.stdoutPath),o=gr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?io(r.stdoutPath):{finalResult:null},a=o?Se(r.heartbeatPath):Se(""),l=rt(a),c=mw({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:je.join(te().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Jp(u,e.canonicalDir),u}function gw(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=mr(r,e.id,o),a=je.join(i,"worker.json");(es(s.workerDir)||es(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ae(e)),t}function hw(e){let r=[],t=mr(e.harnessRoot,e.run.id,e.workerName),n=Wp(e.harnessRoot,e.run.id,e.workerName),o=Lr(t),s=pw({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=Lp({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&gr(o.workerJsonPath)&&(a=_(o.workerJsonPath,void 0)),!a){let l=fw({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return V(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=gr(t),u=da().some(d=>gr(je.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:je.join(te().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return V(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 Jp(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",V(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 kw(e,r){let t=je.join(x(e.id),"workers");if(!gr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of lw(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function qp(){let{harnessRoot:e}=te(),r=ha(e),t=[];for(let n of ee()){let o=dw(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),gw(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 kw(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:mr(e,n.id,i),statusPath:je.join(mr(e,n.id,i),"worker.json")}},Ae(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(...hw({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}tt();uo();G();B();et();w();import{execFileSync as zp}from"node:child_process";import Xp from"node:path";function Ra(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function yw(e){let r=Ra(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Rw(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function bw(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 vw(e){let r=null;if(typeof e=="string"?r=st(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Ra(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 Sw(e){try{let n=zp("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=zp("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:Ra(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 ww(e){let r=Se(e.heartbeatPath);return e.completionSnapshot?.finalResult??rt(r)}function Cw(e){let r=new Map,t=x(e.id);for(let n of ve(e)){let o=_(Xp.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of vw(ww(o))){let i=yw(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function _w(e,r){let t=Se(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,Rw(r)].filter(Boolean).join(`
|
|
34
|
+
`);return bw(n)}function xw(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function ba(e={}){let r=e.lookupPr??Sw,t=[],n=new Map;for(let o of ee()){let s=Cw(o),i=x(o.id);for(let a of ve(o)){let l=Xp.join(i,"workers",R(a),"worker.json"),c=_(l,void 0);if(!c||!xw(c))continue;let u=T(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,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",V(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 Ew=900*1e3;function Aw(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Nn(){let e=qp();if(Aw()){let s=ba(),i=ka();return{workers:[],finalizedRuns:An(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ee())for(let i of ve(s)){let a=Pw.join(x(s.id),"workers",R(i),"worker.json"),l=_(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=T(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c.attention.state==="blocked"?"blocked":c.attention.state==="done"||c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason="synced finished worker record after terminal stdout/heartbeat",V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=c.attention.state==="blocked"?"blocked":c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason=c.attention.reason,V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&$(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||t-u>Ew,m=Number.isFinite(d)&&t-d>at;if(f&&m){jt(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,V(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=ba(),o=ka();return{workers:r,finalizedRuns:An(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Qp(){let e=Nn(),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))}tn();O();Ee();import Iw from"node:os";function rs(e,r={}){let t=(r.boxKind??Be(b())).trim().toLowerCase()||"forge",n=r.hostLabel??Iw.hostname();return{boxId:r.boxId??Mo(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}:{}}}B();lo();G();O();import Ow from"node:path";B();G();w();async function Tn(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=U(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=W(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Fe({runId:t.id}).runnerId,a=await rp({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=_(Ow.join(x(t.id),"workers",R(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let p=T(m);if(p.alive||p.finalResult||m.completionReportedAt)continue;let g=Do({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 q(k,s,{agentOsId:n,leaseOwner:g},{agentOsId:n,baseUrl:o})}catch(S){h={ok:!1,error:S.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 q(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();G();B();w();import Nw from"node:path";O();async function Zp(e){let r=W(e.baseUrl),t=await K(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 q(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 em(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=_(Nw.join(x(t.id),"workers",R(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=T(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await Zp({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,V(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}O();Ee();function Tw(e=process.env){let r=b();return Be(r,e)!=="forge"}function rm(e,r=process.env){if(Tw(r))return e?.maxConcurrentWorkers??void 0}async function tm(e,r){let t=W(r.baseUrl?String(r.baseUrl):void 0),n=await K(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Po(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}O();Ee();be();import Pe from"node:path";co();import os from"node:path";ye();G();var va=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function nm(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of va)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function _e(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!nm(n)})}function Hr(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 Dn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?_e(e.changedFiles).length>0:!!(Hr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function Mn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Sa(e,r){if(e.status)return _e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Vt(e.worktreePath);return _e(t).length>0}function Dw(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function wa(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=Dw(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Vt(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"}:to(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??Hr(s)};return e.status=u,u}return Mn(e)}G();G();tt();w();function Ca(e,r=Date.now(),t=On){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function ts(e,r=Date.now(),t=On){return $(e.pid)?!0:Ca(e,r,t)}function Mw(e,r){return r?r.runTerminalCache.derive(e.run):Wr(e.run)}function rr(e,r=Date.now()){return ts(e.worker,r)}function _a(e,r){return er.has(e.run.status)?!1:Mw(e,r)!==null}function om(e,r,t=Date.now()){if(rr(e,t))return!0;if(er.has(e.run.status)||_a(e,r))return!1;let n=Mn(e);return re(n)?!1:!!rr(e,t)}co();G();function sm(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(rr(e))return!0;let n=r??Mn(e);return!!(!re(n)||Dn(n)||_e(n.changedFiles).length>0||ot({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Hr(n.finalResult)}).blocked)}ye();w();import{existsSync as am,mkdirSync as Uw,writeFileSync as im}from"node:fs";import ns from"node:path";function lm(e,r,t){return ns.join(e,"salvage",R(r),R(t))}function cm(e){return am(ns.join(lm(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function um(e){let r=lm(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Uw(r,{recursive:!0});let t=ns.join(r,"salvage.patch"),n=!1;if(am(e.indexed.worktreePath)){let s=Q(e.indexed.worktreePath,["diff","HEAD"]),i=Q(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
35
|
+
`);a.trim()&&(im(t,a.endsWith(`
|
|
36
36
|
`)?a:`${a}
|
|
37
|
-
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return
|
|
38
|
-
`),o}var Bw=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Ww(e){return!Bw.has(e.skipReason)||rr(e.indexed,e.now)?!1:lm({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(cm({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Lw(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?er.has(r.run.status)||e.liveness&&Ca(r,e.liveness)||e.liveness&&re(Sa(r,e.liveness))&&!rr(r)?o:n:t?o:n}function Hw(e,r){if(e.harnessRoot?.trim())return os.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${os.sep}runs${os.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function um(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=Lw(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(rr(r,a))return"active_worker";let c=Sa(r,e.liveness),u=Hw(e,r),d=p=>u&&Ww({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(om(r,c)){let p=d("completion_blocked");if(p)return p}if(va(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(nm(r,e.liveness,a)||!re(c))return"run_still_active";if(Dn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(_e(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(ot({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Hr(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 _a(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(os.resolve(o))||r&&rr(r)?"active_worker":r&&va(r,e.gitStatusCache)?"dirty_worktree":null}function dm(e){return _a(e)}var pm=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function mm(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)pm.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||pm.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as km,readdirSync as ym,statSync as Kw}from"node:fs";import Rm from"node:path";B();be();import fm from"node:path";w();function $w(e,r){return ts(e,r)}function gm(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of so(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(fm.join(Jt(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=fm.resolve(l.worktreePath);$w(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Gp(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function hm(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function jw(e,r){try{let t=Kw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Vw(e,r){let t=Rm.join(e,"runs",r,"run.json");return km(t)?_(t,null):null}function bm(e){try{return ym(e).length===0}catch{return!1}}function vm(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(hm(n,r,t,i.liveRunKeys)||!bm(n))return"run_still_active";let a=Vw(r,t);return a&&!er.has(a.status)&&!Wr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Sm(e){if(!km(e.worktreesDir))return[];let r=[],t;try{t=ym(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=Rm.join(e.worktreesDir,o);bm(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:jw(s,e.now)})}return r}ye();import{existsSync as Pa,rmSync as Tm}from"node:fs";import{execFileSync as Gw}from"node:child_process";import{existsSync as wm,readdirSync as Yw,statSync as Jw}from"node:fs";import qw from"node:path";var zw=2500;function Xw(e,r=zw){if(!wm(e))return 0;try{let n=Gw("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 tr(e,r=5e4){if(!wm(e))return 0;let t=Xw(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Yw(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=qw.join(i,l),u;try{u=Jw(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as rC,rmSync as tC}from"node:fs";be();import{lstatSync as Qw,readdirSync as Zw}from"node:fs";function Cm(e){try{let r=Qw(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 _m(e,r=32){let t=Cm(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Zw(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Cm(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as eC}from"node:child_process";import Em from"node:path";import xe from"node:path";function xm(e,r,t,n){let o=xe.resolve(e),s=`${xe.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=xe.relative(t,i);if(a.startsWith("..")||xe.isAbsolute(a))return"path_outside_harness";let l=a.split(xe.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(xe.resolve(r))?"path_outside_harness":null}function ss(e,r,t){return xm(e,r,t,"node_modules")}function is(e,r,t){return xm(e,r,t,".next")}function as(e,r,t){let n=xe.resolve(e),o=xe.relative(t,n);return o.startsWith("..")||xe.isAbsolute(o)||o.split(xe.sep).length<3||!n.startsWith(xe.resolve(r))?"path_outside_harness":null}function Pm(e,r,t){let n=xe.resolve(e);return ss(n,r,t)===null||is(n,r,t)===null||as(n,r,t)===null}function Im(){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 Am(e){let r=eC("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Om(e,r,t){if(!Pm(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=Am(["chown","-R",`${n}:${o}`,Em.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Am(["rm","-rf",Em.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 xa="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 nC(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Nm(e,r,t={}){if(!rC(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?ar(n):null,i=e.bytes??tr(e.path)??void 0,a=t.removePath??tC,l=t.hasForeignOwnedEntry??_m;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!nC(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Im();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${xa}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Om(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}; ${xa}`}}}function Ea(e){let r=e.harnessRoot;return!r||!Kp(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Aa(e,r){let t=Ea(e);if(t)return t;let n=Nm(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Dm(e,r){return Aa(e,r)}function Mm(e,r){return Aa(e,r)}function Um(e,r){return Aa(e,r)}function Bm(e,r){let t=Ea(e);if(t)return t;if(!Pa(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??tr(e.path);return Tm(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 Wm(e,r){let t=Ea(e);if(t)return t;if(!Pa(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??tr(e.path);return n&&ce(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Pa(e.path)&&Tm(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 ls,readdirSync as cs,statSync as oC}from"node:fs";import Ve from"node:path";function Ia(e,r){try{let t=oC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Hm(e,r){let t=Ve.relative(r,e);return t===""||!t.startsWith("..")&&!Ve.isAbsolute(t)}function Lm(e,r,t,n){let o=[];for(let s of ba){if(s===".next")continue;let i=Ve.join(e,s);if(!ls(i))continue;let a=Ve.resolve(i);t.has(a)||Hm(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:Ia(a,r.now)}))}return o}function Fm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Lm(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ls(e.worktreesDir))return r;for(let n of cs(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Ve.join(e.worktreesDir,n.name);for(let s of cs(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Ve.join(o,s.name);r.push(...Lm(i,e,t,{runId:n.name,worker:s.name}))}}return r}function $m(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;ls(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:Ia(a,e.now)})))}if(!t||!ls(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Ve.resolve(i.worktreePath));for(let i of cs(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Ve.join(e.worktreesDir,i.name),l;try{l=cs(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Ve.resolve(Ve.join(a,c.name));o.has(u)||s.has(u)||Hm(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Ia(u,e.now)}))}}return n}import{existsSync as Vm,readdirSync as Km,statSync as sC}from"node:fs";import Pt from"node:path";var iC=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function aC(e,r){try{let t=sC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function lC(e,r){let t=Pt.relative(r,e);return t===""||!t.startsWith("..")&&!Pt.isAbsolute(t)}function cC(e,r,t,n,o,s){if(!Vm(n))return;let i=Pt.resolve(n);r.has(i)||lC(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:aC(i,t.now)}))}function jm(e,r,t,n,o){for(let s of iC)cC(e,r,t,Pt.join(n,s.dirName),s.kind,o)}function Gm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||jm(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Vm(e.worktreesDir))return r;for(let n of Km(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Pt.join(e.worktreesDir,n.name),s;try{s=Km(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Pt.join(o,i.name);jm(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ye();import{existsSync as Ym,statSync as uC}from"node:fs";import Ge from"node:path";function dC(e,r){try{let t=uC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pC(e){let r=[],t=null;for(let n of e.split(`
|
|
39
|
-
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function mC(e,r){let t=Ge.relative(Ge.resolve(r),Ge.resolve(e));return t!==""&&!t.startsWith("..")&&!Ge.isAbsolute(t)}var fC=200;function
|
|
40
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(_e(s).length>0)return"dirty_worktree";let i=Q(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=Q(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}be();import{existsSync as hC,readdirSync as
|
|
41
|
-
`).map(t=>t.trim()).filter(Boolean)}var ds=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=uf(t)??[];return this.cache.set(t,o),o}};var ps=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Wr(r);return this.cache.set(r.id,n),n}};function IC(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function df(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:IC(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 OC(e={}){let r=e.harnessRoot?ne(e.harnessRoot):me(),t=af({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function NC(e){return typeof e=="string"?{reason:e}:e}function Et(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function ms(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:tr(e.path,t)}}function pf(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 TC(e,r){return e.kind==="remove_next_cache"?Mm(e,r):Dm(e,r)}function DC(e,r,t){return e.kind==="remove_next_cache"?is(e.path,r,t):ss(e.path,r,t)}function MC(e){let r=new Map;for(let t of e)for(let[n,o]of zm(t))r.set(n,o);return r}function mf(e,r){return e.runId&&e.worker?Pe.join(r,e.runId,e.worker):Pe.resolve(e.path,"..")}function Ua(e={}){let r=Ta(e),t=lf();r=cf(r,t);let n=OC(e);Te("scan",`${n.scanRoots.length} harness root(s)`);let o=gm(n.scanRoots,n.now),s=r.finalizeStaleRuns?An().map(v=>({runId:v.runId,from:v.from,to:v.to})):[];s.length>0&&Te("finalize",`${s.length} stale run(s) marked terminal`),Te("index","building worktree index");let i=MC(n.scanRoots);Te("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new ps,gitStatusCache:new ds,gitRevCache:new us},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let v of n.scanRoots){if(f())break;Te("root",v);let E=Pe.join(v,"worktrees"),H=qm(i,v),M={harnessRoot:v,worktreesDir:E,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:H,now:n.now},oe=r.scanDependencyCaches?Gm(M):[];Te("dependency",r.scanDependencyCaches?`${oe.length} cache candidate(s) at ${v}`:"skipped (worktree-only sweep)");let De=0;for(let he of oe){if(f())break;De+=1,De%50===0&&Te("dependency",`${De}/${oe.length} evaluated`);let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=DC(D,v,E);if(se){Et(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=mf(D,E),ke=H.get(Pe.resolve(de))??null,ie=_a({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){Et(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(TC(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of Fm(M)){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=as(D.path,v,E);if(se){Et(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=mf(D,E),ke=H.get(Pe.resolve(de))??null,ie=dm({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){Et(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Um(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let ge=[...$m(M),...Jm(M)];Te("worktrees",`${ge.length} candidate(s) at ${v}`);let $t=new Set,Kt=0;for(let he of ge){if(f())break;Kt+=1,Kt%50===0&&Te("worktrees",`${Kt}/${ge.length} evaluated`);let X=Pe.resolve(he.path);if($t.has(X))continue;$t.add(X);let D={...he,path:X},se=H.get(Pe.resolve(D.path))??null,de=se?null:tf({worktreePath:D.path,harnessRoot:v,runId:D.runId,workerName:D.worker,now:n.now}),ke=um({indexed:se,worktreePath:Pe.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:de,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:v,writeSalvageEvidence:r.execute});if(ke){let{reason:ie,detail:qn}=NC(ke);Et(l,D.path,ie,qn),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Wm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of Sm({harnessRoot:v,worktreesDir:E,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=D.runId??Pe.basename(X),de=vm({harnessRoot:v,runId:se,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(de){Et(l,D.path,de),c.push({...D,executed:!1,skipped:!0,skipReason:de});continue}c.push(Bm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,g=0,k=0,h=0,S=0;for(let v of c)v.bytes&&(m+=v.bytes),!v.skipped&&!v.executed&&v.bytes&&(g+=v.bytes),v.executed?(h+=1,k+=v.bytes??0,v.kind==="remove_run_directory"&&(p+=1)):v.skipped&&(S+=1,v.skipReason==="dry_run"&&v.bytes&&(g+=v.bytes));let A=r.accountBytes?of({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Te("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let L=mm(c,l),P=df({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:S,skipReasons:pf(c,l)},...A?{storage:A}:{},...L.length>0?{preservedLivePaths:L}:{},...p>0?{removedRunDirectories:p}:{}});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:S,skipReasons:pf(c,l)},...A?{storage:A}:{},...L.length>0?{preservedLivePaths:L}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function ff(e){let r=ef(e);return Ua({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function gf(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as jC}from"node:fs/promises";import{homedir as VC}from"node:os";import $r from"node:path";no();import{existsSync as hf,readFileSync as UC}from"node:fs";import fs from"node:path";var yf={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Rf=Object.keys(yf),Ba={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},BC={"@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 kf(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 gs(e,r){let t=kf(e),n=kf(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 bf(e,r){return gs(e,r)>=0}function WC(e){let r=null;for(let t of e)(!r||gs(t,r)>0)&&(r=t);return r}function LC(e){try{let r=JSON.parse(UC(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function HC(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=fs.resolve(o);if(hf(fs.join(s,"packages/kynver-runtime/package.json"))&&hf(fs.join(s,"package.json")))return s}return vr({cwd:e})?.repo??null}function vf(e={}){let r=e.cwd??process.cwd(),t=HC(r,e.repoRoot);if(!t)return{};let n={};for(let o of Rf){let s=fs.join(t,BC[o]),i=LC(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function FC(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function $C(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&bf(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${FC(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 KC(e){if(e.length===0)return{version:null,source:"unknown"};let r=WC(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 Sf(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=Rf.map(i=>{let a=yf[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}=KC(l),p=u?.version??null,g=f?bf(f,a):!1,k=g?[]:$C({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${Ba[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${Ba[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:Ba[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 Wa=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
42
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function
|
|
43
|
-
`).map(m=>m.trim()).filter(Boolean).slice(0,n_):[];return{pull:{html_url:n.html_url??null,title:n.title??null,body:l,user:{login:i?.login??null},state:n.state??null,draft:n.draft??null,merged:n.merged??null,merged_at:n.merged_at??null,merge_commit_sha:n.merge_commit_sha??null,mergeable:n.mergeable??null,mergeable_state:n.mergeable_state??null,head:{sha:s,ref:o?.ref??null,repo:{owner:{login:a?.login??null}}}},checkRuns:c,combinedStatus:u,changedFiles:f}}},
|
|
44
|
-
`)){let i=s.match(a_)?.[0];if(!i)continue;let a=s.match(i_)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=s_)break}return{found:o.length>0,deployments:o}}};var
|
|
45
|
-
`))!==-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 x_(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function
|
|
46
|
-
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:P_.has(t)?{ok:!0,mutating:!1}:E_.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var O_=10*6e4,N_=5e3,jf=2e5;async function Vf(e,r,t={}){let n=Kf(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??O_,i=new Nt(r);return new Promise(a=>{let l=0,c=!1,u=I_(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=jf)return;let p=m.toString("utf8").slice(0,jf-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"),N_).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 D_=25e3,M_=32e3,U_=5e3,B_=6e4,Gf=5*6e4,W_=5e3,L_="claude-sonnet-4-6";async function H_(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(),W_);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 Yf(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=Z();if(!t||!n)return null;let o=await H_(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:T_.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||L_,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function F_(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),M_),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:D_}),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 Kr(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 $_(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Vf(n,s=>{Kr(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await Kr(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await Kr(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 K_(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||Kr(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Nt(s),a=Ff(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await Kr(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await $f({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await Kr(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 Kr(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 $a(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Jf(e){let r=await Yf();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!Z()||!b().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Gf}));!r&&!e.shouldStop();){if(!Z()||!b().agentOsId?.trim()||(await $a(Gf,e.shouldStop),e.shouldStop()))return;r=await Yf()}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 F_(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await $a(B_,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await $_(r,t):await K_(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await $a(U_,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var j_=6e4,V_=5*6e4,G_=10,Y_=250;async function Ka(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(Y_,t);await or(n),t-=n}}async function ys(e){mt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):j_,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Jc(b());a.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:a.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:a.box.boxKind,workerCapSource:a.workerCapSource,maxConcurrentWorkers:a.maxConcurrentWorkers}));let l=Qe(),c=Jf({shouldStop:()=>s}).catch(d=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:d instanceof Error?d.message:String(d)}))}),u=!1;for(;!s;)try{Xc({agentOsId:t,runId:r,instructionBundleVersion:Pr()});let d=await si(e.secret?String(e.secret):void 0,t);if(!d.ok){u||(u=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:d.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await Ka(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Gc({agentOsId:t,baseUrl:Ic(e.baseUrl?String(e.baseUrl):void 0),secret:d.secret});let f=await Fa({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let k=_o(r);if(k&&!k.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:k.holderBoxId}));else{let h=await ft({env:l,agentOsIdFilter:t});h.enabled&&(h.fired>0||h.errors>0||h.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...h}))}}f.idle?i++:i=0;let m=Math.floor(pt("daemon.maxIdleStreak",G_)),p=Math.floor(pt("daemon.idleIntervalMs",V_)),g=i>=m?p:o;await Ka(g,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await Ka(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as J_}from"node:child_process";w();var q_=15*6e4,qf=2*6e4,zf=1e4,z_=5e3,X_=5*6e4,Q_=30*6e4,Xf=5e3;function Z_(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:q_}function Rs(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 ex(e,r=z_,t=X_){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function rx(e,r,t=Q_){return r-e>=t}function jr(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function tx(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 bs(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=Z_(e.stallMs),o=tx(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,jr("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),jr("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=J_(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),jr("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await or(Xf),!(d||i));){if(Date.now()-u<qf)continue;let k=Qc(t),h=k&&k.pid===a.pid?k:null;if(h&&Zc(h,n)){jr("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await or(zf),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+qf){jr("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await or(zf),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await or(Xf);if(i)break;let p=Date.now();rx(u,p)&&(l=0),l+=1;let g=ex(l);jr("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await or(g)}jr("stopped",{agentOsId:t})}ye();B();import{existsSync as ux,mkdirSync as dx}from"node:fs";import px from"node:path";B();et();import{existsSync as nx,readFileSync as ox}from"node:fs";import Qf from"node:path";G();w();function sx(e){if(!e||!nx(e))return 0;try{return ox(e,"utf8").trim().length}catch{return 0}}function ix(e,r){let t=Qf.join(x(e.id),"workers",R(r),"worker.json"),n=_(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=T(n,{base:e.base,baseCommit:e.baseCommit}),s=sx(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:lt(o),completionBlocked:a}}function ax(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 lx(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 cx(e){let r=0;for(let t of ve(e)){let n=Qf.join(x(e.id),"workers",R(t),"worker.json"),o=_(n,void 0);if(!o)continue;let s=T(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function ja(){return Nn(),ee().map(e=>{let t=ve(e).map(d=>ix(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}=lx(t),c=cx(e),u=Qt(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:ax({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Zf(){console.log(JSON.stringify(ja(),null,2))}w();function mx(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ce();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function vs(e){let r=$d(mx(e));Ll(r);let t=e.id?Go(String(e.id)):Dl(String(e.name||"run")),n=x(t);ux(n)&&fx(`run already exists: ${t}`),dx(n,{recursive:!0});let o=String(e.base||"origin/main"),s=ce(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:{}};le(px.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 eg(){Zf()}function fx(e){console.error(e),process.exit(1)}B();import{existsSync as Cs}from"node:fs";async function Ss(e=Qe()){let r=await Er(e.storePath).catch(()=>[]),t=await Co(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=So(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 Rx}from"node:os";import bx from"node:path";import{existsSync as rg,mkdirSync as gx,readFileSync as tg,writeFileSync as hx}from"node:fs";import{homedir as kx}from"node:os";import ng from"node:path";var hr=ng.join(kx(),".kynver",".env");function Va(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 yx(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
37
|
+
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return im(ns.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
38
|
+
`),o}var Bw=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Ww(e){return!Bw.has(e.skipReason)||rr(e.indexed,e.now)?!1:cm({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(um({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Lw(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?er.has(r.run.status)||e.liveness&&_a(r,e.liveness)||e.liveness&&re(wa(r,e.liveness))&&!rr(r)?o:n:t?o:n}function Hw(e,r){if(e.harnessRoot?.trim())return os.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${os.sep}runs${os.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function dm(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=Lw(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(rr(r,a))return"active_worker";let c=wa(r,e.liveness),u=Hw(e,r),d=p=>u&&Ww({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(sm(r,c)){let p=d("completion_blocked");if(p)return p}if(Sa(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(om(r,e.liveness,a)||!re(c))return"run_still_active";if(Dn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(_e(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(ot({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Hr(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 xa(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(os.resolve(o))||r&&rr(r)?"active_worker":r&&Sa(r,e.gitStatusCache)?"dirty_worktree":null}function pm(e){return xa(e)}var mm=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function fm(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)mm.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||mm.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as ym,readdirSync as Rm,statSync as Kw}from"node:fs";import bm from"node:path";B();be();import gm from"node:path";w();function $w(e,r){return ts(e,r)}function hm(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of so(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(gm.join(Jt(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=gm.resolve(l.worktreePath);$w(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Yp(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function km(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function jw(e,r){try{let t=Kw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Vw(e,r){let t=bm.join(e,"runs",r,"run.json");return ym(t)?_(t,null):null}function vm(e){try{return Rm(e).length===0}catch{return!1}}function Sm(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(km(n,r,t,i.liveRunKeys)||!vm(n))return"run_still_active";let a=Vw(r,t);return a&&!er.has(a.status)&&!Wr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function wm(e){if(!ym(e.worktreesDir))return[];let r=[],t;try{t=Rm(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=bm.join(e.worktreesDir,o);vm(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:jw(s,e.now)})}return r}ye();import{existsSync as Ea,rmSync as Dm}from"node:fs";import{execFileSync as Gw}from"node:child_process";import{existsSync as Cm,readdirSync as Yw,statSync as Jw}from"node:fs";import qw from"node:path";var zw=2500;function Xw(e,r=zw){if(!Cm(e))return 0;try{let n=Gw("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 tr(e,r=5e4){if(!Cm(e))return 0;let t=Xw(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Yw(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=qw.join(i,l),u;try{u=Jw(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as rC,rmSync as tC}from"node:fs";be();import{lstatSync as Qw,readdirSync as Zw}from"node:fs";function _m(e){try{let r=Qw(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 xm(e,r=32){let t=_m(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Zw(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=_m(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as eC}from"node:child_process";import Am from"node:path";import xe from"node:path";function Pm(e,r,t,n){let o=xe.resolve(e),s=`${xe.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=xe.relative(t,i);if(a.startsWith("..")||xe.isAbsolute(a))return"path_outside_harness";let l=a.split(xe.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(xe.resolve(r))?"path_outside_harness":null}function ss(e,r,t){return Pm(e,r,t,"node_modules")}function is(e,r,t){return Pm(e,r,t,".next")}function as(e,r,t){let n=xe.resolve(e),o=xe.relative(t,n);return o.startsWith("..")||xe.isAbsolute(o)||o.split(xe.sep).length<3||!n.startsWith(xe.resolve(r))?"path_outside_harness":null}function Em(e,r,t){let n=xe.resolve(e);return ss(n,r,t)===null||is(n,r,t)===null||as(n,r,t)===null}function Om(){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 Im(e){let r=eC("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Nm(e,r,t){if(!Em(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=Im(["chown","-R",`${n}:${o}`,Am.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Im(["rm","-rf",Am.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 Pa="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 nC(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Tm(e,r,t={}){if(!rC(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?ar(n):null,i=e.bytes??tr(e.path)??void 0,a=t.removePath??tC,l=t.hasForeignOwnedEntry??xm;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!nC(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Om();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Pa}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Nm(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}; ${Pa}`}}}function Aa(e){let r=e.harnessRoot;return!r||!jp(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ia(e,r){let t=Aa(e);if(t)return t;let n=Tm(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Mm(e,r){return Ia(e,r)}function Um(e,r){return Ia(e,r)}function Bm(e,r){return Ia(e,r)}function Wm(e,r){let t=Aa(e);if(t)return t;if(!Ea(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??tr(e.path);return Dm(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 Lm(e,r){let t=Aa(e);if(t)return t;if(!Ea(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??tr(e.path);return n&&ce(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Ea(e.path)&&Dm(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 ls,readdirSync as cs,statSync as oC}from"node:fs";import Ve from"node:path";function Oa(e,r){try{let t=oC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Fm(e,r){let t=Ve.relative(r,e);return t===""||!t.startsWith("..")&&!Ve.isAbsolute(t)}function Hm(e,r,t,n){let o=[];for(let s of va){if(s===".next")continue;let i=Ve.join(e,s);if(!ls(i))continue;let a=Ve.resolve(i);t.has(a)||Fm(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:Oa(a,r.now)}))}return o}function $m(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Hm(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ls(e.worktreesDir))return r;for(let n of cs(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Ve.join(e.worktreesDir,n.name);for(let s of cs(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Ve.join(o,s.name);r.push(...Hm(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Km(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;ls(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:Oa(a,e.now)})))}if(!t||!ls(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Ve.resolve(i.worktreePath));for(let i of cs(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Ve.join(e.worktreesDir,i.name),l;try{l=cs(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Ve.resolve(Ve.join(a,c.name));o.has(u)||s.has(u)||Fm(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Oa(u,e.now)}))}}return n}import{existsSync as Gm,readdirSync as jm,statSync as sC}from"node:fs";import Pt from"node:path";var iC=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function aC(e,r){try{let t=sC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function lC(e,r){let t=Pt.relative(r,e);return t===""||!t.startsWith("..")&&!Pt.isAbsolute(t)}function cC(e,r,t,n,o,s){if(!Gm(n))return;let i=Pt.resolve(n);r.has(i)||lC(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:aC(i,t.now)}))}function Vm(e,r,t,n,o){for(let s of iC)cC(e,r,t,Pt.join(n,s.dirName),s.kind,o)}function Ym(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Vm(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Gm(e.worktreesDir))return r;for(let n of jm(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Pt.join(e.worktreesDir,n.name),s;try{s=jm(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Pt.join(o,i.name);Vm(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ye();import{existsSync as Jm,statSync as uC}from"node:fs";import Ge from"node:path";function dC(e,r){try{let t=uC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pC(e){let r=[],t=null;for(let n of e.split(`
|
|
39
|
+
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function mC(e,r){let t=Ge.relative(Ge.resolve(r),Ge.resolve(e));return t!==""&&!t.startsWith("..")&&!Ge.isAbsolute(t)}var fC=200;function qm(e){if(!e.includeOrphans||!Jm(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Ge.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Ge.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=ce(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=pC(a);for(let c of l){if(i>=fC)break;let u=Ge.resolve(c.path);if(u===Ge.resolve(s)||!mC(u,e.worktreesDir)||t.has(u)||o.has(u)||!Jm(u))continue;let f=Ge.relative(e.worktreesDir,u).split(Ge.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:dC(u,e.now)})}}return n}B();w();import Un from"node:path";function zm(e,r){let t=Un.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Un.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Xm(e){let r=new Map;for(let t of so(e))for(let n of Object.keys(t.workers||{})){let o=Un.join(Jt(e,t.id),"workers",R(n),"worker.json"),s=_(o,void 0);s?.worktreePath&&r.set(Un.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Un.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Bn(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Fr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Da(e={}){let r=e.execute===!0||e.execute!==!1&&Bn("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Bn("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Fr("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??Fr("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Fr("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Fr("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Fr("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Bn("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Bn("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&&!Bn("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Fr("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,g=Fr("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 rf(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 Da({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})}ye();import{existsSync as tf}from"node:fs";import Ma from"node:path";w();var gC=1800*1e3;function nf(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??gC;if(!tf(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Ma.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=_(Ma.join(c,"worker.json"),void 0);if(u&&Ca(u,r,t))return"active_worker"}let n=Ma.join(e.worktreePath,".git");if(!tf(n))return null;let o=Q(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
40
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(_e(s).length>0)return"dirty_worktree";let i=Q(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=Q(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}be();import{existsSync as hC,readdirSync as of,statSync as kC}from"node:fs";import yC from"node:path";function sf(e={}){let r=ne(e.harnessRoot??me()),t=ar(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!hC(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=of(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=yC.join(t,u.name);try{let f=kC(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of of(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=tr(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}}be();import{existsSync as RC}from"node:fs";import{homedir as bC}from"node:os";import af from"node:path";var vC=["/var/tmp/kynver-harness",af.join(bC(),".openclaw","harness")];function Ua(e,r,t){if(!t?.trim())return;let n=ne(t.trim());e.has(n)||(e.add(n),r.push(n))}function SC(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 lf(e={}){let r=new Set,t=[];Ua(r,t,e.harnessRoot??me());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Ua(r,t,o);if(SC(e))for(let o of vC){let s=af.resolve(o);!r.has(s)&&RC(s)&&Ua(r,t,s)}return t}Yt();function wC(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function CC(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function cf(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=CC("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=We({...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 uf(e,r){if(!r.pressured)return e;let t=e.execute||!wC("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}}function Te(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}ye();var us=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=Q(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 _C}from"node:child_process";import{existsSync as xC}from"node:fs";import PC from"node:path";var EC=5e3;function AC(e,r){if(!xC(PC.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=_C("git",r,{cwd:e,encoding:"utf8",timeout:EC}),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 df(e){let r=AC(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
41
|
+
`).map(t=>t.trim()).filter(Boolean)}var ds=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=df(t)??[];return this.cache.set(t,o),o}};var ps=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Wr(r);return this.cache.set(r.id,n),n}};function IC(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function pf(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:IC(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 OC(e={}){let r=e.harnessRoot?ne(e.harnessRoot):me(),t=lf({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function NC(e){return typeof e=="string"?{reason:e}:e}function Et(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function ms(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:tr(e.path,t)}}function mf(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 TC(e,r){return e.kind==="remove_next_cache"?Um(e,r):Mm(e,r)}function DC(e,r,t){return e.kind==="remove_next_cache"?is(e.path,r,t):ss(e.path,r,t)}function MC(e){let r=new Map;for(let t of e)for(let[n,o]of Xm(t))r.set(n,o);return r}function ff(e,r){return e.runId&&e.worker?Pe.join(r,e.runId,e.worker):Pe.resolve(e.path,"..")}function Ba(e={}){let r=Da(e),t=cf();r=uf(r,t);let n=OC(e);Te("scan",`${n.scanRoots.length} harness root(s)`);let o=hm(n.scanRoots,n.now),s=r.finalizeStaleRuns?An().map(v=>({runId:v.runId,from:v.from,to:v.to})):[];s.length>0&&Te("finalize",`${s.length} stale run(s) marked terminal`),Te("index","building worktree index");let i=MC(n.scanRoots);Te("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new ps,gitStatusCache:new ds,gitRevCache:new us},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let v of n.scanRoots){if(f())break;Te("root",v);let E=Pe.join(v,"worktrees"),H=zm(i,v),M={harnessRoot:v,worktreesDir:E,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:H,now:n.now},oe=r.scanDependencyCaches?Ym(M):[];Te("dependency",r.scanDependencyCaches?`${oe.length} cache candidate(s) at ${v}`:"skipped (worktree-only sweep)");let De=0;for(let he of oe){if(f())break;De+=1,De%50===0&&Te("dependency",`${De}/${oe.length} evaluated`);let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=DC(D,v,E);if(se){Et(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=ff(D,E),ke=H.get(Pe.resolve(de))??null,ie=xa({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){Et(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(TC(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of $m(M)){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=as(D.path,v,E);if(se){Et(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=ff(D,E),ke=H.get(Pe.resolve(de))??null,ie=pm({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){Et(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Bm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let ge=[...Km(M),...qm(M)];Te("worktrees",`${ge.length} candidate(s) at ${v}`);let $t=new Set,Kt=0;for(let he of ge){if(f())break;Kt+=1,Kt%50===0&&Te("worktrees",`${Kt}/${ge.length} evaluated`);let X=Pe.resolve(he.path);if($t.has(X))continue;$t.add(X);let D={...he,path:X},se=H.get(Pe.resolve(D.path))??null,de=se?null:nf({worktreePath:D.path,harnessRoot:v,runId:D.runId,workerName:D.worker,now:n.now}),ke=dm({indexed:se,worktreePath:Pe.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:de,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:v,writeSalvageEvidence:r.execute});if(ke){let{reason:ie,detail:qn}=NC(ke);Et(l,D.path,ie,qn),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Lm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of wm({harnessRoot:v,worktreesDir:E,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=D.runId??Pe.basename(X),de=Sm({harnessRoot:v,runId:se,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(de){Et(l,D.path,de),c.push({...D,executed:!1,skipped:!0,skipReason:de});continue}c.push(Wm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,g=0,k=0,h=0,S=0;for(let v of c)v.bytes&&(m+=v.bytes),!v.skipped&&!v.executed&&v.bytes&&(g+=v.bytes),v.executed?(h+=1,k+=v.bytes??0,v.kind==="remove_run_directory"&&(p+=1)):v.skipped&&(S+=1,v.skipReason==="dry_run"&&v.bytes&&(g+=v.bytes));let A=r.accountBytes?sf({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Te("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let L=fm(c,l),P=pf({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:S,skipReasons:mf(c,l)},...A?{storage:A}:{},...L.length>0?{preservedLivePaths:L}:{},...p>0?{removedRunDirectories:p}:{}});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:S,skipReasons:mf(c,l)},...A?{storage:A}:{},...L.length>0?{preservedLivePaths:L}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function gf(e){let r=rf(e);return Ba({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function hf(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as jC}from"node:fs/promises";import{homedir as VC}from"node:os";import $r from"node:path";no();import{existsSync as kf,readFileSync as UC}from"node:fs";import fs from"node:path";var Rf={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},bf=Object.keys(Rf),Wa={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},BC={"@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 yf(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 gs(e,r){let t=yf(e),n=yf(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 vf(e,r){return gs(e,r)>=0}function WC(e){let r=null;for(let t of e)(!r||gs(t,r)>0)&&(r=t);return r}function LC(e){try{let r=JSON.parse(UC(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function HC(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=fs.resolve(o);if(kf(fs.join(s,"packages/kynver-runtime/package.json"))&&kf(fs.join(s,"package.json")))return s}return vr({cwd:e})?.repo??null}function Sf(e={}){let r=e.cwd??process.cwd(),t=HC(r,e.repoRoot);if(!t)return{};let n={};for(let o of bf){let s=fs.join(t,BC[o]),i=LC(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function FC(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function $C(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&vf(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${FC(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 KC(e){if(e.length===0)return{version:null,source:"unknown"};let r=WC(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 wf(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=bf.map(i=>{let a=Rf[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}=KC(l),p=u?.version??null,g=f?vf(f,a):!1,k=g?[]:$C({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${Wa[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${Wa[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:Wa[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 La=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
42
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Cf(e={}){let r=wf(e);if(!r.ok)throw new La(r);return r}var GC=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function At(e){let r=e?.trim();return r||null}function YC(e){return[...new Set(e.filter(r=>!!r))]}function JC(){let e=VC(),r=At(process.env.KYNVER_OPENCLAW_NPM_ROOT)??At(process.env.OPENCLAW_NPM_ROOT)??$r.join(e,".openclaw","npm"),t=At(process.env.KYNVER_NPM_GLOBAL_ROOT)??At(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(At(process.env.NPM_CONFIG_PREFIX)?$r.join(At(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):$r.join(e,".npm-global","lib","node_modules"));return YC([$r.join(r,"lib","node_modules"),$r.join(r,"node_modules"),t.endsWith("node_modules")?t:$r.join(t,"lib","node_modules")])}async function qC(e){try{let r=JSON.parse(await jC(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function zC(e){let r=JC(),t=new Set,n=[];for(let o of r){let s=$r.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function hs(e=new Date().toISOString()){let r={};for(let t of GC){let n=null;for(let o of zC(t)){let s=await qC(o);s&&(!n||gs(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 XC}from"node:child_process";var QC=1e4,ZC=4*1024*1024,_f=(e,r,t)=>{try{let n=XC(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??QC,maxBuffer:ZC});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 It(e,r,t){let n=e(r,t);if(!n.ok||!n.stdout.trim())return null;try{return JSON.parse(n.stdout)}catch{return null}}function xf(e,r,t){return`${e} ${r} ${t}`}function Wn(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 Pf(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 e_=8e3,r_=30,t_=100,n_=400;function Ha(e){return process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Ot(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function o_(e){return Array.isArray(e)?e.map(r=>Ot(r)).filter(r=>r!==null).slice(0,r_).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function Ef(e,r,t){let n=It(e,"gh",["api",`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:o_(n.statuses)}:null}var Af={provider:"github",kind:"pr_snapshot",version:"1",isAvailable:Ha,collect(e,r){let t=Pf(e);if(!t)return null;let n=It(r,"gh",["api",`repos/${t.repo}/pulls/${t.number}`]);if(!n)return null;let o=Ot(n.head),s=typeof o?.sha=="string"?o.sha:null,i=Ot(n.user),a=Ot(Ot(o?.repo)?.owner),l=typeof n.body=="string"?n.body.slice(0,e_):null,c=[],u={state:null,statuses:[]};if(s){let m=It(r,"gh",["api",`repos/${t.repo}/commits/${s}/check-runs?per_page=100`]);Array.isArray(m?.check_runs)&&(c=m.check_runs.map(p=>Ot(p)).filter(p=>p!==null).slice(0,t_).map(p=>({name:p.name??null,status:p.status??null,conclusion:p.conclusion??null}))),u=Ef(r,t.repo,s)??u}let d=r("gh",["api","--paginate",`repos/${t.repo}/pulls/${t.number}/files?per_page=100`,"--jq",".[].filename"]),f=d.ok?d.stdout.split(`
|
|
43
|
+
`).map(m=>m.trim()).filter(Boolean).slice(0,n_):[];return{pull:{html_url:n.html_url??null,title:n.title??null,body:l,user:{login:i?.login??null},state:n.state??null,draft:n.draft??null,merged:n.merged??null,merged_at:n.merged_at??null,merge_commit_sha:n.merge_commit_sha??null,mergeable:n.mergeable??null,mergeable_state:n.mergeable_state??null,head:{sha:s,ref:o?.ref??null,repo:{owner:{login:a?.login??null}}}},checkRuns:c,combinedStatus:u,changedFiles:f}}},If={provider:"github",kind:"commit_status",version:"1",isAvailable:Ha,collect(e,r){let t=Wn(e);return t?Ef(r,t.repo,t.sha):null}},Of={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Ha,collect(e,r){let t=Wn(e);if(!t)return null;let n=It(r,"gh",["api",`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=It(r,"gh",["api",`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 s_=5,i_=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,a_=/https:\/\/[^\s]+/,Nf={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=Wn(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(`
|
|
44
|
+
`)){let i=s.match(a_)?.[0];if(!i)continue;let a=s.match(i_)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=s_)break}return{found:o.length>0,deployments:o}}};var Fa=[];function ks(e){Fa.some(r=>r.provider===e.provider&&r.kind===e.kind)||Fa.push(e)}function Tf(e,r){return Fa.find(t=>t.provider===e&&t.kind===r)??null}function Df(){ks(Af),ks(If),ks(Of),ks(Nf)}var l_=8,c_=25e3;function Mf(e,r={}){Df();let t=r.run??_f,n=r.now??(()=>new Date),o=r.maxSubjects??l_,s=Date.now()+(r.deadlineMs??c_),i=new Set,a=e.filter(m=>{let p=xf(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,items:[],skipped:[]},f=new Map;for(let m of u){if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let p=Tf(m.provider,m.kind);if(!p){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${p.provider} ${p.kind}`,k=f.get(g);if(k===void 0&&(k=p.isAvailable(t),f.set(g,k)),!k){d.skipped.push({...m,reason:"provider_unavailable"});continue}d.attempted+=1;let h=p.collect(m.subject,t);if(h==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1,d.items.push({provider:m.provider,kind:m.kind,subject:m.subject,payload:h,observedAt:n().toISOString(),collectorVersion:p.version})}return d}B();w();import u_ from"node:path";var d_="provider-evidence-wanted.json";function Uf(e){return u_.join(x(e),d_)}function Bf(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 Wf(e){let r=_(Uf(e),null);return Bf(r?.wanted)}function Lf(e,r){le(Uf(e),{savedAt:new Date().toISOString(),wanted:r})}function Hf(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Bf(r):null}async function m_(e,r){let t=U(e),n=[];for(let o of Object.keys(t.workers||{})){let s=_(p_.join(x(t.id),"workers",R(o),"worker.json"),void 0);if(!s?.taskId||s.localOnly)continue;if(Dr(s)){n.push({worker:o,ok:!0,taskId:s.taskId??null,skipped:!0});continue}let i=T(s);if(!re(i))continue;let a=nt({alive:i.alive,finalResult:i.finalResult,changedFiles:i.changedFiles,gitAncestry:i.gitAncestry});if(!s.dispatched&&!i.finalResult&&!a?.salvageable)continue;let l=await vn({run:e,name:o,agentOsId:String(r.agentOsId||s.agentOsId||""),...r});n.push({worker:o,ok:l.ok,taskId:s.taskId??null})}return n}async function f_(e,r,t,n,o){let s=W(n.baseUrl?String(n.baseUrl):void 0),i=await K(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await hs(),c=xo(r),u=null;try{let g=Wf(r);u=g.length>0?Mf(g):null}catch{u=null}let d=_o(r),f=await Ar(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Mr(r),resourceGate:t,boxResourceSnapshot:rs(t,{harnessRunId:r,boxKind:Be(b())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Fe({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=Hf(f.response);if(m)try{Lf(r,m)}catch{}let p=yu(f);if(p)try{ku(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 $a(e){let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Sn({run:r});let o=await tm(t,e),s=rm(o),i=wr({runId:r,configuredMaxWorkersOverride:s}),a=hf()?gf(r):void 0,l=await f_(t,r,i,e,a),c=Fd(r,l),u=await Uo(r,e),d=await m_(r,e),f=wr({runId:r,configuredMaxWorkersOverride:s}),m=Nn(),p=await em(r,e),g=Bp(f,l),k=g.maxStarts,h=await Tn({run:r,agentOsId:t,pipeline:!0,...e}),S=null,A=0,L=Up(l),P=k;if(n&&P>0&&L.length>0){let E=Math.min(P,L.length),H=await ca({...e,run:r,agentOsId:t,targetTaskIds:L.join(",")},E),M=_t(H);A+=M,P=Math.max(0,P-M),S={exactTargetTaskIds:L,exact:H,startedCount:A}}if(n&&P>0){let E=await ca({...e,run:r,agentOsId:t},P),H=_t(E);A+=H,S=S&&typeof S=="object"?{...S,broad:E,startedCount:A}:E}else!n||k<=0?S||(S={ok:!0,skipped:!0,reason:n?f.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:g,...L.length?{exactTargetTaskIds:L,exactOnly:!0}:{}}):S&&typeof S=="object"&&(S={...S,broadSkipped:!0,startedCount:A});let v=!g.underutilized&&k===0&&d.length===0&&A===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:u,completedWorkers:d,staleReconcile:m,harnessCleanup:a,planProgressSync:p,completionAckSync:c,operatorTick:l,sweep:h,dispatchAdvice:g,dispatch:S,idle:v}}O();import T_ from"node:os";import{readFileSync as g_}from"node:fs";import{homedir as h_,platform as k_}from"node:os";import y_ from"node:path";import{execFileSync as R_}from"node:child_process";function Ff(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 b_(){if(k_()==="darwin")try{let e=R_("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Ff(e.trim())}catch{return null}try{let e=g_(y_.join(h_(),".claude",".credentials.json"),"utf8");return Ff(e)}catch{return null}}function $f(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=b_();if(s)return{kind:"oauth",token:s}}return null}var v_="You are Claude Code, Anthropic's official CLI for Claude.";function S_(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function w_(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 C_(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){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(`
|
|
45
|
+
`))!==-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 x_(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function Kf(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:v_},{type:"text",text:n.system}]);let i=await fetch(`${x_()}/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=S_();for await(let l of __(i.body)){let c=w_(a,l);c&&e.onDelta(c)}return C_(a)}var Nt=class{constructor(r,t=150){this.flushFn=r;this.floorMs=t}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 I_}from"node:child_process";var P_=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),E_=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),A_=["--secret","--api-key","--keeper-child"];function jf(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(A_.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
46
|
+
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:P_.has(t)?{ok:!0,mutating:!1}:E_.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var O_=10*6e4,N_=5e3,Vf=2e5;async function Gf(e,r,t={}){let n=jf(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??O_,i=new Nt(r);return new Promise(a=>{let l=0,c=!1,u=I_(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=Vf)return;let p=m.toString("utf8").slice(0,Vf-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"),N_).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 D_=25e3,M_=32e3,U_=5e3,B_=6e4,Yf=5*6e4,W_=5e3,L_="claude-sonnet-4-6";async function H_(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(),W_);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 Jf(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=Z();if(!t||!n)return null;let o=await H_(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:T_.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||L_,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function F_(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),M_),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:D_}),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 Kr(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 $_(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Gf(n,s=>{Kr(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await Kr(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await Kr(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 K_(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||Kr(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Nt(s),a=$f(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await Kr(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Kf({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await Kr(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 Kr(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 Ka(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function qf(e){let r=await Jf();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!Z()||!b().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Yf}));!r&&!e.shouldStop();){if(!Z()||!b().agentOsId?.trim()||(await Ka(Yf,e.shouldStop),e.shouldStop()))return;r=await Jf()}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 F_(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Ka(B_,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await $_(r,t):await K_(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Ka(U_,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var j_=6e4,V_=5*6e4,G_=10,Y_=250;async function ja(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(Y_,t);await or(n),t-=n}}async function ys(e){mt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):j_,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=qc(b());a.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:a.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:a.box.boxKind,workerCapSource:a.workerCapSource,maxConcurrentWorkers:a.maxConcurrentWorkers}));let l=Qe(),c=qf({shouldStop:()=>s}).catch(d=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:d instanceof Error?d.message:String(d)}))}),u=!1;for(;!s;)try{Qc({agentOsId:t,runId:r,instructionBundleVersion:Pr()});let d=await ii(e.secret?String(e.secret):void 0,t);if(!d.ok){u||(u=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:d.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await ja(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Yc({agentOsId:t,baseUrl:Oc(e.baseUrl?String(e.baseUrl):void 0),secret:d.secret});let f=await $a({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let k=_o(r);if(k&&!k.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:k.holderBoxId}));else{let h=await ft({env:l,agentOsIdFilter:t});h.enabled&&(h.fired>0||h.errors>0||h.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...h}))}}f.idle?i++:i=0;let m=Math.floor(pt("daemon.maxIdleStreak",G_)),p=Math.floor(pt("daemon.idleIntervalMs",V_)),g=i>=m?p:o;await ja(g,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await ja(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as J_}from"node:child_process";w();var q_=15*6e4,zf=2*6e4,Xf=1e4,z_=5e3,X_=5*6e4,Q_=30*6e4,Qf=5e3;function Z_(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:q_}function Rs(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 ex(e,r=z_,t=X_){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function rx(e,r,t=Q_){return r-e>=t}function jr(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function tx(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 bs(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=Z_(e.stallMs),o=tx(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,jr("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),jr("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=J_(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),jr("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await or(Qf),!(d||i));){if(Date.now()-u<zf)continue;let k=Zc(t),h=k&&k.pid===a.pid?k:null;if(h&&eu(h,n)){jr("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await or(Xf),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+zf){jr("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await or(Xf),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await or(Qf);if(i)break;let p=Date.now();rx(u,p)&&(l=0),l+=1;let g=ex(l);jr("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await or(g)}jr("stopped",{agentOsId:t})}ye();B();import{existsSync as ux,mkdirSync as dx}from"node:fs";import px from"node:path";B();et();import{existsSync as nx,readFileSync as ox}from"node:fs";import Zf from"node:path";G();w();function sx(e){if(!e||!nx(e))return 0;try{return ox(e,"utf8").trim().length}catch{return 0}}function ix(e,r){let t=Zf.join(x(e.id),"workers",R(r),"worker.json"),n=_(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=T(n,{base:e.base,baseCommit:e.baseCommit}),s=sx(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:lt(o),completionBlocked:a}}function ax(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 lx(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 cx(e){let r=0;for(let t of ve(e)){let n=Zf.join(x(e.id),"workers",R(t),"worker.json"),o=_(n,void 0);if(!o)continue;let s=T(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function Va(){return Nn(),ee().map(e=>{let t=ve(e).map(d=>ix(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}=lx(t),c=cx(e),u=Qt(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:ax({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function eg(){console.log(JSON.stringify(Va(),null,2))}w();function mx(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ce();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function vs(e){let r=Kd(mx(e));Hl(r);let t=e.id?Go(String(e.id)):Ml(String(e.name||"run")),n=x(t);ux(n)&&fx(`run already exists: ${t}`),dx(n,{recursive:!0});let o=String(e.base||"origin/main"),s=ce(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:{}};le(px.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 rg(){eg()}function fx(e){console.error(e),process.exit(1)}B();import{existsSync as Cs}from"node:fs";async function Ss(e=Qe()){let r=await Er(e.storePath).catch(()=>[]),t=await Co(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=So(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 Rx}from"node:os";import bx from"node:path";import{existsSync as tg,mkdirSync as gx,readFileSync as ng,writeFileSync as hx}from"node:fs";import{homedir as kx}from"node:os";import og from"node:path";var hr=og.join(kx(),".kynver",".env");function Ga(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 yx(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
47
47
|
`){let t=[r.trimEnd(),""];for(let[n,o]of[...e.entries()].sort(([s],[i])=>s.localeCompare(i))){let s=o.includes(" ")||o.includes("#")||o.includes('"')?`"${o.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:o;t.push(`${n}=${s}`)}return t.push(""),t.join(`
|
|
48
|
-
`)}function ws(e=hr){return
|
|
49
|
-
`)}function yg(e,r){if(!Hn())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=Tx(),n=kg.join(t,qa),o=Dx(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."};Ix(t,{recursive:!0});let s=Ax(n);Ox(n,o,"utf8");let i=hg("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=hg("systemctl",["--user","enable","--now",qa],{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 ${qa}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}B();function Rg(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return bg(t)?ee().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function xs(e={}){let r=e.execute!==!1,t=b(),n=Ye(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=mg(),i=sg({config:t,apiBaseUrl:n,agentOsId:o,cronSecret:s.secret,defaultDaemonRunId:e.runId?.trim()||t.defaultDaemonRunId,installSystemd:e.installSystemd===!0}),a=[...i.prerequisites],l={ok:!1,dryRun:!r,plan:i,secretGenerated:s.generated,configPath:Y(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=og(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:Y(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=Rg(u,e.runId);d&&(u.defaultDaemonRunId=d),ze(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 du(i.storePath);l.storeInitialized=f.created||bg(i.storePath);let m=Z();if(m)try{let p=await xr(o,{baseUrl:n,apiKey:m});_r(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 lg(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=ug(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:ig(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await uu(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await ag(n,o,m),S=dg(h),A=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],L=[];if(S.length)if(e.confirmQstashRemoval){let P=pg(h);if(!P.allowed)a.push(P.reason);else for(let v of S)await cg(n,o,v.id,m),L.push(v.id)}else a.push(`${S.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:S.map(P=>({id:P.id,provider:P.provider,status:P.status})),removed:L,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=Rg({...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{U(p)}catch{a.push(`harness run ${p} not found`)}l.systemd=yg({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:_s()},r)}}if(!e.skipTestFire&&a.length===0){let p=await ft({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 Tt({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 Mx=["deployment_provider","cron_secret","env_file","cron_store"];function vg(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function Ux(e){let r=vg(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=vg(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function Bx(e){if(!Ux(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Tt({config:e})).checks.filter(n=>Mx.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function Wx(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 za(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Sg(e){if(za(e.args.skipCron))return{action:"skipped"};let r=await Bx(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=za(e.args.installSystemd)||za(e.args["install-systemd"]),n=await xs({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 Wx(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function Hx(e,r){return e.filter(n=>n.repo===r&&!er.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function wg(e){mt();let r=b();(!Z()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await vo(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)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(ze({...r,chatUseClaudeOauth:!0}),r=b(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let n=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||Ce()?.repo||"";n||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let o=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";o||(o=Hx(ee(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=vs({...e,repo:n,name:"agent"}).runId),await Sg({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${Lx.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${n}`),console.log(` run: ${o}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let s={...e,run:o,agentOsId:t};if(Rs(s)){await bs(s,Fx(o,t,e));return}await ys(s)}function Fx(e,r,t){let n=["daemon","--run",e,"--agent-os-id",r];return typeof t.intervalMs=="string"&&t.intervalMs.trim()&&n.push("--interval-ms",t.intervalMs.trim()),(t.execute===!1||t.execute==="false")&&n.push("--execute","false"),typeof t.stallMs=="string"&&t.stallMs.trim()&&n.push("--stall-ms",t.stallMs.trim()),n}B();B();G();import{existsSync as $x,rmSync as Kx}from"node:fs";import Xa from"node:path";function jx(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function Vx(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function Gx(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=[...Vx(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Xa.resolve(n.worktreePath),i=[];for(let c of o){let u=jx(c),d=Xa.resolve(s,u);if(!d.startsWith(s+Xa.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!$x(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};Kx(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])],V(n.runId,n);let l=T(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function Cg(e){let r=Gx(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import yP from"node:path";oo();var Yx=/--max-old-space-size=(\d+)/;function Jx(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Qa(){return Jx(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Za(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(Yx.test(t))return r;let o=`--max-old-space-size=${Qa()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function Dt(e=Qa()){return`--max-old-space-size=${e}`}O();import{spawnSync as qx}from"node:child_process";oo();function Ps(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function xg(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Ps(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Ps(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Ps(e.perWorkerMemBytes,1610612736),reserveBytes:t??Ps(e.memReserveBytes,2147483648)}}var Es=0;function tl(){Es+=1}function nl(){Es=Math.max(0,Es-1)}function Mt(e={}){let r={...xg(),...e},t=e.memAvailableBytes??Gt(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Es,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function zx(e){e<=0||qx(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ol(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=Mt({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)zx(Math.min(r,n-Date.now())),o=Mt({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as hP}from"node:child_process";w();import{closeSync as eP,existsSync as sl,mkdirSync as rP,openSync as tP,readdirSync as Eg,readFileSync as nP,unlinkSync as al,writeFileSync as oP}from"node:fs";import ll from"node:path";import{mkdirSync as Xx}from"node:fs";import{tmpdir as Qx}from"node:os";import As from"node:path";function Zx(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Pg(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?As.resolve(e):Zx()?As.join(Qx(),"kynver","state","heavy-verification"):As.join(Qo(),"heavy-verification")}function Fn(){return As.join(Pg(),"slots")}function Ut(){let e=Fn();return Xx(e,{recursive:!0}),e}var Bt=120*6e4,il=1;function sP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Kn(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function $n(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?sP(e,il):il}function iP(e){return`slot-${e}`}function Ag(e,r=Fn()){return ll.join(r,`${e}.json`)}function cl(e){if(!sl(e))return null;try{let r=JSON.parse(nP(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 Is(e,r=Bt){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function aP(e,r){let t=cl(e);if(Is(t,r))try{al(e)}catch{}}function lP(e){return rP(e,{recursive:!0}),e}function Ns(e={}){let r=lP(e.slotsDir??Ut()),t=e.staleMs??Bt,n=0;for(let o of Eg(r)){if(!o.endsWith(".json"))continue;let s=ll.join(r,o),i=sl(s);aP(s,t),i&&!sl(s)&&(n+=1)}return n}function Ig(e={}){let r=e.slotsDir??Ut(),t=e.staleMs??Bt;Ns({slotsDir:r,staleMs:t});let n=[];for(let o of Eg(r)){if(!o.endsWith(".json"))continue;let s=cl(ll.join(r,o));s&&!Is(s,t)&&n.push(s)}return n}function Os(e={}){return Ig(e).length}function Wt(e,r={}){if(Kn())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:$n(),reason:null};let t=r.slotsDir??Ut(),n=r.staleMs??Bt,o=r.maxSlots??$n();Ns({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=iP(i),l=Ag(a,t),c=cl(l);if(c&&Is(c,n))try{al(l)}catch{}else if(c&&!Is(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=tP(l,"wx");oP(d,JSON.stringify(u,null,2),"utf8"),eP(d);let f=Os({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=Os({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function jn(e,r={}){if(!e)return;let t=Ag(e,r.slotsDir??Fn());try{al(t)}catch{}}function Vn(e,r={}){if(Kn())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:$n(),reason:null};let t=r.slotsDir??Ut(),n=r.staleMs??Bt,o=r.maxSlots??$n();Ns({slotsDir:t,staleMs:n});let s=Os({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 cP}from"node:child_process";function uP(e){e<=0||cP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ul(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=Wt(e,n);for(;!s.admitted&&Date.now()<o;)uP(Math.min(t,o-Date.now())),s=Wt(e,n);return s}var dP=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,pP=/\b(npm run build\b|next build\b)\b/i,mP=/\b(vercel (build|deploy|--prod))\b/i,fP=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function dl(e){let r=e.trim();return r?fP.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:mP.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:pP.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:dP.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 Ts="heavy_verification_token_required";function pl(e,r={}){let t=dl(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...Vn(e),slotId:null}};if(Kn())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Vn(e),slotId:null}};let n=r.waitMs??0,o=n>0?ul(e,n,r.pollMs):Wt(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Ts,commandClass:t.commandClass,reason:t.reason??o.reason??Ts,verificationGate:o}}be();import ml from"node:path";function gP(e){let r=ar(me()),t=ml.relative(r,ml.resolve(e));return t.length>0&&!t.startsWith("..")&&!ml.isAbsolute(t)}function Og(e){return gP(e)?(typeof process.getuid=="function"?process.getuid():null)===0?{ok:!1,reason:"Refusing build/install as root inside a harness worktree \u2014 generated caches become root-owned and block daemon cleanup. Run kynver daemon and workers as the harness owner (never sudo kynver)."}:{ok:!0}:{ok:!0}}function kP(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Ng(e,r){let t=hP(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 fl(e){let r=e.waitForAdmissionMs??6e5,t=pl(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Dt(),admission:Mt(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?ol(r):Mt();if(!s.admitted)return jn(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Dt(),admission:s,verificationGate:n,command:e.command};let i=Og(e.cwd);if(!i.ok)return jn(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:Dt(),admission:s,verificationGate:n,command:e.command};let a=Za({...process.env,...e.env}),l=Dt(),c=Hn();tl();try{let u;if(c){let d=Ja({cwd:e.cwd,command:["/usr/bin/env",...kP(a),"/bin/bash","-lc",e.command]});u=Ng(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=Ng([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{nl(),jn(o)}}var gl=["npm run typecheck","npm run test"];function Ds(e,r=gl,t={}){let n=[],o=!0;for(let s of r){let i=fl({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 Tg(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 Dg(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let A of i)s.push(Tg(String(A)));else typeof i=="string"&&s.push(Tg(i));let a=W(e.baseUrl?String(e.baseUrl):void 0),l=await K(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:${Ao(u.workerProvider,Ze)}`,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:Ie(l),body:JSON.stringify(g)}),h=await k.text(),S=null;try{S=JSON.parse(h)}catch{S=h}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:S},null,2)),process.exit(1)),console.log(JSON.stringify(S,null,2))}function RP(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=yP.resolve(r),n=Ds(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 Mg(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){RP(e);return}let n=b().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=W(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 bP from"node:path";w();function Ug(e){let r=bP.resolve(N(e.worktree?String(e.worktree):void 0,"worktree")),t=e.json===!0||e.json==="true"||e.emitJson===!0||e.emitJson==="true",n=[],o=e.command;if(Array.isArray(o))for(let a of o)n.push(String(a));else typeof o=="string"&&n.push(o);let s=Ds(r,n.length?n:gl,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
|
|
50
|
-
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as vP}from"node:fs";w();var SP=["create","add_version","update_metadata"],wP=["approval_guard","auth","network","server","tool_interruption"];function CP(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:vP(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
|
|
48
|
+
`)}function ws(e=hr){return tg(e)?Ga(ng(e,"utf8")):new Map}function sg(e,r={}){let t=r.filePath??hr,n=tg(t)?ng(t,"utf8"):"",o=Ga(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=Ga(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=yx(o);return l&&(gx(og.dirname(t),{recursive:!0}),hx(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var kr="watchdog:board-sweep",vx="*/5 * * * *",Sx=["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 ig(e){let r=e.storePath?.trim()||cr(),t=e.envFilePath?.trim()||hr,n=bx.join(Rx(),".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"},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:Sx,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:vx,dedupeKey:kr,callbackPath:o}}}async function Tt(e){let r=e.envFilePath??hr,t=[],n=Qe(),o=await Ss(n),s=ws(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:Cs(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Cs(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:Cs(n.storePath),summary:Cs(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 Er(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===kr);t.push({id:"watchdog_local",ok:!!a,summary:a?`watchdog entry in local store (${a.providerScheduleId})`:"watchdog entry not mirrored in local cron store",remediation:"Run `kynver cron install` (with API access) to register and mirror watchdog."}),t.push({id:"daemon_primary",ok:o.daemonPrimary,summary:o.daemonPrimary?"cron tick enabled with credentials (daemon-primary)":`cron primary=${o.primary}; tickEnabled=${o.env.tickEnabled}`,remediation:"Ensure KYNVER_CRON_TICK_ENABLED=1 and run `kynver daemon` (or enable the systemd user unit)."});let l=s.has("OPENCLAW_CRON_STORE_PATH")||s.has("OPENCLAW_CRON_SECRET")||s.has("OPENCLAW_CRON_FIRE_BASE_URL");return t.push({id:"legacy_openclaw_env",ok:!l,summary:l?"legacy OPENCLAW_CRON_* keys still present in ~/.kynver/.env":"no legacy OPENCLAW_CRON_* keys in env file",remediation:"Re-run `kynver cron install` to retire legacy aliases."}),{ok:t.every(u=>u.ok),checks:t}}O();qe();w();import{existsSync as vg}from"node:fs";import{createHash as wx}from"node:crypto";function ag(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:${wx("sha1").update(r).digest("hex").slice(0,16)}`}async function Ya(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function lg(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await Ya(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 cg(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 Ya(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??kr,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function ug(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await Ya(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 dg(e,r,t=kr){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 pg(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===kr&&r.provider==="qstash"&&r.status!=="cancelled")}function Cx(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===kr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function mg(e){return Cx(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`."}}import{randomBytes as _x}from"node:crypto";function xx(){return _x(32).toString("base64url")}function fg(e=hr){let r=ui();if(r)return{secret:r,generated:!1,source:"env"};let n=ws(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:xx(),generated:!0,source:"generated"}}import{realpathSync as Px}from"node:fs";function _s(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 Px.native(t)}catch{return t}}function gg(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}import{existsSync as Ax,mkdirSync as Ix,writeFileSync as Ox}from"node:fs";import{homedir as Nx}from"node:os";import yg from"node:path";import{spawnSync as kg}from"node:child_process";import{spawnSync as Ex}from"node:child_process";var Ja="1.5G";var Ln;function Hn(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:Ln!==void 0?Ln:process.platform!=="linux"?(Ln=!1,!1):(Ln=Ex("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,Ln)}function qa(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??Ja,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 za="kynver-cron-daemon.service";function Tx(){return yg.join(Nx(),".config","systemd","user")}function Dx(e){let r=gg(e.kynverBin?.trim()||_s());return["[Unit]","Description=Kynver AgentOS daemon (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=on-failure","RestartSec=10","","[Install]","WantedBy=default.target",""].join(`
|
|
49
|
+
`)}function Rg(e,r){if(!Hn())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=Tx(),n=yg.join(t,za),o=Dx(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."};Ix(t,{recursive:!0});let s=Ax(n);Ox(n,o,"utf8");let i=kg("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=kg("systemctl",["--user","enable","--now",za],{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 ${za}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}B();function bg(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return vg(t)?ee().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function xs(e={}){let r=e.execute!==!1,t=b(),n=Ye(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=fg(),i=ig({config:t,apiBaseUrl:n,agentOsId:o,cronSecret:s.secret,defaultDaemonRunId:e.runId?.trim()||t.defaultDaemonRunId,installSystemd:e.installSystemd===!0}),a=[...i.prerequisites],l={ok:!1,dryRun:!r,plan:i,secretGenerated:s.generated,configPath:Y(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=sg(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:Y(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=bg(u,e.runId);d&&(u.defaultDaemonRunId=d),ze(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 pu(i.storePath);l.storeInitialized=f.created||vg(i.storePath);let m=Z();if(m)try{let p=await xr(o,{baseUrl:n,apiKey:m});_r(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 cg(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=dg(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:ag(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await du(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await lg(n,o,m),S=pg(h),A=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],L=[];if(S.length)if(e.confirmQstashRemoval){let P=mg(h);if(!P.allowed)a.push(P.reason);else for(let v of S)await ug(n,o,v.id,m),L.push(v.id)}else a.push(`${S.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:S.map(P=>({id:P.id,provider:P.provider,status:P.status})),removed:L,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=bg({...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{U(p)}catch{a.push(`harness run ${p} not found`)}l.systemd=Rg({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:_s()},r)}}if(!e.skipTestFire&&a.length===0){let p=await ft({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 Tt({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 Mx=["deployment_provider","cron_secret","env_file","cron_store"];function Sg(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function Ux(e){let r=Sg(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Sg(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function Bx(e){if(!Ux(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Tt({config:e})).checks.filter(n=>Mx.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function Wx(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 Xa(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function wg(e){if(Xa(e.args.skipCron))return{action:"skipped"};let r=await Bx(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=Xa(e.args.installSystemd)||Xa(e.args["install-systemd"]),n=await xs({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 Wx(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function Hx(e,r){return e.filter(n=>n.repo===r&&!er.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Cg(e){mt();let r=b();(!Z()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await vo(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)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(ze({...r,chatUseClaudeOauth:!0}),r=b(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let n=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||Ce()?.repo||"";n||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let o=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";o||(o=Hx(ee(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=vs({...e,repo:n,name:"agent"}).runId),await wg({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${Lx.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${n}`),console.log(` run: ${o}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let s={...e,run:o,agentOsId:t};if(Rs(s)){await bs(s,Fx(o,t,e));return}await ys(s)}function Fx(e,r,t){let n=["daemon","--run",e,"--agent-os-id",r];return typeof t.intervalMs=="string"&&t.intervalMs.trim()&&n.push("--interval-ms",t.intervalMs.trim()),(t.execute===!1||t.execute==="false")&&n.push("--execute","false"),typeof t.stallMs=="string"&&t.stallMs.trim()&&n.push("--stall-ms",t.stallMs.trim()),n}B();B();G();import{existsSync as $x,rmSync as Kx}from"node:fs";import Qa from"node:path";function jx(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function Vx(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function Gx(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=[...Vx(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Qa.resolve(n.worktreePath),i=[];for(let c of o){let u=jx(c),d=Qa.resolve(s,u);if(!d.startsWith(s+Qa.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!$x(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};Kx(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])],V(n.runId,n);let l=T(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function _g(e){let r=Gx(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import yP from"node:path";oo();var Yx=/--max-old-space-size=(\d+)/;function Jx(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Za(){return Jx(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function el(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(Yx.test(t))return r;let o=`--max-old-space-size=${Za()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function Dt(e=Za()){return`--max-old-space-size=${e}`}O();import{spawnSync as qx}from"node:child_process";oo();function Ps(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Pg(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Ps(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Ps(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Ps(e.perWorkerMemBytes,1610612736),reserveBytes:t??Ps(e.memReserveBytes,2147483648)}}var Es=0;function nl(){Es+=1}function ol(){Es=Math.max(0,Es-1)}function Mt(e={}){let r={...Pg(),...e},t=e.memAvailableBytes??Gt(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Es,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function zx(e){e<=0||qx(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function sl(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=Mt({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)zx(Math.min(r,n-Date.now())),o=Mt({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as hP}from"node:child_process";w();import{closeSync as eP,existsSync as il,mkdirSync as rP,openSync as tP,readdirSync as Ag,readFileSync as nP,unlinkSync as ll,writeFileSync as oP}from"node:fs";import cl from"node:path";import{mkdirSync as Xx}from"node:fs";import{tmpdir as Qx}from"node:os";import As from"node:path";function Zx(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Eg(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?As.resolve(e):Zx()?As.join(Qx(),"kynver","state","heavy-verification"):As.join(Qo(),"heavy-verification")}function Fn(){return As.join(Eg(),"slots")}function Ut(){let e=Fn();return Xx(e,{recursive:!0}),e}var Bt=120*6e4,al=1;function sP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Kn(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function $n(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?sP(e,al):al}function iP(e){return`slot-${e}`}function Ig(e,r=Fn()){return cl.join(r,`${e}.json`)}function ul(e){if(!il(e))return null;try{let r=JSON.parse(nP(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 Is(e,r=Bt){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function aP(e,r){let t=ul(e);if(Is(t,r))try{ll(e)}catch{}}function lP(e){return rP(e,{recursive:!0}),e}function Ns(e={}){let r=lP(e.slotsDir??Ut()),t=e.staleMs??Bt,n=0;for(let o of Ag(r)){if(!o.endsWith(".json"))continue;let s=cl.join(r,o),i=il(s);aP(s,t),i&&!il(s)&&(n+=1)}return n}function Og(e={}){let r=e.slotsDir??Ut(),t=e.staleMs??Bt;Ns({slotsDir:r,staleMs:t});let n=[];for(let o of Ag(r)){if(!o.endsWith(".json"))continue;let s=ul(cl.join(r,o));s&&!Is(s,t)&&n.push(s)}return n}function Os(e={}){return Og(e).length}function Wt(e,r={}){if(Kn())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:$n(),reason:null};let t=r.slotsDir??Ut(),n=r.staleMs??Bt,o=r.maxSlots??$n();Ns({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=iP(i),l=Ig(a,t),c=ul(l);if(c&&Is(c,n))try{ll(l)}catch{}else if(c&&!Is(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=tP(l,"wx");oP(d,JSON.stringify(u,null,2),"utf8"),eP(d);let f=Os({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=Os({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function jn(e,r={}){if(!e)return;let t=Ig(e,r.slotsDir??Fn());try{ll(t)}catch{}}function Vn(e,r={}){if(Kn())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:$n(),reason:null};let t=r.slotsDir??Ut(),n=r.staleMs??Bt,o=r.maxSlots??$n();Ns({slotsDir:t,staleMs:n});let s=Os({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 cP}from"node:child_process";function uP(e){e<=0||cP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function dl(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=Wt(e,n);for(;!s.admitted&&Date.now()<o;)uP(Math.min(t,o-Date.now())),s=Wt(e,n);return s}var dP=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,pP=/\b(npm run build\b|next build\b)\b/i,mP=/\b(vercel (build|deploy|--prod))\b/i,fP=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function pl(e){let r=e.trim();return r?fP.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:mP.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:pP.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:dP.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 Ts="heavy_verification_token_required";function ml(e,r={}){let t=pl(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...Vn(e),slotId:null}};if(Kn())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...Vn(e),slotId:null}};let n=r.waitMs??0,o=n>0?dl(e,n,r.pollMs):Wt(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:Ts,commandClass:t.commandClass,reason:t.reason??o.reason??Ts,verificationGate:o}}be();import fl from"node:path";function gP(e){let r=ar(me()),t=fl.relative(r,fl.resolve(e));return t.length>0&&!t.startsWith("..")&&!fl.isAbsolute(t)}function Ng(e){return gP(e)?(typeof process.getuid=="function"?process.getuid():null)===0?{ok:!1,reason:"Refusing build/install as root inside a harness worktree \u2014 generated caches become root-owned and block daemon cleanup. Run kynver daemon and workers as the harness owner (never sudo kynver)."}:{ok:!0}:{ok:!0}}function kP(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Tg(e,r){let t=hP(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 gl(e){let r=e.waitForAdmissionMs??6e5,t=ml(e.command,{waitMs:r}),n=t.verificationGate;if(!t.allowed)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason,admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Dt(),admission:Mt(),verificationGate:n,gateOutcome:t.outcome,command:e.command};let o=n.slotId,s=r>0?sl(r):Mt();if(!s.admitted)return jn(o),{ok:!1,exitCode:1,stdout:"",stderr:s.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Dt(),admission:s,verificationGate:n,command:e.command};let i=Ng(e.cwd);if(!i.ok)return jn(o),{ok:!1,exitCode:1,stdout:"",stderr:i.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:Dt(),admission:s,verificationGate:n,command:e.command};let a=el({...process.env,...e.env}),l=Dt(),c=Hn();nl();try{let u;if(c){let d=qa({cwd:e.cwd,command:["/usr/bin/env",...kP(a),"/bin/bash","-lc",e.command]});u=Tg(d,{cwd:e.cwd,env:a,timeoutMs:e.timeoutMs})}else u=Tg([e.command],{cwd:e.cwd,env:a,shell:!0,timeoutMs:e.timeoutMs});return{ok:u.exitCode===0,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,admitted:!0,wrappedWithSystemd:c,nodeOptionsFlag:l,admission:s,verificationGate:n,gateOutcome:t.outcome,command:e.command}}finally{ol(),jn(o)}}var hl=["npm run typecheck","npm run test"];function Ds(e,r=hl,t={}){let n=[],o=!0;for(let s of r){let i=gl({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 Dg(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 Mg(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let A of i)s.push(Dg(String(A)));else typeof i=="string"&&s.push(Dg(i));let a=W(e.baseUrl?String(e.baseUrl):void 0),l=await K(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:${Ao(u.workerProvider,Ze)}`,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:Ie(l),body:JSON.stringify(g)}),h=await k.text(),S=null;try{S=JSON.parse(h)}catch{S=h}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:S},null,2)),process.exit(1)),console.log(JSON.stringify(S,null,2))}function RP(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=yP.resolve(r),n=Ds(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 Ug(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){RP(e);return}let n=b().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=W(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 bP from"node:path";w();function Bg(e){let r=bP.resolve(N(e.worktree?String(e.worktree):void 0,"worktree")),t=e.json===!0||e.json==="true"||e.emitJson===!0||e.emitJson==="true",n=[],o=e.command;if(Array.isArray(o))for(let a of o)n.push(String(a));else typeof o=="string"&&n.push(o);let s=Ds(r,n.length?n:hl,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
|
|
50
|
+
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as vP}from"node:fs";w();var SP=["create","add_version","update_metadata"],wP=["approval_guard","auth","network","server","tool_interruption"];function CP(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:vP(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 Wg(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!SP.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=b(),o=N(e.slug?String(e.slug):n.agentOsSlug,"slug (or agentOsSlug in ~/.kynver/config.json)"),s=N(e.title?String(e.title):void 0,"title"),{body:i,bodyPathHint:a}=CP(e);a&&Cn(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:_P(e)},c=await xn(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function _P(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!wP.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 Lg(){let e=Ct();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Hg(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await ta({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function Fg(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=Ba({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)}function yr(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 Ms(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
51
|
`),diagnostic:yr(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:yr(e)}}import TP from"node:path";B();G();w();G();w();function Fg(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Ii(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};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>at?{health:"stale",reason:`heartbeat older than ${Math.floor(at/1e3)}s`}:t.alive&&r.pid&&!$(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"}}be();w();import{existsSync as $g,mkdirSync as IP,readdirSync as OP,unlinkSync as NP}from"node:fs";import hl from"node:path";function Kg(){let{harnessRoot:e}=Xr(),r=hl.join(e,"monitors");return IP(r,{recursive:!0}),r}function Lt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function kl(e){return hl.join(Kg(),`${e}.json`)}function Ht(e){return _(kl(e),void 0)}function Ft(e){le(kl(e.monitorId),e)}function jg(e){let r=kl(e);return $g(r)?(NP(r),!0):!1}function Vg(){let e=Kg();if(!$g(e))return[];let r=[];for(let t of OP(e)){if(!t.endsWith(".json"))continue;let n=_(hl.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?$(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}G();function yl(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"),Ho(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"),lt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=re(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}}O();async function Gg(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=W(e.baseUrl);try{let o=await K(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await q(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}function Yg(e,r){return _(TP.join(x(e),"workers",R(r),"worker.json"),void 0)}function Jg(e,r){let t=U(e),n=Object.keys(t.workers||{});if(!r)return n;let o=R(r);return n.filter(s=>R(s)===o)}function qg(e,r){let t=U(e.runId),n=T(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=Fg({worker:e,status:n,taskLease:o}),i=yl({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 Gn(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=U(r),s=Jg(r,t),i=[];for(let p of s){let g=Yg(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 Gg({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>qg(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Uo(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 bt({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 zg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Jg(r,t),o=[];for(let s of n){let i=Yg(r,s);i&&o.push(qg(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Rl(){return Vg()}function Xg(e){let r=String(e.run||"");N(r,"--run");let t=Lt(r,e.name?String(e.name):void 0),n=Ht(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&$(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),Ft(n),jg(t),{monitorId:t,stopped:!0,pid:n.pid}}async function bl(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=fe(r,t),o=U(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=yl({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 bt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var DP=5e3,MP=360*60*1e3;async function Qg(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):DP,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):MP,o=Date.now();for(;Date.now()-o<=n;){let s=r?Ht(r):void 0;if(s?.stoppedAt)break;let i=await Gn({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Ms({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(),Ft(s));break}Rr(t)}}w();be();import{spawn as UP}from"node:child_process";import{closeSync as Zg,existsSync as BP,openSync as WP}from"node:fs";import eh from"node:path";import{fileURLToPath as LP}from"node:url";function HP(){return eh.join(LP(new URL(".",import.meta.url)),"cli.js")}function rh(e){let r=e.cliPath??HP();if(!BP(r))return;let t=Lt(e.runId,e.workerName),{harnessRoot:n}=Xr(),o=eh.join(n,"monitors",`${t}.log`),s;try{s=WP(o,"a")}catch{s=void 0}let i=e.nodeExecutable??process.execPath,a=e.pollMs??5e3,l=[r,"monitor","run-loop","--run",e.runId,"--monitor-id",t,"--poll-ms",String(a),"--auto-complete","true","--renew-leases","true"];e.workerName&&l.push("--name",e.workerName),e.agentOsId&&l.push("--agent-os-id",e.agentOsId),e.baseUrl&&l.push("--base-url",e.baseUrl),e.secret&&l.push("--secret",e.secret);let c=["ignore",s??"ignore",s??"ignore"];try{let u=UP(i,l,ae({detached:!0,stdio:c,env:process.env}));s!==void 0&&Zg(s),u.unref();let d={monitorId:t,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:u.pid,startedAt:new Date().toISOString(),pollMs:a,logPath:o};return Ft(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{Zg(s)}catch{}return}}w();async function th(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Lt(r,t),o=Ht(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=rh({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 nh(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Gn({...e,autoComplete:!1}):zg(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Rl()},null,2))}function oh(e){console.log(JSON.stringify(Xg(e),null,2))}function sh(){console.log(JSON.stringify({monitors:Rl()},null,2))}async function ih(e){await Qg(e)}async function ah(e){let r=await Gn(e);console.log(JSON.stringify(r,null,2))}import{existsSync as FP,readFileSync as $P}from"node:fs";import{dirname as vl,join as ch}from"node:path";import{fileURLToPath as lh}from"node:url";function KP(e){let r=vl(lh(e));for(let t=0;t<6;t+=1){if(FP(ch(r,"package.json")))return r;let n=vl(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${vl(lh(e))}`)}function uh(e=import.meta.url){let r=ch(KP(e),"package.json"),t=JSON.parse($P(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Us=uh();function jP(e){return e.some(r=>r==="--version"||r==="-v")}function VP(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function dh(e,r=import.meta.url,t){return jP(e)?(VP(uh(r),t),!0):!1}function GP(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 YP(e={}){let[r,t]=await Promise.all([hs(),Promise.resolve(vf({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Us;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:GP(r),repo:t,self:n}}async function ph(e={}){let r=await YP(e);return wf(r)}function mh(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 JP(e){let r=e.trim();return r?ja().find(n=>n.name===r&&n.status!=="completed")??null:null}function fh(e){let r=String(N(String(e.name||""),"--name")),t=JP(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}B();G();w();O();import qP from"node:path";function Yn(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function zP(e){let r=W(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 ee())for(let l of Object.keys(a.workers??{})){let c=qP.join(x(a.id),"workers",R(l),"worker.json"),u=_(c,void 0);if(!u){s.push(Yn(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(Yn(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Yn(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(Yn(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Yn(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 K(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 q(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 gh(e){let r=await zP(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)}qe();O();import XP from"node:path";import{homedir as QP}from"node:os";var Sl=XP.join(QP(),".kynver","config.json");function wl(e){let r=b(),t=Ce({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(Sl),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:Y(Sl),resolved:In(t),config:ut(r)};let n=Hp(t.repo,r),o=In({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(Sl),resolved:o,config:ut(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function hh(e=!1){let r=wl();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 kh(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`)."}}import Ch from"node:path";qe();O();import{accessSync as ZP,constants as eE,existsSync as Cl,readFileSync as rE}from"node:fs";import{homedir as Bs}from"node:os";import Ws from"node:path";import{spawnSync as tE}from"node:child_process";be();function yh(e,r){try{let t=tE(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 Rh(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function nE(e){if(!Cl(e))return!1;try{return ZP(e,eE.W_OK),!0}catch{return!1}}var bh={packageVersion:()=>Us,commandOnPath:e=>yh(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>yh(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Ws.join(Bs(),".kynver","config.json"),credentialsFilePath:()=>Ws.join(Bs(),".kynver","credentials"),readCredentials:()=>{let e=Ws.join(Bs(),".kynver","credentials");if(!Cl(e))return{hasApiKey:!1};try{let r=JSON.parse(rE(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:Rh(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:Rh(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:So(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>me(),legacyOpenclawHarnessRoot:()=>Ws.join(Bs(),".openclaw","harness"),pathExists:e=>Cl(e),pathWritable:e=>nE(e)};function vh(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function oE(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Sh(e){return!!e.openclawCronStorePath}function sE(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function wh(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(sE(e,r)&&!vh(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(oE(e,r)&&!vh(e,r)){if(Sh(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(Sh(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}function iE(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 aE(e){let r=e.packageVersion(),t=e.commandOnPath("kynver"),n=t.ok&&t.stdout.length>0,o=n?t.stdout.split(/\r?\n/)[0]?.trim():void 0,s=o?Y(o):void 0,i=[{id:"cli_running_version",label:"Running @kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${r}`,details:{version:r}},{id:"cli_on_path",label:"kynver executable on PATH",status:n?"pass":"warn",summary:n?`Found ${s}`:"kynver not found on PATH (invoked via node/npx?)",remediation:n?void 0:"Install globally (`npm i -g @kynver-app/runtime`) or invoke via `npx @kynver-app/runtime`.",details:{path:s}}];if(n&&o){let a=e.kynverVersion(o),l=a.stdout.replace(/^kynver\s+/i,"").trim()||void 0,c=a.ok&&(!l||l===r);i.push({id:"cli_installed_version",label:"Installed kynver CLI version matches running package",status:c?"pass":"warn",summary:a.ok&&l?c?`Installed ${l}`:`Installed ${l} differs from running ${r}`:a.error?`Could not read installed version (${a.error})`:a.stderr||"Could not read installed version",remediation:c?void 0:"Reinstall or rebuild @kynver-app/runtime so PATH kynver matches the harness worktree version.",details:{installedVersion:l,runningVersion:r,path:s}})}return{id:"cli_package",label:"CLI / package",checks:i}}function lE(e){let r=e.configFilePath(),t=Y(r),n=e.pathExists(r),o=e.loadConfig(),s=[{id:"config_file",label:"~/.kynver/config.json present",status:n?"pass":"fail",summary:n?`Found ${t}`:`Missing ${t}`,remediation:n?void 0:"Run `kynver setup --api-base-url <url> --agent-os-id <id> --repo <path>`.",details:{configPath:t}}];if(n){let i=o.apiBaseUrl?.trim(),a=o.agentOsId?.trim(),l=Ce({config:o}),c=l?In(l):null,u=kh(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?pe(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function cE(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=Y(s),a=o.kynverRunnerTokenPrefix,l=n.runnerTokenPrefix,c=n.runnerTokenAgentOsId,u=!!l&&(!t||!c||c===t),d=!!a?.startsWith("krc1.")||u&&l?.startsWith("krc1.");return{id:"runner_token",label:"Runner token readiness",checks:[{id:"runner_token_scoped",label:"Scoped runner token (krc1.*) ready",status:d?"pass":"fail",summary:d?a?"KYNVER_RUNNER_TOKEN is set (scoped prefix shown)":`Saved scoped token for agentOsId ${c??t??"(unknown)"}`:"No scoped runner token for the configured AgentOS workspace",remediation:d?void 0:"Run `kynver login` then `kynver runner credential --agent-os-id <id>` (or `kynver setup` with API key).",details:{source:a?"env":l?"credentials":"none",tokenPrefix:a??(u?l:void 0),agentOsId:t??c??null,credentialsPath:i}},{id:"runner_token_agent_os_match",label:"Saved runner token matches configured agentOsId",status:!l||!t||!c||c===t?"pass":"warn",summary:!l||!c?"No saved token agentOsId to compare":t?c===t?"Saved token scoped to configured agentOsId":`Saved token is for ${c}, config expects ${t}`:"Config agentOsId unset \u2014 token scope not validated against config",remediation:l&&t&&c&&c!==t?"`kynver runner credential --agent-os-id <configured-id>` to mint a workspace-bound token.":void 0,details:{configuredAgentOsId:t??null,savedAgentOsId:c??null}},{id:"runner_api_key_for_refresh",label:"API key available for token refresh",status:n.hasApiKey||process.env.KYNVER_API_KEY?.trim()?"pass":"warn",summary:n.hasApiKey||process.env.KYNVER_API_KEY?"KYNVER API key present for runner credential mint/refresh":"No API key \u2014 401 callback recovery cannot auto-mint a replacement token",remediation:n.hasApiKey||process.env.KYNVER_API_KEY?void 0:"Run `kynver login --api-key \u2026`.",details:{credentialsPath:i,hasApiKey:n.hasApiKey||!!process.env.KYNVER_API_KEY}}]}}function uE(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 dE(e){let r=e.harnessRoot(),t=Ch.join(r,"runs"),n=Ch.join(r,"worktrees"),o=pe(r),s=pe(t),i=pe(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 pE(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 mE(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=pe(o),a=pe(s),l=r.opusHarnessRoot?pe(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},wh(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 _h(e=bh){let r=[aE(e),lE(e),cE(e),uE(e),dE(e),pE(e),mE(e)],t=iE(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 xh(e={}){let r;if(e.remediateDefaultRepo===!0){let n=wl();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=_h();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function Ph(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=W(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await K(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 Po(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))}qe();var _l=["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"],xl=["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 fE(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 Pl(e,r=fE()){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:[..._l],runnerSteps:[...xl]}}function Eh(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import gE from"node:path";import{homedir as hE}from"node:os";var Ah=gE.join(hE(),".kynver","config.json");function Ih(e=!1){let r=b(),t=Pl(r),n={...t,configPath:Y(Ah),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
53
|
-
`),console.log("Deployment (Vercel):");for(let o of
|
|
54
|
-
User runner:`);for(let o of
|
|
52
|
+
`),diagnostic:yr(e)}}import TP from"node:path";B();G();w();G();w();function $g(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Oi(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};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>at?{health:"stale",reason:`heartbeat older than ${Math.floor(at/1e3)}s`}:t.alive&&r.pid&&!$(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"}}be();w();import{existsSync as Kg,mkdirSync as IP,readdirSync as OP,unlinkSync as NP}from"node:fs";import kl from"node:path";function jg(){let{harnessRoot:e}=Xr(),r=kl.join(e,"monitors");return IP(r,{recursive:!0}),r}function Lt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function yl(e){return kl.join(jg(),`${e}.json`)}function Ht(e){return _(yl(e),void 0)}function Ft(e){le(yl(e.monitorId),e)}function Vg(e){let r=yl(e);return Kg(r)?(NP(r),!0):!1}function Gg(){let e=jg();if(!Kg(e))return[];let r=[];for(let t of OP(e)){if(!t.endsWith(".json"))continue;let n=_(kl.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?$(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}G();function Rl(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"),Ho(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"),lt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=re(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}}O();async function Yg(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=W(e.baseUrl);try{let o=await K(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await q(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}function Jg(e,r){return _(TP.join(x(e),"workers",R(r),"worker.json"),void 0)}function qg(e,r){let t=U(e),n=Object.keys(t.workers||{});if(!r)return n;let o=R(r);return n.filter(s=>R(s)===o)}function zg(e,r){let t=U(e.runId),n=T(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=$g({worker:e,status:n,taskLease:o}),i=Rl({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 Gn(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=U(r),s=qg(r,t),i=[];for(let p of s){let g=Jg(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 Yg({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>zg(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await Uo(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 bt({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 Xg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=qg(r,t),o=[];for(let s of n){let i=Jg(r,s);i&&o.push(zg(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function bl(){return Gg()}function Qg(e){let r=String(e.run||"");N(r,"--run");let t=Lt(r,e.name?String(e.name):void 0),n=Ht(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&$(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),Ft(n),Vg(t),{monitorId:t,stopped:!0,pid:n.pid}}async function vl(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=fe(r,t),o=U(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=Rl({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 bt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var DP=5e3,MP=360*60*1e3;async function Zg(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):DP,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):MP,o=Date.now();for(;Date.now()-o<=n;){let s=r?Ht(r):void 0;if(s?.stoppedAt)break;let i=await Gn({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Ms({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(),Ft(s));break}Rr(t)}}w();be();import{spawn as UP}from"node:child_process";import{closeSync as eh,existsSync as BP,openSync as WP}from"node:fs";import rh from"node:path";import{fileURLToPath as LP}from"node:url";function HP(){return rh.join(LP(new URL(".",import.meta.url)),"cli.js")}function th(e){let r=e.cliPath??HP();if(!BP(r))return;let t=Lt(e.runId,e.workerName),{harnessRoot:n}=Xr(),o=rh.join(n,"monitors",`${t}.log`),s;try{s=WP(o,"a")}catch{s=void 0}let i=e.nodeExecutable??process.execPath,a=e.pollMs??5e3,l=[r,"monitor","run-loop","--run",e.runId,"--monitor-id",t,"--poll-ms",String(a),"--auto-complete","true","--renew-leases","true"];e.workerName&&l.push("--name",e.workerName),e.agentOsId&&l.push("--agent-os-id",e.agentOsId),e.baseUrl&&l.push("--base-url",e.baseUrl),e.secret&&l.push("--secret",e.secret);let c=["ignore",s??"ignore",s??"ignore"];try{let u=UP(i,l,ae({detached:!0,stdio:c,env:process.env}));s!==void 0&&eh(s),u.unref();let d={monitorId:t,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:u.pid,startedAt:new Date().toISOString(),pollMs:a,logPath:o};return Ft(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{eh(s)}catch{}return}}w();async function nh(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Lt(r,t),o=Ht(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=th({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 oh(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Gn({...e,autoComplete:!1}):Xg(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:bl()},null,2))}function sh(e){console.log(JSON.stringify(Qg(e),null,2))}function ih(){console.log(JSON.stringify({monitors:bl()},null,2))}async function ah(e){await Zg(e)}async function lh(e){let r=await Gn(e);console.log(JSON.stringify(r,null,2))}import{existsSync as FP,readFileSync as $P}from"node:fs";import{dirname as Sl,join as uh}from"node:path";import{fileURLToPath as ch}from"node:url";function KP(e){let r=Sl(ch(e));for(let t=0;t<6;t+=1){if(FP(uh(r,"package.json")))return r;let n=Sl(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Sl(ch(e))}`)}function dh(e=import.meta.url){let r=uh(KP(e),"package.json"),t=JSON.parse($P(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Us=dh();function jP(e){return e.some(r=>r==="--version"||r==="-v")}function VP(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function ph(e,r=import.meta.url,t){return jP(e)?(VP(dh(r),t),!0):!1}function GP(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 YP(e={}){let[r,t]=await Promise.all([hs(),Promise.resolve(Sf({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Us;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:GP(r),repo:t,self:n}}async function mh(e={}){let r=await YP(e);return Cf(r)}function fh(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 JP(e){let r=e.trim();return r?Va().find(n=>n.name===r&&n.status!=="completed")??null:null}function gh(e){let r=String(N(String(e.name||""),"--name")),t=JP(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}B();G();w();O();import qP from"node:path";function Yn(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function zP(e){let r=W(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 ee())for(let l of Object.keys(a.workers??{})){let c=qP.join(x(a.id),"workers",R(l),"worker.json"),u=_(c,void 0);if(!u){s.push(Yn(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(Yn(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Yn(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(Yn(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Yn(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 K(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 q(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 hh(e){let r=await zP(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)}qe();O();import XP from"node:path";import{homedir as QP}from"node:os";var wl=XP.join(QP(),".kynver","config.json");function Cl(e){let r=b(),t=Ce({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(wl),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:Y(wl),resolved:In(t),config:ut(r)};let n=Fp(t.repo,r),o=In({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(wl),resolved:o,config:ut(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function kh(e=!1){let r=Cl();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 yh(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`)."}}import _h from"node:path";qe();O();import{accessSync as ZP,constants as eE,existsSync as _l,readFileSync as rE}from"node:fs";import{homedir as Bs}from"node:os";import Ws from"node:path";import{spawnSync as tE}from"node:child_process";be();function Rh(e,r){try{let t=tE(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 bh(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function nE(e){if(!_l(e))return!1;try{return ZP(e,eE.W_OK),!0}catch{return!1}}var vh={packageVersion:()=>Us,commandOnPath:e=>Rh(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Rh(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Ws.join(Bs(),".kynver","config.json"),credentialsFilePath:()=>Ws.join(Bs(),".kynver","credentials"),readCredentials:()=>{let e=Ws.join(Bs(),".kynver","credentials");if(!_l(e))return{hasApiKey:!1};try{let r=JSON.parse(rE(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:bh(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:bh(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:So(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>me(),legacyOpenclawHarnessRoot:()=>Ws.join(Bs(),".openclaw","harness"),pathExists:e=>_l(e),pathWritable:e=>nE(e)};function Sh(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function oE(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function wh(e){return!!e.openclawCronStorePath}function sE(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Ch(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(sE(e,r)&&!Sh(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(oE(e,r)&&!Sh(e,r)){if(wh(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(wh(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}function iE(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 aE(e){let r=e.packageVersion(),t=e.commandOnPath("kynver"),n=t.ok&&t.stdout.length>0,o=n?t.stdout.split(/\r?\n/)[0]?.trim():void 0,s=o?Y(o):void 0,i=[{id:"cli_running_version",label:"Running @kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${r}`,details:{version:r}},{id:"cli_on_path",label:"kynver executable on PATH",status:n?"pass":"warn",summary:n?`Found ${s}`:"kynver not found on PATH (invoked via node/npx?)",remediation:n?void 0:"Install globally (`npm i -g @kynver-app/runtime`) or invoke via `npx @kynver-app/runtime`.",details:{path:s}}];if(n&&o){let a=e.kynverVersion(o),l=a.stdout.replace(/^kynver\s+/i,"").trim()||void 0,c=a.ok&&(!l||l===r);i.push({id:"cli_installed_version",label:"Installed kynver CLI version matches running package",status:c?"pass":"warn",summary:a.ok&&l?c?`Installed ${l}`:`Installed ${l} differs from running ${r}`:a.error?`Could not read installed version (${a.error})`:a.stderr||"Could not read installed version",remediation:c?void 0:"Reinstall or rebuild @kynver-app/runtime so PATH kynver matches the harness worktree version.",details:{installedVersion:l,runningVersion:r,path:s}})}return{id:"cli_package",label:"CLI / package",checks:i}}function lE(e){let r=e.configFilePath(),t=Y(r),n=e.pathExists(r),o=e.loadConfig(),s=[{id:"config_file",label:"~/.kynver/config.json present",status:n?"pass":"fail",summary:n?`Found ${t}`:`Missing ${t}`,remediation:n?void 0:"Run `kynver setup --api-base-url <url> --agent-os-id <id> --repo <path>`.",details:{configPath:t}}];if(n){let i=o.apiBaseUrl?.trim(),a=o.agentOsId?.trim(),l=Ce({config:o}),c=l?In(l):null,u=yh(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?pe(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function cE(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=Y(s),a=o.kynverRunnerTokenPrefix,l=n.runnerTokenPrefix,c=n.runnerTokenAgentOsId,u=!!l&&(!t||!c||c===t),d=!!a?.startsWith("krc1.")||u&&l?.startsWith("krc1.");return{id:"runner_token",label:"Runner token readiness",checks:[{id:"runner_token_scoped",label:"Scoped runner token (krc1.*) ready",status:d?"pass":"fail",summary:d?a?"KYNVER_RUNNER_TOKEN is set (scoped prefix shown)":`Saved scoped token for agentOsId ${c??t??"(unknown)"}`:"No scoped runner token for the configured AgentOS workspace",remediation:d?void 0:"Run `kynver login` then `kynver runner credential --agent-os-id <id>` (or `kynver setup` with API key).",details:{source:a?"env":l?"credentials":"none",tokenPrefix:a??(u?l:void 0),agentOsId:t??c??null,credentialsPath:i}},{id:"runner_token_agent_os_match",label:"Saved runner token matches configured agentOsId",status:!l||!t||!c||c===t?"pass":"warn",summary:!l||!c?"No saved token agentOsId to compare":t?c===t?"Saved token scoped to configured agentOsId":`Saved token is for ${c}, config expects ${t}`:"Config agentOsId unset \u2014 token scope not validated against config",remediation:l&&t&&c&&c!==t?"`kynver runner credential --agent-os-id <configured-id>` to mint a workspace-bound token.":void 0,details:{configuredAgentOsId:t??null,savedAgentOsId:c??null}},{id:"runner_api_key_for_refresh",label:"API key available for token refresh",status:n.hasApiKey||process.env.KYNVER_API_KEY?.trim()?"pass":"warn",summary:n.hasApiKey||process.env.KYNVER_API_KEY?"KYNVER API key present for runner credential mint/refresh":"No API key \u2014 401 callback recovery cannot auto-mint a replacement token",remediation:n.hasApiKey||process.env.KYNVER_API_KEY?void 0:"Run `kynver login --api-key \u2026`.",details:{credentialsPath:i,hasApiKey:n.hasApiKey||!!process.env.KYNVER_API_KEY}}]}}function uE(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 dE(e){let r=e.harnessRoot(),t=_h.join(r,"runs"),n=_h.join(r,"worktrees"),o=pe(r),s=pe(t),i=pe(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 pE(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 mE(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=pe(o),a=pe(s),l=r.opusHarnessRoot?pe(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},Ch(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 xh(e=vh){let r=[aE(e),lE(e),cE(e),uE(e),dE(e),pE(e),mE(e)],t=iE(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 Ph(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Cl();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=xh();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function Eh(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=W(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await K(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 Po(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))}qe();var xl=["Vercel/hosted: set KYNVER_SCHEDULER_PROVIDER=qstash","Vercel/hosted: ensure QSTASH_TOKEN (and QStash signing keys) are configured","Vercel/hosted: unset OPENCLAW_CRON_STORE_PATH if present"],Pl=["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 fE(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 El(e,r=fE()){let t=[];return r.kynverSchedulerProvider==="openclaw-cron"&&t.push("Runner still has KYNVER_SCHEDULER_PROVIDER=openclaw-cron"),r.kynverCronStorePath&&r.kynverSchedulerProvider!=="kynver-cron"&&t.push("Runner has KYNVER_CRON_STORE_PATH but KYNVER_SCHEDULER_PROVIDER is not kynver-cron \u2014 use `kynver daemon` cron tick or unset the store for QStash-only runners"),r.openclawCronStorePath&&!r.kynverCronStorePath&&t.push("Runner still has legacy OPENCLAW_CRON_STORE_PATH (prefer KYNVER_CRON_STORE_PATH)"),e.deploymentSchedulerProvider==="openclaw-cron"&&t.push("~/.kynver/config.json deploymentSchedulerProvider is still openclaw-cron"),{ok:t.length===0,blockers:t,runnerEnv:r,deploymentSchedulerProvider:e.deploymentSchedulerProvider??null,deploymentSteps:[...xl],runnerSteps:[...Pl]}}function Ah(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import gE from"node:path";import{homedir as hE}from"node:os";var Ih=gE.join(hE(),".kynver","config.json");function Oh(e=!1){let r=b(),t=El(r),n={...t,configPath:Y(Ih),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
53
|
+
`),console.log("Deployment (Vercel):");for(let o of xl)console.log(` - ${o}`);console.log(`
|
|
54
|
+
User runner:`);for(let o of Pl)console.log(` - ${o}`);if(console.log(`
|
|
55
55
|
This host:`),console.log(` config: ${n.configPath}`),console.log(` deploymentSchedulerProvider: ${t.deploymentSchedulerProvider??"(unset)"}`),console.log(` KYNVER_SCHEDULER_PROVIDER: ${t.runnerEnv.kynverSchedulerProvider??"(unset)"}`),console.log(` KYNVER_CRON_STORE_PATH: ${t.runnerEnv.kynverCronStorePath??"(unset)"}`),console.log(` OPENCLAW_CRON_STORE_PATH (legacy): ${t.runnerEnv.openclawCronStorePath??"(unset)"}`),t.blockers.length){console.log(`
|
|
56
56
|
Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
|
|
57
|
-
No local blockers detected on this runner.`)}function
|
|
57
|
+
No local blockers detected on this runner.`)}function Nh(e=!1){let r=b(),t=El(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=Ah(r);ze(n);let o={ok:!0,attested:!0,configPath:Y(Ih),deploymentSchedulerProvider:"qstash",config:ut(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 Th(e){let r=await Ss();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 Dh(e){let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await ft({agentOsIdFilter:r??null});if(e.json===!0){console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({event:"kynver_cron_tick",...t}))}O();function kE(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 Mh(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await xs({execute:r?!1:kE(e.execute,!0),json:e.json===!0,installSystemd:e.installSystemd===!0||e["install-systemd"]===!0,confirmQstashRemoval:e.confirmQstashRemoval===!0||e["confirm-qstash-removal"]===!0,skipWatchdog:e.skipWatchdog===!0||e["skip-watchdog"]===!0,skipTestFire:e.skipTestFire===!0||e["skip-test-fire"]===!0,agentOsId:typeof e.agentOsId=="string"?e.agentOsId:void 0,apiBaseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0,runId:typeof e.run=="string"?e.run:void 0});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}if(console.log(t.dryRun?`Kynver Cron install (dry-run)
|
|
58
58
|
`:`Kynver Cron install
|
|
59
59
|
`),console.log(` config: ${t.configPath}`),console.log(` env file: ${t.plan.envFilePath}`),console.log(` store: ${t.plan.storePath}`),t.secretGenerated&&console.log(" generated new KYNVER_CRON_SECRET"),t.envFile&&console.log(` env merge: ${t.envFile.changed?"updated":"unchanged"} (${t.envFile.keysWritten.join(", ")||"no key changes"})`),t.watchdog?.remoteJobId?console.log(` watchdog: job ${t.watchdog.remoteJobId} provider=${t.watchdog.provider} local=${t.watchdog.localProviderScheduleId}`):t.watchdog?.error&&console.log(` watchdog: ERROR ${t.watchdog.error}`),t.qstashWatchdog?.found.length){console.log(` qstash watchdog leftovers: ${t.qstashWatchdog.found.length}`);for(let n of t.qstashWatchdog.found)console.log(` - ${n.id} (${n.status})`);t.qstashWatchdog.removed.length&&console.log(` removed: ${t.qstashWatchdog.removed.join(", ")}`)}t.systemd&&console.log(` systemd: ${t.systemd.note??(t.systemd.started?"running":"not started")}`),t.testFire&&!t.testFire.skipped&&console.log(` test fire: fired=${t.testFire.fired} errors=${t.testFire.errors}`),console.log(`
|
|
60
60
|
Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
|
|
61
|
-
Blockers:`);for(let n of t.blockers)console.log(` ! ${n}`);process.exitCode=1;return}console.log("\nInstall complete \u2014 run `kynver cron verify` to re-check.")}async function
|
|
62
|
-
`);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}O();import RE from"node:os";O();Ee();tn();w();var Jn={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 yE}from"node:child_process";import
|
|
63
|
-
`)),process.exit(e)}async function vE(e=process.argv.slice(2)){if(
|
|
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 Uh(e){let r=b(),t=await Tt({config:r});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}console.log(`Kynver Cron verify: ${t.ok?"PASS":"FAIL"}
|
|
62
|
+
`);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}O();import RE from"node:os";O();Ee();tn();w();var Jn={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 yE}from"node:child_process";import Bh from"node:path";function Wh(e,r,t){let o=[Bh.join(r,Jn.landScript),String(e),...Jn.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=yE("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 Lh(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?Bh.resolve(r):Ce()?.repo??process.cwd()}async function Hh(e){let r=String(N(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Jn.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=wr({runId:s??"fleet-lane-tick"}),a={...rs(i,{harnessRunId:s,boxKind:Be(b()),hostLabel:RE.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=W(e.baseUrl?String(e.baseUrl):void 0),c=await K(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 Ar(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,m=[],p=Lh(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 S=Wh(h.prNumber,p,o);if(m.push({action:S.action,executed:S.executed,exitCode:S.exitCode}),o&&S.executed){let A=S.exitCode===0,L=typeof h.prUrl=="string"&&h.prUrl.trim()?h.prUrl.trim():`https://github.com/${t}/pull/${h.prNumber}`;try{await Ar(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:L,holderBoxId:k,merged:A})}catch{}}continue}m.push({action:h,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:f,localOutcomes:m}}async function Fh(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await Hh(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}`)}function Al(e){return e==="help"||e==="--help"||e==="-h"}function jh(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),Il(1)}function Il(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] (bring your agent online: bootstrap if needed + run + daemon; --chat-oauth lets delegated chat turns use your local Claude subscription)"," 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 --run RUN_ID [--blocked] [--running] [--task TASK_ID] [--worker WORKER] [--full] # top-level compact run status"," kynver run create [--repo /path/repo] [--name name] [--base origin/main]"," kynver run list"," kynver run resolve --name RUN_NAME"," kynver run status --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--target-task-id TASK_ID] [--executor harness] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--model claude-opus-4-8] [--disk-path /] [--reconcile-stale-blockers]"," kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]",' kynver worker start --run RUN_ID --name worker --task "..." [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID] [--wait]'," kynver worker list --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver worker status --run RUN_ID --name worker"," kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]"," kynver worker stop --run RUN_ID --name worker"," kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"," kynver worker discard-disposable --run RUN_ID --name worker --path scripts/helper.mjs[,other]"," kynver worker auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--poll-ms 5000] [--max-total-ms 21600000] [--complete-attempts 3] [--complete-backoff-ms 5000] [--base-url URL] [--secret SECRET]"," kynver run reconcile"," kynver run unblock [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET] [--dry-run]"," kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]"," kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override] [--local]"," kynver harness verify --worktree PATH [--command CMD] [--json] [--wait-for-admission-ms MS] [--timeout-ms MS]"," kynver plan persist --operation create|add_version|update_metadata --title TITLE (--body-file PATH | --body TEXT) [--slug SLUG] [--plan PLAN_ID] [--summary TEXT] [--failure-kind approval_guard|auth|network|server|tool_interruption]"," kynver plan outbox list"," kynver plan outbox drain [--max N] [--id OUTBOX_ID]"," kynver cleanup [--execute] [--compact] [--node-modules-age-ms MS] [--worktrees-age-ms MS] [--harness-root PATH] [--include-orphans] [--skip-finalize] [--account-bytes]"," --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(`
|
|
63
|
+
`)),process.exit(e)}async function vE(e=process.argv.slice(2)){if(ph(e,import.meta.url,"kynver"))return;if(e.length===0||Al(e[0]))return Il(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&&Al(t)||n.some(Al))return Il(0);let o=Ro(n),{runsDir:s,worktreesDir:i}=te();if($h(s,{recursive:!0}),$h(i,{recursive:!0}),r==="daemon"&&mt(),fh(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=U(l).repo}catch{a=void 0}await mh({repoRoot:a,cwd:a})}if(r==="login")return void await Mc(o);if(r==="bootstrap")return void await vo(o);if(r==="start")return void await Cg(o);if(r==="status")return Sn(o);if(r==="runner"&&t==="credential")return void await Dc(o);if(r==="setup")return void await bo(o);if(r==="daemon")return Rs(o)?void await bs(o):void await ys(o);if(r==="plan"&&t==="progress")return void await Mg(o);if(r==="plan"&&t==="verify")return void await Ug(o);if(r==="harness"&&t==="verify")return Bg(o);if(r==="plan"&&t==="persist")return void await Wg(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Lg();if(a==="drain")return void await Hg(Ro(n));jh("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return Fg(o);if(r==="config"&&t==="ensure-default-repo")return kh(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return Ph(o);if(r==="scheduler"&&t==="cutover-check")return Oh(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return Nh(o.json===!0);if(r==="cron"&&t==="install")return void await Mh(o);if(r==="cron"&&t==="verify")return void await Uh(o);if(r==="cron"&&t==="status")return void await Th(o.json===!0);if(r==="cron"&&t==="tick")return void await Dh(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await Fh(Ro(n),a)}if(r==="board"&&t==="contract")return void await Eh(o);if(r==="run"&&t==="create")return void vs(o);if(r==="run"&&t==="list")return rg();if(r==="run"&&t==="resolve")return gh(o);if(r==="run"&&t==="status")return Sn(o);if(r==="run"&&t==="dispatch")return void await Br(o);if(r==="run"&&t==="sweep")return void await Tn(o);if(r==="run"&&t==="reconcile")return Qp();if(r==="run"&&t==="unblock")return void await hh(o);if(r==="worker"&&t==="start")return void await cp(o);if(r==="worker"&&t==="list")return zd(o);if(r==="worker"&&t==="status")return Jd(o);if(r==="worker"&&t==="tail")return tp(o);if(r==="worker"&&t==="stop")return np(o);if(r==="worker"&&t==="complete")return void await Yi(o);if(r==="worker"&&t==="discard-disposable")return _g(o);if(r==="worker"&&t==="auto-complete")return void await ip(o);if(r==="monitor"&&t==="start"){let a=await nh(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await oh(o);if(r==="monitor"&&t==="stop")return sh(o);if(r==="monitor"&&t==="list")return ih();if(r==="monitor"&&t==="tick")return void await lh(o);if(r==="monitor"&&t==="auto-complete")return void await vl(o);if(r==="monitor"&&t==="run-loop")return void await ah(o);jh(r,t)}var SE=process.argv[1]&&Kh.native(process.argv[1])===Kh.native(bE(import.meta.url));SE&&vE().catch(e=>{console.error(e),process.exit(1)});export{vE as main,Il as usage};
|