@kynver-app/runtime 0.1.128 → 0.1.132

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,55 +1,63 @@
1
1
  #!/usr/bin/env node
2
- var kh=Object.defineProperty;var F=(e,r)=>()=>(e&&(r=e(e=0)),r);var yh=(e,r)=>{for(var t in r)kh(e,t,{get:r[t],enumerable:!0})};import{existsSync as Rh,mkdirSync as vh,readFileSync as Es,readdirSync as CP,statSync as hl,writeFileSync as bh}from"node:fs";import kl from"node:path";function tr(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function N(e,r){return e||tr(`missing ${r}`),e}function jr(e){try{return JSON.parse(e)}catch{return null}}function x(e,r){try{return JSON.parse(Es(e,"utf8"))}catch(t){if(arguments.length>1)return r;tr(`failed to read ${e}: ${t.message}`)}}function le(e,r){vh(kl.dirname(e),{recursive:!0}),bh(e,`${JSON.stringify(r,null,2)}
3
- `)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function yl(e){return R(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Ge(e){return String(e).replace(/\/+$/,"")}function Ln(e){return String(e||"").replace(/\s+/g," ").trim()}function Bn(e){try{return hl(e).size}catch{return 0}}function Hn(e){try{return hl(e).mtime.toISOString()}catch{return null}}function Fn(e,r){return Rh(e)?Es(e,"utf8").split(`
2
+ var Gh=Object.defineProperty;var F=(e,r)=>()=>(e&&(r=e(e=0)),r);var Yh=(e,r)=>{for(var t in r)Gh(e,t,{get:r[t],enumerable:!0})};import{existsSync as Jh,mkdirSync as qh,readFileSync as Ls,readdirSync as wE,statSync as Ol,writeFileSync as zh}from"node:fs";import Nl 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(Ls(e,"utf8"))}catch(t){if(arguments.length>1)return r;nr(`failed to read ${e}: ${t.message}`)}}function le(e,r){qh(Nl.dirname(e),{recursive:!0}),zh(e,`${JSON.stringify(r,null,2)}
3
+ `)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Tl(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 Ol(e).size}catch{return 0}}function eo(e){try{return Ol(e).mtime.toISOString()}catch{return null}}function ro(e,r){return Jh(e)?Ls(e,"utf8").split(`
4
4
  `).slice(-r).join(`
5
- `):""}function Rl(e){return e?Es(kl.resolve(e),"utf8"):""}function kr(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function nr(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 Lt(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function vl(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 As(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=F(()=>{"use strict"});function xh(e){return wh.has(e)?!0:Ch.some(r=>e.endsWith(r))}function Ye(e){let r={...e};for(let t of Object.keys(r))xh(t)&&delete r[t];return r}var Sh,wh,Ch,Vr=F(()=>{"use strict";Sh=["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"],wh=new Set(Sh),Ch=["_SECRET","_API_KEY"]});import{spawnSync as Sl}from"node:child_process";function ce(e,r,t={}){let n=Sl("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);tr(o)}return n.stdout||""}function wl(e){ce(e,["rev-parse","--show-toplevel"])}function Bt(e){return ce(e,["status","--short"],{allowFailure:!0}).split(`
6
- `).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=Sl("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 $n(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 Os(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return Os(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 Os(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 Os(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();Vr()});import{homedir as Is}from"node:os";import yr from"node:path";function Cl(e){return e==="~"?Is():e.startsWith("~/")||e.startsWith("~\\")?yr.join(Is(),e.slice(2)):e}function Gr(e){return yr.resolve(Cl(e))}function pe(e){let r=Cl(e),t=yr.resolve(r),n=yr.resolve(Is());return t===n?"~":t.startsWith(`${n}${yr.sep}`)?`~/${yr.relative(n,t).split(yr.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 Je=F(()=>{"use strict"});import{existsSync as Ts,readFileSync as _l}from"node:fs";import{homedir as _h}from"node:os";import or from"node:path";import{fileURLToPath as Ph}from"node:url";function Ah(e){let r=or.join(e,"package.json");if(!Ts(r))return null;try{let t=JSON.parse(_l(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Oh(e){return Ah(e)==="kynver"}function xl(e){let r=or.resolve(e);if(!Ts(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?or.resolve(n):null}function Ih(e=import.meta.url){let r=or.dirname(Ph(e));for(let t=0;t<8;t+=1){let n=or.join(r,"package.json");if(Ts(n))try{if(JSON.parse(_l(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=or.dirname(r);if(o===r)break;r=o}return null}function Ns(e,r,t,n){if(!t)return;let o=or.resolve(t);e.has(o)||Oh(o)&&(e.add(o),r.push({repo:o,source:n}))}function Nh(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Ns(t,n,xl(r),"cwd_git");let o=Ih(e?.runtimeModuleUrl??import.meta.url);o&&Ns(t,n,xl(o),"runtime_checkout");let s=_h();for(let i of Eh)Ns(t,n,Gr(or.join(s,i)),"well_known_path");return n}function Rr(e){return Nh(e)[0]??null}var Eh,Kn=F(()=>{"use strict";ye();Je();Eh=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function Yr(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 Pl(e,r){return e[r]?.trim()||null}function Me(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:Yr(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Pl(e,"KYNVER_BOX_KIND");if(o)return{boxKind:Yr(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Pl(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 Ue(e={},r=process.env){return Me(r,e).boxKind}var Ee=F(()=>{"use strict"});import{readFileSync as Th}from"node:fs";import El from"node:os";function Ht(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:El.freemem()}if(process.platform==="linux")try{let t=Th("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return El.freemem()}var jn=F(()=>{"use strict"});import{existsSync as Dh,readFileSync as Mh,statfsSync as Uh}from"node:fs";function Hh(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Dh(e))continue;let r=Mh(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Al(e={}){if(!(e.forceWsl===void 0?Hh():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Bh,n=e.wslHostFreeWarnBytes??Wh,o=e.wslHostFreeCriticalBytes??Lh,s=e.statfs??Uh,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. ${Fh()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Fh(){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 Wh,Lh,Bh,Ol=F(()=>{"use strict";Wh=25*1024*1024*1024,Lh=12*1024*1024*1024,Bh="/mnt/c"});import{statfsSync as $h}from"node:fs";function We(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Kh,n=e.diskFreeCriticalBytes??jh,o=e.diskMaxUsedPercent??Vh,s=e.diskHardMaxUsedPercent??Gh,i=$h(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:Al(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("; ")),Yh({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function Yh(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 Kh,jh,Vh,Gh,Ft=F(()=>{"use strict";Ol();Kh=30*1024*1024*1024,jh=15*1024*1024*1024,Vh=80,Gh=90});import{existsSync as Il}from"node:fs";import{homedir as Tl}from"node:os";import sr from"node:path";function ne(e){let r=sr.resolve(Gr(e.trim()));for(;Jh.has(sr.basename(r));)r=sr.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=v().harnessRoot?.trim();if(r)return ne(r);let t=sr.join(Tl(),".kynver","harness");return Il(t)?t:Il(Nl)?Nl:t}function Re(e){return sr.join(ne(e),"runs")}function ir(e){return sr.join(ne(e),"worktrees")}function Jr(){let e=me();return{harnessRoot:e,runsDir:Re(e),worktreesDir:ir(e)}}function qr(e,r){return sr.join(e,R(r))}var Nl,Jh,ve=F(()=>{"use strict";I();Je();w();Nl=sr.join(Tl(),".openclaw","harness"),Jh=new Set(["runs","worktrees"])});import{existsSync as qh,readdirSync as zh,statSync as Xh}from"node:fs";import zr from"node:path";function te(){return Jr()}function U(e){let{runsDir:r}=te();return x(zr.join(qr(r,R(e)),"run.json"))}function ee(){let{runsDir:e}=te();return Dl(e)}function Vn(e){return Dl(Re(e))}function Qh(e){try{return Xh(e).isDirectory()}catch{return!1}}function Dl(e){if(!qh(e))return[];let r=[];for(let t of zh(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=zr.join(e,t.name);if(!Qh(n))continue;let o=x(zr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function fe(e,r){let{runsDir:t}=te();return x(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 _(e){let{harnessRoot:r}=te();return $t(r,e)}function $t(e,r){return qr(Re(e),R(r))}var W=F(()=>{"use strict";ve();w()});import{existsSync as Zh,readdirSync as ek}from"node:fs";import rk from"node:path";function be(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=rk.join(_(e.id),"workers");if(!Zh(t))return[...r];for(let n of ek(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var Xr=F(()=>{"use strict";W();w()});function Ds(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 Ml(e){let r=e.trim();if(!r)return null;let t=Ds(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Ds(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Ds(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Ul(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Ml(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Ml(t);return n||t}var Wl=F(()=>{"use strict"});import{existsSync as tk,readFileSync as nk}from"node:fs";function Ll(e){return e==="complete"}function Qr(e){return Ll(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(!tk(e))return r;let t=Date.now()+ok,n=new Date(t).toISOString(),o=nk(e,"utf8").split(`
7
- `).filter(Boolean);for(let s of o){let i=jr(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)),Ll(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Ul(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 ok,Zr=F(()=>{"use strict";Wl();w();ok=6e4});function ak(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function lk(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 ck(e){let r=ak(e[0]);return!!(r&&sk.has(r))}function Ms(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Bl(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function uk(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function dk(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;ik.has(n)&&(t+=1);continue}r.push(n)}}return r}function pk(e){let r=!1,t=e.map(o=>{let s=uk(o);return s!==o&&(r=!0),s}),n=dk(t);if(n.length===2){let[o,s]=n;if(Ms(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return{argv:t,changed:r}}function Us(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=lk(i.trim());if(!a.length||!ck(a))return i;let l=pk(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Hl(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 mk(e){let{pattern:r,target:t}=Hl(e);return r?Bl(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Ms(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function fk(e){let{pattern:r,target:t}=Hl(e);if(!r)return null;if(Bl(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Ms(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function gk(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 hk(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 Ws(e){let r=e.meta?.trim()||(e.command?hk(e.command):null)||null;if(r){let t=mk(r),n=gk(t);if(n)return n;let o=fk(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=Us(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 sk,ik,Fl=F(()=>{"use strict";sk=new Set(["rg","ripgrep","grep"]),ik=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Kt(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function vk(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 jt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function bk(e){let r=e.metadata;if(!jt(r))return null;let t=r.vulnerabilities;if(!jt(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 Sk(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 wk(e,r){let t=e.error;if(jt(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?Kt(o.split(`
8
- `).find(Boolean)??o,160):"npm audit failed"}function Ck(e){let r=`${e.stdout}
9
- ${e.stderr}`.trim(),t=vk(r);if(!t||!jt(t)){let o=Kt(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(jt(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${wk(t,e.stderr)}`};let n=bk(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:Sk(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function xk(e){return kk.test(e)}function _k(e){return yk.test(e)}function Pk(e){let r=Ws({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&&Rk.test(n)){let i=Kt(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Us(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=Kt(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 Ls(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(xk(e.command)){let i=r.trim()||n.trim()||t.trim();return Ck({exitCode:e.exitCode,stdout:i,stderr:t})}if(_k(e.command))return Pk({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Ws({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=Kt(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var kk,yk,Rk,$l=F(()=>{"use strict";Fl();kk=/\bnpm\s+audit\b/i,yk=/\b(rg|ripgrep)\b/i,Rk=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Ek,readFileSync as Ak}from"node:fs";function Ok(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Kl(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 Ik(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 jl(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 Nk(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Gn(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Ek(e))return r;let t=Ak(e,"utf8").split(`
10
- `).filter(Boolean);for(let n of t){let o=jr(n);if(!o)continue;let s=Ok(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=Kl(a);l&&(r.currentTool=l)}let i=jl(o);i&&Nk(r,Ls({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Ik(r,o)}return r}function Tk(e){let r=jl(e);if(!r)return;let t=Ls({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Ln(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 Vl(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] ${Ln(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"?Tk(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=Kl(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Ln(String(e.result||""))}`.trim()}var Yn=F(()=>{"use strict";$l();w()});function Mk(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Gl(e){let r=(e??"").trim();if(!r)return null;for(let t of Dk)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Mk(r)}`};return null}var Dk,Yl=F(()=>{"use strict";Dk=[{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 Jl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Uk(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 Wk(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Jl(e.head)}function Lk(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function et(e){if(e.alive||Uk(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Jl(e.headCommit)??Wk(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:Lk(s,r,t)}}var Jn=F(()=>{"use strict"});function Vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Bk(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 Hk(e){if(Vt(e.headCommit)||Vt(e.prUrl)||Vt(e.artifactBundlePath)||Vt(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Vt(r.head))}function rt(e){return Bk(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Hk(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 ql(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var qn=F(()=>{"use strict"});function Bs(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 zl(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function tt(e){let r=e.trim();if(!r)return null;let t=Bs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Bs(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Bs(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=zl(l);for(let u of n){let d=zl(u);d>c&&(l=u,c=d)}return l}var zn=F(()=>{"use strict"});function nt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Fk(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function vr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:nt(e)}function Xn(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Xl(e){let r=null;if(typeof e=="string"){let o=tt(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=vr(String(s.prUrl??s.pr_url??"")),a=nt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:nt(s.mergeCommit??s.merge_commit),reason:nt(s.reason)})}return n}function Ql(e,r){let t=[],n=vr(nt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=vr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Zl(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(!Fk(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?vr(nt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?vr(r.targetPrUrls[0]):null):null;if(s){let d=Ql(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=Xl(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=Xl(n),a=new Map(i.map(d=>[Xn(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Xn(vr(d)??d)).filter(Boolean)),c=Ql(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(Xn(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=Xn(vr(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 ec(e){if(e.blocked)return e.detail??e.reason}var rc=F(()=>{"use strict";zn()});function Kk(e){let r=Date.now();if(e.completionBlocker&&!tc(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Vk(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=rt(o);if(s.blocked){let i=ql(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Zl({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=ec(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(jk(e))return{state:"done",reason:"empty abandoned worker record"};let o=Gl(e.error);if(o)return{state:"blocked",reason:o.reason};let s=et({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>$k)return{state:"needs_attention",reason:`no first stream event ${As(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ot?{state:"stale",reason:`no log/event/heartbeat activity for ${As(n)}s`}:{state:"ok",reason:"recent activity"}}function tc(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function jk(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 Vk(e){let r=null;if(typeof e=="string"?r=tt(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 Gk(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Qr(t))}function T(e,r={}){let t=Gn(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Gk(e,t.finalResult,n),i=o?!1:$(e.pid),a=Bn(e.stdoutPath),l=Bn(e.stderrPath),c=Bn(e.heartbeatPath),u=Bt(e.worktreePath),d=$n(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=vl([t.lastEventAt,n.lastHeartbeatAt,Hn(e.stdoutPath),Hn(e.stderrPath),Hn(e.heartbeatPath)]),m=t.error||!i&&!s&&Fn(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=tc(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=Kk({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 st(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Gt(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 $k,ot,G=F(()=>{"use strict";Zr();Yn();Yl();Jn();ye();qn();rc();zn();w();$k=18e4,ot=6e5});import{readFileSync as Yk}from"node:fs";function Jk(e){if(!e||process.platform!=="linux")return null;try{return Yk(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function nc(e){if(!e.pid||process.platform!=="linux")return!0;let r=Jk(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 Qn(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!nc(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Hs=F(()=>{"use strict";G()});import sc from"node:os";import qk from"node:path";function oc(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function zk(e=v(),r,t){let n=oc(e.perWorkerMemBytes,Yt),o=oc(e.memReserveBytes,Jt),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):qt)),i=eo({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 Fs(e,r={}){let t=r.perWorkerMemBytes??Yt,n=r.memReserveBytes??Jt,o=r.memUtilization??qt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Zn)}function Xk(){return Ht()}function Qk(e){let r=0;for(let t of be(e)){let n=x(qk.join(_(e.id),"workers",R(t),"worker.json"),void 0);!n||!Qn(n)||r++}return r}function Zk(){let e=0;for(let r of ee())e+=Qk(r);return e}function br(e){let r=e.config??v(),t=e.totalMemBytes??sc.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=zk(r,e.configuredMaxWorkersOverride,t),c=Ue(r),u=e.freeMemBytes??Xk(),d=e.activeWorkers??Zk(),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),B=Math.min(S,p),b=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:We({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});b&&!b.ok&&(B=0);let E=null;return B<=0&&(b&&!b.ok?E=b.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:B>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:B,reason:E,...b?{diskGate:b}:{}}}var Yt,Jt,qt,Zn,zt=F(()=>{"use strict";jn();I();Ee();ro();Ft();W();Xr();Hs();w();Yt=500*1024*1024,Jt=4*1024*1024*1024,qt=.85,Zn=64});function Sr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function eo(e){let r=e.config??{},t=e.env??process.env,n=Sr(r.perWorkerMemBytes,Yt),o=Sr(r.memReserveBytes,Jt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):qt)),i=Fs(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Sr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Sr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Zn),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Sr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Zn),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function $s(e={}){let r=e.totalMemBytes??0,t=Fs(r,{perWorkerMemBytes:Sr(e.config?.perWorkerMemBytes,Yt),memReserveBytes:Sr(e.config?.memReserveBytes,Jt),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):qt}),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 ro=F(()=>{"use strict";zt()});var ac={};yh(ac,{runDeviceLogin:()=>Ks});import ic from"node:os";function ey(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||v().apiBaseUrl;return r?Ge(String(r)):void 0}async function ry(e){await new Promise(r=>setTimeout(r,e))}async function Ks(e){let r=ey(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=`${ic.hostname()} (${ic.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 ry(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?(Xt(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 js=F(()=>{"use strict";I();w()});import{existsSync as cc,mkdirSync as uc,readFileSync as dc,writeFileSync as pc}from"node:fs";import{homedir as ty,totalmem as ny}from"node:os";import Vs from"node:path";import oy from"node:os";function v(){if(!cc(to))return{};try{return JSON.parse(dc(to,"utf8"))}catch{return{}}}function qe(e){uc(no,{recursive:!0}),pc(to,`${JSON.stringify(Gs(e),null,2)}
11
- `,{mode:384})}function Gs(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:pe(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:pe(e.defaultRepo.trim())}:{}}}function at(e){return Gs(e)}function sy(e,r){let t=Qt(),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"?Rr()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||Rr()?.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:Ge(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function iy(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=Me(process.env,{...e,...o?{boxKind:Yr(o)}:{}}).boxKind,i=We({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=$s({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 Qt(){if(!cc(it))return{};try{return JSON.parse(dc(it,"utf8"))}catch{return{}}}function mc(e){uc(no,{recursive:!0}),pc(it,`${JSON.stringify(e,null,2)}
12
- `,{mode:384})}function Z(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Qt().apiKey}function Xt(e){mc({...Qt(),apiKey:e})}function lc(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Qt();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function wr(e,r){mc({...Qt(),runnerToken:r,runnerTokenAgentOsId:e})}function L(e){let r=oo(e);return r||Js("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function oo(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||v().apiBaseUrl;return r?Ge(String(r)):void 0}function ay(e,r){let t=e||lc(r)||(r?void 0:lc(v().agentOsId));if(t)return String(t);let n=process.env.KYNVER_RUNTIME_SECRET||process.env.KYNVER_CRON_SECRET||process.env.OPENCLAW_CRON_SECRET;if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function Ys(e,r,t){let n=ay(e,r);if(n)return{ok:!0,secret:n};let o=Z(),s=oo(t?.baseUrl);if(o&&r&&s)try{let i=await Cr(r,{baseUrl:s,apiKey:o});return wr(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 Ys(e,r,t);if(n.ok)return n.secret;Js(n.reason)}async function fc(e,r){let t=Z(),n=oo(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Cr(e,{baseUrl:n,apiKey:t});return wr(e,o),o}catch{return null}}async function gc(e,r,t){let n=Z(),o=oo(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 Cr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(wr(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 Cr(e,r){let t=r?.apiKey||Z();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${L(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 hc(e){let r=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";r||Js("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Cr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});wr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(it),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 Js(e){console.error(e),process.exit(1)}function so(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 io(e){let r=v(),t=We({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=$s({totalMemBytes:oy.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=iy(r,e),s=Gs({...r,...sy(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});qe(s);let i=Me(process.env,s),a,l=Z(),c=s.agentOsId;if(l&&c)try{let u=await Cr(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});wr(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(to),config:at(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 kc(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){Xt(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(it)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(js(),ac));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(it)},null,2))}var no,to,it,RA,vA,I=F(()=>{"use strict";Kn();Je();w();Ee();ro();Ft();no=Vs.join(ty(),".kynver"),to=Vs.join(no,"config.json"),it=Vs.join(no,"credentials");RA=500*1024*1024,vA=4*1024*1024*1024});I();import{mkdirSync as ph,realpathSync as mh}from"node:fs";import{fileURLToPath as RP}from"node:url";I();w();js();import ly from"node:os";function cy(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||v().apiBaseUrl;return r?Ge(String(r)):void 0}async function uy(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 ao(e){let r=cy(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"?Xt(e.apiKey):(await Ks({...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 uy(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 io(o),console.log(""),console.log(` Bootstrap complete \u2014 ${ly.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`.)")}I();import Kx from"node:os";I();I();Ee();ro();import dy from"node:os";function yc(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Rc(e=v(),r=process.env){let t=Me(r,e),n=eo({config:e,totalMemBytes:dy.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 py,readFileSync as my,renameSync as fy,writeFileSync as gy}from"node:fs";import{homedir as hy}from"node:os";import vc from"node:path";function bc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return vc.join(hy(),".kynver",`daemon-heartbeat-${r}.json`)}function Sc(e){try{let r=bc(e.agentOsId);py(vc.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId},n=`${r}.tmp-${process.pid}`;gy(n,JSON.stringify(t),"utf8"),fy(n,r)}catch{}}function wc(e){try{let r=my(bc(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Cc(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function ky(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function lt(){process.platform==="win32"&&(ky("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)))}I();import{existsSync as yy}from"node:fs";import{homedir as Ry}from"node:os";import vy from"node:path";function xc(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 Zt(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function ar(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||vy.join(Ry(),".kynver","agent-os-cron.json")}function by(e=ar()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function Sy(){let e=v();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function qs(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function ze(){let e=ar(),r=by(e),t=Sy(),n=qs(),o=!!(t&&n),s=yy(e),i=o&&(s||xc("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:xc("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Zt("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Zt("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Zt("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Zt("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Zt("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function lo(e=ze()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Xe(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}}function wy(e){return e.replace(/\/+$/,"")}async function _c(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${wy(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:Xe(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 Cy,existsSync as zs,openSync as xy,readFileSync as _y,unlinkSync as Pc,writeFileSync as Py}from"node:fs";var Ey=10*6e4;function Ec(e){if(!zs(e))return null;try{let r=JSON.parse(_y(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Ay(e){let r=Ec(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>Ey}function Ac(e){if(zs(e)&&!Ay(e)){let r=Ec(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(zs(e))try{Pc(e)}catch{}try{let r=xy(e,"wx");return Py(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Cy(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Oc(e){try{Pc(e)}catch{}}var Oy=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function Iy(e){return Oy.test(e.trim())}function Ny(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 en(e,r,t,n){let o=e.trim();return o==="*"?!0:Ny(o,t,n).has(r)}function Ty(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return en(n,r.getUTCMinutes(),0,59)&&en(o,r.getUTCHours(),0,23)&&en(s,r.getUTCDate(),1,31)&&en(i,r.getUTCMonth()+1,1,12)&&en(a,r.getUTCDay(),0,6)}var Dy=366*24*60;function My(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Ic(e,r){if(!Iy(e))return null;let t=My(r);t=new Date(t.getTime()+6e4);for(let n=0;n<Dy;n++){if(Ty(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Nc(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=Ic(e.cron.trim(),r);return t?t.toISOString():null}return null}function Xs(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Ic(e.cron.trim(),r);return t?t.toISOString():null}import{promises as Uy}from"node:fs";async function Tc(e){try{return await Uy.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Wy(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function xr(e=ar()){let r=await Tc(e);return Wy(r)}async function Dc(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 Mc(e,r=ar()){let t=await xr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Dc(r,t)}async function Uc(e=ar()){return await Tc(e)!==null?{created:!1}:(await Dc(e,[]),{created:!0})}import{randomBytes as Ly}from"node:crypto";import{promises as rn}from"node:fs";import By from"node:path";var co={version:1,jobs:{}};async function Hy(e){try{return await rn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Fy(e){if(!e)return{...co,jobs:{...co.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...co,jobs:{}}:r}catch{return{...co,jobs:{}}}}async function uo(e){let r=await Hy(e);return Fy(r)}async function $y(e,r){await rn.mkdir(By.dirname(e),{recursive:!0});let t=Ly(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await rn.writeFile(n,`${JSON.stringify(r,null,2)}
13
- `,"utf8");try{await rn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await rn.unlink(n).catch(()=>{})}}async function Wc(e,r){await $y(e,r)}function Lc(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 Ky(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function jy(e){return!!e.completedAt}function Vy(e,r,t){if(e.consecutiveFailures===0)return!0;if(e.consecutiveFailures>r.maxRetries)return!1;if(!e.lastAttemptAt)return!0;let n=Date.parse(e.lastAttemptAt);return Number.isNaN(n)?!0:t-n>=r.retryBackoffMs}function Gy(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Nc(e.spec,t);return r.nextFireAt=n,n}function Yy(e,r,t,n){if(e.paused||jy(r)||Ky(r,t)||!Vy(r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function Jy(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Xs(e.spec,t))}async function ct(e={}){let r=e.env??ze(),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=Ac(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 xr(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await uo(r.statePath),l=[];for(let m of i){let p=Lc(a,m.providerScheduleId);Gy(m,p,t),Yy(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=Xs(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),Jy(m,p,t);try{let g=await _c({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 Wc(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Oc(r.lockPath)}}w();W();import Bc from"node:path";var Hc="mesh-cron-lease.json";function po(e){return x(Bc.join(_(e),Hc),null)}function Fc(e,r){le(Bc.join(_(e),Hc),{...r,updatedAt:new Date().toISOString()})}function $c(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 hC from"node:path";W();Hs();w();import qy from"node:path";function zy(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 mo(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=x(qy.join(_(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!Qn(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...zy(o)})}return t}I();I();function Kc(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function jc(e){let r=new AbortController,t=setTimeout(()=>r.abort(),Kc());try{return await e(r.signal)}finally{clearTimeout(t)}}function Vc(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:Kc()}}}async function _r(e,r,t){let n;try{n=await jc(s=>fetch(e,{method:"POST",headers:Xe(r),body:JSON.stringify(t),signal:s}))}catch(s){return Vc(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 _r(e,r,t);if(o.ok||o.status!==401)return o;let s=await gc(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await _r(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function fo(e,r){let t;try{t=await jc(o=>fetch(e,{method:"GET",headers:Xe(r),signal:o}))}catch(o){return Vc(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}I();var Gc=[{slug:"ghost",displayName:"Ghost",description:"Orchestration \u2014 coordinates lanes, handoffs, and operator decisions.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning \u2014 plan authoring, milestones, and operational flow design.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Runtime / control-plane implementation \u2014 harness, dispatch, and AgentOS plumbing.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Memory-quality implementation \u2014 MARM lanes, retrieval hygiene, and consolidation.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Security / privacy implementation and security verification gates.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Frontend \u2014 Command Center UI, dashboards, and client surfaces.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Data / migrations \u2014 Prisma schema, seeds, and persistence contracts.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Infra / reliability \u2014 deploy pipelines, observability, and runtime health.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Integrations / MCP \u2014 tool manifests, OpenClaw bridges, and cross-service wiring.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Product / domain \u2014 business rules, domain packs, and feature semantics.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Deep/adversarial review lane expert for risk, correctness, and safety gates. Run adversarial review and validation gating.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing-only \u2014 merge-ready handoff and final verification evidence; no implementation ownership.",dispatchLane:"landing",defaultRoleLane:"implementer"}],Xy=new Map(Gc.map(e=>[e.slug,e]));function Qy(e){if(!e)return null;let r=e.trim().toLowerCase();return Xy.get(r)??null}function Qs(e){return Qy(e)?.defaultRoleLane??null}function Yc(){return Gc.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Jc(e){return(e??"").trim().toLowerCase()}function Zy(e){switch(Jc(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 eR(e){let r=Jc(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=Zy(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function qc(e){return eR(e)??"any"}Ft();zt();W();W();function go(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Zs(e){return e.toLowerCase()}function rR(e){let r=go(e,"roleLane");if(r)return r;let t=Zs(go(e,"executorRef")),n=Zs(go(e,"title")),o=Zs(go(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=Qs(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function zc(e){let r=rR(e);return r?{...e,roleLane:r}:e}I();var Qe="cursor",tR=new Set(["claude","opus","anthropic"]),nR=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ei(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Pr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return tR.has(r)?!0:r.includes("claude")||r.includes("opus")}function ri(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Pr(r))return!0;let t=ei(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=ei(e,"description");if(nR.some(s=>s.test(n)))return!0;let o=ei(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function oR(e,r){return{provider:Qe,model:ti,rule:`policy:cursor_default${r}`,requestedModel:e}}function Xc(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Pr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(ri(t)||r.rule==="explicit:cli"&&Pr(r.provider)||!Pr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return oR(r.model,o)}function ho(e,r=Qe){let t=e?.trim();return t?Pr(t)?Qe:t==="codex"?"codex":t:r}var Qc={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 ut(e){return Qc[e]}function Zc(){return Object.values(Qc)}import{existsSync as iR}from"node:fs";import{homedir as aR}from"node:os";import tu from"node:path";import{createHash as eu}from"node:crypto";import{statSync as sR}from"node:fs";import{spawnSync as ru}from"node:child_process";function Le(e){try{let r=sR(e),t=`${e}|${r.size}|${r.mtimeMs}`;return eu("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function dt(e){return eu("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 Be(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=ru(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 ko(e,r,t={}){let n=t.timeoutMs??8e3;try{return ru(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 lR="codex";function cR(){let e=aR();return[tu.join(e,".codex","auth.json"),tu.join(e,".config","codex","auth.json")]}function nu(e=new Date().toISOString()){let r=we(lR,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:dt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=cR().find(s=>iR(s)),n=Be(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 uR}from"node:fs";import{homedir as dR}from"node:os";import ni from"node:path";function pR(){let e=process.env.HERMES_HOME?.trim(),r=e?ni.resolve(e):ni.join(dR(),".hermes");return ni.join(r,"auth.json")}function yo(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Be(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=pR(),o=uR(n),s=ko(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 pt(e=new Date().toISOString()){let r=nu(e);if(r.ready)return{...r,path:"codex_cli"};let t=yo(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 ou=["low","medium","high"],su={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function iu(e,r){let t=ut(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function mR(e,r){let t=ut(e.providerId),n=ut(r.providerId),o=ou.indexOf(t.costTier)-ou.indexOf(n.costTier);if(o!==0)return o;let s=su[e.binding.authSource]-su[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function oi(e){let r=Zc().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&iu(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(mR)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return iu(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 fR}from"node:fs";import{homedir as gR}from"node:os";import hR from"node:path";var kR="claude";function yR(){let e=gR();return[hR.join(e,".claude",".credentials.json")]}function au(e=new Date().toISOString()){let r=we(kR,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:dt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Be(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=yR().find(i=>fR(i)),o=ko(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 RR}from"node:fs";import{homedir as vR}from"node:os";import bR from"node:path";var SR="agent";function wR(){let e=vR();return[bR.join(e,".config","cursor","auth.json")]}function lu(e=new Date().toISOString()){let r=we(SR,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:dt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Be(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=wR().find(s=>RR(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 CR,readFileSync as xR}from"node:fs";import{homedir as _R}from"node:os";import si from"node:path";var PR=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function ER(){let e=process.env.HERMES_HOME?.trim(),r=e?si.resolve(e):si.join(_R(),".hermes");return si.join(r,".env")}function AR(e){try{let r=xR(e,"utf8"),t=[];for(let n of PR)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function cu(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Be(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ER(),o=CR(n),s=o?AR(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 uu(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=pt(r),n={codex:t,cursor:lu(r),claude:au(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:cu(r),hermesOpenAiCodex:yo(r),codexAdapterPath:t.path,readyCount:o}}var OR=[/\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],IR=[/\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 ii(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function NR(e){let r=ii(e,"executorRef").toLowerCase(),t=ii(e,"title").toLowerCase(),n=ii(e,"description").toLowerCase(),o=`${r}
5
+ `):""}function Dl(e){return e?Ls(Nl.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 Ml(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 Hs(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=F(()=>{"use strict"});function ek(e){return Qh.has(e)?!0:Zh.some(r=>e.endsWith(r))}function Je(e){let r={...e};for(let t of Object.keys(r))ek(t)&&delete r[t];return r}var Xh,Qh,Zh,Jr=F(()=>{"use strict";Xh=["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"],Qh=new Set(Xh),Zh=["_SECRET","_API_KEY"]});import{spawnSync as Bl}from"node:child_process";function ce(e,r,t={}){let n=Bl("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 Wl(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=Bl("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 Ul(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 Fs(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return Fs(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 Fs(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=Ul(e,i,a),c=Ul(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 Fs(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 $s}from"node:os";import br from"node:path";function Ll(e){return e==="~"?$s():e.startsWith("~/")||e.startsWith("~\\")?br.join($s(),e.slice(2)):e}function qr(e){return br.resolve(Ll(e))}function pe(e){let r=Ll(e),t=br.resolve(r),n=br.resolve($s());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 js,readFileSync as Fl}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(!js(r))return null;try{let t=JSON.parse(Fl(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function sk(e){return ok(e)==="kynver"}function Hl(e){let r=sr.resolve(e);if(!js(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(js(n))try{if(JSON.parse(Fl(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=sr.dirname(r);if(o===r)break;r=o}return null}function Ks(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=[];Ks(t,n,Hl(r),"cwd_git");let o=ik(e?.runtimeModuleUrl??import.meta.url);o&&Ks(t,n,Hl(o),"runtime_checkout");let s=rk();for(let i of nk)Ks(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 $l(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=$l(e,"KYNVER_BOX_KIND");if(o)return{boxKind:zr(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=$l(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 Kl 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:Kl.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 Kl.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 jl(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,Vl=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:jl(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";Vl();yk=30*1024*1024*1024,Rk=15*1024*1024*1024,bk=80,vk=90});import{existsSync as Gl}from"node:fs";import{homedir as Jl}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(Jl(),".kynver","harness");return Gl(t)?t:Gl(Yl)?Yl: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 Yl,wk,be=F(()=>{"use strict";O();qe();w();Yl=ir.join(Jl(),".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 ql(e)}function so(e){return ql(Re(e))}function Pk(e){try{return xk(e).isDirectory()}catch{return!1}}function ql(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 Vs(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 zl(e){let r=e.trim();if(!r)return null;let t=Vs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Vs(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Vs(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Xl(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?zl(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=zl(t);return n||t}var Ql=F(()=>{"use strict"});import{existsSync as Ok,readFileSync as Nk}from"node:fs";function Zl(e){return e==="complete"}function rt(e){return Zl(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)),Zl(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Xl(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 Tk,tt=F(()=>{"use strict";Ql();w();Tk=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&&Dk.has(r))}function Gs(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ec(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;Mk.has(n)&&(t+=1);continue}r.push(n)}}return r}function Fk(e){let r=!1,t=e.map(o=>{let s=Lk(o);return s!==o&&(r=!0),s}),n=Hk(t);if(n.length===2){let[o,s]=n;if(Gs(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return{argv:t,changed:r}}function Ys(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 rc(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}=rc(e);return r?ec(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Gs(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}=rc(e);if(!r)return null;if(ec(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Gs(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 Js(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=Ys(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 Dk,Mk,tc=F(()=>{"use strict";Dk=new Set(["rg","ripgrep","grep"]),Mk=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
+ `).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=Js({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=Ys(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 qs(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=Js({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,nc=F(()=>{"use strict";tc();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 oc(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 sc(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=oc(a);l&&(r.currentTool=l)}let i=sc(o);i&&ay(r,qs({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=sc(e);if(!r)return;let t=qs({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 ic(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=oc(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Qn(String(e.result||""))}`.trim()}var ao=F(()=>{"use strict";nc();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 ac(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,lc=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 cc(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:cc(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=cc(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 uc(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var co=F(()=>{"use strict"});function zs(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function dc(e){let r=e.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=zs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=zs(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=zs(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=dc(l);for(let u of n){let d=dc(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 pc(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 mc(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 fc(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=mc(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=pc(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=pc(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=mc(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 gc(e){if(e.blocked)return e.detail??e.reason}var hc=F(()=>{"use strict";uo()});function yy(e){let r=Date.now();if(e.completionBlocker&&!kc(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=uc(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=fc({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=gc(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=ac(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 ${Hs(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 ${Hs(n)}s`}:{state:"ok",reason:"recent activity"}}function kc(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=Ml([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=kc(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();lc();lo();ye();co();hc();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 yc(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&&!yc(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Xs=F(()=>{"use strict";G()});import bc from"node:os";import Cy from"node:path";function Rc(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _y(e=b(),r,t){let n=Rc(e.perWorkerMemBytes,Zt),o=Rc(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??bc.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Qs(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??bc.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();Xs();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=Qs(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 Zs(e={}){let r=e.totalMemBytes??0,t=Qs(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 Sc={};Yh(Sc,{runDeviceLogin:()=>ei});import vc 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 ei(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=`${vc.hostname()} (${vc.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 ri=F(()=>{"use strict";O();w()});import{existsSync as Cc,mkdirSync as _c,readFileSync as xc,writeFileSync as Pc}from"node:fs";import{homedir as Oy,totalmem as Ny}from"node:os";import ti from"node:path";import Ty from"node:os";function b(){if(!Cc(ko))return{};try{return JSON.parse(xc(ko,"utf8"))}catch{return{}}}function ze(e){_c(yo,{recursive:!0}),Pc(ko,`${JSON.stringify(ni(e),null,2)}
11
+ `,{mode:384})}function ni(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:pe(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:pe(e.defaultRepo.trim())}:{}}}function ut(e){return ni(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=Zs({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(!Cc(ct))return{};try{return JSON.parse(xc(ct,"utf8"))}catch{return{}}}function Ec(e){_c(yo,{recursive:!0}),Pc(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){Ec({...on(),apiKey:e})}function wc(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){Ec({...on(),runnerToken:r,runnerTokenAgentOsId:e})}function W(e){let r=sn(e);return r||si("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Ac(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||wc(r)||(r?void 0:wc(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 oi(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 oi(e,r,t);if(n.ok)return n.secret;si(n.reason)}async function Ic(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 Oc(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 Nc(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||si("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 si(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=Zs({totalMemBytes:Ty.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=My(r,e),s=ni({...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 Tc(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(()=>(ri(),Sc));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(ct)},null,2))}var yo,ko,ct,yI,RI,O=F(()=>{"use strict";no();qe();w();Ee();ho();Yt();yo=ti.join(Oy(),".kynver"),ko=ti.join(yo,"config.json"),ct=ti.join(yo,"credentials");yI=500*1024*1024,RI=4*1024*1024*1024});O();import{mkdirSync as Fh,realpathSync as $h}from"node:fs";import{fileURLToPath as yE}from"node:url";O();w();ri();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 ei({...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 Mc from"node:path";function Dc(e){return JSON.stringify(ii(e))}function ii(e){if(Array.isArray(e))return e.map(ii);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ii(e[t]);return r}return e}function ai(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 Uc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Mc.join(jy(),".kynver",`instruction-bundle-${r}.json`)}function Bc(e,r){try{let t=Uc(e);Hy(Mc.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Ky(n,JSON.stringify(r),"utf8"),$y(n,t)}catch{}}function Wc(e){try{let r=Fy(Uc(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
+ `),"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
+ `),"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
+ `),"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,Lc="embedded";function Pr(){return ln.version}function lr(){return Lc}function Hc(e,r){ln=e,Lc=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 Fc(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 $c(e,r=process.env){let t=ai(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=qy[e];return n?ai(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(Dc(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 Kc(e,r=process.env){if(!an(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=$c(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 jc(e,r,t){let n=Kc(e);return n.ok?(Hc(n.bundle,r),r==="server"&&Bc(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=Wc(e);return r?jc(r,"disk",e):!1}async function Vc(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||!jc(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 Gc(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Yc(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)Gc("warn",a);for(let a of s)Gc("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 Jc from"node:path";function qc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Jc.join(lR(),".kynver",`daemon-heartbeat-${r}.json`)}function zc(e){try{let r=qc(e.agentOsId);oR(Jc.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 Xc(e){try{let r=sR(qc(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Qc(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 Zc(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 li(){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=li(),o=!!(t&&n),s=uR(e),i=o&&(s||Zc("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:Zc("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 eu(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 ci,openSync as kR,readFileSync as yR,unlinkSync as ru,writeFileSync as RR}from"node:fs";var bR=10*6e4;function tu(e){if(!ci(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=tu(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>bR}function nu(e){if(ci(e)&&!vR(e)){let r=tu(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(ci(e))try{ru(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 ou(e){try{ru(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 su(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 iu(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=su(e.cron.trim(),r);return t?t.toISOString():null}return null}function ui(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=su(e.cron.trim(),r);return t?t.toISOString():null}import{promises as ER}from"node:fs";async function au(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 au(e);return AR(r)}async function lu(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 cu(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 lu(r,t)}async function uu(e=cr()){return await au(e)!==null?{created:!1}:(await lu(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 du(e,r){await DR(e,r)}function pu(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){if(e.consecutiveFailures===0)return!0;if(e.consecutiveFailures>r.maxRetries)return!1;if(!e.lastAttemptAt)return!0;let n=Date.parse(e.lastAttemptAt);return Number.isNaN(n)?!0:t-n>=r.retryBackoffMs}function WR(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=iu(e.spec,t);return r.nextFireAt=n,n}function LR(e,r,t,n){if(e.paused||UR(r)||MR(r,t)||!BR(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=ui(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=nu(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=pu(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=ui(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 eu({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 du(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{ou(r.lockPath)}}w();B();import mu from"node:path";var fu="mesh-cron-lease.json";function _o(e){return _(mu.join(x(e),fu),null)}function gu(e,r){le(mu.join(x(e),fu),{...r,updatedAt:new Date().toISOString()})}function hu(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();Xs();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 ku(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function yu(e){let r=new AbortController,t=setTimeout(()=>r.abort(),ku());try{return await e(r.signal)}finally{clearTimeout(t)}}function Ru(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:ku()}}}async function Ar(e,r,t){let n;try{n=await yu(s=>fetch(e,{method:"POST",headers:Ie(r),body:JSON.stringify(t),signal:s}))}catch(s){return Ru(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 Oc(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 yu(o=>fetch(e,{method:"GET",headers:Ie(r),signal:o}))}catch(o){return Ru(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 bu(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 vu=dt.personas.map(bu),YR=new Map(vu.map(e=>[e.slug,e]));function JR(e){if(!e)return null;let r=e.trim().toLowerCase(),t=YR.get(r)??null,n=Fc(r);if(!n)return t;let o=bu(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function di(e){return JR(e)?.defaultRoleLane??null}function Su(){return vu.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function wu(e){return(e??"").trim().toLowerCase()}function qR(e){switch(wu(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=wu(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 Cu(e){return zR(e)??"any"}Yt();tn();B();B();function Eo(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function pi(e){return e.toLowerCase()}function XR(e){let r=Eo(e,"roleLane");if(r)return r;let t=pi(Eo(e,"executorRef")),n=pi(Eo(e,"title")),o=pi(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=di(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function _u(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 mi(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 fi(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ir(r))return!0;let t=mi(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=mi(e,"description");if(ZR.some(s=>s.test(n)))return!0;let o=mi(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function eb(e,r){return{provider:Ze,model:gi,rule:`policy:cursor_default${r}`,requestedModel:e}}function xu(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(fi(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 Pu={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 Pu[e]}function Eu(){return Object.values(Pu)}import{existsSync as tb}from"node:fs";import{homedir as nb}from"node:os";import Ou from"node:path";import{createHash as Au}from"node:crypto";import{statSync as rb}from"node:fs";import{spawnSync as Iu}from"node:child_process";function Le(e){try{let r=rb(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Au("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function ht(e){return Au("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=Iu(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 Iu(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[Ou.join(e,".codex","auth.json"),Ou.join(e,".config","codex","auth.json")]}function Nu(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 hi from"node:path";function lb(){let e=process.env.HERMES_HOME?.trim(),r=e?hi.resolve(e):hi.join(ab(),".hermes");return hi.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=Nu(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 Tu=["low","medium","high"],Du={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Mu(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=Tu.indexOf(t.costTier)-Tu.indexOf(n.costTier);if(o!==0)return o;let s=Du[e.binding.authSource]-Du[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ki(e){let r=Eu().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Mu(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 Mu(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 Uu(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 Bu(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 yi 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?yi.resolve(e):yi.join(Sb(),".hermes");return yi.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 Wu(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 Lu(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=kt(r),n={codex:t,cursor:Bu(r),claude:Uu(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:Wu(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 Ri(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Eb(e){let r=Ri(e,"executorRef").toLowerCase(),t=Ri(e,"title").toLowerCase(),n=Ri(e,"description").toLowerCase(),o=`${r}
14
18
  ${t}
15
- ${n}`;return OR.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":IR.some(s=>s.test(o))?"low":"elevated"}function TR(e){let r=ut(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 DR(e){let r=e.inventory??uu();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Er(e){let r=TR({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 du(e){let r=e.task??{},t=NR(r),n=DR({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:pt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Qe;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=oi({inventory:n,riskClass:t});return Er(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 Er({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 Er({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 Er({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=oi({inventory:n,riskClass:t});if(a)return Er({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 Er({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"}})}Vr();w();import{closeSync as pu,openSync as mu}from"node:fs";import{spawn as HR}from"node:child_process";var MR=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function UR(e){return e.replace(MR,"")}var WR=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function ai(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var LR=new Set(["cursor"]);function BR(e){let r=e.trim().toLowerCase();return LR.has(r)?"auto":null}function li(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=UR(t).trim()||r;return WR.test(o)||!ai(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 mt(e,r){let t=(e??"").trim();return t?ai(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=BR(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")`}:ai(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 ft="claude-sonnet-4-6",fu={name:"claude",defaultModel:ft,preflightModel(e){return li(e,ft)},start(e){let r=li(e.model,ft);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=mu(e.stdoutPath,"a"),o=mu(e.stderrPath,"a"),s=["ignore",n,o],i=HR("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:Ye(process.env)}));if(pu(n),pu(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}}};Vr();w();import{closeSync as yu,existsSync as jR,openSync as Ru}from"node:fs";import{spawn as vu}from"node:child_process";Vr();w();import{closeSync as gu,openSync as hu}from"node:fs";import{spawn as FR}from"node:child_process";var ui=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function $R(){return Ye({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function KR(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 ku={name:"hermes-codex",defaultModel:ui,preflightModel(e){return mt(e,ui)},start(e){let r=mt(e.model,ui);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=hu(e.stdoutPath,"a"),o=hu(e.stderrPath,"a"),s=["ignore",n,o],i=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=KR(t,e.prompt),l=FR(i,a,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:$R()}));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 VR(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Ar=VR();function GR(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function YR(){return Ye({...process.env,CI:"1",NO_COLOR:"1"})}function JR(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function qR(e,r,t){if(!(process.platform!=="win32"&&jR("/usr/bin/script")))return vu(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return vu("script",["-qfc",o,"/dev/null"],t)}var bu={name:"codex",defaultModel:Ar,preflightModel(e){return mt(e,Ar)},start(e){if(pt().path==="hermes_openai_codex")return ku.start(e);let t=mt(e.model,Ar);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Ru(e.stdoutPath,"a"),s=Ru(e.stderrPath,"a"),i=["ignore",o,s],a=GR(),l=JR(n,e.prompt),c=qR(a,l,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:YR()}));if(yu(o),yu(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 zR="claude-sonnet-4-6",ti="composer-2.5";function Ro(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Su(e){return e.toLowerCase()}function pi(e=v()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||zR}function di(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 XR(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:ti,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:ft,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function wu(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 QR(e){let r=Su(Ro(e,"executorRef")),t=Ro(e,"title").toLowerCase(),n=Ro(e,"priority")||"normal",o=Su(Ro(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Ar,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:Ar,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 wu(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(wu(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:di(s),rule:"default:global"}}function vo(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=XR(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||di(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=QR(e.task);r={...o,requestedModel:o.model}}else{let o=pi();r={model:o,provider:e.explicitProvider?.trim()||di(o),rule:"default:global",requestedModel:o}}let t=Xc({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"||Pr(t.provider)&&(e.explicitProviderIsOperatorOverride||ri(e.task)))return t;let n=du({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Ar:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Cu(e,r,t){return e||r||t||pi()||ft}function xu(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _u(){return{maxTaskAttempts:xu(process.env.KYNVER_MAX_TASK_ATTEMPTS,4),dispatchCooldownMs:xu(process.env.KYNVER_DISPATCH_COOLDOWN_MS,5e3)}}I();import rv from"node:path";W();G();w();var mi="kynver-harness:",Pu="@runner:";function fi(e){return e?.trim()?e.trim():null}function ZR(e){let r=fi(e);if(!r?.startsWith(mi))return null;let t=r.slice(mi.length),n=t.indexOf(Pu);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function gi(e,r){let t=e.trim(),n=r.trim();return`${mi}${t}${Pu}${n}`}function hi(e,r){let t=fi(r);return t?ZR(e)===t:!1}function bo(e){let r=fi(e.workerLeaseOwner);return r&&hi(r,e.runId)?r:gi(e.runId,e.runnerId)}import Eu from"node:os";Ee();Ee();import ev from"node:os";function So(e,r){let t=(r??ev.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function lr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env;return{runnerId:lr(r.KYNVER_RUNTIME_ID)??lr(r.OPENCLAW_RUNTIME_ID)??lr(r.HOSTNAME)??Eu.hostname(),hostname:lr(r.HOSTNAME)??Eu.hostname(),profile:lr(r.KYNVER_RUNNER_PROFILE)??lr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:lr(r.KYNVER_HARNESS_REPO)??lr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null}}function Au(e,r){return x(rv.join(_(e),"workers",R(r),"worker.json"),void 0)}async function wo(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=L(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)):ki,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Au(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=bo({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 Ou(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=Au(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}ye();W();W();import{existsSync as vb,mkdirSync as bb}from"node:fs";import ht from"node:path";var tv=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,nv="next-action-fix:";function Co(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Iu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Co(e)}function ov(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(nv)||t.includes("repair")||t.includes("unblock"))}function sv(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(tv);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Co(String(n.targetPrUrl??n.target_pr_url??"")),s=Co(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Iu(o):null,targetPrBranch:s}}catch{return r}}function Nu(e){if(!ov(e))return null;let r=sv(e.description),t=e.prUrl?Iu(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Co(e.branch)}:null}function Tu(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 Du(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?["Plan progress: when planId is set, use `kynver plan progress` for in_progress|running|partial|blocked. Use `in_progress` for agent-loop current focus; use `running` only when an executor holds a lease. Row `done` is MCP/session only.",e.planId?`Active planId: ${e.planId}`:"No planId on this worker."]:["Structured plan progress (required when planId is set):","- Harness checkpoints only: `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked` (the by-id harness route rejects `done` and confirm events). Prefer `in_progress` at turn start for current focus; daemon sets `running` on dispatch.","- 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.","- Propose/confirm row `done` is MCP/session only: chat agents use `agent_os_plan_progress_event_append` on the slug route (implementer proposes with `proposed: true`; report_reviewer/deep_reviewer confirm with `proposed: false`).","- When blocked on operator/Ghost/runtime review, create a linked review task (MCP `agent_os_plan_review_task_create` or API) and pass `--review-task <taskId>`.","- Before the completion report: mark completion-report rows partial with evidence; do not skip report review.","- After implementation: wait for report_reviewer then deep_reviewer confirmation (via MCP/session agents) before follow-up rows close.",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."],o=t?["Merge-gate cost control: do not use Vercel previews/builds for PR verification. Run `node scripts/agent-os-pr-merge-gate.mjs --pr <url> --agent-os-id <id>` (or `verify-pr-local.mjs --from-pr` + POST pr-merge-gate/refresh) before any GitHub Actions run; request merge-gate only via refresh then POST pr-merge-gate/request-run (one Actions run per PR head unless human approves extra). Per-PR Vercel preview builds are off by default \u2014 production deploy runs via release batch after merge."]:["GitHub Actions merge-gate cost control (Kynver/Hermes PRs):","- Prefer local cached package verification (`node scripts/verify-pr-local.mjs --emit-json`) before GitHub Actions. Do not use Vercel previews/builds as PR evidence.","- Do not push empty commits to re-trigger CI. One budgeted merge-gate Actions run per PR candidate (head SHA) unless a human approves extra.","- Record evidence: POST `/api/agent-os/by-id/<agentOsId>/pr-merge-gate/refresh` with prUrl + local payloads.","- Request the final Actions run only when local verification is green: POST `.../pr-merge-gate/request-run` (applies `merge-gate` label).","- Empty failed Actions jobs (no runner/steps/logs) are infra/quota \u2014 do not enter repair loops; escalate to operator.","- After merge, landed PRs accumulate into a release batch; run batch verification then manual Vercel production deploy from Command Center (release train). PR landing completes with: verification complete, awaiting release batch/deploy."],s=t?["Plan artifacts: when authoring/revising docs/superpowers/plans/, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in the harness worktree."]:["Plan persistence: use AgentOS API/MCP first; on approval/auth/network/server/interruption failures run `kynver plan persist` (queues under ~/.kynver/state/plan-outbox) then `kynver plan outbox drain` when connectivity returns. Never treat /tmp-only files as persisted plans.","PR-first plan artifacts (when authoring or revising docs/superpowers/plans/):","- Before substantial plan drafting: create a feature branch, open a GitHub PR (draft OK), commit and push the plan file \u2014 do not leave the canonical plan only in this harness worktree.","- Iterate review on that PR branch; link prUrl on the AgentOS task and plan progress evidence (`--evidence pr:<url>`).","- See docs/superpowers/plans/2026-05-25-pr-first-plan-artifact-preservation.md for the full checklist."];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.","Structured final result (recommended): record completion as JSON with summary, laneExpertise { whatChanged, why, files, prUrls, verification, risks, blockers, lessonsLearned, laneGuidance }, and targetPrReconciliation [{ prUrl, outcome: merged|skipped|blocked, mergeCommit?, reason? }] for every target PR on landing-only tasks. Persona-attributed tasks: put repeatable lane lessons in lessonsLearned/laneGuidance (with evidence); substantive rows auto-persist as persona-scoped Lane A rules \u2014 global cross-lane policy stays in owner memory, not worker lessons.","Completion handoff (required): before you stop, ensure the harness records a final result \u2014 summarize outcome in your last message and append a heartbeat line with phase `complete`. If you leave uncommitted changes or committed work without a PR, the orchestrator blocks completion until a GitHub PR exists (or you discard/commit cleanly). One-off helper scripts must be removed (`kynver worker discard-disposable --path <file>`) or committed before completion \u2014 maintenance/board-drain workers are not exempt. Exiting with only dirty files and no PR routes to salvage review, not production review.","PR-ready handoff: for substantial implementation work, commit, push, and open a GitHub PR (draft OK) on your branch before finishing \u2014 or rely on the harness to run `gh pr create` at completion when `gh` is authenticated.","Expert review / production-review workers (Dalton/Lorentz, plan-review-task, scheduledJob reviewer children): do NOT open new implementation PRs \u2014 review the parent task's existing PR and record reviewVerdict in finalResult; landing-contract targetPrReconciliation does not apply.","Worker resource guard: do not run full monorepo verification (`npm run typecheck`, `npm run build`, or equivalent) from this worker lane unless an operator explicitly requests it. Use targeted checks for touched paths and rely on CI/operator lanes for heavy gates. When heavy verification is required, route through `node scripts/verify-pr-local.mjs` or `kynver harness verify` \u2014 they acquire the global heavy-verification lease so parallel workers do not launch simultaneous typechecks.","npm publish boundary: do not run `npm publish`, do not republish `@kynver-app/*` packages, and do not block on an operator to publish. When you need newer runtime code than npm, use this repo checkout (`npm run kynver:build`, `npm run kynver`) and record evidence: packages/kynver-runtime/package.json version + git ref in your completion report.","If verification fails (including OOM), append a heartbeat line immediately with the last command, failure reason, dirty-file status, commit/PR handoff state, and next action so recovery does not require log spelunking.","Landing-wrapper cleanup on a git ref: use `node scripts/agent-os-land-pr-cleanup-verify.mjs --ref origin/main` (JSON, exit 0). Do not use `git show <ref>:scripts/agent-os-land-pr.mjs | rg \u2026` \u2014 ripgrep exit 1 when markers are absent is reported as a failed command in Telegram/status tooling.","",...n,"",...o,"",...s,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (Lane A \u2014 from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...Tu({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
16
- `)}w();I();w();Vr();import{closeSync as Ri,existsSync as Uu,mkdirSync as uv,openSync as vi,statSync as dv,unlinkSync as Mu}from"node:fs";import{spawn as pv}from"node:child_process";import mv from"node:os";import Fe from"node:path";import{existsSync as tn,readdirSync as iv}from"node:fs";import Or from"node:path";var av=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function lv(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 cv(e){let r=Or.join(e,"versions");if(!tn(r))return null;let t=null,n=-1;for(let o of iv(r,{withFileTypes:!0})){if(!o.isDirectory()||!av.test(o.name))continue;let s=lv(o.name);s==null||s<=n||(n=s,t=Or.join(r,o.name))}return t}function xo(e){let r=e?.trim()||Or.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=Or.join(r,"node.exe"),n=Or.join(r,"index.js");if(tn(t)&&tn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=cv(r);if(!o)return null;let s=Or.join(o,"node.exe"),i=Or.join(o,"index.js");return!tn(s)||!tn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var yi="composer-2.5",fv=15e3,gv=6e4,hv=3e4;function kv(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function yv(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Uu(Fe.join(Fe.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?xo(Fe.dirname(e)):t?{nodeExe:e,indexJs:Fe.join(Fe.dirname(e),"index.js"),versionDir:Fe.dirname(e)}:xo();if(o)return kv(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 Rv(){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=xo(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=Fe.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(Uu(t))return t}return"agent"}function vv(e,r){return Ye({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:Fe.basename(e)||"agent.cmd"}:{}})}function Wu(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function bi(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 bv(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Fe.join(mv.homedir(),".kynver","locks");return uv(e,{recursive:!0}),Fe.join(e,"cursor-agent-start.lock")}function Sv(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=bv(),r=bi("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",gv),t=bi("KYNVER_CURSOR_START_LOCK_STALE_MS",hv),n=Date.now();for(;;)try{let o=vi(e,"wx");return Ri(o),()=>{try{Mu(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-dv(e).mtimeMs>t){Mu(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Wu(250)}}var Lu={name:"cursor",defaultModel:yi,preflightModel(e){return ci(e,yi)},start(e){let r=ci(e.model,yi);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=vi(e.stdoutPath,"a"),o=vi(e.stderrPath,"a"),s=["ignore",n,o],i=Rv(),a=yv(i),l=Sv(),c;try{c=pv(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:vv(i,a)})),Wu(bi("KYNVER_CURSOR_START_LOCK_HOLD_MS",fv))}finally{l(),Ri(n),Ri(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 _o={claude:fu,codex:bu,cursor:Lu},Bu=null;function Hu(e){if(Bu)return Bu;let r=e?.trim();if(r){let o=_o[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(_o).join(", ")}`);return o}let t=ho(v().workerProvider),n=_o[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(_o).join(", ")}`);return n}w();import{spawn as ub}from"node:child_process";import{existsSync as db,openSync as pb,closeSync as Pd}from"node:fs";import Ed from"node:path";import{fileURLToPath as mb}from"node:url";W();function Po(e){return!!e.completionReportedAt?.trim()}function Si(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),V(r,e)}function wv(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function wi(e){return!!(wv(e.completionBlocker)||e.completionOutcome==="rejected")}function Ir(e){return Po(e)&&!wi(e)}W();G();I();import ln from"node:path";function Ci(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function nn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var Cv=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function Fu(e){let r=Ci(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=nn(r.outcome),n=nn(r.detail)??nn(r.error),o=Ci(r.task),s=Ci(r.closedTask),i=o?nn(o.status):null,a=s?nn(s.status):null,l=t!==null&&Cv.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function $u(e){return e.taskAdvanced}W();Jn();var xv="expert-lane-pr-review:",_v="plan-review-task",Pv="scheduledjob:";function Ku(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function ju(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(xv)||r===_v||r.startsWith("daemon-review:"))return!0;if(r.startsWith(Pv)&&e.parentTaskId){let n=Ku(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=Ku(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var Vu=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,Ev=new Set(Yc()),Av=/no commits between/i;function Gu(e){return!!(e&&Av.test(e))}function ue(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Yu(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ue(e.head)}function Ju(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 Ov(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 Iv(e,r){if(r.changedFiles.length>0)return!1;let t=ue(e.personaSlug)?.toLowerCase();if(t&&Ev.has(t))return!0;let n=ue(e.routingRule)??"";return!!(n&&Vu.test(n))}function Nv(e,r){if(e.changedFiles.length>0)return!0;let t=ue(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=Ov(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(ue(e.headCommit)||Yu(e.gitAncestry))}function qu(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(ju({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&&Vu.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(Iv(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 Nv(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function zu(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:ue(r?.headCommit)??Yu(e.gitAncestry),prUrl:ue(r?.prUrl)??null}}import{spawnSync as Tv}from"node:child_process";function Qu(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Xu(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Xu(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 Xu(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 Dv(e,r,t){try{let n=Tv(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 Ao={git:(e,r)=>Q(e,r),gh:(e,r)=>Dv("gh",e,r)};function Mv(e){return e.split(`
17
- `).map(r=>r.trim()).find(Boolean)??""}function Zu(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Qu(t.stdout)}function on(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Eo(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 Oo(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=on(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function ed(e){let r=Eo(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=Uv(t.stdout)??Eo(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 Uv(e){let t=Mv(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}function Wv(e){return e.gh(process.cwd(),["--version"]).status===0}function Lv(e,r){return`AgentOS harness: ${e} (${r})`}function Bv(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(`
18
- `)}function xi(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??on(e.snapshot.worktreePath,e.exec)??void 0};let r=Oo({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 _i(e,r=Ao){let t=e.prUrlHint??Ju(e.status.finalResult)??null,n=zu(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!qu({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?xi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return xi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!Wv(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=Zu(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??on(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Oo({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=Eo(n.worktreePath,i,n.branch,r);if(l)return xi({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=Oo({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??on(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=ed({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:Lv(e.worker.name,e.worker.runId),body:Bv(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Gu(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();Yn();function Io(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 rd(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 nd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function sd(e){let r=nd(e);if(!r)return[];let t=nd(r.worktreeHandoff),n=td(t?.disposableArtifactsRemoved);return n.length?n:td(r.disposableArtifactsRemoved)}function od(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function id(e,r){let t=Io(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>od(o)));return t.every(o=>{let s=od(rd(o));return n.has(s)})}function No(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ad(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Hv(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 Fv(e){let r=ad(e.disposableArtifactsRemoved),t=sd(e.finalResult);return[...new Set([...r,...t])]}function ld(e){let r=ad(e.changedFiles),t=Io(r),n=Fv(e),o=t.length===0||id(r,n);return No(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`}:No(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`}:No(e.artifactBundlePath)||No(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}:Hv(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`}}W();G();w();import $v from"node:path";var Kv=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function cd(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function jv(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 Vv(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:jv(r);return{finalResult:r??t??"completed",summary:t}}function Pi(e,r,t){if(cd(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Vv(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function Gv(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 ud(e,r){let t=Gv(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=x($v.join(_(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||cd(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!Kv.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});Pi(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Yv from"node:path";var Jv=/^[a-z0-9][a-z0-9._-]{0,127}$/i,qv=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Ei=new Set(["undefined","null"]),dd="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function To(e){let r=e.trim();if(!Jv.test(r))throw new Error(`invalid run id: ${e}`);return r}function zv(e){let r=e.trim();if(!qv.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Ai(e){return typeof e=="string"?e.trim():""}function $e(e){let r=Ai(e.run),t=Ai(e.name);return(!r||Ei.has(r))&&tr(`missing --run RUN_ID (${dd})`),(!t||Ei.has(t))&&tr(`missing --name WORKER_NAME (${dd})`),{runId:To(r),workerName:zv(t)}}function Oi(e){let r=Ai(e.run);return(!r||Ei.has(r))&&tr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),To(r)}function pd(e){let r=Yv.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function md(e,r,t){let n=await fetch(e,{method:"POST",headers:Xe(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 Xv(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function fd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function sn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Qv(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function Zv(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 hd(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function eb(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function an(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function rb(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function Do(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function tb(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function cn(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=U(n.runId),s=T(n,Do(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&&Ir(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&wi(n)&&rb(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=_i({worker:n,run:o,status:s});if(!P.ok)return an(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=T(n,Do(o)),s=tb(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 b=P.detail??`worktree completion blocked (${P.state})`;return an(n,b),{ok:!1,reason:b,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=L(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 md(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await fc(i,{baseUrl:d});P&&P!==m&&(m=P,h=await md(p,m,k))}if(h.ok){let P=Fu(h.parsed);if(!$u(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")}`;an(n,oe);let Te={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Si(n,n.runId,Te),{ok:!1,httpStatus:h.status,response:h.parsed,reason:oe,completionBlocked:!0}}an(n,void 0);let b=P.routeOutcome??"acknowledged",E={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Si(n,n.runId,E),Pi(n,s,{source:"harness-completion"});let H=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:b,...H?{prHandoff:{prUrl:H}}:{}}}let S=h.status===401||h.status===403,A=Xv(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),B=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return an(n,B),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function Ni(e){try{let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=U(n.runId),s=T(n,Do(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 cn(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 kd(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=U(n.runId),s=T(n,Do(o));le(ln.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function nb(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 Ii(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function ob(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Ii(e.task??e.taskId);t&&(r.task=t);let n=Ii(e.worker??e.name);n&&(r.worker=n);let o=Ii(e.status);return o&&(r.status=o),r}function sb(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 yd(e,r){let t=ob(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>sb(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:cr(n,"status"),attentionCounts:cr(n,"attention"),lifecycleCounts:cr(n,"lifecycleStage")}),e.controller&&(o.controller=bd(n)),o}function Rd(e){let r=Oi(e),t=e.full===!0||e.full==="true",n=yd(t?Nr(r):wd(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:nb(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function vd(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=et({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=hd(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=fd(n.completionResponse),m=fd(f?.task),p=sn(f?.outcome),g=sn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(b=>typeof b=="string"&&b.trim().length>0):[],h=sn(m?.prUrl)??sn(f?.prUrl),S=sn(n.completionReportedAt),A=Qv({finished:re(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),B=Zv({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:re(o)}),P=eb({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 b=n.instructionPolicyEvidence;if(!b||typeof b!="object")return null;let E=b.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:B,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function ib(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&&!hd(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function ab(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 cr(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 bd(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 Sd(e,r,t){let n={runId:e.id,name:e.name,status:Gt(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:cr(r,"status"),attentionCounts:cr(r,"attention"),lifecycleCounts:cr(r,"lifecycleStage")},n.controller=bd(r)),n}function lb(e){return e.status==="done"&&e.attention==="done"}function Nr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=x(ln.join(_(r.id),"workers",R(s),"worker.json"),void 0);return i?vd({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Sd(r,n,!1);return le(ln.join(_(r.id),"last-board.json"),o),o}function wd(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=x(ln.join(_(r.id),"workers",R(i),"worker.json"),void 0);return a?ib(a)?ab(i,a):vd({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!lb(i)),s=Sd(r,o,!0);return s.status=Gt(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:cr(n,"status"),allAttentionCounts:cr(n,"attention")},le(ln.join(_(r.id),"last-board-compact.json"),s),s}async function Cd(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Nr(t),s=L(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 cb(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 un(e){let r=Oi(e),t=e.full===!0||e.full==="true",n=yd(t?Nr(r):wd(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=cb(r)),console.log(JSON.stringify(n,null,2))}function xd(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=Fn(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
19
- `).filter(Boolean)){let i=jr(s),a=i?Vl(i):s;a&&console.log(a)}}function _d(e){let{runId:r,workerName:t}=$e(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(Lt(n.pid,"SIGTERM"),kr(1500),$(n.pid)){Lt(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 fb=5e3,gb=360*60*1e3,hb=3,kb=5e3;function yb(e){let{runId:r,workerName:t}=$e(e);return{run:r,name:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,maxTotalMs:Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):void 0,completeAttempts:Number(e.completeAttempts)>0?Math.floor(Number(e.completeAttempts)):void 0,completeBackoffMs:Number(e.completeBackoffMs)>0?Math.floor(Number(e.completeBackoffMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}}async function gt(e){let r=yb(e),t=r.pollMs??fb,n=r.maxTotalMs??gb,o=r.completeAttempts??hb,s=r.completeBackoffMs??kb,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(Ir(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),Ir(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`};kr(t)}let l,c;for(let u=1;u<=o;u++){let d=await cn({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&&kr(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function Ad(e){try{let r=await gt(e);console.log(JSON.stringify(r,null,2)),(r.outcome==="missing_link"||r.outcome==="timed_out")&&process.exit(1),process.exit(0)}catch(r){console.error(`worker auto-complete failed: ${r.message}`),process.exit(1)}}function Rb(){return Ed.join(mb(new URL(".",import.meta.url)),"cli.js")}function Od(e){let r=e.cliPath??Rb();if(!db(r))return;let t=Ed.join(e.workerDir,"auto-complete.log"),n;try{n=pb(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=ub(s,i,ae({detached:!0,stdio:o,env:process.env}));return n!==void 0&&Pd(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{Pd(n)}catch{}return}}ye();function Id(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();I();function Ti(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||Qe,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:vo({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=Hu(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=ht.join(_(e.id),"workers",n);bb(l,{recursive:!0});let c=ht.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(vb(c))throw new Error(`worktree path already exists: ${c}`);ce(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?Id(e.repo,c,u):ce(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=ht.join(l,"stdout.jsonl"),m=ht.join(l,"stderr.log"),p=ht.join(l,"heartbeat.jsonl"),g=Du({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=Cu(S.model,i,s.defaultModel),B=v(),P=Me(process.env,B),b=He().runnerId,E=So(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:b,startedAt:new Date().toISOString()};if(V(e.id,H),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:ht.join(l,"worker.json")}},e.status="running",Ae(e),H.agentOsId&&H.taskId){let M;try{M=Od({runId:e.id,workerName:n,workerDir:l,agentOsId:H.agentOsId})}catch(oe){let Te=`completion sidecar failed to spawn: ${oe.message}`;H.completionBlocker=Te,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 Nd(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):Rl(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=Ti(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 gt({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 Td}from"node:crypto";function ur(e){let r=e.replace(/\r\n/g,`
20
- `).trimEnd();return Td("sha256").update(r,"utf8").digest("hex")}function kt(e){if(e==null)return null;let r=e.trim();return r?Td("sha256").update(r,"utf8").digest("hex"):null}I();var J=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function dn(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 Di(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 Dd(e){return e!=="permanent"}function Uo(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Wo(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function Md(e,r,t={}){let n=L(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:Uo(o)}),l=await Wo(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw dn(a.status,c)}return l}catch(a){throw a instanceof J?a:Di(a)}}async function Ud(e,r={}){let t=L(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:Mo(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Mo(e)}},p=await o(f,{method:"POST",headers:Uo(n),body:JSON.stringify(m)}),g=await Wo(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${p.status})`;throw dn(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:Mo(e)},p=await o(f,{method:"PATCH",headers:Uo(n),body:JSON.stringify(m)}),g=await Wo(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${p.status})`;throw dn(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:Mo(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Uo(n),body:JSON.stringify(l)}),u=await Wo(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw dn(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:Di(i)}}function Mo(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as Sb}from"node:crypto";function Lo(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:kt(e.summary),bodyHash:ur(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return Sb("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as Wd}from"node:fs";import{homedir as wb}from"node:os";import yt from"node:path";function Bo(){let e=process.env.KYNVER_STATE_ROOT;return e?yt.resolve(e):yt.join(wb(),".kynver","state")}function Ho(){return yt.join(Bo(),"plan-outbox")}function Cb(){return yt.join(Bo(),"plan-outbox-archive")}function Tr(){let e=Ho(),r=Cb();return Wd(e,{recursive:!0}),Wd(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function pn(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=yt.resolve(e);return r.startsWith("/tmp/")||r.startsWith(yt.join("/var","folders"))}import{existsSync as Mi,readFileSync as Bd,renameSync as Ld,readdirSync as xb,writeFileSync as Ui,unlinkSync as PD}from"node:fs";import Oe from"node:path";import{randomUUID as _b}from"node:crypto";var Pb=12;function Rt(){let{outboxDir:e}=Tr(),r=xb(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=Li(Oe.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function Wi(e){for(let r of Rt())if(r.idempotencyKey===e)return r;return null}function Li(e){if(!Mi(e))return null;try{return JSON.parse(Bd(e,"utf8"))}catch{return null}}function Hd(e){let{outboxDir:r}=Tr(),t=Oe.join(r,e.bodyPath);return Bd(t,"utf8")}function Bi(e,r){let{outboxDir:t}=Tr(),n=new Date().toISOString(),o=r.existing?.id??_b(),s=r.existing?.bodyPath??`${o}.body.md`,i=Oe.join(t,`${o}.json`),a=Oe.join(t,s);r.existing||Ui(a,e.body,"utf8");let l={id:o,idempotencyKey:Lo(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:ur(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??Pb,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return Ui(i,`${JSON.stringify(l,null,2)}
21
- `,{mode:384}),l}function Fd(e){let{outboxDir:r}=Tr(),t=Oe.join(r,`${e.id}.json`);Ui(t,`${JSON.stringify(e,null,2)}
22
- `,{mode:384})}function $d(e){let{outboxDir:r,archiveDir:t}=Tr(),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);Mi(n)&&Ld(n,s),Mi(o)&&Ld(o,i)}function mn(e){let{outboxDir:r}=Tr();return{jsonPath:Oe.join(r,`${e.id}.json`),bodyPath:Oe.join(r,e.bodyPath)}}function Kd(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 jd(e,r,t={}){let n=await Md(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=kt(r.summary),a=kt(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=ur(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 Vd(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:ur(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var Gd="persisted and read back",Eb="queued for retry",Hi="failed and needs action";async function fn(e,r={}){e.bodyPathHint&&pn(e.bodyPathHint);let t=Lo(e),n=Wi(t);if(n?.readbackEvidence)return{userStatus:Gd,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Yd(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??Ud,s=r.verifyReadback??jd;try{let i=await o(e,r),a={...e,planId:i.planId},l=Vd(a,i),c=await s(e.agentOsSlug,Ab(e,l),r);return n&&$d(n),{userStatus:Gd,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(!Dd(a.kind)){let l=Bi(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=mn(l),u=Jd(l,a.message);return{userStatus:Hi,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Yd(e,a.message,a.kind,n)}}function Ab(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Yd(e,r,t,n){let o=Bi(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=mn(o);if(o.retryCount>=o.maxRetries){let i=Jd(o,r);return{userStatus:Hi,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:Eb,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function Jd(e,r){let t={...e,queueStatus:"failed",userStatus:Hi,lastError:r,updatedAt:new Date().toISOString()};return Fd(t),t}import Ob from"node:path";async function Fi(e={},r={}){let t=Rt().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=Hd(s),a=Kd(s,i),l=await fn(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 $i(e){let r=Ob.join(Ho(),`${e}.json`);return Li(r)}function Ki(e){let r=mn(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(`
23
- `)}function ji(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 Vi(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 zd}from"node:child_process";import{spawnSync as Ib}from"node:child_process";function qd(){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=Ib("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 Xd=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),Nb=new Set(["CLEAN","HAS_HOOKS"]);function Yi(e){return e?.trim()?["--repo",e.trim()]:[]}function Qd(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Zd(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 gn(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function Tb(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&&Xd.has(i))){if(i){n.push(`${gn(s)}=${i}`);continue}if(!(l&&Xd.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${gn(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${gn(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${gn(s)}=${a}`);continue}t.push(`${gn(s)}=PENDING`)}}}return{pending:t,failed:n}}function Db(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 Mb=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,Ub=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,Wb=/^docs[(:]/i,Lb=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function Bb(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=Wb.test(r)||Lb.test(t),o=Mb.test(t),s=Ub.test(t);return n||o||s||e.vercelCheckSuccess===!0}function Hb(e){if(!Bb({title:e.title,body:e.body,vercelCheckSuccess:Db(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 Fb(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(!Nb.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=Tb(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(", ")}`);Hb(e)}function $b(e){try{return Fb(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function Kb(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 jb(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 Vb(e,r){if(!r?.trim())return;let t=zd("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}`)&&zd("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function ep(e){let r=e.cwd??process.cwd(),t=e.exec??Ao,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=qd();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=Zd(t,r,["pr","view",n,...Yi(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=$b(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,...Yi(e.repo),"--squash"]);if(l.status!==0){let u=Gi(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=Gi(t,r,a,e.repo);c||(c=Gi(t,r,a,e.repo));try{let u=jb(t,r,e.repo);Kb(t,r,u,s.headRefName),Vb(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 Gi(e,r,t,n){try{let o=Zd(e,r,["pr","view",t,...Yi(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}I();async function rp(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>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface."].join(`
24
- `)}var ki=3600*1e3;function np(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function op(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function Gb(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 Yb(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function Jb(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=ji(e);if(n?.outboxId){let o=$i(n.outboxId);o?t.push("",Ki(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
25
- `)}function qb(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 Dr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let Ut=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=Ut;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=L(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=He({runId:n.id}),u=gi(n.id,c.runnerId),d=e.diskPath?We({diskPath:String(e.diskPath)}):We({diskPath:n.repo}),f=br({runId:n.id}),m=qb(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=mo(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`,B=C=>({agentOsId:o,dryRun:l,maxStarts:C,leaseOwner:u,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):ki,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Nr(n.id),...e.lane?{lane:qc(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,B(C),{agentOsId:o,baseUrl:s})??{ok:!1,status:0,response:null},O=y.response;return{dispatch:y,result:O?.result}},b=await P(p||l?h:1);if(!b.dispatch.ok||!b.result){let C={runId:n.id,agentOsId:o,action:"dispatch",httpStatus:b.dispatch.status,response:b.dispatch.response,authRefreshed:b.dispatch.refreshedAuth===!0,authRefreshFailure:b.dispatch.authRefreshFailure};if(r)return{ok:!1,...C};console.log(JSON.stringify(C,null,2)),process.exit(1)}let E=b.result;if(l){let C=np(E),y=op(E),O={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,...O};console.log(JSON.stringify(O,null,2));return}let H=_u(),M=[],oe=[],Te=Number(E.inspected)||0;async function ge(C,y,O){let j=await Vi({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,...O}),!1}async function Wt(C){let y=C.task,O=String(y.id);if(p&&!m.has(O))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 De=await ep({prUrl:j,repo:Qd(j),cwd:n.repo}),$r=await rp({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:De});return $r.ok?(M.push({taskId:O,started:!0,landPr:!0,outcome:De.outcome,completionStatus:$r.status}),!0):ge(y,`land_pr completion POST failed (HTTP ${$r.status})`,{landPr:!0,outcome:De.outcome})}catch(De){return ge(y,De.message)}}async function he(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",O=await Vi({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:O.released,releaseResponse:O.releaseResponse}),!1}async function X(C){let y=C.task,O=Gb(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 De=Yb(y.personaSlug);if(De&&(!O?.personaInjectionReady||!O.personaMarkdown))return ge(y,`persona_injection_required: missing anchored context-envelope persona block for "${De}"`);if(Ou(n.id,j))return he(y);let $r=Number(y.attempt)||1;if($r>H.maxTaskAttempts)return ge(y,`task attempt ${$r} exceeds KYNVER_MAX_TASK_ATTEMPTS (${H.maxTaskAttempts})`);let gh=R(`t-${y.id}-a${y.attempt}`),Kr=vo({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:zc(y)});try{let Ps=y.planId?String(y.planId):void 0,Un=Nu({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}),Wn=Ti(n,{name:gh,task:Jb(y,o),ownedPaths:e.owned?String(e.owned).split(",").map(hh=>hh.trim()).filter(Boolean):[],model:Kr.model,provider:Kr.provider,routingRule:Kr.rule,requestedModel:Kr.requestedModel,agentOsId:o,taskId:String(y.id),planId:Ps,branch:Un?.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:Un?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:Un?.targetPrUrl,repairTargetBranch:Un?.targetPrBranch??void 0,instructionPolicyMarkdown:O?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyEvidence:O?.instructionPolicyEvidence??null,memoryQualityCapture:O?.memoryQualityCapture??null,memoryQualityPromptMarkdown:O?.memoryQualityPromptMarkdown??null,personaMarkdown:O?.personaMarkdown??null,personaSlug:O?.personaSlug??De,personaEvidence:O?.personaEvidence??null,contextEnvelopeMarkdown:O?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:O?.contextEnvelopeEvidence??null,leaseOwner:u,leaseToken:y.leaseToken?String(y.leaseToken):void 0,dispatched:!0});return M.push({taskId:y.id,started:!0,worker:Wn.name,pid:Wn.pid,branch:Wn.branch,model:Wn.model,provider:Kr.provider,routingRule:Kr.rule,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(O?.instructionPolicyEvidence?.ruleSlugs)?O.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:O?.personaSlug??De,personaOperatingRuleCount:O?.personaEvidence?.operatingRuleCount??null}),O?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: Lane A instruction policy injected fingerprint=${O.instructionPolicyFingerprint}`),O?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${O.personaSlug}`),O?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${O.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Ps){return ge(y,Ps.message)}}let D=new Set;async function se(C){let y=C.task,O=String(y.id);if(D.has(O))return ge(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=Ut(C)?await Wt(C):await X(C);return j||D.add(O),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}Te+=Number(C.result.inspected)||0,oe.push(...C.result.skipped??[]);let y=C.result.started??[];if(y.length===0)break;for(let O of y){if(M.length>=h)break;await se(O)}}let de=M.filter(C=>C.started).length,ke=np(E),ie=op(E),Mn=de===0&&(ke?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(Mn&&ke?.summary){let C=ke.skipReasonCounts?.retry_ceiling_exceeded??0,y=E.overAttemptIdleRecovery??ke.overAttemptIdleRecovery,O=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}`:""}${O}${j}`)}let fl={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:de,capacityIdle:Mn,admissionExhaustion:ke,dispatchSkipDrain:ie,outcomes:M,skipped:oe.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:Te,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate},gl=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(gl),...fl};console.log(JSON.stringify(fl,null,2)),M.some(gl)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}var zb=1;function vt(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function Xb(e){let{maxStarts:r,...t}=e;return t}async function Ji(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=Xb(e);if(t.targetTaskId||t.targetTaskIds){let u=await Dr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:vt(u)}}let n=Math.min(r,zb),o=Math.max(0,r-n),s=await Dr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=vt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Dr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=vt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function sp(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 Qb(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function hn(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function ip(e,r){let t=Qb(r),n=hn(t?.recommendedMaxStarts),o=hn(t?.actionableReady),s=hn(t?.queuedTasks),i=hn(t?.boardAdvancedThisTick)??0,a=hn(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 IS from"node:path";W();Xr();G();w();import Zb from"node:path";var eS=new Set(["running","dispatching","pending","queued","needs_attention"]),Ze=new Set(["completed","failed","cancelled","done"]);function Mr(e){let r=be(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Zb.join(_(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),st(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function kn(){let e=[];for(let r of ee()){if(!eS.has(r.status))continue;let t=Mr(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}W();Xr();G();w();Zr();Yn();import{existsSync as mr,lstatSync as dS,readdirSync as pS,readlinkSync as mS,renameSync as na,rmSync as fS}from"node:fs";import Ke from"node:path";ve();w();import Ie from"node:path";var rS=`${Ie.sep}runs${Ie.sep}runs${Ie.sep}`;function Fo(e){return e.includes(rS)}function qi(e,r){return Ie.join(Re(ne(e)),R(r))}function dr(e,r,t){return Ie.join(qi(e,r),"workers",R(t))}function ap(e,r,t){let n=ne(e);return Ie.join(n,"runs","runs",R(r),"workers",R(t))}function zi(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Ur(e){return{workerJsonPath:Ie.join(e,"worker.json"),stdoutPath:Ie.join(e,"stdout.jsonl"),stderrPath:Ie.join(e,"stderr.log"),heartbeatPath:Ie.join(e,"heartbeat.jsonl"),lastStatusPath:Ie.join(e,"last-status.json")}}function lp(e){let r=Ur(dr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Fo(e.statusPath)?e.statusPath:r}import{existsSync as pr,mkdirSync as nS,readdirSync as pp,renameSync as oS,statSync as Qi}from"node:fs";import z from"node:path";I();Kn();Je();import cp from"node:path";function tS(e){return cp.resolve(Gr(e.trim()))}function Xi(e,r,t){let n=e?.trim();return n?{repo:tS(n),source:r,persistedInConfig:t}:null}function Ce(e={}){let r=e.env??process.env,t=e.config??v(),n=Xi(t.defaultRepo,"config",!0);if(n)return n;let o=Xi(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Xi(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=Rr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function up(e,r){let t={...r??v(),defaultRepo:pe(cp.resolve(e))};return qe(t),t}function yn(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}Zr();ve();W();w();var Rn=900*1e3,sS=3600*1e3;function mp(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 Zi(e){if(!pr(e))return[];try{return pp(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function ea(e){let r=z.join(e,"workers");if(!pr(r))return[];try{return pp(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function fp(e){return z.join(e,"archived-workers")}function iS(e,r){let t=z.join(fp(e),R(r));return pr(t)?`${t}-${Date.now()}`:t}function dp(e,r,t){if(!pr(e))return!1;try{let n=r-Qi(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function gp(e,r=Date.now(),t=Rn){if(!pr(e))return!1;let n=Ur(e),o=x(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!!(dp(n.stdoutPath,r,t)||dp(n.heartbeatPath,r,t))}function aS(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-Qi(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function lS(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=aS(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 bt(e,r=Date.now(),t=Rn){for(let n of ea(e))if(gp(z.join(e,"workers",n),r,t))return!0;return!1}function cS(){return{repo:Ce()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function uS(e,r){let t=z.join(Re(e),R(r));if(!pr(t))return null;let n=ea(t);if(n.length===0)return null;let o;try{o=Qi(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=dr(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=bt(t);return{id:r,name:r,...cS(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ra(e){let r=ne(e??me()),t=Re(r),n=[];for(let o of Zi(t)){let s=z.join(t,o,"run.json");if(pr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=uS(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:bt(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function ta(e,r={}){let t=ne(e??me()),n=Re(t),o=r.now??Date.now(),s=r.archiveAgeMs??sS,i=[];ra(t);for(let a of Zi(n)){let l=z.join(n,a),c=z.join(l,"run.json"),u=x(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...ea(l)]),f=!1;for(let m of d){let p=z.join(l,"workers",R(m)),g=z.join(p,"worker.json"),k=x(g,void 0);if(!k){let A=z.join(fp(l),R(m));if(pr(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=lS(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=iS(l,m);nS(z.dirname(S),{recursive:!0}),oS(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 hp(e,r=Date.now()){let t=new Set,n=Re(e);for(let o of Zi(n)){let s=z.join(n,o);bt(s,r)&&t.add(`${e}\0${o}`)}return t}W();w();function gS(e,r){let t=qi(e,r),n;try{n=dS(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Ke.resolve(Ke.dirname(t),mS(t));if(bt(o)||bt(t))return null;let s=`${t}.materialize-${Date.now()}`;return na(o,s),fS(t),na(s,t),o}function hS(e){let r=[];for(let t of zi()){let n=Ke.join(e.fromDir,t),o=Ke.join(e.toDir,t);!mr(n)||mr(o)||(na(n,o),r.push(t))}return r}function kp(e,r){let t=Ur(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 kS(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 yS(e){let r=Ur(e.canonicalDir),t=x(r.lastStatusPath,void 0),n=mr(r.stdoutPath),o=mr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Gn(r.stdoutPath):{finalResult:null},a=o?Se(r.heartbeatPath):Se(""),l=Qr(a),c=kS({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:Ke.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}),kp(u,e.canonicalDir),u}function RS(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=dr(r,e.id,o),a=Ke.join(i,"worker.json");(Fo(s.workerDir)||Fo(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 vS(e){let r=[],t=dr(e.harnessRoot,e.run.id,e.workerName),n=ap(e.harnessRoot,e.run.id,e.workerName),o=Ur(t),s=hS({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=x(i,void 0);if(!a&&mr(o.workerJsonPath)&&(a=x(o.workerJsonPath,void 0)),!a){let l=yS({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=mr(t),u=zi().some(d=>mr(Ke.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:Ke.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 kp(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 bS(e,r){let t=Ke.join(_(e.id),"workers");if(!mr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of pS(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function yp(){let{harnessRoot:e}=te(),r=ra(e),t=[];for(let n of ee()){let o=gS(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),RS(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 bS(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:dr(e,n.id,i),statusPath:Ke.join(dr(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(...vS({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}Zr();zn();G();W();Xr();w();import{execFileSync as Rp}from"node:child_process";import vp from"node:path";function oa(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function SS(e){let r=oa(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function wS(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function CS(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 xS(e){let r=null;if(typeof e=="string"?r=tt(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=oa(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function _S(e){try{let n=Rp("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=Rp("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:oa(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 PS(e){let r=Se(e.heartbeatPath);return e.completionSnapshot?.finalResult??Qr(r)}function ES(e){let r=new Map,t=_(e.id);for(let n of be(e)){let o=x(vp.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of xS(PS(o))){let i=SS(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function AS(e,r){let t=Se(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,wS(r)].filter(Boolean).join(`
26
- `);return CS(n)}function OS(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function sa(e={}){let r=e.lookupPr??_S,t=[],n=new Map;for(let o of ee()){let s=ES(o),i=_(o.id);for(let a of be(o)){let l=vp.join(i,"workers",R(a),"worker.json"),c=x(l,void 0);if(!c||!OS(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 AS(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 NS=900*1e3;function TS(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function vn(){let e=yp();if(TS()){let s=sa(),i=ta();return{workers:[],finalizedRuns:kn(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ee())for(let i of be(s)){let a=IS.join(_(s.id),"workers",R(i),"worker.json"),l=x(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=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>NS,m=Number.isFinite(d)&&t-d>ot;if(f&&m){Lt(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=sa(),o=ta();return{workers:r,finalizedRuns:kn(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function bp(){let e=vn(),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))}zt();I();Ee();import DS from"node:os";function $o(e,r={}){let t=(r.boxKind??Ue(v())).trim().toLowerCase()||"forge",n=r.hostLabel??DS.hostname();return{boxId:r.boxId??So(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}:{}}}W();Jn();G();I();import MS from"node:path";W();G();w();async function bn(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=L(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=He({runId:t.id}).runnerId,a=await Cd({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=x(MS.join(_(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=bo({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();W();w();import US from"node:path";I();async function Sp(e){let r=L(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 wp(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=x(US.join(_(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 Sp({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}I();Ee();function WS(e=process.env){let r=v();return Ue(r,e)!=="forge"}function Cp(e,r=process.env){if(WS(r))return e?.maxConcurrentWorkers??void 0}async function xp(e,r){let t=L(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 fo(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}}I();Ee();ve();import Pe from"node:path";qn();import Vo from"node:path";ye();G();var ia=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function _p(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of ia)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function xe(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!_p(n)})}function Wr(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 Sn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?xe(e.changedFiles).length>0:!!(Wr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function wn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function aa(e,r){if(e.status)return xe(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Bt(e.worktreePath);return xe(t).length>0}function LS(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function la(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=LS(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Bt(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"}:$n(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??Wr(s)};return e.status=u,u}return wn(e)}G();G();Zr();w();function ca(e,r=Date.now(),t=Rn){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 Ko(e,r=Date.now(),t=Rn){return $(e.pid)?!0:ca(e,r,t)}function BS(e,r){return r?r.runTerminalCache.derive(e.run):Mr(e.run)}function er(e,r=Date.now()){return Ko(e.worker,r)}function ua(e,r){return Ze.has(e.run.status)?!1:BS(e,r)!==null}function Pp(e,r,t=Date.now()){if(er(e,t))return!0;if(Ze.has(e.run.status)||ua(e,r))return!1;let n=wn(e);return re(n)?!1:!!er(e,t)}qn();G();function Ep(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(er(e))return!0;let n=r??wn(e);return!!(!re(n)||Sn(n)||xe(n.changedFiles).length>0||rt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Wr(n.finalResult)}).blocked)}ye();w();import{existsSync as Op,mkdirSync as HS,writeFileSync as Ap}from"node:fs";import jo from"node:path";function Ip(e,r,t){return jo.join(e,"salvage",R(r),R(t))}function Np(e){return Op(jo.join(Ip(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Tp(e){let r=Ip(e.harnessRoot,e.indexed.runId,e.indexed.workerName);HS(r,{recursive:!0});let t=jo.join(r,"salvage.patch"),n=!1;if(Op(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(`
27
- `);a.trim()&&(Ap(t,a.endsWith(`
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??Lu();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 Hu(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=ki({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=ki({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 Fu,openSync as $u}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 bi(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 vi(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)||!bi(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?bi(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 Si(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")`}:bi(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",Ku={name:"claude",defaultModel:Rt,preflightModel(e){return vi(e,Rt)},start(e){let r=vi(e.model,Rt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=$u(e.stdoutPath,"a"),o=$u(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(Fu(n),Fu(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 Yu,existsSync as Hb,openSync as Ju}from"node:fs";import{spawn as qu}from"node:child_process";Jr();w();import{closeSync as ju,openSync as Vu}from"node:fs";import{spawn as Bb}from"node:child_process";var wi=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 Gu={name:"hermes-codex",defaultModel:wi,preflightModel(e){return yt(e,wi)},start(e){let r=yt(e.model,wi);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Vu(e.stdoutPath,"a"),o=Vu(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(ju(n),ju(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 qu(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return qu("script",["-qfc",o,"/dev/null"],t)}var zu={name:"codex",defaultModel:Nr,preflightModel(e){return yt(e,Nr)},start(e){if(kt().path==="hermes_openai_codex")return Gu.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=Ju(e.stdoutPath,"a"),s=Ju(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(Yu(o),Yu(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",gi="composer-2.5";function No(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Xu(e){return e.toLowerCase()}function _i(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Gb}function Ci(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:gi,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 Qu(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=Xu(No(e,"executorRef")),t=No(e,"title").toLowerCase(),n=No(e,"priority")||"normal",o=Xu(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 Qu(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Qu(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=_i();return{model:s,provider:Ci(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()||Ci(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=_i();r={model:o,provider:e.explicitProvider?.trim()||Ci(o),rule:"default:global",requestedModel:o}}let t=xu({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||fi(e.task)))return t;let n=Hu({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 Zu(e,r,t){return e||r||t||_i()||Rt}function ed(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function rd(){return{maxTaskAttempts:ed(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(pt("harness.maxTaskAttempts",4))),dispatchCooldownMs:ed(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(pt("harness.dispatchCooldownMs",5e3)))}}O();import Xb from"node:path";B();G();w();var xi="kynver-harness:",td="@runner:";function Pi(e){return e?.trim()?e.trim():null}function qb(e){let r=Pi(e);if(!r?.startsWith(xi))return null;let t=r.slice(xi.length),n=t.indexOf(td);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ei(e,r){let t=e.trim(),n=r.trim();return`${xi}${t}${td}${n}`}function Ai(e,r){let t=Pi(r);return t?qb(e)===t:!1}function Do(e){let r=Pi(e.workerLeaseOwner);return r&&Ai(r,e.runId)?r:Ei(e.runId,e.runnerId)}import nd 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)??nd.hostname(),hostname:ur(r.HOSTNAME)??nd.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 od(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)):Ii,a=Fe({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=od(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 sd(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=od(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 id(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?id(o):null,targetPrBranch:s}}catch{return r}}function ad(e){if(!ev(e))return null;let r=rv(e.description),t=e.prUrl?id(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Bo(e.branch)}:null}function ld(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 cd(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
+ `),o],i=cn(`worker.prompt.merge_gate.${n}`).split(`
21
+ `),a=cn(`worker.prompt.plan_artifacts.${n}`).split(`
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 (Lane A \u2014 from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...ld({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
24
+ `)}w();O();w();Jr();import{closeSync as Ni,existsSync as dd,mkdirSync as iv,openSync as Ti,statSync as av,unlinkSync as ud}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 Oi="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)&&dd($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(dd(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 pd(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Di(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=Di("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",dv),t=Di("KYNVER_CURSOR_START_LOCK_STALE_MS",pv),n=Date.now();for(;;)try{let o=Ti(e,"wx");return Ni(o),()=>{try{ud(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-av(e).mtimeMs>t){ud(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);pd(250)}}var md={name:"cursor",defaultModel:Oi,preflightModel(e){return Si(e,Oi)},start(e){let r=Si(e.model,Oi);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Ti(e.stdoutPath,"a"),o=Ti(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)})),pd(Di("KYNVER_CURSOR_START_LOCK_HOLD_MS",uv))}finally{l(),Ni(n),Ni(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:Ku,codex:zu,cursor:md},fd=null;function gd(e){if(fd)return fd;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 tp}from"node:fs";import np from"node:path";import{fileURLToPath as cS}from"node:url";B();function Ho(e){return!!e.completionReportedAt?.trim()}function Mi(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 Ui(e){return!!(Rv(e.completionBlocker)||e.completionOutcome==="rejected")}function Dr(e){return Ho(e)&&!Ui(e)}B();G();O();import bn from"node:path";function Bi(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 hd(e){let r=Bi(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=hn(r.outcome),n=hn(r.detail)??hn(r.error),o=Bi(r.task),s=Bi(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 kd(e){return e.taskAdvanced}B();lo();var vv="expert-lane-pr-review:",Sv="plan-review-task",wv="scheduledjob:";function yd(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Rd(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=yd(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=yd(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var bd=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,Cv=new Set(Su()),_v=/no commits between/i;function vd(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 Sd(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ue(e.head)}function wd(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&&bd.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)||Sd(e.gitAncestry))}function Cd(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(Rd({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&&bd.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 _d(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:ue(r?.headCommit)??Sd(e.gitAncestry),prUrl:ue(r?.prUrl)??null}}import{spawnSync as Av}from"node:child_process";function Pd(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return xd(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return xd(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 xd(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 Ed(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Pd(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 Ad(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 Wi(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 Li(e,r=$o){let t=e.prUrlHint??wd(e.status.finalResult)??null,n=_d(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Cd({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?Wi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Wi({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=Ed(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 Wi({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=Ad({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(vd(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 Id(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 Od(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Nd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Dd(e){let r=Nd(e);if(!r)return[];let t=Nd(r.worktreeHandoff),n=Od(t?.disposableArtifactsRemoved);return n.length?n:Od(r.disposableArtifactsRemoved)}function Td(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Md(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=>Td(o)));return t.every(o=>{let s=Td(Id(o));return n.has(s)})}function Vo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ud(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=Ud(e.disposableArtifactsRemoved),t=Dd(e.finalResult);return[...new Set([...r,...t])]}function Bd(e){let r=Ud(e.changedFiles),t=jo(r),n=Bv(e),o=t.length===0||Md(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 Wd(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 Hi(e,r,t){if(Wd(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 Ld(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||Wd(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});Hi(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,Fi=new Set(["undefined","null"]),Hd="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 $i(e){return typeof e=="string"?e.trim():""}function Ke(e){let r=$i(e.run),t=$i(e.name);return(!r||Fi.has(r))&&nr(`missing --run RUN_ID (${Hd})`),(!t||Fi.has(t))&&nr(`missing --name WORKER_NAME (${Hd})`),{runId:Go(r),workerName:Gv(t)}}function Ki(e){let r=$i(e.run);return(!r||Fi.has(r))&&nr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Go(r)}function Fd(e){let r=Kv.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function $d(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 Kd(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 Vd(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&&Ui(n)&&Xv(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=Li({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=Bd({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 $d(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await Ic(i,{baseUrl:d});P&&P!==m&&(m=P,h=await $d(p,m,k))}if(h.ok){let P=hd(h.parsed);if(!kd(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 Mi(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};Mi(n,n.runId,E),Hi(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 Vi(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 Gd(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 ji(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=ji(e.task??e.taskId);t&&(r.task=t);let n=ji(e.worker??e.name);n&&(r.worker=n);let o=ji(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 Yd(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=zd(n)),o}function Jd(e){let r=Ki(e),t=e.full===!0||e.full==="true",n=Yd(t?Mr(r):Qd(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 qd(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=Vd(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Kd(n.completionResponse),m=Kd(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&&!Vd(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 jd(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 zd(e){let r=e.filter(jd),t=e.filter(n=>{if(jd(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 Xd(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=zd(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?qd({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Xd(r,n,!1);return le(bn.join(x(r.id),"last-board.json"),o),o}function Qd(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):qd({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=Xd(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 Zd(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=Ki(e),t=e.full===!0||e.full==="true",n=Yd(t?Mr(r):Qd(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 ep(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?ic(i):s;a&&console.log(a)}}function rp(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 op(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 np.join(cS(new URL(".",import.meta.url)),"cli.js")}function sp(e){let r=e.cliPath??gS();if(!aS(r))return;let t=np.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&&tp(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{tp(n)}catch{}return}}ye();function ip(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 Gi(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=gd(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?ip(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=cd({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=Zu(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=sp({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 ap(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):Dl(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=Gi(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 lp}from"node:crypto";function pr(e){let r=e.replace(/\r\n/g,`
28
+ `).trimEnd();return lp("sha256").update(r,"utf8").digest("hex")}function St(e){if(e==null)return null;let r=e.trim();return r?lp("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 Yi(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 cp(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 up(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:Yi(a)}}async function dp(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:Yi(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 pp}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 pp(e,{recursive:!0}),pp(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 Ji,readFileSync as fp,renameSync as mp,readdirSync as vS,writeFileSync as qi,unlinkSync as XM}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=Xi(Oe.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function zi(e){for(let r of Ct())if(r.idempotencyKey===e)return r;return null}function Xi(e){if(!Ji(e))return null;try{return JSON.parse(fp(e,"utf8"))}catch{return null}}function gp(e){let{outboxDir:r}=Ur(),t=Oe.join(r,e.bodyPath);return fp(t,"utf8")}function Qi(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||qi(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 qi(i,`${JSON.stringify(l,null,2)}
29
+ `,{mode:384}),l}function hp(e){let{outboxDir:r}=Ur(),t=Oe.join(r,`${e.id}.json`);qi(t,`${JSON.stringify(e,null,2)}
30
+ `,{mode:384})}function kp(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);Ji(n)&&mp(n,s),Ji(o)&&mp(o,i)}function _n(e){let{outboxDir:r}=Ur();return{jsonPath:Oe.join(r,`${e.id}.json`),bodyPath:Oe.join(r,e.bodyPath)}}function yp(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 Rp(e,r,t={}){let n=await up(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 bp(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 vp="persisted and read back",CS="queued for retry",Zi="failed and needs action";async function xn(e,r={}){e.bodyPathHint&&Cn(e.bodyPathHint);let t=Xo(e),n=zi(t);if(n?.readbackEvidence)return{userStatus:vp,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Sp(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??dp,s=r.verifyReadback??Rp;try{let i=await o(e,r),a={...e,planId:i.planId},l=bp(a,i),c=await s(e.agentOsSlug,_S(e,l),r);return n&&kp(n),{userStatus:vp,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(!cp(a.kind)){let l=Qi(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=_n(l),u=wp(l,a.message);return{userStatus:Zi,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Sp(e,a.message,a.kind,n)}}function _S(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Sp(e,r,t,n){let o=Qi(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=_n(o);if(o.retryCount>=o.maxRetries){let i=wp(o,r);return{userStatus:Zi,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 wp(e,r){let t={...e,queueStatus:"failed",userStatus:Zi,lastError:r,updatedAt:new Date().toISOString()};return hp(t),t}import xS from"node:path";async function ea(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=gp(s),a=yp(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 ra(e){let r=xS.join(Zo(),`${e}.json`);return Xi(r)}function ta(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 na(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 oa(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 _p}from"node:child_process";import{spawnSync as PS}from"node:child_process";function Cp(){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 xp=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),ES=new Set(["CLEAN","HAS_HOOKS"]);function ia(e){return e?.trim()?["--repo",e.trim()]:[]}function Pp(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Ep(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&&xp.has(i))){if(i){n.push(`${Pn(s)}=${i}`);continue}if(!(l&&xp.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=_p("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}`)&&_p("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function Ap(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=Cp();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=Ep(t,r,["pr","view",n,...ia(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,...ia(e.repo),"--squash"]);if(l.status!==0){let u=sa(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=sa(t,r,a,e.repo);c||(c=sa(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 sa(e,r,t,n){try{let o=Ep(e,r,["pr","view",t,...ia(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}O();async function Ip(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 Op(){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 Ii=3600*1e3;function Np(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Tp(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("",Op());let n=na(e);if(n?.outboxId){let o=ra(n.outboxId);o?t.push("",ta(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=Ei(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)):Ii,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Mr(n.id),...e.lane?{lane:Cu(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=Np(E),y=Tp(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=rd(),M=[],oe=[],De=Number(E.inspected)||0;async function ge(C,y,I){let j=await oa({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 Ap({prUrl:j,repo:Pp(j),cwd:n.repo}),Vr=await Ip({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 oa({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(sd(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:_u(y)});try{let Ws=y.planId?String(y.planId):void 0,zn=ad({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=Gi(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:Ws,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}: Lane A instruction 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(Ws){return ge(y,Ws.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=Np(E),ie=Tp(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 Al={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},Il=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(Il),...Al};console.log(JSON.stringify(Al,null,2)),M.some(Il)&&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 aa(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 Dp(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 Mp(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 ha,rmSync 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 la(e,r){return Ne.join(Re(ne(e)),R(r))}function mr(e,r,t){return Ne.join(la(e,r),"workers",R(t))}function Up(e,r,t){let n=ne(e);return Ne.join(n,"runs","runs",R(r),"workers",R(t))}function ca(){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 Bp(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 Fp,renameSync as ew,statSync as da}from"node:fs";import z from"node:path";O();no();qe();import Wp from"node:path";function QS(e){return Wp.resolve(qr(e.trim()))}function ua(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=ua(t.defaultRepo,"config",!0);if(n)return n;let o=ua(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=ua(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 Lp(e,r){let t={...r??b(),defaultRepo:pe(Wp.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 $p(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 pa(e){if(!fr(e))return[];try{return Fp(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function ma(e){let r=z.join(e,"workers");if(!fr(r))return[];try{return Fp(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Kp(e){return z.join(e,"archived-workers")}function tw(e,r){let t=z.join(Kp(e),R(r));return fr(t)?`${t}-${Date.now()}`:t}function Hp(e,r,t){if(!fr(e))return!1;try{let n=r-da(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function jp(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!!(Hp(n.stdoutPath,r,t)||Hp(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-da(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function ow(e,r,t,n){if(jp(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 ma(e))if(jp(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=ma(t);if(n.length===0)return null;let o;try{o=da(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 fa(e){let r=ne(e??me()),t=Re(r),n=[];for(let o of pa(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 ga(e,r={}){let t=ne(e??me()),n=Re(t),o=r.now??Date.now(),s=r.archiveAgeMs??rw,i=[];fa(t);for(let a of pa(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||{}),...ma(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(Kp(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 Vp(e,r=Date.now()){let t=new Set,n=Re(e);for(let o of pa(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=la(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 ha(o,s),uw(t),ha(s,t),o}function pw(e){let r=[];for(let t of ca()){let n=je.join(e.fromDir,t),o=je.join(e.toDir,t);!gr(n)||gr(o)||(ha(n,o),r.push(t))}return r}function Gp(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}),Gp(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=Up(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=Bp({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=ca().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 Gp(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 Yp(){let{harnessRoot:e}=te(),r=fa(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 Jp}from"node:child_process";import qp from"node:path";function ka(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=ka(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=ka(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=Jp("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=Jp("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:ka(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=_(qp.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 ya(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=qp.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=Yp();if(Aw()){let s=ya(),i=ga();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=ya(),o=ga();return{workers:r,finalizedRuns:An(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function zp(){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 Zd({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 Xp(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 Qp(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 Xp({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 Zp(e,r=process.env){if(Tw(r))return e?.maxConcurrentWorkers??void 0}async function em(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 Ra=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function rm(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Ra)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!rm(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 ba(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 va(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 Sa(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:Sa(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 wa(e,r){return er.has(e.run.status)?!1:Mw(e,r)!==null}function tm(e,r,t=Date.now()){if(rr(e,t))return!0;if(er.has(e.run.status)||wa(e,r))return!1;let n=Mn(e);return re(n)?!1:!!rr(e,t)}co();G();function nm(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 sm,mkdirSync as Uw,writeFileSync as om}from"node:fs";import ns from"node:path";function im(e,r,t){return ns.join(e,"salvage",R(r),R(t))}function am(e){return sm(ns.join(im(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function lm(e){let r=im(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Uw(r,{recursive:!0});let t=ns.join(r,"salvage.patch"),n=!1;if(sm(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()&&(om(t,a.endsWith(`
28
36
  `)?a:`${a}
29
- `),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 Ap(jo.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
30
- `),o}var FS=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function $S(e){return!FS.has(e.skipReason)||er(e.indexed,e.now)?!1:Np({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Tp({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function KS(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?Ze.has(r.run.status)||e.liveness&&ua(r,e.liveness)||e.liveness&&re(la(r,e.liveness))&&!er(r)?o:n:t?o:n}function jS(e,r){if(e.harnessRoot?.trim())return Vo.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Vo.sep}runs${Vo.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Dp(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=KS(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(er(r,a))return"active_worker";let c=la(r,e.liveness),u=jS(e,r),d=p=>u&&$S({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(Ep(r,c)){let p=d("completion_blocked");if(p)return p}if(aa(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(Pp(r,e.liveness,a)||!re(c))return"run_still_active";if(Sn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(xe(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(rt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Wr(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 da(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(Vo.resolve(o))||r&&er(r)?"active_worker":r&&aa(r,e.gitStatusCache)?"dirty_worktree":null}function Mp(e){return da(e)}var Up=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Wp(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)Up.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Up.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Fp,readdirSync as $p,statSync as YS}from"node:fs";import Kp from"node:path";W();ve();import Lp from"node:path";w();function GS(e,r){return Ko(e,r)}function Bp(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Vn(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=x(Lp.join($t(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Lp.resolve(l.worktreePath);GS(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of hp(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Hp(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function JS(e,r){try{let t=YS(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function qS(e,r){let t=Kp.join(e,"runs",r,"run.json");return Fp(t)?x(t,null):null}function jp(e){try{return $p(e).length===0}catch{return!1}}function Vp(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Hp(n,r,t,i.liveRunKeys)||!jp(n))return"run_still_active";let a=qS(r,t);return a&&!Ze.has(a.status)&&!Mr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Gp(e){if(!Fp(e.worktreesDir))return[];let r=[],t;try{t=$p(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=Kp.join(e.worktreesDir,o);jp(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:JS(s,e.now)})}return r}ye();import{existsSync as ma,rmSync as nm}from"node:fs";import{execFileSync as zS}from"node:child_process";import{existsSync as Yp,readdirSync as XS,statSync as QS}from"node:fs";import ZS from"node:path";var ew=2500;function rw(e,r=ew){if(!Yp(e))return 0;try{let n=zS("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 rr(e,r=5e4){if(!Yp(e))return 0;let t=rw(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=XS(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=ZS.join(i,l),u;try{u=QS(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as sw,rmSync as iw}from"node:fs";ve();import{lstatSync as tw,readdirSync as nw}from"node:fs";function Jp(e){try{let r=tw(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 qp(e,r=32){let t=Jp(e);if(!t)return!1;if(t.foreign)return!0;try{let n=nw(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Jp(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as ow}from"node:child_process";import Qp from"node:path";import _e from"node:path";function zp(e,r,t,n){let o=_e.resolve(e),s=`${_e.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=_e.relative(t,i);if(a.startsWith("..")||_e.isAbsolute(a))return"path_outside_harness";let l=a.split(_e.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(_e.resolve(r))?"path_outside_harness":null}function Go(e,r,t){return zp(e,r,t,"node_modules")}function Yo(e,r,t){return zp(e,r,t,".next")}function Jo(e,r,t){let n=_e.resolve(e),o=_e.relative(t,n);return o.startsWith("..")||_e.isAbsolute(o)||o.split(_e.sep).length<3||!n.startsWith(_e.resolve(r))?"path_outside_harness":null}function Xp(e,r,t){let n=_e.resolve(e);return Go(n,r,t)===null||Yo(n,r,t)===null||Jo(n,r,t)===null}function em(){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 Zp(e){let r=ow("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function rm(e,r,t){if(!Xp(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=Zp(["chown","-R",`${n}:${o}`,Qp.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Zp(["rm","-rf",Qp.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 aw(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function tm(e,r,t={}){if(!sw(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?ir(n):null,i=e.bytes??rr(e.path)??void 0,a=t.removePath??iw,l=t.hasForeignOwnedEntry??qp;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!aw(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=em();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=rm(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 fa(e){let r=e.harnessRoot;return!r||!mp(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function ga(e,r){let t=fa(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 om(e,r){return ga(e,r)}function sm(e,r){return ga(e,r)}function im(e,r){return ga(e,r)}function am(e,r){let t=fa(e);if(t)return t;if(!ma(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??rr(e.path);return nm(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=fa(e);if(t)return t;if(!ma(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??rr(e.path);return n&&ce(n,["worktree","remove","--force",e.path],{allowFailure:!0}),ma(e.path)&&nm(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 qo,readdirSync as zo,statSync as lw}from"node:fs";import je from"node:path";function ha(e,r){try{let t=lw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function um(e,r){let t=je.relative(r,e);return t===""||!t.startsWith("..")&&!je.isAbsolute(t)}function cm(e,r,t,n){let o=[];for(let s of ia){if(s===".next")continue;let i=je.join(e,s);if(!qo(i))continue;let a=je.resolve(i);t.has(a)||um(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:ha(a,r.now)}))}return o}function dm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...cm(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!qo(e.worktreesDir))return r;for(let n of zo(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=je.join(e.worktreesDir,n.name);for(let s of zo(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=je.join(o,s.name);r.push(...cm(i,e,t,{runId:n.name,worker:s.name}))}}return r}function pm(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;qo(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:ha(a,e.now)})))}if(!t||!qo(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(je.resolve(i.worktreePath));for(let i of zo(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=je.join(e.worktreesDir,i.name),l;try{l=zo(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=je.resolve(je.join(a,c.name));o.has(u)||s.has(u)||um(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:ha(u,e.now)}))}}return n}import{existsSync as gm,readdirSync as mm,statSync as cw}from"node:fs";import St from"node:path";var uw=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function dw(e,r){try{let t=cw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pw(e,r){let t=St.relative(r,e);return t===""||!t.startsWith("..")&&!St.isAbsolute(t)}function mw(e,r,t,n,o,s){if(!gm(n))return;let i=St.resolve(n);r.has(i)||pw(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:dw(i,t.now)}))}function fm(e,r,t,n,o){for(let s of uw)mw(e,r,t,St.join(n,s.dirName),s.kind,o)}function hm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||fm(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 mm(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=St.join(e.worktreesDir,n.name),s;try{s=mm(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=St.join(o,i.name);fm(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ye();import{existsSync as km,statSync as fw}from"node:fs";import Ve from"node:path";function gw(e,r){try{let t=fw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function hw(e){let r=[],t=null;for(let n of e.split(`
31
- `)){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 kw(e,r){let t=Ve.relative(Ve.resolve(r),Ve.resolve(e));return t!==""&&!t.startsWith("..")&&!Ve.isAbsolute(t)}var yw=200;function ym(e){if(!e.includeOrphans||!km(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Ve.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Ve.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=hw(a);for(let c of l){if(i>=yw)break;let u=Ve.resolve(c.path);if(u===Ve.resolve(s)||!kw(u,e.worktreesDir)||t.has(u)||o.has(u)||!km(u))continue;let f=Ve.relative(e.worktreesDir,u).split(Ve.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:gw(u,e.now)})}}return n}W();w();import Cn from"node:path";function Rm(e,r){let t=Cn.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Cn.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function vm(e){let r=new Map;for(let t of Vn(e))for(let n of Object.keys(t.workers||{})){let o=Cn.join($t(e,t.id),"workers",R(n),"worker.json"),s=x(o,void 0);s?.worktreePath&&r.set(Cn.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Cn.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function xn(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Lr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Ra(e={}){let r=e.execute===!0||e.execute!==!1&&xn("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!xn("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Lr("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??Lr("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Lr("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Lr("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Lr("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||xn("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=xn("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&&!xn("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Lr("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,g=Lr("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 Cm(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 Ra({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 xm}from"node:fs";import va from"node:path";w();var Rw=1800*1e3;function _m(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Rw;if(!xm(e.worktreePath))return null;if(e.runId&&e.workerName){let c=va.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=x(va.join(c,"worker.json"),void 0);if(u&&ca(u,r,t))return"active_worker"}let n=va.join(e.worktreePath,".git");if(!xm(n))return null;let o=Q(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
32
- `).map(c=>c.trim()).filter(c=>c.length>0);if(xe(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}ve();import{existsSync as vw,readdirSync as Pm,statSync as bw}from"node:fs";import Sw from"node:path";function Em(e={}){let r=ne(e.harnessRoot??me()),t=ir(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!vw(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=Pm(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=Sw.join(t,u.name);try{let f=bw(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of Pm(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=rr(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}}ve();import{existsSync as ww}from"node:fs";import{homedir as Cw}from"node:os";import Am from"node:path";var xw=["/var/tmp/kynver-harness",Am.join(Cw(),".openclaw","harness")];function ba(e,r,t){if(!t?.trim())return;let n=ne(t.trim());e.has(n)||(e.add(n),r.push(n))}function _w(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 Om(e={}){let r=new Set,t=[];ba(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??[])ba(r,t,o);if(_w(e))for(let o of xw){let s=Am.resolve(o);!r.has(s)&&ww(s)&&ba(r,t,s)}return t}Ft();function Pw(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Ew(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Im(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=Ew("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 Nm(e,r){if(!r.pressured)return e;let t=e.execute||!Pw("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 Ne(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}ye();var Xo=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 Aw}from"node:child_process";import{existsSync as Ow}from"node:fs";import Iw from"node:path";var Nw=5e3;function Tw(e,r){if(!Ow(Iw.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=Aw("git",r,{cwd:e,encoding:"utf8",timeout:Nw}),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 Tm(e){let r=Tw(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
33
- `).map(t=>t.trim()).filter(Boolean)}var Qo=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Tm(t)??[];return this.cache.set(t,o),o}};var Zo=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Mr(r);return this.cache.set(r.id,n),n}};function Dw(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Dm(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:Dw(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 Mw(e={}){let r=e.harnessRoot?ne(e.harnessRoot):me(),t=Om({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function Uw(e){return typeof e=="string"?{reason:e}:e}function wt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function es(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:rr(e.path,t)}}function Mm(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 Ww(e,r){return e.kind==="remove_next_cache"?sm(e,r):om(e,r)}function Lw(e,r,t){return e.kind==="remove_next_cache"?Yo(e.path,r,t):Go(e.path,r,t)}function Bw(e){let r=new Map;for(let t of e)for(let[n,o]of vm(t))r.set(n,o);return r}function Um(e,r){return e.runId&&e.worker?Pe.join(r,e.runId,e.worker):Pe.resolve(e.path,"..")}function Sa(e={}){let r=Ra(e),t=Im();r=Nm(r,t);let n=Mw(e);Ne("scan",`${n.scanRoots.length} harness root(s)`);let o=Bp(n.scanRoots,n.now),s=r.finalizeStaleRuns?kn().map(b=>({runId:b.runId,from:b.from,to:b.to})):[];s.length>0&&Ne("finalize",`${s.length} stale run(s) marked terminal`),Ne("index","building worktree index");let i=Bw(n.scanRoots);Ne("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Zo,gitStatusCache:new Qo,gitRevCache:new Xo},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let b of n.scanRoots){if(f())break;Ne("root",b);let E=Pe.join(b,"worktrees"),H=Rm(i,b),M={harnessRoot:b,worktreesDir:E,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:H,now:n.now},oe=r.scanDependencyCaches?hm(M):[];Ne("dependency",r.scanDependencyCaches?`${oe.length} cache candidate(s) at ${b}`:"skipped (worktree-only sweep)");let Te=0;for(let he of oe){if(f())break;Te+=1,Te%50===0&&Ne("dependency",`${Te}/${oe.length} evaluated`);let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=Lw(D,b,E);if(se){wt(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=Um(D,E),ke=H.get(Pe.resolve(de))??null,ie=da({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){wt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Ww(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of dm(M)){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=Jo(D.path,b,E);if(se){wt(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=Um(D,E),ke=H.get(Pe.resolve(de))??null,ie=Mp({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){wt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(im(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let ge=[...pm(M),...ym(M)];Ne("worktrees",`${ge.length} candidate(s) at ${b}`);let Ut=new Set,Wt=0;for(let he of ge){if(f())break;Wt+=1,Wt%50===0&&Ne("worktrees",`${Wt}/${ge.length} evaluated`);let X=Pe.resolve(he.path);if(Ut.has(X))continue;Ut.add(X);let D={...he,path:X},se=H.get(Pe.resolve(D.path))??null,de=se?null:_m({worktreePath:D.path,harnessRoot:b,runId:D.runId,workerName:D.worker,now:n.now}),ke=Dp({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:b,writeSalvageEvidence:r.execute});if(ke){let{reason:ie,detail:Mn}=Uw(ke);wt(l,D.path,ie,Mn),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(lm(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of Gp({harnessRoot:b,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=Vp({harnessRoot:b,runId:se,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(de){wt(l,D.path,de),c.push({...D,executed:!1,skipped:!0,skipReason:de});continue}c.push(am(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,g=0,k=0,h=0,S=0;for(let b of c)b.bytes&&(m+=b.bytes),!b.skipped&&!b.executed&&b.bytes&&(g+=b.bytes),b.executed?(h+=1,k+=b.bytes??0,b.kind==="remove_run_directory"&&(p+=1)):b.skipped&&(S+=1,b.skipReason==="dry_run"&&b.bytes&&(g+=b.bytes));let A=r.accountBytes?Em({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Ne("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let B=Wp(c,l),P=Dm({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:Mm(c,l)},...A?{storage:A}:{},...B.length>0?{preservedLivePaths:B}:{},...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:Mm(c,l)},...A?{storage:A}:{},...B.length>0?{preservedLivePaths:B}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function Wm(e){let r=Cm(e);return Sa({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Lm(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as Jw}from"node:fs/promises";import{homedir as qw}from"node:os";import Br from"node:path";Kn();import{existsSync as Bm,readFileSync as Hw}from"node:fs";import rs from"node:path";var Fm={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},$m=Object.keys(Fm),wa={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},Fw={"@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 Hm(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 ts(e,r){let t=Hm(e),n=Hm(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 Km(e,r){return ts(e,r)>=0}function $w(e){let r=null;for(let t of e)(!r||ts(t,r)>0)&&(r=t);return r}function Kw(e){try{let r=JSON.parse(Hw(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function jw(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=rs.resolve(o);if(Bm(rs.join(s,"packages/kynver-runtime/package.json"))&&Bm(rs.join(s,"package.json")))return s}return Rr({cwd:e})?.repo??null}function jm(e={}){let r=e.cwd??process.cwd(),t=jw(r,e.repoRoot);if(!t)return{};let n={};for(let o of $m){let s=rs.join(t,Fw[o]),i=Kw(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function Vw(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function Gw(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&Km(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${Vw(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 Yw(e){if(e.length===0)return{version:null,source:"unknown"};let r=$w(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 Vm(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=$m.map(i=>{let a=Fm[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}=Yw(l),p=u?.version??null,g=f?Km(f,a):!1,k=g?[]:Gw({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 Ca=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(`
34
- `)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Gm(e={}){let r=Vm(e);if(!r.ok)throw new Ca(r);return r}var zw=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function Ct(e){let r=e?.trim();return r||null}function Xw(e){return[...new Set(e.filter(r=>!!r))]}function Qw(){let e=qw(),r=Ct(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Ct(process.env.OPENCLAW_NPM_ROOT)??Br.join(e,".openclaw","npm"),t=Ct(process.env.KYNVER_NPM_GLOBAL_ROOT)??Ct(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Ct(process.env.NPM_CONFIG_PREFIX)?Br.join(Ct(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Br.join(e,".npm-global","lib","node_modules"));return Xw([Br.join(r,"lib","node_modules"),Br.join(r,"node_modules"),t.endsWith("node_modules")?t:Br.join(t,"lib","node_modules")])}async function Zw(e){try{let r=JSON.parse(await Jw(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function eC(e){let r=Qw(),t=new Set,n=[];for(let o of r){let s=Br.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function ns(e=new Date().toISOString()){let r={};for(let t of zw){let n=null;for(let o of eC(t)){let s=await Zw(o);s&&(!n||ts(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 rC}from"node:child_process";var tC=1e4,nC=4*1024*1024,Ym=(e,r,t)=>{try{let n=rC(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??tC,maxBuffer:nC});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 xt(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 Jm(e,r,t){return`${e} ${r} ${t}`}function _n(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 qm(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 oC=8e3,sC=30,iC=100,aC=400;function xa(e){return process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function _t(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function lC(e){return Array.isArray(e)?e.map(r=>_t(r)).filter(r=>r!==null).slice(0,sC).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function zm(e,r,t){let n=xt(e,"gh",["api",`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:lC(n.statuses)}:null}var Xm={provider:"github",kind:"pr_snapshot",version:"1",isAvailable:xa,collect(e,r){let t=qm(e);if(!t)return null;let n=xt(r,"gh",["api",`repos/${t.repo}/pulls/${t.number}`]);if(!n)return null;let o=_t(n.head),s=typeof o?.sha=="string"?o.sha:null,i=_t(n.user),a=_t(_t(o?.repo)?.owner),l=typeof n.body=="string"?n.body.slice(0,oC):null,c=[],u={state:null,statuses:[]};if(s){let m=xt(r,"gh",["api",`repos/${t.repo}/commits/${s}/check-runs?per_page=100`]);Array.isArray(m?.check_runs)&&(c=m.check_runs.map(p=>_t(p)).filter(p=>p!==null).slice(0,iC).map(p=>({name:p.name??null,status:p.status??null,conclusion:p.conclusion??null}))),u=zm(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(`
35
- `).map(m=>m.trim()).filter(Boolean).slice(0,aC):[];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}}},Qm={provider:"github",kind:"commit_status",version:"1",isAvailable:xa,collect(e,r){let t=_n(e);return t?zm(r,t.repo,t.sha):null}},Zm={provider:"github",kind:"branch_reachability",version:"1",isAvailable:xa,collect(e,r){let t=_n(e);if(!t)return null;let n=xt(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=xt(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 cC=5,uC=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,dC=/https:\/\/[^\s]+/,ef={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=_n(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(`
36
- `)){let i=s.match(dC)?.[0];if(!i)continue;let a=s.match(uC)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=cC)break}return{found:o.length>0,deployments:o}}};var _a=[];function os(e){_a.some(r=>r.provider===e.provider&&r.kind===e.kind)||_a.push(e)}function rf(e,r){return _a.find(t=>t.provider===e&&t.kind===r)??null}function tf(){os(Xm),os(Qm),os(Zm),os(ef)}var pC=8,mC=25e3;function nf(e,r={}){tf();let t=r.run??Ym,n=r.now??(()=>new Date),o=r.maxSubjects??pC,s=Date.now()+(r.deadlineMs??mC),i=new Set,a=e.filter(m=>{let p=Jm(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=rf(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}W();w();import fC from"node:path";var gC="provider-evidence-wanted.json";function of(e){return fC.join(_(e),gC)}function sf(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 af(e){let r=x(of(e),null);return sf(r?.wanted)}function lf(e,r){le(of(e),{savedAt:new Date().toISOString(),wanted:r})}function cf(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?sf(r):null}async function kC(e,r){let t=U(e),n=[];for(let o of Object.keys(t.workers||{})){let s=x(hC.join(_(t.id),"workers",R(o),"worker.json"),void 0);if(!s?.taskId||s.localOnly)continue;if(Ir(s)){n.push({worker:o,ok:!0,taskId:s.taskId??null,skipped:!0});continue}let i=T(s);if(!re(i))continue;let a=et({alive:i.alive,finalResult:i.finalResult,changedFiles:i.changedFiles,gitAncestry:i.gitAncestry});if(!s.dispatched&&!i.finalResult&&!a?.salvageable)continue;let l=await cn({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 yC(e,r,t,n,o){let s=L(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 ns(),c=mo(r),u=null;try{let g=af(r);u=g.length>0?nf(g):null}catch{u=null}let d=po(r),f=await _r(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Nr(r),resourceGate:t,boxResourceSnapshot:$o(t,{harnessRunId:r,boxKind:Ue(v())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=cf(f.response);if(m)try{lf(r,m)}catch{}let p=$c(f);if(p)try{Fc(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 Pa(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";un({run:r});let o=await xp(t,e),s=Cp(o),i=br({runId:r,configuredMaxWorkersOverride:s}),a=Lm()?Wm(r):void 0,l=await yC(t,r,i,e,a),c=ud(r,l),u=await wo(r,e),d=await kC(r,e),f=br({runId:r,configuredMaxWorkersOverride:s}),m=vn(),p=await wp(r,e),g=ip(f,l),k=g.maxStarts,h=await bn({run:r,agentOsId:t,pipeline:!0,...e}),S=null,A=0,B=sp(l),P=k;if(n&&P>0&&B.length>0){let E=Math.min(P,B.length),H=await Ji({...e,run:r,agentOsId:t,targetTaskIds:B.join(",")},E),M=vt(H);A+=M,P=Math.max(0,P-M),S={exactTargetTaskIds:B,exact:H,startedCount:A}}if(n&&P>0){let E=await Ji({...e,run:r,agentOsId:t},P),H=vt(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,...B.length?{exactTargetTaskIds:B,exactOnly:!0}:{}}):S&&typeof S=="object"&&(S={...S,broadSkipped:!0,startedCount:A});let b=!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:b}}I();import WC from"node:os";import{readFileSync as RC}from"node:fs";import{homedir as vC,platform as bC}from"node:os";import SC from"node:path";import{execFileSync as wC}from"node:child_process";function uf(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 CC(){if(bC()==="darwin")try{let e=wC("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return uf(e.trim())}catch{return null}try{let e=RC(SC.join(vC(),".claude",".credentials.json"),"utf8");return uf(e)}catch{return null}}function df(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=CC();if(s)return{kind:"oauth",token:s}}return null}var xC="You are Claude Code, Anthropic's official CLI for Claude.";function _C(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function PC(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 EC(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*AC(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(`
37
- `))!==-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 OC(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function pf(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:xC},{type:"text",text:n.system}]);let i=await fetch(`${OC()}/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=_C();for await(let l of AC(i.body)){let c=PC(a,l);c&&e.onDelta(c)}return EC(a)}var Pt=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 DC}from"node:child_process";var IC=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),NC=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),TC=["--secret","--api-key","--keeper-child"];function mf(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(TC.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
38
- `)||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")}:IC.has(t)?{ok:!0,mutating:!1}:NC.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var MC=10*6e4,UC=5e3,ff=2e5;async function gf(e,r,t={}){let n=mf(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??MC,i=new Pt(r);return new Promise(a=>{let l=0,c=!1,u=DC(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=ff)return;let p=m.toString("utf8").slice(0,ff-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"),UC).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 LC=25e3,BC=32e3,HC=5e3,FC=6e4,hf=5*6e4,$C=5e3,KC="claude-sonnet-4-6";async function jC(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(),$C);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 kf(e=process.env){let r=v(),t=r.agentOsId?.trim(),n=Z();if(!t||!n)return null;let o=await jC(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:WC.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||KC,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function VC(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),BC),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:LC}),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 Hr(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 GC(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await gf(n,s=>{Hr(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await Hr(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await Hr(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 YC(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||Hr(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Pt(s),a=df(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await Hr(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await pf({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await Hr(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 Hr(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 Ea(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function yf(e){let r=await kf();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!Z()||!v().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:hf}));!r&&!e.shouldStop();){if(!Z()||!v().agentOsId?.trim()||(await Ea(hf,e.shouldStop),e.shouldStop()))return;r=await kf()}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 VC(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Ea(FC,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await GC(r,t):await YC(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Ea(HC,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var JC=6e4,qC=5*6e4,zC=10,XC=250;async function Aa(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(XC,t);await nr(n),t-=n}}async function ss(e){lt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):JC,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Rc(v());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=ze(),c=yf({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{Sc({agentOsId:t,runId:r});let d=await Ys(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 Aa(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t})));let f=await Pa({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let p=po(r);if(p&&!p.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:p.holderBoxId}));else{let g=await ct({env:l,agentOsIdFilter:t});g.enabled&&(g.fired>0||g.errors>0||g.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...g}))}}f.idle?i++:i=0;let m=i>=zC?qC:o;await Aa(m,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await Aa(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}I();import{spawn as QC}from"node:child_process";w();var ZC=15*6e4,Rf=2*6e4,vf=1e4,ex=5e3,rx=5*6e4,tx=30*6e4,bf=5e3;function nx(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:ZC}function is(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 ox(e,r=ex,t=rx){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function sx(e,r,t=tx){return r-e>=t}function Fr(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function ix(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 as(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=nx(e.stallMs),o=ix(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,Fr("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),Fr("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=QC(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),Fr("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await nr(bf),!(d||i));){if(Date.now()-u<Rf)continue;let k=wc(t),h=k&&k.pid===a.pid?k:null;if(h&&Cc(h,n)){Fr("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await nr(vf),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+Rf){Fr("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await nr(vf),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await nr(bf);if(i)break;let p=Date.now();sx(u,p)&&(l=0),l+=1;let g=ox(l);Fr("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await nr(g)}Fr("stopped",{agentOsId:t})}ye();W();import{existsSync as fx,mkdirSync as gx}from"node:fs";import hx from"node:path";W();Xr();import{existsSync as ax,readFileSync as lx}from"node:fs";import Sf from"node:path";G();w();function cx(e){if(!e||!ax(e))return 0;try{return lx(e,"utf8").trim().length}catch{return 0}}function ux(e,r){let t=Sf.join(_(e.id),"workers",R(r),"worker.json"),n=x(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=T(n,{base:e.base,baseCommit:e.baseCommit}),s=cx(n.heartbeatPath)===0,i=!o.finalResult&&!o.alive,a=typeof n.completionBlocker=="string"&&n.completionBlocker.length>0;return{worker:r,workerStatus:n.status,attention:o.attention.state,attentionReason:o.attention.reason,missingHeartbeat:s,missingFinalResult:i,landingBlocked:st(o),completionBlocked:a}}function dx(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 px(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 mx(e){let r=0;for(let t of be(e)){let n=Sf.join(_(e.id),"workers",R(t),"worker.json"),o=x(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 Oa(){return vn(),ee().map(e=>{let t=be(e).map(d=>ux(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}=px(t),c=mx(e),u=Gt(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:dx({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function wf(){console.log(JSON.stringify(Oa(),null,2))}w();function kx(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 ls(e){let r=pd(kx(e));wl(r);let t=e.id?To(String(e.id)):yl(String(e.name||"run")),n=_(t);fx(n)&&yx(`run already exists: ${t}`),gx(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(hx.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 Cf(){wf()}function yx(e){console.error(e),process.exit(1)}W();import{existsSync as ds}from"node:fs";async function cs(e=ze()){let r=await xr(e.storePath).catch(()=>[]),t=await uo(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=lo(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 wx}from"node:os";import Cx from"node:path";import{existsSync as xf,mkdirSync as Rx,readFileSync as _f,writeFileSync as vx}from"node:fs";import{homedir as bx}from"node:os";import Pf from"node:path";var fr=Pf.join(bx(),".kynver",".env");function Ia(e){let r=new Map;for(let t of e.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),r.set(s,i)}return r}function Sx(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 om(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:am({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(lm({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&&wa(r,e.liveness)||e.liveness&&re(va(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 cm(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=va(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(nm(r,c)){let p=d("completion_blocked");if(p)return p}if(ba(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(tm(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 Ca(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&&ba(r,e.gitStatusCache)?"dirty_worktree":null}function um(e){return Ca(e)}var dm=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function pm(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)dm.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||dm.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as hm,readdirSync as km,statSync as Kw}from"node:fs";import ym from"node:path";B();be();import mm from"node:path";w();function $w(e,r){return ts(e,r)}function fm(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=_(mm.join(Jt(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=mm.resolve(l.worktreePath);$w(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Vp(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function gm(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=ym.join(e,"runs",r,"run.json");return hm(t)?_(t,null):null}function Rm(e){try{return km(e).length===0}catch{return!1}}function bm(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(gm(n,r,t,i.liveRunKeys)||!Rm(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 vm(e){if(!hm(e.worktreesDir))return[];let r=[],t;try{t=km(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=ym.join(e.worktreesDir,o);Rm(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 xa,rmSync as Nm}from"node:fs";import{execFileSync as Gw}from"node:child_process";import{existsSync as Sm,readdirSync as Yw,statSync as Jw}from"node:fs";import qw from"node:path";var zw=2500;function Xw(e,r=zw){if(!Sm(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(!Sm(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 wm(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 Cm(e,r=32){let t=wm(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=wm(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as eC}from"node:child_process";import Pm from"node:path";import xe from"node:path";function _m(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 _m(e,r,t,"node_modules")}function is(e,r,t){return _m(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 xm(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 Am(){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 Em(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 Im(e,r,t){if(!xm(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=Em(["chown","-R",`${n}:${o}`,Pm.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Em(["rm","-rf",Pm.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 _a="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 Om(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??Cm;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=Am();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${_a}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Im(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}; ${_a}`}}}function Pa(e){let r=e.harnessRoot;return!r||!$p(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ea(e,r){let t=Pa(e);if(t)return t;let n=Om(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Tm(e,r){return Ea(e,r)}function Dm(e,r){return Ea(e,r)}function Mm(e,r){return Ea(e,r)}function Um(e,r){let t=Pa(e);if(t)return t;if(!xa(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 Nm(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 Bm(e,r){let t=Pa(e);if(t)return t;if(!xa(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}),xa(e.path)&&Nm(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 Aa(e,r){try{let t=oC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Lm(e,r){let t=Ve.relative(r,e);return t===""||!t.startsWith("..")&&!Ve.isAbsolute(t)}function Wm(e,r,t,n){let o=[];for(let s of Ra){if(s===".next")continue;let i=Ve.join(e,s);if(!ls(i))continue;let a=Ve.resolve(i);t.has(a)||Lm(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:Aa(a,r.now)}))}return o}function Hm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Wm(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(...Wm(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Fm(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:Aa(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)||Lm(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Aa(u,e.now)}))}}return n}import{existsSync as jm,readdirSync as $m,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(!jm(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 Km(e,r,t,n,o){for(let s of iC)cC(e,r,t,Pt.join(n,s.dirName),s.kind,o)}function Vm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Km(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!jm(e.worktreesDir))return r;for(let n of $m(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=$m(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Pt.join(o,i.name);Km(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ye();import{existsSync as Gm,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 Ym(e){if(!e.includeOrphans||!Gm(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)||!Gm(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 Jm(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 qm(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 Na(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 Zm(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 Na({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 ef}from"node:fs";import Ta from"node:path";w();var gC=1800*1e3;function rf(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??gC;if(!ef(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Ta.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=_(Ta.join(c,"worker.json"),void 0);if(u&&Sa(u,r,t))return"active_worker"}let n=Ta.join(e.worktreePath,".git");if(!ef(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 tf,statSync as kC}from"node:fs";import yC from"node:path";function nf(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=tf(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 tf(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 of from"node:path";var vC=["/var/tmp/kynver-harness",of.join(bC(),".openclaw","harness")];function Da(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 sf(e={}){let r=new Set,t=[];Da(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??[])Da(r,t,o);if(SC(e))for(let o of vC){let s=of.resolve(o);!r.has(s)&&RC(s)&&Da(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 af(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 lf(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 cf(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=cf(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 uf(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=sf({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 df(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"?Dm(e,r):Tm(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 qm(t))r.set(n,o);return r}function pf(e,r){return e.runId&&e.worker?Pe.join(r,e.runId,e.worker):Pe.resolve(e.path,"..")}function Ma(e={}){let r=Na(e),t=af();r=lf(r,t);let n=OC(e);Te("scan",`${n.scanRoots.length} harness root(s)`);let o=fm(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=Jm(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?Vm(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=pf(D,E),ke=H.get(Pe.resolve(de))??null,ie=Ca({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 Hm(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=pf(D,E),ke=H.get(Pe.resolve(de))??null,ie=um({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(Mm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let ge=[...Fm(M),...Ym(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:rf({worktreePath:D.path,harnessRoot:v,runId:D.runId,workerName:D.worker,now:n.now}),ke=cm({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(Bm(ms(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of vm({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=bm({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(Um(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?nf({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Te("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let L=pm(c,l),P=uf({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:df(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:df(c,l)},...A?{storage:A}:{},...L.length>0?{preservedLivePaths:L}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function mf(e){let r=Zm(e);return Ma({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function ff(){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 gf,readFileSync as UC}from"node:fs";import fs from"node:path";var kf={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},yf=Object.keys(kf),Ua={"@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 hf(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=hf(e),n=hf(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 Rf(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(gf(fs.join(s,"packages/kynver-runtime/package.json"))&&gf(fs.join(s,"package.json")))return s}return vr({cwd:e})?.repo??null}function bf(e={}){let r=e.cwd??process.cwd(),t=HC(r,e.repoRoot);if(!t)return{};let n={};for(let o of yf){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&&Rf(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 vf(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=yf.map(i=>{let a=kf[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?Rf(f,a):!1,k=g?[]:$C({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${Ua[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${Ua[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:Ua[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 Ba=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 Sf(e={}){let r=vf(e);if(!r.ok)throw new Ba(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,wf=(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 Cf(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 _f(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 Wa(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 xf(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 Pf={provider:"github",kind:"pr_snapshot",version:"1",isAvailable:Wa,collect(e,r){let t=_f(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=xf(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}}},Ef={provider:"github",kind:"commit_status",version:"1",isAvailable:Wa,collect(e,r){let t=Wn(e);return t?xf(r,t.repo,t.sha):null}},Af={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Wa,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]+/,If={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 La=[];function ks(e){La.some(r=>r.provider===e.provider&&r.kind===e.kind)||La.push(e)}function Of(e,r){return La.find(t=>t.provider===e&&t.kind===r)??null}function Nf(){ks(Pf),ks(Ef),ks(Af),ks(If)}var l_=8,c_=25e3;function Tf(e,r={}){Nf();let t=r.run??wf,n=r.now??(()=>new Date),o=r.maxSubjects??l_,s=Date.now()+(r.deadlineMs??c_),i=new Set,a=e.filter(m=>{let p=Cf(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=Of(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 Df(e){return u_.join(x(e),d_)}function Mf(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 Uf(e){let r=_(Df(e),null);return Mf(r?.wanted)}function Bf(e,r){le(Df(e),{savedAt:new Date().toISOString(),wanted:r})}function Wf(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Mf(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=Uf(r);u=g.length>0?Tf(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=Wf(f.response);if(m)try{Bf(r,m)}catch{}let p=hu(f);if(p)try{gu(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 Ha(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 em(t,e),s=Zp(o),i=wr({runId:r,configuredMaxWorkersOverride:s}),a=ff()?mf(r):void 0,l=await f_(t,r,i,e,a),c=Ld(r,l),u=await Uo(r,e),d=await m_(r,e),f=wr({runId:r,configuredMaxWorkersOverride:s}),m=Nn(),p=await Qp(r,e),g=Mp(f,l),k=g.maxStarts,h=await Tn({run:r,agentOsId:t,pipeline:!0,...e}),S=null,A=0,L=Dp(l),P=k;if(n&&P>0&&L.length>0){let E=Math.min(P,L.length),H=await aa({...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 aa({...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 Lf(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 Lf(e.trim())}catch{return null}try{let e=g_(y_.join(h_(),".claude",".credentials.json"),"utf8");return Lf(e)}catch{return null}}function Hf(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 Ff(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 $f(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,Kf=2e5;async function jf(e,r,t={}){let n=$f(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>=Kf)return;let p=m.toString("utf8").slice(0,Kf-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,Vf=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 Gf(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 jf(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=Hf(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 Ff({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 Fa(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Yf(e){let r=await Gf();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:Vf}));!r&&!e.shouldStop();){if(!Z()||!b().agentOsId?.trim()||(await Fa(Vf,e.shouldStop),e.shouldStop()))return;r=await Gf()}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 Fa(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 Fa(U_,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var j_=6e4,V_=5*6e4,G_=10,Y_=250;async function $a(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=Yc(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=Yf({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{zc({agentOsId:t,runId:r,instructionBundleVersion:Pr()});let d=await oi(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 $a(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Vc({agentOsId:t,baseUrl:Ac(e.baseUrl?String(e.baseUrl):void 0),secret:d.secret});let f=await Ha({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 $a(g,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await $a(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,Jf=2*6e4,qf=1e4,z_=5e3,X_=5*6e4,Q_=30*6e4,zf=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(zf),!(d||i));){if(Date.now()-u<Jf)continue;let k=Xc(t),h=k&&k.pid===a.pid?k:null;if(h&&Qc(h,n)){jr("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await or(qf),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+Jf){jr("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await or(qf),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await or(zf);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 Xf 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=Xf.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=Xf.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 Ka(){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 Qf(){console.log(JSON.stringify(Ka(),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=Fd(mx(e));Wl(r);let t=e.id?Go(String(e.id)):Tl(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 Zf(){Qf()}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 eg,mkdirSync as gx,readFileSync as rg,writeFileSync as hx}from"node:fs";import{homedir as kx}from"node:os";import tg from"node:path";var hr=tg.join(kx(),".kynver",".env");function ja(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.
39
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(`
40
- `)}function us(e=fr){return xf(e)?Ia(_f(e,"utf8")):new Map}function Ef(e,r={}){let t=r.filePath??fr,n=xf(t)?_f(t,"utf8"):"",o=Ia(n),s=[],i=[];for(let u of r.removeKeys??[])o.delete(u)&&i.push(u);for(let[u,d]of Object.entries(e)){if(d===void 0)continue;let f=o.get(u);o.set(u,d),f!==d&&s.push(u)}let a=Ia(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=Sx(o);return l&&(Rx(Pf.dirname(t),{recursive:!0}),vx(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var gr="watchdog:board-sweep",xx="*/5 * * * *",_x=["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 Af(e){let r=e.storePath?.trim()||ar(),t=e.envFilePath?.trim()||fr,n=Cx.join(wx(),".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:_x,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:xx,dedupeKey:gr,callbackPath:o}}}async function Et(e){let r=e.envFilePath??fr,t=[],n=ze(),o=await cs(n),s=us(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:ds(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:ds(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:ds(n.storePath),summary:ds(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 xr(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===gr);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}}I();Je();w();import{existsSync as jf}from"node:fs";import{createHash as Px}from"node:crypto";function Of(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:${Px("sha1").update(r).digest("hex").slice(0,16)}`}async function Na(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function If(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await Na(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 Nf(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 Na(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??gr,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function Tf(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await Na(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 Df(e,r,t=gr){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 Mf(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===gr&&r.provider==="qstash"&&r.status!=="cancelled")}function Ex(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===gr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function Uf(e){return Ex(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 Ax}from"node:crypto";function Ox(){return Ax(32).toString("base64url")}function Wf(e=fr){let r=qs();if(r)return{secret:r,generated:!1,source:"env"};let n=us(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:Ox(),generated:!0,source:"generated"}}import{realpathSync as Ix}from"node:fs";function ps(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 Ix.native(t)}catch{return t}}function Lf(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}import{existsSync as Tx,mkdirSync as Dx,writeFileSync as Mx}from"node:fs";import{homedir as Ux}from"node:os";import Ff from"node:path";import{spawnSync as Hf}from"node:child_process";import{spawnSync as Nx}from"node:child_process";var Ta="1.5G";var Pn;function En(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:Pn!==void 0?Pn:process.platform!=="linux"?(Pn=!1,!1):(Pn=Nx("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,Pn)}function Da(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??Ta,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 Ma="kynver-cron-daemon.service";function Wx(){return Ff.join(Ux(),".config","systemd","user")}function Lx(e){let r=Lf(e.kynverBin?.trim()||ps());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(`
41
- `)}function $f(e,r){if(!En())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=Wx(),n=Ff.join(t,Ma),o=Lx(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."};Dx(t,{recursive:!0});let s=Tx(n);Mx(n,o,"utf8");let i=Hf("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=Hf("systemctl",["--user","enable","--now",Ma],{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 ${Ma}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}W();function Kf(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return jf(t)?ee().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function ms(e={}){let r=e.execute!==!1,t=v(),n=Ge(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=Wf(),i=Af({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=Ef(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=Kf(u,e.runId);d&&(u.defaultDaemonRunId=d),qe(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 Uc(i.storePath);l.storeInitialized=f.created||jf(i.storePath);let m=Z();if(m)try{let p=await Cr(o,{baseUrl:n,apiKey:m});wr(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 Nf(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=Df(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:Of(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await Mc(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await If(n,o,m),S=Mf(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."],B=[];if(S.length)if(e.confirmQstashRemoval){let P=Uf(h);if(!P.allowed)a.push(P.reason);else for(let b of S)await Tf(n,o,b.id,m),B.push(b.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:B,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=Kf({...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=$f({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:ps()},r)}}if(!e.skipTestFire&&a.length===0){let p=await ct({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 Et({config:v(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var Bx=["deployment_provider","cron_secret","env_file","cron_store"];function Vf(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function Hx(e){let r=Vf(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Vf(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function Fx(e){if(!Hx(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Et({config:e})).checks.filter(n=>Bx.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function $x(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 Ua(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Gf(e){if(Ua(e.args.skipCron))return{action:"skipped"};let r=await Fx(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=Ua(e.args.installSystemd)||Ua(e.args["install-systemd"]),n=await ms({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 $x(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function jx(e,r){return e.filter(n=>n.repo===r&&!Ze.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Yf(e){lt();let r=v();(!Z()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await ao(e),r=v());let t=(typeof e.agentOsId=="string"?e.agentOsId.trim():"")||r.agentOsId?.trim()||"";t||(console.error("No AgentOS workspace configured \u2014 run `kynver bootstrap` (or pass --agent-os-id)."),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(qe({...r,chatUseClaudeOauth:!0}),r=v(),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=jx(ee(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=ls({...e,repo:n,name:"agent"}).runId),await Gf({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${Kx.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(is(s)){await as(s,Vx(o,t,e));return}await ss(s)}function Vx(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}W();W();G();import{existsSync as Gx,rmSync as Yx}from"node:fs";import Wa 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 qx(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function zx(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=[...qx(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Wa.resolve(n.worktreePath),i=[];for(let c of o){let u=Jx(c),d=Wa.resolve(s,u);if(!d.startsWith(s+Wa.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!Gx(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};Yx(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 Jf(e){let r=zx(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}I();import k_ from"node:path";jn();var Xx=/--max-old-space-size=(\d+)/;function Qx(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function La(){return Qx(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Ba(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(Xx.test(t))return r;let o=`--max-old-space-size=${La()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function At(e=La()){return`--max-old-space-size=${e}`}I();import{spawnSync as Zx}from"node:child_process";jn();function fs(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function zf(e=v()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?fs(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?fs(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??fs(e.perWorkerMemBytes,1610612736),reserveBytes:t??fs(e.memReserveBytes,2147483648)}}var gs=0;function $a(){gs+=1}function Ka(){gs=Math.max(0,gs-1)}function Ot(e={}){let r={...zf(),...e},t=e.memAvailableBytes??Ht(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:gs,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function e_(e){e<=0||Zx(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ja(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=Ot({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)e_(Math.min(r,n-Date.now())),o=Ot({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as f_}from"node:child_process";w();import{closeSync as t_,existsSync as Va,mkdirSync as n_,openSync as o_,readdirSync as Zf,readFileSync as s_,unlinkSync as Ya,writeFileSync as i_}from"node:fs";import Ja from"node:path";import{mkdirSync as r_}from"node:fs";import Xf from"node:path";function Qf(){return Xf.join(Bo(),"heavy-verification")}function An(){return Xf.join(Qf(),"slots")}function It(){let e=An();return r_(e,{recursive:!0}),e}var Nt=120*6e4,Ga=1;function a_(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function qa(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function On(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?a_(e,Ga):Ga}function l_(e){return`slot-${e}`}function eg(e,r=An()){return Ja.join(r,`${e}.json`)}function za(e){if(!Va(e))return null;try{let r=JSON.parse(s_(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 hs(e,r=Nt){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function c_(e,r){let t=za(e);if(hs(t,r))try{Ya(e)}catch{}}function u_(e){return n_(e,{recursive:!0}),e}function ys(e={}){let r=u_(e.slotsDir??It()),t=e.staleMs??Nt,n=0;for(let o of Zf(r)){if(!o.endsWith(".json"))continue;let s=Ja.join(r,o),i=Va(s);c_(s,t),i&&!Va(s)&&(n+=1)}return n}function rg(e={}){let r=e.slotsDir??It(),t=e.staleMs??Nt;ys({slotsDir:r,staleMs:t});let n=[];for(let o of Zf(r)){if(!o.endsWith(".json"))continue;let s=za(Ja.join(r,o));s&&!hs(s,t)&&n.push(s)}return n}function ks(e={}){return rg(e).length}function Rs(e,r={}){if(qa())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:On(),reason:null};let t=r.slotsDir??It(),n=r.staleMs??Nt,o=r.maxSlots??On();ys({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=l_(i),l=eg(a,t),c=za(l);if(c&&hs(c,n))try{Ya(l)}catch{}else if(c&&!hs(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=o_(l,"wx");i_(d,JSON.stringify(u,null,2),"utf8"),t_(d);let f=ks({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=ks({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function In(e,r={}){if(!e)return;let t=eg(e,r.slotsDir??An());try{Ya(t)}catch{}}function vs(e,r={}){if(qa())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:On(),reason:null};let t=r.slotsDir??It(),n=r.staleMs??Nt,o=r.maxSlots??On();ys({slotsDir:t,staleMs:n});let s=ks({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 d_}from"node:child_process";function p_(e){e<=0||d_(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function bs(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=Rs(e,n);for(;!s.admitted&&Date.now()<o;)p_(Math.min(t,o-Date.now())),s=Rs(e,n);return s}ve();import Xa from"node:path";function m_(e){let r=ir(me()),t=Xa.relative(r,Xa.resolve(e));return t.length>0&&!t.startsWith("..")&&!Xa.isAbsolute(t)}function tg(e){return m_(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 g_(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=f_(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 Qa(e){let r=e.waitForAdmissionMs??6e5,t=r>0?bs(e.command,r):h_(e.command);if(!t.admitted)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason??"heavy verification gate denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:At(),admission:Ot(),verificationGate:t,command:e.command};let n=t.slotId,o=r>0?ja(r):Ot();if(!o.admitted)return In(n),{ok:!1,exitCode:1,stdout:"",stderr:o.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:At(),admission:o,verificationGate:t,command:e.command};let s=tg(e.cwd);if(!s.ok)return In(n),{ok:!1,exitCode:1,stdout:"",stderr:s.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:At(),admission:o,verificationGate:t,command:e.command};let i=Ba({...process.env,...e.env}),a=At(),l=En();$a();try{let c;if(l){let u=Da({cwd:e.cwd,command:["/usr/bin/env",...g_(i),"/bin/bash","-lc",e.command]});c=ng(u,{cwd:e.cwd,env:i,timeoutMs:e.timeoutMs})}else c=ng([e.command],{cwd:e.cwd,env:i,shell:!0,timeoutMs:e.timeoutMs});return{ok:c.exitCode===0,exitCode:c.exitCode,stdout:c.stdout,stderr:c.stderr,admitted:!0,wrappedWithSystemd:l,nodeOptionsFlag:a,admission:o,verificationGate:t,command:e.command}}finally{Ka(),In(n)}}function h_(e){let r=bs(e,0);return r.admitted?r:{...vs(e),slotId:null}}var Za=["npm run typecheck","npm run test"];function Ss(e,r=Za,t={}){let n=[],o=!0;for(let s of r){let i=Qa({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 og(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 sg(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let A of i)s.push(og(String(A)));else typeof i=="string"&&s.push(og(i));let a=L(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=v(),f=`provider:${ho(u.workerProvider,Qe)}`,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:Xe(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 y_(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=k_.resolve(r),n=Ss(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 ig(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){y_(e);return}let n=v().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=L(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 R_ from"node:path";w();function ag(e){let r=R_.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=Ss(r,n.length?n:Za,{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(`
42
- `)[0]}`)}process.exit(s.passed?0:1)}I();import{readFileSync as v_}from"node:fs";w();var b_=["create","add_version","update_metadata"],S_=["approval_guard","auth","network","server","tool_interruption"];function w_(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:v_(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 lg(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!b_.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=v(),o=N(e.slug?String(e.slug):n.agentOsSlug,"slug (or agentOsSlug in ~/.kynver/config.json)"),s=N(e.title?String(e.title):void 0,"title"),{body:i,bodyPathHint:a}=w_(e);a&&pn(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:C_(e)},c=await fn(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function C_(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!S_.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 cg(){let e=Rt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function ug(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await Fi({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function dg(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=Sa({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 hr(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 ws(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(`
43
- `),diagnostic:hr(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(`
44
- `),diagnostic:hr(e)}}import N_ from"node:path";W();G();w();G();w();function pg(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!hi(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>ot?{health:"stale",reason:`heartbeat older than ${Math.floor(ot/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"}}ve();w();import{existsSync as mg,mkdirSync as A_,readdirSync as O_,unlinkSync as I_}from"node:fs";import el from"node:path";function fg(){let{harnessRoot:e}=Jr(),r=el.join(e,"monitors");return A_(r,{recursive:!0}),r}function Tt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function rl(e){return el.join(fg(),`${e}.json`)}function Dt(e){return x(rl(e),void 0)}function Mt(e){le(rl(e.monitorId),e)}function gg(e){let r=rl(e);return mg(r)?(I_(r),!0):!1}function hg(){let e=fg();if(!mg(e))return[];let r=[];for(let t of O_(e)){if(!t.endsWith(".json"))continue;let n=x(el.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 tl(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"),Po(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),st(t)&&n.push(t.attention.reason||"landing gate blocked");let o=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}}I();async function kg(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=L(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 x(N_.join(_(e),"workers",R(r),"worker.json"),void 0)}function Rg(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 vg(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=pg({worker:e,status:n,taskLease:o}),i=tl({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 Nn(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=Rg(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 kg({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>vg(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await wo(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let p of u){if(!p.autoComplete.eligible){f.push({worker:p.worker,outcome:"skipped",ok:!1,reason:p.autoComplete.blockers.join("; ")||"not eligible"});continue}let g=await gt({run:r,name:p.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:p.worker,outcome:g.outcome,ok:g.outcome==="completed",reason:g.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function bg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Rg(r,t),o=[];for(let s of n){let i=yg(r,s);i&&o.push(vg(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function nl(){return hg()}function Sg(e){let r=String(e.run||"");N(r,"--run");let t=Tt(r,e.name?String(e.name):void 0),n=Dt(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(),Mt(n),gg(t),{monitorId:t,stopped:!0,pid:n.pid}}async function ol(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=tl({worker:n,status:s});if(!i.eligible){console.log(JSON.stringify({runId:r,worker:t,outcome:"blocked",blockers:i.blockers,terminalVerified:i.terminalVerified},null,2)),process.exitCode=1;return}let a=await gt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var T_=5e3,D_=360*60*1e3;async function wg(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):T_,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):D_,o=Date.now();for(;Date.now()-o<=n;){let s=r?Dt(r):void 0;if(s?.stoppedAt)break;let i=await Nn({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=ws({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(),Mt(s));break}kr(t)}}w();ve();import{spawn as M_}from"node:child_process";import{closeSync as Cg,existsSync as U_,openSync as W_}from"node:fs";import xg from"node:path";import{fileURLToPath as L_}from"node:url";function B_(){return xg.join(L_(new URL(".",import.meta.url)),"cli.js")}function _g(e){let r=e.cliPath??B_();if(!U_(r))return;let t=Tt(e.runId,e.workerName),{harnessRoot:n}=Jr(),o=xg.join(n,"monitors",`${t}.log`),s;try{s=W_(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=M_(i,l,ae({detached:!0,stdio:c,env:process.env}));s!==void 0&&Cg(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 Mt(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{Cg(s)}catch{}return}}w();async function Pg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Tt(r,t),o=Dt(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=_g({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 Eg(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Nn({...e,autoComplete:!1}):bg(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:nl()},null,2))}function Ag(e){console.log(JSON.stringify(Sg(e),null,2))}function Og(){console.log(JSON.stringify({monitors:nl()},null,2))}async function Ig(e){await wg(e)}async function Ng(e){let r=await Nn(e);console.log(JSON.stringify(r,null,2))}import{existsSync as H_,readFileSync as F_}from"node:fs";import{dirname as sl,join as Dg}from"node:path";import{fileURLToPath as Tg}from"node:url";function $_(e){let r=sl(Tg(e));for(let t=0;t<6;t+=1){if(H_(Dg(r,"package.json")))return r;let n=sl(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${sl(Tg(e))}`)}function Mg(e=import.meta.url){let r=Dg($_(e),"package.json"),t=JSON.parse(F_(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Cs=Mg();function K_(e){return e.some(r=>r==="--version"||r==="-v")}function j_(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Ug(e,r=import.meta.url,t){return K_(e)?(j_(Mg(r),t),!0):!1}function V_(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 G_(e={}){let[r,t]=await Promise.all([ns(),Promise.resolve(jm({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Cs;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:V_(r),repo:t,self:n}}async function Wg(e={}){let r=await G_(e);return Gm(r)}function Lg(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 Y_(e){let r=e.trim();return r?Oa().find(n=>n.name===r&&n.status!=="completed")??null:null}function Bg(e){let r=String(N(String(e.name||""),"--name")),t=Y_(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}W();G();w();I();import J_ from"node:path";function Tn(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function q_(e){let r=L(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=J_.join(_(a.id),"workers",R(l),"worker.json"),u=x(c,void 0);if(!u){s.push(Tn(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(Tn(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Tn(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(Tn(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Tn(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 Hg(e){let r=await q_(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)}Je();I();import z_ from"node:path";import{homedir as X_}from"node:os";var il=z_.join(X_(),".kynver","config.json");function al(e){let r=v(),t=Ce({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(il),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(il),resolved:yn(t),config:at(r)};let n=up(t.repo,r),o=yn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(il),resolved:o,config:at(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Fg(e=!1){let r=al();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 $g(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 qg from"node:path";Je();I();import{accessSync as Q_,constants as Z_,existsSync as ll,readFileSync as eP}from"node:fs";import{homedir as xs}from"node:os";import _s from"node:path";import{spawnSync as rP}from"node:child_process";ve();function Kg(e,r){try{let t=rP(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 jg(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function tP(e){if(!ll(e))return!1;try{return Q_(e,Z_.W_OK),!0}catch{return!1}}var Vg={packageVersion:()=>Cs,commandOnPath:e=>Kg(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Kg(e,["--version"]),loadConfig:()=>v(),configFilePath:()=>_s.join(xs(),".kynver","config.json"),credentialsFilePath:()=>_s.join(xs(),".kynver","credentials"),readCredentials:()=>{let e=_s.join(xs(),".kynver","credentials");if(!ll(e))return{hasApiKey:!1};try{let r=JSON.parse(eP(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:jg(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:jg(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:lo(),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:()=>_s.join(xs(),".openclaw","harness"),pathExists:e=>ll(e),pathWritable:e=>tP(e)};function Gg(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function nP(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Yg(e){return!!e.openclawCronStorePath}function oP(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Jg(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(oP(e,r)&&!Gg(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(nP(e,r)&&!Gg(e,r)){if(Yg(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(Yg(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 sP(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 iP(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 aP(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?yn(l):null,u=$g(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 lP(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 cP(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 uP(e){let r=e.harnessRoot(),t=qg.join(r,"runs"),n=qg.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 dP(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 pP(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},Jg(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 zg(e=Vg){let r=[iP(e),aP(e),lP(e),cP(e),uP(e),dP(e),pP(e)],t=sP(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 Xg(e={}){let r;if(e.remediateDefaultRepo===!0){let n=al();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=zg();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}I();async function Qg(e){let r=v(),t=(e.agentOsId?String(e.agentOsId):r.agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=L(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 fo(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))}Je();var cl=["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"],ul=["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 mP(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 dl(e,r=mP()){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:[...cl],runnerSteps:[...ul]}}function Zg(e){return{...e,deploymentSchedulerProvider:"qstash"}}I();import fP from"node:path";import{homedir as gP}from"node:os";var eh=fP.join(gP(),".kynver","config.json");function rh(e=!1){let r=v(),t=dl(r),n={...t,configPath:Y(eh),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
45
- `),console.log("Deployment (Vercel):");for(let o of cl)console.log(` - ${o}`);console.log(`
46
- User runner:`);for(let o of ul)console.log(` - ${o}`);if(console.log(`
48
+ `)}function ws(e=hr){return eg(e)?ja(rg(e,"utf8")):new Map}function ng(e,r={}){let t=r.filePath??hr,n=eg(t)?rg(t,"utf8"):"",o=ja(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=ja(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(tg.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 og(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 Rg}from"node:fs";import{createHash as wx}from"node:crypto";function sg(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 Va(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function ig(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await Va(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 ag(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 Va(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 lg(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await Va(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 cg(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 ug(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 dg(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 pg(e=hr){let r=li();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 mg(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 hg from"node:path";import{spawnSync as gg}from"node:child_process";import{spawnSync as Ex}from"node:child_process";var Ga="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 Ya(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??Ga,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 Ja="kynver-cron-daemon.service";function Tx(){return hg.join(Nx(),".config","systemd","user")}function Dx(e){let r=mg(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 kg(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=hg.join(t,Ja),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=gg("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=gg("systemctl",["--user","enable","--now",Ja],{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 ${Ja}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}B();function yg(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return Rg(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=pg(),i=og({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=ng(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=yg(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 uu(i.storePath);l.storeInitialized=f.created||Rg(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 ag(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=cg(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:sg(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await cu(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await ig(n,o,m),S=ug(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=dg(h);if(!P.allowed)a.push(P.reason);else for(let v of S)await lg(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=yg({...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=kg({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 bg(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=bg(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=bg(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 qa(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function vg(e){if(qa(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=qa(e.args.installSystemd)||qa(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 Sg(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 vg({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 za 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=za.resolve(n.worktreePath),i=[];for(let c of o){let u=jx(c),d=za.resolve(s,u);if(!d.startsWith(s+za.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 wg(e){let r=Gx(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import hP 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 Xa(){return Jx(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Qa(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=${Xa()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function Dt(e=Xa()){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 _g(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 rl(){Es+=1}function tl(){Es=Math.max(0,Es-1)}function Mt(e={}){let r={..._g(),...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 nl(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 fP}from"node:child_process";w();import{closeSync as Qx,existsSync as ol,mkdirSync as Zx,openSync as eP,readdirSync as Eg,readFileSync as rP,unlinkSync as il,writeFileSync as tP}from"node:fs";import al from"node:path";import{mkdirSync as Xx}from"node:fs";import xg from"node:path";function Pg(){return xg.join(Qo(),"heavy-verification")}function Fn(){return xg.join(Pg(),"slots")}function Ut(){let e=Fn();return Xx(e,{recursive:!0}),e}var Bt=120*6e4,sl=1;function nP(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?nP(e,sl):sl}function oP(e){return`slot-${e}`}function Ag(e,r=Fn()){return al.join(r,`${e}.json`)}function ll(e){if(!ol(e))return null;try{let r=JSON.parse(rP(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 As(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 sP(e,r){let t=ll(e);if(As(t,r))try{il(e)}catch{}}function iP(e){return Zx(e,{recursive:!0}),e}function Os(e={}){let r=iP(e.slotsDir??Ut()),t=e.staleMs??Bt,n=0;for(let o of Eg(r)){if(!o.endsWith(".json"))continue;let s=al.join(r,o),i=ol(s);sP(s,t),i&&!ol(s)&&(n+=1)}return n}function Ig(e={}){let r=e.slotsDir??Ut(),t=e.staleMs??Bt;Os({slotsDir:r,staleMs:t});let n=[];for(let o of Eg(r)){if(!o.endsWith(".json"))continue;let s=ll(al.join(r,o));s&&!As(s,t)&&n.push(s)}return n}function Is(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();Os({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=oP(i),l=Ag(a,t),c=ll(l);if(c&&As(c,n))try{il(l)}catch{}else if(c&&!As(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=eP(l,"wx");tP(d,JSON.stringify(u,null,2),"utf8"),Qx(d);let f=Is({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=Is({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{il(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();Os({slotsDir:t,staleMs:n});let s=Is({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 aP}from"node:child_process";function lP(e){e<=0||aP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function cl(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=Wt(e,n);for(;!s.admitted&&Date.now()<o;)lP(Math.min(t,o-Date.now())),s=Wt(e,n);return s}var cP=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,uP=/\b(npm run build\b|next build\b)\b/i,dP=/\b(vercel (build|deploy|--prod))\b/i,pP=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function ul(e){let r=e.trim();return r?pP.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:dP.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:uP.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:cP.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 Ns="heavy_verification_token_required";function dl(e,r={}){let t=ul(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?cl(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:Ns,commandClass:t.commandClass,reason:t.reason??o.reason??Ns,verificationGate:o}}be();import pl from"node:path";function mP(e){let r=ar(me()),t=pl.relative(r,pl.resolve(e));return t.length>0&&!t.startsWith("..")&&!pl.isAbsolute(t)}function Og(e){return mP(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 gP(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=fP(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 ml(e){let r=e.waitForAdmissionMs??6e5,t=dl(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?nl(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=Qa({...process.env,...e.env}),l=Dt(),c=Hn();rl();try{let u;if(c){let d=Ya({cwd:e.cwd,command:["/usr/bin/env",...gP(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{tl(),jn(o)}}var fl=["npm run typecheck","npm run test"];function Ts(e,r=fl,t={}){let n=[],o=!0;for(let s of r){let i=ml({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 kP(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=hP.resolve(r),n=Ts(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"){kP(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 yP from"node:path";w();function Ug(e){let r=yP.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=Ts(r,n.length?n:fl,{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 RP}from"node:fs";w();var bP=["create","add_version","update_metadata"],vP=["approval_guard","auth","network","server","tool_interruption"];function SP(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:RP(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 Bg(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!bP.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}=SP(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:wP(e)},c=await xn(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function wP(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!vP.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 Wg(){let e=Ct();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Lg(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await ea({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function Hg(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=Ma({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 Ds(e){let r=[],t=typeof e.monitorId=="string"?e.monitorId:void 0;if(r.push(t?`Harness monitor tick \xB7 ${e.runId} (${t})`:`Harness monitor tick \xB7 ${e.runId}`),!e.workers.length)return r.push("No workers in scope for this poll."),{primary:r.join(`
51
+ `),diagnostic: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 OP 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&&!Ai(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 EP,readdirSync as AP,unlinkSync as IP}from"node:fs";import gl from"node:path";function Kg(){let{harnessRoot:e}=Xr(),r=gl.join(e,"monitors");return EP(r,{recursive:!0}),r}function Lt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function hl(e){return gl.join(Kg(),`${e}.json`)}function Ht(e){return _(hl(e),void 0)}function Ft(e){le(hl(e.monitorId),e)}function jg(e){let r=hl(e);return $g(r)?(IP(r),!0):!1}function Vg(){let e=Kg();if(!$g(e))return[];let r=[];for(let t of AP(e)){if(!t.endsWith(".json"))continue;let n=_(gl.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 kl(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 _(OP.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=kl({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 yl(){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 Rl(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=kl({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 NP=5e3,TP=360*60*1e3;async function Qg(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):NP,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):TP,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=Ds({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 DP}from"node:child_process";import{closeSync as Zg,existsSync as MP,openSync as UP}from"node:fs";import eh from"node:path";import{fileURLToPath as BP}from"node:url";function WP(){return eh.join(BP(new URL(".",import.meta.url)),"cli.js")}function rh(e){let r=e.cliPath??WP();if(!MP(r))return;let t=Lt(e.runId,e.workerName),{harnessRoot:n}=Xr(),o=eh.join(n,"monitors",`${t}.log`),s;try{s=UP(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=DP(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:yl()},null,2))}function oh(e){console.log(JSON.stringify(Xg(e),null,2))}function sh(){console.log(JSON.stringify({monitors:yl()},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 LP,readFileSync as HP}from"node:fs";import{dirname as bl,join as ch}from"node:path";import{fileURLToPath as lh}from"node:url";function FP(e){let r=bl(lh(e));for(let t=0;t<6;t+=1){if(LP(ch(r,"package.json")))return r;let n=bl(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${bl(lh(e))}`)}function uh(e=import.meta.url){let r=ch(FP(e),"package.json"),t=JSON.parse(HP(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Ms=uh();function $P(e){return e.some(r=>r==="--version"||r==="-v")}function KP(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function dh(e,r=import.meta.url,t){return $P(e)?(KP(uh(r),t),!0):!1}function jP(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 VP(e={}){let[r,t]=await Promise.all([hs(),Promise.resolve(bf({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Ms;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:jP(r),repo:t,self:n}}async function ph(e={}){let r=await VP(e);return Sf(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 GP(e){let r=e.trim();return r?Ka().find(n=>n.name===r&&n.status!=="completed")??null:null}function fh(e){let r=String(N(String(e.name||""),"--name")),t=GP(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 YP 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 JP(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=YP.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 JP(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 qP from"node:path";import{homedir as zP}from"node:os";var vl=qP.join(zP(),".kynver","config.json");function Sl(e){let r=b(),t=Ce({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(vl),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(vl),resolved:In(t),config:ut(r)};let n=Lp(t.repo,r),o=In({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(vl),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=Sl();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 XP,constants as QP,existsSync as wl,readFileSync as ZP}from"node:fs";import{homedir as Us}from"node:os";import Bs from"node:path";import{spawnSync as eE}from"node:child_process";be();function yh(e,r){try{let t=eE(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 rE(e){if(!wl(e))return!1;try{return XP(e,QP.W_OK),!0}catch{return!1}}var bh={packageVersion:()=>Ms,commandOnPath:e=>yh(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>yh(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Bs.join(Us(),".kynver","config.json"),credentialsFilePath:()=>Bs.join(Us(),".kynver","credentials"),readCredentials:()=>{let e=Bs.join(Us(),".kynver","credentials");if(!wl(e))return{hasApiKey:!1};try{let r=JSON.parse(ZP(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:()=>Bs.join(Us(),".openclaw","harness"),pathExists:e=>wl(e),pathWritable:e=>rE(e)};function vh(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function tE(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Sh(e){return!!e.openclawCronStorePath}function nE(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(nE(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(tE(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 oE(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 sE(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 iE(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 aE(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 lE(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 cE(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 uE(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 dE(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=[sE(e),iE(e),aE(e),lE(e),cE(e),uE(e),dE(e)],t=oE(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=Sl();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 Cl=["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"],_l=["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 pE(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 xl(e,r=pE()){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:[...Cl],runnerSteps:[..._l]}}function Eh(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import mE from"node:path";import{homedir as fE}from"node:os";var Ah=mE.join(fE(),".kynver","config.json");function Ih(e=!1){let r=b(),t=xl(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 Cl)console.log(` - ${o}`);console.log(`
54
+ User runner:`);for(let o of _l)console.log(` - ${o}`);if(console.log(`
47
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(`
48
56
  Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
49
- No local blockers detected on this runner.`)}function th(e=!1){let r=v(),t=dl(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=Zg(r);qe(n);let o={ok:!0,attested:!0,configPath:Y(eh),deploymentSchedulerProvider:"qstash",config:at(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 nh(e){let r=await cs();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 oh(e){let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await ct({agentOsIdFilter:r??null});if(e.json===!0){console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({event:"kynver_cron_tick",...t}))}I();function hP(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 sh(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await ms({execute:r?!1:hP(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)
57
+ No local blockers detected on this runner.`)}function Oh(e=!1){let r=b(),t=xl(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=Eh(r);ze(n);let o={ok:!0,attested:!0,configPath:Y(Ah),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 Nh(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 Th(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 gE(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 Dh(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await xs({execute:r?!1:gE(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)
50
58
  `:`Kynver Cron install
51
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(`
52
60
  Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
53
- 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 ih(e){let r=v(),t=await Et({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"}
54
- `);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)}I();import yP from"node:os";I();Ee();zt();w();var Dn={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 kP}from"node:child_process";import ah from"node:path";function lh(e,r,t){let o=[ah.join(r,Dn.landScript),String(e),...Dn.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=kP("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 ch(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?ah.resolve(r):Ce()?.repo??process.cwd()}async function uh(e){let r=String(N(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Dn.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=br({runId:s??"fleet-lane-tick"}),a={...$o(i,{harnessRunId:s,boxKind:Ue(v()),hostLabel:yP.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=L(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 _r(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,m=[],p=ch(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=lh(h.prNumber,p,o);if(m.push({action:S.action,executed:S.executed,exitCode:S.exitCode}),o&&S.executed){let A=S.exitCode===0,B=typeof h.prUrl=="string"&&h.prUrl.trim()?h.prUrl.trim():`https://github.com/${t}/pull/${h.prNumber}`;try{await _r(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:B,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 dh(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await uh(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 pl(e){return e==="help"||e==="--help"||e==="-h"}function fh(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),ml(1)}function ml(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(`
55
- `)),process.exit(e)}async function vP(e=process.argv.slice(2)){if(Ug(e,import.meta.url,"kynver"))return;if(e.length===0||pl(e[0]))return ml(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&&pl(t)||n.some(pl))return ml(0);let o=so(n),{runsDir:s,worktreesDir:i}=te();if(ph(s,{recursive:!0}),ph(i,{recursive:!0}),r==="daemon"&&lt(),Lg(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=U(l).repo}catch{a=void 0}await Wg({repoRoot:a,cwd:a})}if(r==="login")return void await kc(o);if(r==="bootstrap")return void await ao(o);if(r==="start")return void await Yf(o);if(r==="status")return un(o);if(r==="runner"&&t==="credential")return void await hc(o);if(r==="setup")return void await io(o);if(r==="daemon")return is(o)?void await as(o):void await ss(o);if(r==="plan"&&t==="progress")return void await sg(o);if(r==="plan"&&t==="verify")return void await ig(o);if(r==="harness"&&t==="verify")return ag(o);if(r==="plan"&&t==="persist")return void await lg(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await cg();if(a==="drain")return void await ug(so(n));fh("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return dg(o);if(r==="config"&&t==="ensure-default-repo")return Fg(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return Xg(o);if(r==="scheduler"&&t==="cutover-check")return rh(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return th(o.json===!0);if(r==="cron"&&t==="install")return void await sh(o);if(r==="cron"&&t==="verify")return void await ih(o);if(r==="cron"&&t==="status")return void await nh(o.json===!0);if(r==="cron"&&t==="tick")return void await oh(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await dh(so(n),a)}if(r==="board"&&t==="contract")return void await Qg(o);if(r==="run"&&t==="create")return void ls(o);if(r==="run"&&t==="list")return Cf();if(r==="run"&&t==="resolve")return Bg(o);if(r==="run"&&t==="status")return un(o);if(r==="run"&&t==="dispatch")return void await Dr(o);if(r==="run"&&t==="sweep")return void await bn(o);if(r==="run"&&t==="reconcile")return bp();if(r==="run"&&t==="unblock")return void await Hg(o);if(r==="worker"&&t==="start")return void await Nd(o);if(r==="worker"&&t==="list")return Rd(o);if(r==="worker"&&t==="status")return kd(o);if(r==="worker"&&t==="tail")return xd(o);if(r==="worker"&&t==="stop")return _d(o);if(r==="worker"&&t==="complete")return void await Ni(o);if(r==="worker"&&t==="discard-disposable")return Jf(o);if(r==="worker"&&t==="auto-complete")return void await Ad(o);if(r==="monitor"&&t==="start"){let a=await Pg(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await Eg(o);if(r==="monitor"&&t==="stop")return Ag(o);if(r==="monitor"&&t==="list")return Og();if(r==="monitor"&&t==="tick")return void await Ng(o);if(r==="monitor"&&t==="auto-complete")return void await ol(o);if(r==="monitor"&&t==="run-loop")return void await Ig(o);fh(r,t)}var bP=process.argv[1]&&mh.native(process.argv[1])===mh.native(RP(import.meta.url));bP&&vP().catch(e=>{console.error(e),process.exit(1)});export{vP as main,ml as usage};
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 Mh(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 kE 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 hE}from"node:child_process";import Uh from"node:path";function Bh(e,r,t){let o=[Uh.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=hE("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 Wh(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?Uh.resolve(r):Ce()?.repo??process.cwd()}async function Lh(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:kE.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=Wh(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=Bh(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 Hh(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await Lh(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 Pl(e){return e==="help"||e==="--help"||e==="-h"}function Kh(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),El(1)}function El(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 RE(e=process.argv.slice(2)){if(dh(e,import.meta.url,"kynver"))return;if(e.length===0||Pl(e[0]))return El(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&&Pl(t)||n.some(Pl))return El(0);let o=Ro(n),{runsDir:s,worktreesDir:i}=te();if(Fh(s,{recursive:!0}),Fh(i,{recursive:!0}),r==="daemon"&&mt(),mh(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=U(l).repo}catch{a=void 0}await ph({repoRoot:a,cwd:a})}if(r==="login")return void await Tc(o);if(r==="bootstrap")return void await vo(o);if(r==="start")return void await Sg(o);if(r==="status")return Sn(o);if(r==="runner"&&t==="credential")return void await Nc(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 Dg(o);if(r==="plan"&&t==="verify")return void await Mg(o);if(r==="harness"&&t==="verify")return Ug(o);if(r==="plan"&&t==="persist")return void await Bg(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Wg();if(a==="drain")return void await Lg(Ro(n));Kh("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return Hg(o);if(r==="config"&&t==="ensure-default-repo")return hh(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return xh(o);if(r==="scheduler"&&t==="cutover-check")return Ih(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return Oh(o.json===!0);if(r==="cron"&&t==="install")return void await Dh(o);if(r==="cron"&&t==="verify")return void await Mh(o);if(r==="cron"&&t==="status")return void await Nh(o.json===!0);if(r==="cron"&&t==="tick")return void await Th(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await Hh(Ro(n),a)}if(r==="board"&&t==="contract")return void await Ph(o);if(r==="run"&&t==="create")return void vs(o);if(r==="run"&&t==="list")return Zf();if(r==="run"&&t==="resolve")return fh(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 zp();if(r==="run"&&t==="unblock")return void await gh(o);if(r==="worker"&&t==="start")return void await ap(o);if(r==="worker"&&t==="list")return Jd(o);if(r==="worker"&&t==="status")return Gd(o);if(r==="worker"&&t==="tail")return ep(o);if(r==="worker"&&t==="stop")return rp(o);if(r==="worker"&&t==="complete")return void await Vi(o);if(r==="worker"&&t==="discard-disposable")return wg(o);if(r==="worker"&&t==="auto-complete")return void await op(o);if(r==="monitor"&&t==="start"){let a=await th(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await nh(o);if(r==="monitor"&&t==="stop")return oh(o);if(r==="monitor"&&t==="list")return sh();if(r==="monitor"&&t==="tick")return void await ah(o);if(r==="monitor"&&t==="auto-complete")return void await Rl(o);if(r==="monitor"&&t==="run-loop")return void await ih(o);Kh(r,t)}var bE=process.argv[1]&&$h.native(process.argv[1])===$h.native(yE(import.meta.url));bE&&RE().catch(e=>{console.error(e),process.exit(1)});export{RE as main,El as usage};