@kynver-app/runtime 0.2.146 → 0.2.148

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.
@@ -1,12 +1,12 @@
1
- var P=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{spawnSync as Nb}from"node:child_process";function Wb(e){return["/PID",String(e),"/T","/F"]}function Lb(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Db||/not found/i.test(e.stderr)?{method:"taskkill",outcome:"not_found"}:{method:"taskkill",outcome:"failed",detail:`taskkill exit ${e.status??"null"}: ${e.stderr.trim().slice(0,300)}`}}function Bb(e){let r=Nb("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:Mb});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Ub(e){return Number.isInteger(e)&&e>0}function De(e,r="SIGTERM",t={}){if(!Ub(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??Bb;return Lb(s(Wb(e)))}let o=t.kill??((s,i)=>{process.kill(s,i)});try{return o(-e,r),{method:"group",outcome:"signalled"}}catch{}try{return o(e,r),{method:"pid",outcome:"signalled"}}catch(s){let i=s.code;return i==="ESRCH"?{method:"pid",outcome:"not_found"}:{method:"pid",outcome:"failed",detail:i??s.message}}}function ce(e=process.platform){return e!=="win32"}var Db,Mb,ra=P(()=>{"use strict";Db=128,Mb=15e3});import{existsSync as Fb,mkdirSync as Kb,readFileSync as Qu,readdirSync as XW,renameSync as Hb,rmSync as $b,statSync as Zu,writeFileSync as jb}from"node:fs";import{randomBytes as Vb}from"node:crypto";import Gb from"node:path";function Je(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function yr(e,r){return e||Je(`missing ${r}`),e}function xn(e){try{return JSON.parse(e)}catch{return null}}function I(e,r){try{return JSON.parse(Qu(e,"utf8"))}catch(t){if(arguments.length>1)return r;Je(`failed to read ${e}: ${t.message}`)}}function ue(e,r){Kb(Gb.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${Vb(4).toString("hex")}.tmp`;try{jb(t,`${JSON.stringify(r,null,2)}
2
- `),Hb(t,e)}catch(n){try{$b(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Ko(e){return String(e).replace(/\/+$/,"")}function Ho(e){try{return Zu(e).size}catch{return 0}}function $o(e){try{return Zu(e).mtime.toISOString()}catch{return null}}function Dt(e,r){return Fb(e)?Qu(e,"utf8").split(`
1
+ var P=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{spawnSync as Kb}from"node:child_process";function jb(e){return["/PID",String(e),"/T","/F"]}function Vb(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Hb||/not found/i.test(e.stderr)?{method:"taskkill",outcome:"not_found"}:{method:"taskkill",outcome:"failed",detail:`taskkill exit ${e.status??"null"}: ${e.stderr.trim().slice(0,300)}`}}function Gb(e){let r=Kb("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:$b});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Yb(e){return Number.isInteger(e)&&e>0}function Me(e,r="SIGTERM",t={}){if(!Yb(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??Gb;return Vb(s(jb(e)))}let o=t.kill??((s,i)=>{process.kill(s,i)});try{return o(-e,r),{method:"group",outcome:"signalled"}}catch{}try{return o(e,r),{method:"pid",outcome:"signalled"}}catch(s){let i=s.code;return i==="ESRCH"?{method:"pid",outcome:"not_found"}:{method:"pid",outcome:"failed",detail:i??s.message}}}function ce(e=process.platform){return e!=="win32"}var Hb,$b,aa=P(()=>{"use strict";Hb=128,$b=15e3});import{existsSync as qb,mkdirSync as Jb,readFileSync as td,readdirSync as mL,renameSync as zb,rmSync as Xb,statSync as nd,writeFileSync as Qb}from"node:fs";import{randomBytes as Zb}from"node:crypto";import eS from"node:path";function Je(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function Rr(e,r){return e||Je(`missing ${r}`),e}function Pn(e){try{return JSON.parse(e)}catch{return null}}function I(e,r){try{return JSON.parse(td(e,"utf8"))}catch(t){if(arguments.length>1)return r;Je(`failed to read ${e}: ${t.message}`)}}function ue(e,r){Jb(eS.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${Zb(4).toString("hex")}.tmp`;try{Qb(t,`${JSON.stringify(r,null,2)}
2
+ `),zb(t,e)}catch(n){try{Xb(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function qo(e){return String(e).replace(/\/+$/,"")}function Jo(e){try{return nd(e).size}catch{return 0}}function zo(e){try{return nd(e).mtime.toISOString()}catch{return null}}function Wt(e,r){return qb(e)?td(e,"utf8").split(`
3
3
  `).slice(-r).join(`
4
- `):""}function jo(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ed(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 ta(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=P(()=>{"use strict";ra()});import{existsSync as Yb,readFileSync as qb}from"node:fs";import{homedir as Jb}from"node:os";import zb from"node:path";function oa(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function na(e){return typeof e=="string"&&e.trim()?e:null}function rd(e){let r=oa(e);if(!r)return null;let t=r.desiredState;if(t!=="running"&&t!=="paused"&&t!=="stopped")return null;let n=r.policyVersion;if(typeof n!="number"||!Number.isInteger(n)||n<0)return null;let o=na(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:na(r.requestedByLabel),reason:na(r.reason)}:null}function td(e){let r=oa(oa(e)?.response);return!r||r.runtimeControl===void 0?null:rd(r.runtimeControl)}function nd(e,r=Jb()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return zb.join(r,".kynver",`runtime-control-${t}.json`)}function od(e,r,t){try{let n=Mt(e,t);if(n&&n.policyVersion>r.policyVersion)return;ue(nd(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function Mt(e,r){try{let t=nd(e,r);if(!Yb(t))return null;let n=JSON.parse(qb(t,"utf8"));return n.agentOsId!==e?null:rd(n.control)}catch{return null}}function Vo(e){return e?.desiredState??"running"}function Xb(e){return e==="keeper"||e==="desktop"}function Qb(e,r,t=!1){let n=Vo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function sd(e){return e.control?{policyVersion:e.control.policyVersion,state:Qb(e.control,e.inFlightWorkers,e.exiting),supervised:Xb(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function id(e){let r=Vo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function ld(e){ad=e}function cd(){return ad}var ad,_n=P(()=>{"use strict";O();ad=null});import{homedir as ud}from"node:os";import dd from"node:path";function Zb(e){return e==="~"?ud():e.startsWith("~/")||e.startsWith("~\\")?dd.join(ud(),e.slice(2)):e}function Me(e){return dd.resolve(Zb(e))}var jr=P(()=>{"use strict"});function aS(e){let r=e[iS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function lS(e,r={}){return rS.has(e)?!0:oS.has(e)||r.operatorAllow?.has(e)||sS.some(t=>e.endsWith(t))?!1:tS.some(t=>e.endsWith(t))}function sa(e){let r=aS(e),t={...e};for(let n of Object.keys(t))lS(n,{operatorAllow:r})&&delete t[n];return t}var eS,rS,tS,nS,oS,sS,iS,ia=P(()=>{"use strict";eS=["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","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],rS=new Set(eS),tS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],nS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],oS=new Set(nS),sS=["_PUBLIC_KEY"],iS="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as md}from"node:child_process";function Z(e,r,t={}){let n=md("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=cS(e,r,n);if(t.throwError)throw new Error(o);Je(o)}return n.stdout||""}function cS(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function En(e){return Z(e,["status","--short"],{allowFailure:!0}).split(`
5
- `).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=md("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 pd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Go(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 Wt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Wt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Wt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=pd(e,i,a),c=pd(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 Wt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=P(()=>{"use strict";jr();O();ia()});import{homedir as fd}from"node:os";import aa from"node:path";function dS(e=fd()){return aa.join(e,".kynver",uS)}function hd(e,r=fd()){return aa.resolve(e)===aa.resolve(dS(r))}var uS,gd,la=P(()=>{"use strict";de();uS="workspace",gd="main"});import{existsSync as ua,readFileSync as yd}from"node:fs";import{homedir as pS}from"node:os";import ze from"node:path";import{fileURLToPath as mS}from"node:url";function gS(e){let r=ze.join(e,"package.json");if(!ua(r))return null;try{let t=JSON.parse(yd(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Rd(e){return gS(e)==="kynver"}function kd(e){let r=ze.resolve(e);if(!ua(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?ze.resolve(n):null}function hS(e=import.meta.url){let r=ze.dirname(mS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ua(n))try{if(JSON.parse(yd(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=ze.dirname(r);if(o===r)break;r=o}return null}function ca(e,r,t,n,o){if(!t)return;let s=ze.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Rd(s)||(e.add(s),r.push({repo:s,source:n}))}function kS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ca(t,n,kd(r),"cwd_git",{requireMonorepo:!1});let o=hS(e?.runtimeModuleUrl??import.meta.url);o&&ca(t,n,kd(o),"runtime_checkout");let s=pS();for(let a of fS)ca(t,n,Me(ze.join(s,a)),"well_known_path");let i=ze.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Rd(a.repo))return!0;let l=ze.resolve(a.repo);return i===l||i.startsWith(`${l}${ze.sep}`)})}function Yo(e){return kS(e)[0]??null}var fS,Cn=P(()=>{"use strict";de();jr();la();fS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sd,readFileSync as yS}from"node:fs";import at from"node:path";function vS(e){return e.includes("/")||e.includes("\\")}function bS(e){return(e.PATHEXT||RS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function SS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function wS(e,r={}){let t=r.env??process.env,n=r.exists??Sd,o=bS(t),s=at.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(vS(e)||at.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of SS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(at.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function bd(e){return e.replace(/^[\\/]+/,"")}function _S(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=xS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=vd.exec(n);if(o)return bd(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?vd.exec(i):null;if(a)return bd(a[1])}return null}function ES(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=wS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=at.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>yS(m,"utf8")),i=r.exists??Sd,a;try{a=s(n)}catch{throw new Pn(n)}let l=_S(a);if(!l)throw new Pn(n);let c=at.win32.dirname(n),u=at.win32.join(c,l);if(!i(u))throw new Pn(n);let d=at.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function pe(e,r,t={}){let n=ES(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Pn,RS,vd,xS,Rr=P(()=>{"use strict";Pn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},RS=".COM;.EXE;.BAT;.CMD";vd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,xS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var wd=P(()=>{"use strict";Rr()});function Ed(e){let r=Ko(e);try{let t=new URL(r);return t.hostname.toLowerCase()===xd?(t.hostname=`www.${xd}`,Ko(t.toString())):r}catch{return r}}function An(e){if(e?.trim())return Ed(Ko(e.trim()))}async function In(e,r,t=fetch){let n=Ed(e),o=new Headers(r?.headers),s=0;for(;s<=_d;){let i=await t(n,{...r,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(r?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${_d} redirects for ${e}`)}var xd,_d,On=P(()=>{"use strict";O();xd="kynver.com";_d=10});function lt(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function qo(e,r){return e[r]?.trim()||null}function Cd(e){let r=e?.split(":")[0]?.trim();return r?lt(r):null}function vr(e=process.env,r={}){let t=[],n=Cd(r.boxId),o=Cd(qo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==lt(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:lt(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=qo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==lt(i)&&t.push(`KYNVER_BOX_ID=${qo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:lt(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=qo(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function br(e={},r=process.env){return vr(r,e).boxKind}var We=P(()=>{"use strict"});function da(e,r){return e==="forge"?4:Math.max(1,r)}function Tn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var Jo=P(()=>{"use strict"});import{readFileSync as CS}from"node:fs";import Pd from"node:os";function Ad(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Pd.freemem()}if(process.platform==="linux")try{let t=CS("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Pd.freemem()}var Id=P(()=>{"use strict"});import{existsSync as PS,readFileSync as AS,statfsSync as IS}from"node:fs";function pa(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!PS(e))continue;let r=AS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Od(e={}){if(!(e.forceWsl===void 0?pa():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.wslHostFreeWarnBytes??OS,o=e.wslHostFreeCriticalBytes??TS,s=e.statfs??IS,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${NS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function NS(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var OS,TS,Lt,ma=P(()=>{"use strict";OS=25*1024*1024*1024,TS=12*1024*1024*1024,Lt="/mnt/c"});import{execFileSync as Td}from"node:child_process";import{existsSync as Xo,readFileSync as Nd,readdirSync as DS,statSync as MS}from"node:fs";import fa from"node:path";function zo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Dd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Td("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt;return r&&Xo(fa.join(t,"Users",r))?r:null}function FS(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.windowsUser??Dd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function KS(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function HS(){try{if(Xo("/proc/sys/kernel/core_pattern"))return Nd("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Td("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function $S(e){return!!(e&&/wsl-capture-crash/i.test(e))}function jS(e,r=Lt){let t=fa.join(r,"Users",e,".wslconfig");if(!Xo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Nd(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function VS(e){if(!Xo(e))return[];let r=DS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=fa.join(e,n.name);try{let s=MS(o),i=KS(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Bt(e={}){if(!(e.forceWsl===void 0?pa():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.windowsUser??Dd(),o=e.warnBelowBytes??zo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",WS),s=e.criticalBelowBytes??zo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",LS),i=e.warnCount??zo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",BS),a=e.criticalCount??zo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",US),l=(e.readCorePattern??HS)(),c=$S(l),u=null;n&&(u=(e.readWslConfig??jS)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=FS({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??VS)(m)}catch($){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${m}: ${$.message}`,probeError:$.message}}let y=f.reduce(($,C)=>$+C.bytes,0),k=f.length,b=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=y>=s,h=y>=o,w=k>=a,E=k>=i,_=!(g||w||h||E),K=null;if(!_){let $=g||w?"critical":"warning",C=(y/1024**3).toFixed(1),re=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${re}). `+GS({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:_,path:m,windowsUser:n,dumpCount:k,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:K,probeError:null}}function GS(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var WS,LS,BS,US,Qo=P(()=>{"use strict";ma();WS=5*1024*1024*1024,LS=10*1024*1024*1024,BS=2,US=4});import{statfsSync as YS}from"node:fs";function Vr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??qS,n=e.diskFreeCriticalBytes??JS,o=e.diskMaxUsedPercent??zS,s=e.diskHardMaxUsedPercent??XS,i=YS(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,p=a<t*2,m=p&&c>o,f=p&&c>s,y=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:Od(e.wslHost),b=e.skipWslCrashDumpCheck?null:Bt(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),QS({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function QS(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 qS,JS,zS,XS,Nn=P(()=>{"use strict";Qo();ma();qS=30*1024*1024*1024,JS=15*1024*1024*1024,zS=80,XS=90});import{existsSync as ZS,readdirSync as ew}from"node:fs";import rw from"node:path";function ir(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=rw.join(N(e.id),"workers");if(!ZS(t))return[...r];for(let n of ew(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Dn=P(()=>{"use strict";B();O()});function ga(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 Md(e){let r=e.trim();if(!r)return null;let t=ga(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ga(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ga(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Wd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Md(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Md(t);return n||t}var Ld=P(()=>{"use strict"});import{existsSync as tw,readFileSync as nw}from"node:fs";function Bd(e){return e==="complete"}function Sr(e){return Bd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!tw(e))return r;let t=Date.now()+ow,n=new Date(t).toISOString(),o=nw(e,"utf8").split(`
6
- `).filter(Boolean);for(let s of o){let i=xn(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)),Bd(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Wd(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 ow,ct=P(()=>{"use strict";Ld();O();ow=6e4});function Fd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Zo(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 Kd(e){let r=Fd(e[0]);return!!(r&&sw.has(r))}function aw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function lw(e){if(!e||e.includes("*"))return null;let r=aw(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Hd(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ha(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function cw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function uw(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;Ud.has(n)&&(t+=1);continue}r.push(n)}}return r}function dw(e){let r=!1,t=e.map((o,s)=>{let i=cw(o),a=e[s-1];return a&&Ud.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=uw(t);if(n.length===2){let[o,s]=n;if(ha(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=lw(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function $d(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function es(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=Zo(r);if(!t.length)return{command:r,wrapped:!1};let n=Fd(t[0]);if(!n||!iw.has(n))return{command:r,wrapped:!1};let o=$d(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function pw(e,r){let t=e.trim(),n=Zo(t),o=$d(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function mw(e){let r=e.trim(),t=es(r),n=Zo(t.command);if(!n.length||!Kd(n))return{segment:r,changed:!1};let o=dw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:pw(r,s),changed:!0}:{segment:s,changed:!0}}function ka(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=mw(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function jd(e){let r=es(e).command,t=Zo(r.trim());return t.length&&Kd(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Vd(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 fw(e){let{pattern:r,target:t}=Vd(e);return r?ha(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Hd(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function gw(e){let{pattern:r,target:t}=Vd(e);if(!r)return null;if(ha(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Hd(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function hw(e){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 kw(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 ya(e){let r=e.meta?.trim()||(e.command?kw(e.command):null)||null;if(r){let t=fw(r),n=hw(t);if(n)return n;let o=gw(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=ka(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 sw,iw,Ud,Gd=P(()=>{"use strict";sw=new Set(["rg","ripgrep","grep"]),iw=new Set(["bash","sh","dash","zsh"]),Ud=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Mn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function vw(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 Wn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function bw(e){let r=e.metadata;if(!Wn(r))return null;let t=r.vulnerabilities;if(!Wn(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 Sw(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 ww(e,r){let t=e.error;if(Wn(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?Mn(o.split(`
7
- `).find(Boolean)??o,160):"npm audit failed"}function xw(e){let r=`${e.stdout}
8
- ${e.stderr}`.trim(),t=vw(r);if(!t||!Wn(t)){let o=Mn(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(Wn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${ww(t,e.stderr)}`};let n=bw(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:Sw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function _w(e){return yw.test(e)}function Ew(e){let r=es(e).command;return Yd.test(e)||Yd.test(r)||jd(e)}function Cw(e){let r=ya({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&&Rw.test(n)){let i=Mn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ka(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=Mn(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 qd(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(_w(e.command)){let i=r.trim()||n.trim()||t.trim();return xw({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ew(e.command))return Cw({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ya({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=Mn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var yw,Yd,Rw,Jd=P(()=>{"use strict";Gd();yw=/\bnpm\s+audit\b/i,Yd=/\b(rg|ripgrep)\b/i,Rw=/\b(error|invalid|unknown|panic|not found)\b/i});function Ln(e){return typeof e=="string"&&Pw.test(e.trim())}function rs(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var Pw,ts=P(()=>{"use strict";Pw=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function zd(e,r){if(!r.pinned)return Aw[e.trim()]}function Xd(e){return e?["--fallback-model",e]:[]}var Le,ut,Aw,Qd,Bn=P(()=>{"use strict";Le="claude-sonnet-5-5",ut="claude-opus-5-5",Aw={[Le]:"claude-sonnet-4-6",[ut]:"claude-opus-4-8"};Qd=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function Ra(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Iw(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function Zd(e){if(e.event==="step_update"&&Ra(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!Ra(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=Ra(r.usage)?Iw(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var ep=P(()=>{"use strict"});function va(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function rp(){return{assistantText:""}}function Ow(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Tw(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(va(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function Nw(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function tp(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Ow(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Nw(e))return null;let t=va(e.stats)?Tw(e.stats):void 0;if(e.status==="error"){let o=va(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var np=P(()=>{"use strict"});import{existsSync as Dw,readFileSync as Mw}from"node:fs";function Ww(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Lw(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 Bw(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",rs(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ut(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Uw(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Fw(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function Kw(e,r){let t=Uw(r);if(!t)return;let n=Ut(t.input_tokens)??Ut(t.inputTokens)??Ut(t.prompt_tokens),o=Ut(t.output_tokens)??Ut(t.outputTokens)??Ut(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Fw(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Hw(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 $w(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function dt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Dw(e))return r;let t=Mw(e,"utf8").split(`
9
- `).filter(Boolean),n=null,o=rp();for(let s of t){let i=xn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let m=p;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=Ww(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let m=p.find(f=>f?.type==="tool_use");m&&(r.currentTool=String(m.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=Lw(p);m&&(r.currentTool=m)}let l=Hw(i);l&&$w(r,qd({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=Zd(i),u=c?null:tp(i,o),d=c??u;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&Bw(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}Kw(r,i)}return r}var Un=P(()=>{"use strict";Jd();O();ts();Bn();ep();np()});import{accessSync as jw,constants as Vw,existsSync as Gw,readFileSync as Yw}from"node:fs";import ba from"node:path";function sp(e){return ba.join(e,qw)}function Jw(e=process.env,r=process.platform){if(r==="win32")return!1;let t=e.KYNVER_WORKER_EXIT_CAPTURE?.trim().toLowerCase();return!(t==="0"||t==="false"||t==="off")}function op(e){try{return jw(e,Vw.X_OK),!0}catch{return!1}}function zw(e,r=process.env){if(!e)return!1;if(e.includes("/"))return op(e);for(let t of(r.PATH??"").split(ba.delimiter))if(t&&op(ba.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!Jw(o,n.platform)?[e,r]:zw(e,o)?[n.nodeExecutable??process.execPath,["-e",Xw,sp(t),e,...r]]:[e,r]}function Qw(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ns(e){if(!e)return null;let r=sp(e);if(!Gw(r))return null;try{let t=JSON.parse(Yw(r,"utf8")),n=t.oomEvidence;return{exitCode:Qw(t.exitCode),signal:typeof t.signal=="string"&&t.signal?t.signal:null,...typeof t.startedAt=="string"?{startedAt:t.startedAt}:{},...typeof t.endedAt=="string"?{endedAt:t.endedAt}:{},...typeof t.childPid=="number"?{childPid:t.childPid}:{},...typeof t.spawnError=="string"?{spawnError:t.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function ip(e){if(!e)return null;let r=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${r}`:e.exitCode===null?null:`exited with code ${e.exitCode}${r}`}var qw,Xw,wr=P(()=>{"use strict";qw="exit.json";Xw=String.raw`"use strict";
4
+ `):""}function Xo(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function od(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 la(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=P(()=>{"use strict";aa()});import{existsSync as rS,readFileSync as tS}from"node:fs";import{homedir as nS}from"node:os";import oS from"node:path";function ua(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ca(e){return typeof e=="string"&&e.trim()?e:null}function sd(e){let r=ua(e);if(!r)return null;let t=r.desiredState;if(t!=="running"&&t!=="paused"&&t!=="stopped")return null;let n=r.policyVersion;if(typeof n!="number"||!Number.isInteger(n)||n<0)return null;let o=ca(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:ca(r.requestedByLabel),reason:ca(r.reason)}:null}function id(e){let r=ua(ua(e)?.response);return!r||r.runtimeControl===void 0?null:sd(r.runtimeControl)}function ad(e,r=nS()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return oS.join(r,".kynver",`runtime-control-${t}.json`)}function ld(e,r,t){try{let n=Lt(e,t);if(n&&n.policyVersion>r.policyVersion)return;ue(ad(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function Lt(e,r){try{let t=ad(e,r);if(!rS(t))return null;let n=JSON.parse(tS(t,"utf8"));return n.agentOsId!==e?null:sd(n.control)}catch{return null}}function Qo(e){return e?.desiredState??"running"}function sS(e){return e==="keeper"||e==="desktop"}function iS(e,r,t=!1){let n=Qo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function cd(e){return e.control?{policyVersion:e.control.policyVersion,state:iS(e.control,e.inFlightWorkers,e.exiting),supervised:sS(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function ud(e){let r=Qo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function pd(e){dd=e}function md(){return dd}var dd,An=P(()=>{"use strict";O();dd=null});import{homedir as fd}from"node:os";import gd from"node:path";function aS(e){return e==="~"?fd():e.startsWith("~/")||e.startsWith("~\\")?gd.join(fd(),e.slice(2)):e}function We(e){return gd.resolve(aS(e))}var Vr=P(()=>{"use strict"});function gS(e){let r=e[fS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function hS(e,r={}){return cS.has(e)?!0:pS.has(e)||r.operatorAllow?.has(e)||mS.some(t=>e.endsWith(t))?!1:uS.some(t=>e.endsWith(t))}function da(e){let r=gS(e),t={...e};for(let n of Object.keys(t))hS(n,{operatorAllow:r})&&delete t[n];return t}var lS,cS,uS,dS,pS,mS,fS,pa=P(()=>{"use strict";lS=["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","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],cS=new Set(lS),uS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],dS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],pS=new Set(dS),mS=["_PUBLIC_KEY"],fS="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as kd}from"node:child_process";function Z(e,r,t={}){let n=kd("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=kS(e,r,n);if(t.throwError)throw new Error(o);Je(o)}return n.stdout||""}function kS(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function In(e){return Z(e,["status","--short"],{allowFailure:!0}).split(`
5
+ `).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=kd("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 hd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Zo(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 Bt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Bt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Bt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=hd(e,i,a),c=hd(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 Bt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=P(()=>{"use strict";Vr();O();pa()});import{homedir as yd}from"node:os";import ma from"node:path";function RS(e=yd()){return ma.join(e,".kynver",yS)}function vd(e,r=yd()){return ma.resolve(e)===ma.resolve(RS(r))}var yS,Rd,fa=P(()=>{"use strict";de();yS="workspace",Rd="main"});import{existsSync as ha,readFileSync as Sd}from"node:fs";import{homedir as vS}from"node:os";import ze from"node:path";import{fileURLToPath as bS}from"node:url";function wS(e){let r=ze.join(e,"package.json");if(!ha(r))return null;try{let t=JSON.parse(Sd(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function wd(e){return wS(e)==="kynver"}function bd(e){let r=ze.resolve(e);if(!ha(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?ze.resolve(n):null}function xS(e=import.meta.url){let r=ze.dirname(bS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ha(n))try{if(JSON.parse(Sd(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=ze.dirname(r);if(o===r)break;r=o}return null}function ga(e,r,t,n,o){if(!t)return;let s=ze.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!wd(s)||(e.add(s),r.push({repo:s,source:n}))}function _S(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ga(t,n,bd(r),"cwd_git",{requireMonorepo:!1});let o=xS(e?.runtimeModuleUrl??import.meta.url);o&&ga(t,n,bd(o),"runtime_checkout");let s=vS();for(let a of SS)ga(t,n,We(ze.join(s,a)),"well_known_path");let i=ze.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!wd(a.repo))return!0;let l=ze.resolve(a.repo);return i===l||i.startsWith(`${l}${ze.sep}`)})}function es(e){return _S(e)[0]??null}var SS,On=P(()=>{"use strict";de();Vr();fa();SS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Ed,readFileSync as ES}from"node:fs";import ct from"node:path";function PS(e){return e.includes("/")||e.includes("\\")}function AS(e){return(e.PATHEXT||CS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function IS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function OS(e,r={}){let t=r.env??process.env,n=r.exists??Ed,o=AS(t),s=ct.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(PS(e)||ct.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of IS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(ct.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function _d(e){return e.replace(/^[\\/]+/,"")}function NS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=TS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=xd.exec(n);if(o)return _d(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?xd.exec(i):null;if(a)return _d(a[1])}return null}function DS(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=OS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=ct.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>ES(m,"utf8")),i=r.exists??Ed,a;try{a=s(n)}catch{throw new Tn(n)}let l=NS(a);if(!l)throw new Tn(n);let c=ct.win32.dirname(n),u=ct.win32.join(c,l);if(!i(u))throw new Tn(n);let d=ct.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function pe(e,r,t={}){let n=DS(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Tn,CS,xd,TS,vr=P(()=>{"use strict";Tn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},CS=".COM;.EXE;.BAT;.CMD";xd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,TS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var Cd=P(()=>{"use strict";vr()});function Id(e){let r=qo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===Pd?(t.hostname=`www.${Pd}`,qo(t.toString())):r}catch{return r}}function Nn(e){if(e?.trim())return Id(qo(e.trim()))}async function Dn(e,r,t=fetch){let n=Id(e),o=new Headers(r?.headers),s=0;for(;s<=Ad;){let i=await t(n,{...r,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(r?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${Ad} redirects for ${e}`)}var Pd,Ad,Mn=P(()=>{"use strict";O();Pd="kynver.com";Ad=10});function ut(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function rs(e,r){return e[r]?.trim()||null}function Od(e){let r=e?.split(":")[0]?.trim();return r?ut(r):null}function br(e=process.env,r={}){let t=[],n=Od(r.boxId),o=Od(rs(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ut(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ut(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=rs(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ut(i)&&t.push(`KYNVER_BOX_ID=${rs(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ut(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=rs(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function Sr(e={},r=process.env){return br(r,e).boxKind}var Le=P(()=>{"use strict"});function ka(e,r){return e==="forge"?4:Math.max(1,r)}function Wn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var ts=P(()=>{"use strict"});import{readFileSync as MS}from"node:fs";import Td from"node:os";function Nd(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Td.freemem()}if(process.platform==="linux")try{let t=MS("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Td.freemem()}var Dd=P(()=>{"use strict"});import{existsSync as WS,readFileSync as LS,statfsSync as BS}from"node:fs";function ya(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!WS(e))continue;let r=LS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Md(e={}){if(!(e.forceWsl===void 0?ya():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.wslHostFreeWarnBytes??US,o=e.wslHostFreeCriticalBytes??FS,s=e.statfs??BS,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${KS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function KS(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var US,FS,Ut,Ra=P(()=>{"use strict";US=25*1024*1024*1024,FS=12*1024*1024*1024,Ut="/mnt/c"});import{execFileSync as Wd}from"node:child_process";import{existsSync as os,readFileSync as Ld,readdirSync as HS,statSync as $S}from"node:fs";import va from"node:path";function ns(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Bd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Wd("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut;return r&&os(va.join(t,"Users",r))?r:null}function qS(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.windowsUser??Bd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function JS(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function zS(){try{if(os("/proc/sys/kernel/core_pattern"))return Ld("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Wd("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function XS(e){return!!(e&&/wsl-capture-crash/i.test(e))}function QS(e,r=Ut){let t=va.join(r,"Users",e,".wslconfig");if(!os(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Ld(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function ZS(e){if(!os(e))return[];let r=HS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=va.join(e,n.name);try{let s=$S(o),i=JS(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Ft(e={}){if(!(e.forceWsl===void 0?ya():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.windowsUser??Bd(),o=e.warnBelowBytes??ns("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",jS),s=e.criticalBelowBytes??ns("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",VS),i=e.warnCount??ns("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",GS),a=e.criticalCount??ns("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",YS),l=(e.readCorePattern??zS)(),c=XS(l),u=null;n&&(u=(e.readWslConfig??QS)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=qS({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??ZS)(m)}catch($){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${m}: ${$.message}`,probeError:$.message}}let y=f.reduce(($,C)=>$+C.bytes,0),k=f.length,b=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=y>=s,h=y>=o,w=k>=a,E=k>=i,_=!(g||w||h||E),K=null;if(!_){let $=g||w?"critical":"warning",C=(y/1024**3).toFixed(1),re=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${re}). `+ew({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:_,path:m,windowsUser:n,dumpCount:k,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:K,probeError:null}}function ew(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var jS,VS,GS,YS,ss=P(()=>{"use strict";Ra();jS=5*1024*1024*1024,VS=10*1024*1024*1024,GS=2,YS=4});import{statfsSync as rw}from"node:fs";function Gr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??tw,n=e.diskFreeCriticalBytes??nw,o=e.diskMaxUsedPercent??ow,s=e.diskHardMaxUsedPercent??sw,i=rw(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,p=a<t*2,m=p&&c>o,f=p&&c>s,y=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:Md(e.wslHost),b=e.skipWslCrashDumpCheck?null:Ft(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),iw({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function iw(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 tw,nw,ow,sw,Ln=P(()=>{"use strict";ss();Ra();tw=30*1024*1024*1024,nw=15*1024*1024*1024,ow=80,sw=90});import{existsSync as aw,readdirSync as lw}from"node:fs";import cw from"node:path";function ar(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=cw.join(N(e.id),"workers");if(!aw(t))return[...r];for(let n of lw(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Bn=P(()=>{"use strict";B();O()});function ba(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 Ud(e){let r=e.trim();if(!r)return null;let t=ba(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ba(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ba(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Fd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Ud(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Ud(t);return n||t}var Kd=P(()=>{"use strict"});import{existsSync as uw,readFileSync as dw}from"node:fs";function Hd(e){return e==="complete"}function wr(e){return Hd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!uw(e))return r;let t=Date.now()+pw,n=new Date(t).toISOString(),o=dw(e,"utf8").split(`
6
+ `).filter(Boolean);for(let s of o){let i=Pn(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)),Hd(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Fd(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 pw,dt=P(()=>{"use strict";Kd();O();pw=6e4});function jd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function is(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 Vd(e){let r=jd(e[0]);return!!(r&&mw.has(r))}function gw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function hw(e){if(!e||e.includes("*"))return null;let r=gw(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Gd(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Sa(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function kw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function yw(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;$d.has(n)&&(t+=1);continue}r.push(n)}}return r}function Rw(e){let r=!1,t=e.map((o,s)=>{let i=kw(o),a=e[s-1];return a&&$d.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=yw(t);if(n.length===2){let[o,s]=n;if(Sa(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=hw(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function Yd(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function as(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=is(r);if(!t.length)return{command:r,wrapped:!1};let n=jd(t[0]);if(!n||!fw.has(n))return{command:r,wrapped:!1};let o=Yd(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function vw(e,r){let t=e.trim(),n=is(t),o=Yd(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function bw(e){let r=e.trim(),t=as(r),n=is(t.command);if(!n.length||!Vd(n))return{segment:r,changed:!1};let o=Rw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:vw(r,s),changed:!0}:{segment:s,changed:!0}}function wa(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=bw(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function qd(e){let r=as(e).command,t=is(r.trim());return t.length&&Vd(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Jd(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 Sw(e){let{pattern:r,target:t}=Jd(e);return r?Sa(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Gd(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function ww(e){let{pattern:r,target:t}=Jd(e);if(!r)return null;if(Sa(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Gd(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function xw(e){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 _w(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 xa(e){let r=e.meta?.trim()||(e.command?_w(e.command):null)||null;if(r){let t=Sw(r),n=xw(t);if(n)return n;let o=ww(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=wa(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 mw,fw,$d,zd=P(()=>{"use strict";mw=new Set(["rg","ripgrep","grep"]),fw=new Set(["bash","sh","dash","zsh"]),$d=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Un(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Pw(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 Fn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Aw(e){let r=e.metadata;if(!Fn(r))return null;let t=r.vulnerabilities;if(!Fn(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 Iw(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 Ow(e,r){let t=e.error;if(Fn(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?Un(o.split(`
7
+ `).find(Boolean)??o,160):"npm audit failed"}function Tw(e){let r=`${e.stdout}
8
+ ${e.stderr}`.trim(),t=Pw(r);if(!t||!Fn(t)){let o=Un(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(Fn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Ow(t,e.stderr)}`};let n=Aw(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:Iw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Nw(e){return Ew.test(e)}function Dw(e){let r=as(e).command;return Xd.test(e)||Xd.test(r)||qd(e)}function Mw(e){let r=xa({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&&Cw.test(n)){let i=Un(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=wa(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=Un(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 Qd(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Nw(e.command)){let i=r.trim()||n.trim()||t.trim();return Tw({exitCode:e.exitCode,stdout:i,stderr:t})}if(Dw(e.command))return Mw({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=xa({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=Un(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Ew,Xd,Cw,Zd=P(()=>{"use strict";zd();Ew=/\bnpm\s+audit\b/i,Xd=/\b(rg|ripgrep)\b/i,Cw=/\b(error|invalid|unknown|panic|not found)\b/i});function Kn(e){return typeof e=="string"&&Ww.test(e.trim())}function ls(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var Ww,cs=P(()=>{"use strict";Ww=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function ep(e,r){if(!r.pinned)return Lw[e.trim()]}function rp(e){return e?["--fallback-model",e]:[]}var Be,pt,Lw,tp,Hn=P(()=>{"use strict";Be="claude-sonnet-5-5",pt="claude-opus-5-5",Lw={[Be]:"claude-sonnet-4-6",[pt]:"claude-opus-4-8"};tp=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function _a(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Bw(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function np(e){if(e.event==="step_update"&&_a(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!_a(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=_a(r.usage)?Bw(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var op=P(()=>{"use strict"});function Ea(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function sp(){return{assistantText:""}}function Uw(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Fw(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(Ea(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function Kw(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function ip(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Uw(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Kw(e))return null;let t=Ea(e.stats)?Fw(e.stats):void 0;if(e.status==="error"){let o=Ea(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var ap=P(()=>{"use strict"});import{existsSync as Hw,readFileSync as $w}from"node:fs";function jw(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Vw(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 Gw(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",ls(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Kt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Yw(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function qw(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function Jw(e,r){let t=Yw(r);if(!t)return;let n=Kt(t.input_tokens)??Kt(t.inputTokens)??Kt(t.prompt_tokens),o=Kt(t.output_tokens)??Kt(t.outputTokens)??Kt(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=qw(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function zw(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 Xw(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function mt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Hw(e))return r;let t=$w(e,"utf8").split(`
9
+ `).filter(Boolean),n=null,o=sp();for(let s of t){let i=Pn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let m=p;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=jw(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let m=p.find(f=>f?.type==="tool_use");m&&(r.currentTool=String(m.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=Vw(p);m&&(r.currentTool=m)}let l=zw(i);l&&Xw(r,Qd({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=np(i),u=c?null:ip(i,o),d=c??u;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&Gw(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}Jw(r,i)}return r}var $n=P(()=>{"use strict";Zd();O();cs();Hn();op();ap()});import{accessSync as Qw,constants as Zw,existsSync as ex,readFileSync as rx}from"node:fs";import Ca from"node:path";function cp(e){return Ca.join(e,tx)}function nx(e=process.env,r=process.platform){if(r==="win32")return!1;let t=e.KYNVER_WORKER_EXIT_CAPTURE?.trim().toLowerCase();return!(t==="0"||t==="false"||t==="off")}function lp(e){try{return Qw(e,Zw.X_OK),!0}catch{return!1}}function ox(e,r=process.env){if(!e)return!1;if(e.includes("/"))return lp(e);for(let t of(r.PATH??"").split(Ca.delimiter))if(t&&lp(Ca.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!nx(o,n.platform)?[e,r]:ox(e,o)?[n.nodeExecutable??process.execPath,["-e",sx,cp(t),e,...r]]:[e,r]}function ix(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function us(e){if(!e)return null;let r=cp(e);if(!ex(r))return null;try{let t=JSON.parse(rx(r,"utf8")),n=t.oomEvidence;return{exitCode:ix(t.exitCode),signal:typeof t.signal=="string"&&t.signal?t.signal:null,...typeof t.startedAt=="string"?{startedAt:t.startedAt}:{},...typeof t.endedAt=="string"?{endedAt:t.endedAt}:{},...typeof t.childPid=="number"?{childPid:t.childPid}:{},...typeof t.spawnError=="string"?{spawnError:t.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function up(e){if(!e)return null;let r=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${r}`:e.exitCode===null?null:`exited with code ${e.exitCode}${r}`}var tx,sx,xr=P(()=>{"use strict";tx="exit.json";sx=String.raw`"use strict";
10
10
  const cp = require("child_process"), fs = require("fs");
11
11
  const argv = process.argv.slice(1);
12
12
  const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
@@ -72,42 +72,42 @@ child.on("error", (e) => {
72
72
  if (!child.pid) finish(127, null, String(e && e.message));
73
73
  });
74
74
  child.on("exit", (code, signal) => finish(code, signal));
75
- `});import Zw from"node:path";function Sa(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&rx.has(r)}function os(e){return!!(e&&ex.test(e))}function cp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Sa(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||os(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":ap.test(r)||ap.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function up(e){let r=[tx(e.stopClass)],t=ip(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function tx(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function dp(e,r=process.env){if(e<=0)return null;let t=Number.parseInt(r.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(t)&&t>0?Math.max(t,lp/2):lp/2;return Math.min(nx,n*2**e)}function pp(e,r,t){let n=0,o;try{o=q(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(t&&s===t)continue;let i=I(Zw.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(ns(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&os(Dt(i.stderrPath,20))&&(n+=1)}}return n}function mp(e,r){if(!e)return r();let t=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return r()}finally{t===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=t,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var ex,ap,rx,lp,nx,wa=P(()=>{"use strict";B();O();wr();ex=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,ap=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,rx=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);lp=2048,nx=8192});function fp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Fn(e){let r=(e??"").trim();if(!r)return null;if(Ln(r))return{blocked:!0,reason:`provider authentication failed: ${fp(r)}`};for(let t of ox)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fp(r)}`};return null}var ox,xa=P(()=>{"use strict";ts();Bn();ox=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:Qd,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function gp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function sx(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 ix(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gp(e.head)}function ax(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 Ft(e){if(e.alive||sx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gp(e.headCommit)??ix(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:ax(s,r,t)}}var ss=P(()=>{"use strict"});import{existsSync as lx,readFileSync as cx,statSync as yp}from"node:fs";import is from"node:path";function mx(e,r=process.env){let t=e?dx:ux,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function fx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function _a(e){try{return yp(e).mtimeMs}catch{return-1}}function gx(e){let r=is.join(e,".git");try{if(yp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(cx(r,"utf8"));return t?is.resolve(e,t[1].trim()):null}catch{return null}}function hp(e){let r=gx(e);return[_a(e),r?_a(is.join(r,"HEAD")):-2,r?_a(is.join(r,"index")):-2].join(":")}function kp(e,r){return{changedFiles:En(e),gitAncestry:Go(e,{base:r.base,baseCommit:r.baseCommit})}}function hx(e,r){for(Gr.delete(e),Gr.set(e,r);Gr.size>px;){let t=Gr.keys().next().value;if(t===void 0)break;Gr.delete(t)}}function Rp(e,r,t){let n=fx(r);if(!e||!e.trim())return Kn.missingWorktree++,{changedFiles:[],gitAncestry:Wt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!lx(e))return Gr.delete(o),Kn.missingWorktree++,{changedFiles:[],gitAncestry:Wt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Gr.delete(o),Kn.liveProbes++,kp(e,r);let s=t.ttlMs??mx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=hp(e),l=Gr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Kn.hits++,l.probe;Kn.misses++;let c=kp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();hx(o,{fingerprint:hp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var ux,dx,px,Gr,Kn,vp=P(()=>{"use strict";de();ux=10*6e4,dx=60*6e4,px=2048,Gr=new Map,Kn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Hn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kx(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 yx(e){if(Hn(e.headCommit)||Hn(e.prUrl)||Hn(e.artifactBundlePath)||Hn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Hn(r.head))}function Kt(e){return kx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:yx(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 bp(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var as=P(()=>{"use strict"});function Ea(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Sp(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Ht(e){let r=e.trim();if(!r)return null;let t=Ea(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ea(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ea(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Sp(l);for(let u of n){let d=Sp(u);d>c&&(l=u,c=d)}return l}var ls=P(()=>{"use strict"});function wp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function xp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Rx(e){return new Set(e.map(r=>xp(wp(r)??r)).filter(Boolean))}function _p(e,r,t){let n=wp(e)??e;if(!n)return"unrelated";let o=xp(n);return Rx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ep=P(()=>{"use strict"});function $t(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function vx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function pt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:$t(e)}function cs(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Cp(e){let r=null;if(typeof e=="string"){let o=Ht(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=pt(String(s.prUrl??s.pr_url??"")),a=$t(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:$t(s.mergeCommit??s.merge_commit),reason:$t(s.reason)})}return n}function Pp(e,r){let t=[],n=pt($t(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=pt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ap(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(!vx(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?pt($t(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?pt(r.targetPrUrls[0]):null):null;if(s){let d=Pp(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Cp(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Cp(n),a=new Map(i.map(d=>[cs(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>cs(pt(d)??d)).filter(Boolean)),c=Pp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(cs(d)),m=_p(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=cs(pt(d)??d),m=a.get(p);if(!m){u.push(p);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(p)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Ip(e){if(e.blocked)return e.detail??e.reason}var Op=P(()=>{"use strict";ls();Ep()});function Sx(e){let r=Date.now();if(e.providerTerminalError||rs(e.finalResult)||e.finalResult&&e.error?.trim()||Ln(e.error)||Ln(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Fn(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Tp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&xx(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=Kt(o);if(s.blocked){let i=bp(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ap({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ip(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(wx(e))return{state:"done",reason:"empty abandoned worker record"};let o=Fn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ft({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=os(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${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>bx)return{state:"needs_attention",reason:`no first stream event ${ta(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ca?{state:"stale",reason:`no log/event/heartbeat activity for ${ta(n)}s`}:{state:"ok",reason:"recent activity"}}function Tp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function wx(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 xx(e){let r=null;if(typeof e=="string"?r=Ht(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 Np(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Sr(t))}function Dp(e){let r=dt(e.stdoutPath),t=me(e.heartbeatPath);return Np(e,r.finalResult,t)}function J(e,r={}){let t=dt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Np(e,t.finalResult,n),i=o?!1:Y(e.pid),a=Ho(e.stdoutPath),l=Ho(e.stderrPath),c=Ho(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=ed([t.lastEventAt,n.lastHeartbeatAt,$o(e.stdoutPath),$o(e.stderrPath),$o(e.heartbeatPath)]),m=i?null:ns(e.workerDir),f=s&&!Sa(s)?s:null,y=t.error||!i&&!s&&Dt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Dt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Tp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Sx({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:h,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),E=g||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",S=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,_=cp({alive:i,finalResult:s,error:k??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),K=S&&!i&&!f?S:_,$=K==="running"||K==="finished"?null:(S===K?e.stopReason:void 0)??up({stopClass:K,exit:m,error:k??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:E,stopClass:K,stopReason:$,exit:m,attention:w,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??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 we(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Mp(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Pa(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 bx,Ca,fe=P(()=>{"use strict";ct();Un();wa();wr();ts();xa();ss();vp();as();Op();ls();O();bx=18e4,Ca=6e5});import{readFileSync as _x}from"node:fs";function Ex(e){if(!e||process.platform!=="linux")return null;try{return _x(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wp(e){if(!e.pid||process.platform!=="linux")return!0;let r=Ex(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 Yr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!Wp(e)?!1:!Dp(e)}var us=P(()=>{"use strict";fe();O()});import Bp from"node:os";import Up from"node:path";function Lp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Cx(e=U(),r,t){let n=Lp(e.perWorkerMemBytes,ds),o=Lp(e.memReserveBytes,ps),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ms)),i=gs({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Bp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Fp(e,r={}){let t=r.perWorkerMemBytes??ds,n=r.memReserveBytes??ps,o=r.memUtilization??ms,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,fs)}function Px(){return Ad()}function Ax(e){let r=0;for(let t of ir(e)){let n=I(Up.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!Yr(n)||r++}return r}function Aa(){let e=0;for(let r of Xe())e+=Ax(r);return e}function jt(){let e=[];for(let r of Xe())for(let t of ir(r)){let n=I(Up.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&Yr(n)&&e.push({runId:r.id,workerName:t})}return e}function $n(e){let r=e.config??U(),t=e.totalMemBytes??Bp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Cx(r,e.configuredMaxWorkersOverride,t),c=br(r),u=e.freeMemBytes??Px(),d=e.activeWorkers??Aa(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Tn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Vr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var ds,ps,ms,fs,Vt=P(()=>{"use strict";Id();H();We();Jo();hs();Nn();B();Dn();us();O();ds=500*1024*1024,ps=4*1024*1024*1024,ms=.85,fs=64});function jn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function gs(e){let r=e.config??{},t=e.env??process.env,n=jn(r.perWorkerMemBytes,ds),o=jn(r.memReserveBytes,ps),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ms)),i=Fp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:jn(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=jn(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,fs),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&jn(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,fs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var hs=P(()=>{"use strict";Vt()});import{homedir as Ix}from"node:os";import Ox from"node:path";var Kp,Ia=P(()=>{"use strict";Kp=Ox.join(Ix(),".kynver",".env")});var Hp=P(()=>{"use strict"});var $p=P(()=>{"use strict";Hp()});var jp=P(()=>{"use strict"});var Oa=P(()=>{"use strict";$p();jp();_n()});import{existsSync as Tx,readFileSync as Nx}from"node:fs";function Ta(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Tx("/proc/version")){let e=Nx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Na=P(()=>{"use strict"});var Vp=P(()=>{"use strict";Na()});var ks=P(()=>{"use strict";Ia();jr();H();Oa();Vp()});import Mx from"node:os";function Da(e,r){let t=(r??Mx.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function qp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Jp(e,r){let t=e.trim();if(!t)return Da(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=qp(t.slice(n+1));return s?`${o}:${s}`:Da(o)}return`${r}:${qp(t)}`}function ys(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jp(r,e.boxKind):Da(e.boxKind,e.hostLabel)}var Rs=P(()=>{"use strict";We();We()});var zp=P(()=>{"use strict";Ia();Oa();ks()});function bs(){return vs}function Qp(e){if(!vs)return e;if(!Xp)throw new Ma;return Xp}function Qe(e,r=process.env){if(vs)return;let t=r[e]?.trim();return t||void 0}function La(){if(vs)throw new Wa}var Ma,Wa,vs,Xp,Vn=P(()=>{"use strict";Ma=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Wa=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},vs=!1,Xp=null});import{existsSync as xr,mkdirSync as Wx,readdirSync as Ss,renameSync as Zp,statSync as Lx}from"node:fs";import _r from"node:path";function rm(e){try{return Lx(e).isDirectory()}catch{return!1}}function Bx(e){if(!xr(e))return!0;for(let r of em){let t=_r.join(e,r);if(xr(t)&&(!rm(t)||Ss(t).length>0))return!1}return!0}function Ux(e){let r=_r.join(e,"runs");if(!xr(r)||!rm(r))return!1;for(let t of Ss(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=_r.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function Fx(e){let r=_r.join(e,"runs");if(!xr(r))return!1;for(let t of Ss(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(_r.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Kx(e){let r=_r.join(e,"ghost");return xr(r)?!xr(_r.join(r,"runs")):Fx(e)}function tm(e){return Ux(e.sharedRoot)?Bx(e.forgeRoot)?Kx(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function nm(e,r){Wx(r,{recursive:!0});for(let t of em){let n=_r.join(e,t),o=_r.join(r,t);if(xr(n)){if(xr(o)&&Ss(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(xr(o)){Zp(n,o);continue}Zp(n,o)}}}var em,om=P(()=>{"use strict";O();em=["runs","worktrees"]});import{existsSync as ve}from"node:fs";import{homedir as Hx}from"node:os";import ge from"node:path";function Ba(e=process.env){return e.HOME?.trim()||Hx()}function Ua(e=process.env){return ge.join(Ba(e),".kynver","harness")}function ws(e){let r=ge.resolve(Me(e.trim()));for(;$x.has(ge.basename(r));)r=ge.dirname(r);return r}function jx(e,r=process.env){return ge.join(Ua(r),e)}function Vx(e=process.env){let r=Ua(e);if(ve(ge.join(r,"runs")))return!0;if(ve(r)&&!ve(ge.join(r,"ghost"))&&!ve(ge.join(r,"forge")))return ve(r);let t=ge.join(Ba(e),sm);return ve(t)}function xs(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:ws(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:ws(n),source:"config"};let o=jx(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!Gx(o))return{harnessRoot:o,source:"box_scoped"};let i=Ua(r);if(e.boxKind==="forge"){let a=tm({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&nm(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Vx(r)){if(ve(ge.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(ve(i)&&!ve(ge.join(i,"ghost"))&&!ve(ge.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=ge.join(Ba(r),sm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Gx(e){if(!ve(e))return!0;for(let r of["runs","worktrees"]){let t=ge.join(e,r);if(ve(t))return!1}return!0}var sm,$x,Fa=P(()=>{"use strict";jr();om();sm=ge.join(".openclaw","harness");$x=new Set(["runs","worktrees"])});import im from"node:os";function _s(e){return e?.trim()?e.trim():null}function Yx(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function qx(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Gt(e=U(),r=process.env,t={}){let n=vr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||_s(r.KYNVER_BOX_KIND)),a=t.strict===!0||qx(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=_s(e.runnerId),c=_s(r.KYNVER_RUNTIME_ID)??_s(r.OPENCLAW_RUNTIME_ID),u=l??c??Yx(n.boxKind,im.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=gs({config:e,env:r,totalMemBytes:im.totalmem()}),m=Tn(n.boxKind,p.configuredMaxWorkers??da(n.boxKind,p.autoCap)),f=xs({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Gn=P(()=>{"use strict";H();We();Jo();hs();Fa()});var lm=P(()=>{"use strict";Cn();We();Rs();H();ks();zp();On();Vn();Gn()});function ar(e){let r=e.trim().toLowerCase();return Xx[r]??r}var cm,zx,Xx,Es=P(()=>{"use strict";cm=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],zx=cm.join("|"),Xx={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var um=P(()=>{"use strict";jr()});var dm=P(()=>{"use strict";um()});import{execFileSync as Qx}from"node:child_process";function $a(e=process.env){let r=e[Zx]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function e_(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return Qx(e,r,n)}function r_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Ka(e,r){let t=JSON.stringify(mt),n=JSON.stringify(r),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${t}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${t}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}`}function pm(e={}){if($a(e.env??process.env)==="file")return null;let t=r_(e.platform??process.platform);return t?new Ha(t,e.exec):null}var mt,Zx,Er,Ha,mm=P(()=>{"use strict";mt="kynver",Zx="KYNVER_CREDENTIAL_STORE";Er=5e3;Ha=class{constructor(r,t=e_){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",mt,"-a",r,"-w"],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",mt,"account",r],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("get",r)],{timeoutMs:Er}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(r,t){if(!t||/[\r\n]/.test(t))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",mt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",mt,"account",r],{input:`${t}
76
- `,timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("set",r)],{input:`${t}
77
- `,timeoutMs:Er})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",mt,"-a",r],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",mt,"account",r],{timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("delete",r)],{timeoutMs:Er})}catch{}}}});function Yn(){return ja||(ja=new Va),ja}var Ga,t_,Cs,Va,ja,Ya=P(()=>{"use strict";mm();Ga="api-key",t_=6e4,Cs=class extends Error{constructor(r){super(`KYNVER_CREDENTIAL_STORE=keychain but the OS keychain could not store "${r}"; refusing to write the secret to disk`),this.name="KeychainUnavailableError"}},Va=class{cache=new Map;keychain;env;now;constructor(r={}){this.env=r.env??process.env,this.keychain=r.keychain===void 0?pm({env:this.env}):r.keychain,this.now=r.now??Date.now}get available(){return this.keychain!==null}get backend(){return this.keychain?.backend??null}read(r){if(!this.keychain)return null;let t=this.cache.get(r);if(t&&this.now()-t.at<t_)return t.value;let n=this.keychain.get(r);return this.cache.set(r,{value:n,at:this.now()}),n}write(r,t){let n=$a(this.env);if(!this.keychain){if(n==="keychain")throw new Cs(r);return!1}let o=this.keychain.set(r,t);if(o)this.cache.set(r,{value:t,at:this.now()});else if(this.cache.delete(r),n==="keychain")throw new Cs(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},ja=null});import{existsSync as gm,mkdirSync as o_,readFileSync as hm,writeFileSync as s_}from"node:fs";import{homedir as i_,totalmem as pF}from"node:os";import za from"node:path";function a_(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Me(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Me(e.defaultRepo.trim())}:{}}}function km(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!hd(Me(r))?e:{...e,defaultBase:gd}}function l_(){if(!gm(fm))return null;try{return JSON.parse(hm(fm,"utf8"))}catch{return null}}function U(){let e=l_();return e?km(a_(e)):{}}function Ps(){if(La(),!gm(qa))return{};try{return JSON.parse(hm(qa,"utf8"))}catch{return{}}}function Ja(e){La(),o_(Xa,{recursive:!0}),s_(qa,`${JSON.stringify(e,null,2)}
78
- `,{mode:384})}function c_(e,r,t,n={}){let o=Ps();if(Yn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),Ja(i);return}Ja({...o,...n,[r]:t})}function u_(e,r){let t=Yn().read(e);return t||Ps()[r]}function Qa(){return Qp(d_)}function Cr(){return Qa().getApiKey()}function Yt(e){return Qa().getRunnerToken(e)}function Za(e,r){Qa().persistRunnerToken(e,r)}function Q(e){let r=qn(e);return r||vm("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function el(e){return qn(e)}function qn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||U().apiBaseUrl;return An(r)}function p_(e,r){let t=e||Yt(r)||(r?void 0:Yt(U().agentOsId));if(t)return String(t);let n=Qe("KYNVER_RUNTIME_SECRET")||Qe("KYNVER_CRON_SECRET")||Qe("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 m_(e,r,t){let n=p_(e,r);if(n)return{ok:!0,secret:n};let o=Cr(),s=qn(t?.baseUrl);if(o&&r&&s)try{let i=await rl(r,{baseUrl:s,apiKey:o});return Za(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 ee(e,r,t){let n=await m_(e,r,t);if(n.ok)return n.secret;vm(n.reason)}async function ym(e,r){let t=Cr(),n=qn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await rl(e,{baseUrl:n,apiKey:t});return Za(e,o),o}catch{return null}}async function Rm(e,r,t){let n=Cr(),o=qn(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 rl(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Za(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 rl(e,r){let t=r?.apiKey||Cr();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${Q(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await In(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(r?.enableMcpUpdates?{enableMcpUpdates:!0}:{})}),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}function vm(e){console.error(e),process.exit(1)}var Xa,fm,qa,IF,OF,d_,H=P(()=>{"use strict";Cn();jr();la();wd();On();We();Jo();hs();Nn();ks();lm();Es();Gn();dm();Vn();Ya();Xa=za.join(i_(),".kynver"),fm=za.join(Xa,"config.json"),qa=za.join(Xa,"credentials");IF=500*1024*1024,OF=4*1024*1024*1024;d_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:u_(Ga,"apiKey")},getRunnerToken(e){let r=Ps();if(!!r.runnerToken&&!!e&&r.runnerTokenAgentOsId===e)return r.runnerToken;let n=process.env.KYNVER_RUNNER_TOKEN?.trim();if(n)return n;if(r.runnerToken&&!(e&&r.runnerTokenAgentOsId&&r.runnerTokenAgentOsId!==e))return r.runnerToken},persistApiKey(e){c_(Ga,"apiKey",e)},persistRunnerToken(e,r){Ja({...Ps(),runnerToken:r,runnerTokenAgentOsId:e})}}});import tl from"node:path";function he(e){return ws(e)}function Be(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return he(e);let r=U(),t=r.harnessRoot?.trim();if(t)return he(t);let n=Gt(r,process.env);return n.identity?n.identity.harnessRoot:xs({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return tl.join(he(e),"runs")}function qt(e){return tl.join(he(e),"worktrees")}function bm(){let e=Be();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:qt(e)}}function Pr(e,r){return tl.join(e,x(r))}var Ze=P(()=>{"use strict";H();Fa();Gn();O()});import{existsSync as As,readdirSync as f_,statSync as g_}from"node:fs";import ft from"node:path";function le(){return bm()}function q(e){let{runsDir:r}=le(),t=ft.join(Pr(r,x(e)),"run.json");return As(t)||Je(`run '${e}' not found`),I(t)}function Xe(){let{runsDir:e}=le();return Sm(e)}function Is(e){return Sm(Ae(e))}function h_(e){try{return g_(e).isDirectory()}catch{return!1}}function Sm(e){if(!As(e))return[];let r=[];for(let t of f_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ft.join(e,t.name);if(!h_(n))continue;let o=I(ft.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Jt(e,r){let{runsDir:t}=le(),n=ft.join(Pr(t,x(e)),"run.json"),o=ft.join(Pr(t,x(e)),"workers",x(r),"worker.json");return As(o)||(As(n)||Je(`run '${e}' not found`),Je(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=le();ue(ft.join(Pr(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(ft.join(Pr(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return Jn(r,e)}function Jn(e,r){return Pr(Ae(e),x(r))}var B=P(()=>{"use strict";Ze();O()});import{parentPort as wb,workerData as KW}from"node:worker_threads";var bn=null,Vu=-1,Gu=0;function Yu(e){bn=e}function qu(e=Date.now()){return!bn||bn.stallCount===Vu&&e-Gu<9e5?null:(Vu=bn.stallCount,Gu=e,bn)}var Pb="embedded-1",Ab=[{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"}],Ib={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
75
+ `});import ax from"node:path";function Pa(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&cx.has(r)}function ds(e){return!!(e&&lx.test(e))}function mp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Pa(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||ds(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":dp.test(r)||dp.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function fp(e){let r=[ux(e.stopClass)],t=up(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function ux(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function gp(e,r=process.env){if(e<=0)return null;let t=Number.parseInt(r.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(t)&&t>0?Math.max(t,pp/2):pp/2;return Math.min(dx,n*2**e)}function hp(e,r,t){let n=0,o;try{o=q(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(t&&s===t)continue;let i=I(ax.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(us(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&ds(Wt(i.stderrPath,20))&&(n+=1)}}return n}function kp(e,r){if(!e)return r();let t=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return r()}finally{t===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=t,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var lx,dp,cx,pp,dx,Aa=P(()=>{"use strict";B();O();xr();lx=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,dp=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,cx=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);pp=2048,dx=8192});function yp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function jn(e){let r=(e??"").trim();if(!r)return null;if(Kn(r))return{blocked:!0,reason:`provider authentication failed: ${yp(r)}`};for(let t of px)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${yp(r)}`};return null}var px,Ia=P(()=>{"use strict";cs();Hn();px=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:tp,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Rp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mx(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 fx(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Rp(e.head)}function gx(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 Ht(e){if(e.alive||mx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Rp(e.headCommit)??fx(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:gx(s,r,t)}}var ps=P(()=>{"use strict"});import{existsSync as hx,readFileSync as kx,statSync as Sp}from"node:fs";import ms from"node:path";function bx(e,r=process.env){let t=e?Rx:yx,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function Sx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Oa(e){try{return Sp(e).mtimeMs}catch{return-1}}function wx(e){let r=ms.join(e,".git");try{if(Sp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(kx(r,"utf8"));return t?ms.resolve(e,t[1].trim()):null}catch{return null}}function vp(e){let r=wx(e);return[Oa(e),r?Oa(ms.join(r,"HEAD")):-2,r?Oa(ms.join(r,"index")):-2].join(":")}function bp(e,r){return{changedFiles:In(e),gitAncestry:Zo(e,{base:r.base,baseCommit:r.baseCommit})}}function xx(e,r){for(Yr.delete(e),Yr.set(e,r);Yr.size>vx;){let t=Yr.keys().next().value;if(t===void 0)break;Yr.delete(t)}}function wp(e,r,t){let n=Sx(r);if(!e||!e.trim())return Vn.missingWorktree++,{changedFiles:[],gitAncestry:Bt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!hx(e))return Yr.delete(o),Vn.missingWorktree++,{changedFiles:[],gitAncestry:Bt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Yr.delete(o),Vn.liveProbes++,bp(e,r);let s=t.ttlMs??bx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=vp(e),l=Yr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Vn.hits++,l.probe;Vn.misses++;let c=bp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();xx(o,{fingerprint:vp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var yx,Rx,vx,Yr,Vn,xp=P(()=>{"use strict";de();yx=10*6e4,Rx=60*6e4,vx=2048,Yr=new Map,Vn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Gn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _x(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 Ex(e){if(Gn(e.headCommit)||Gn(e.prUrl)||Gn(e.artifactBundlePath)||Gn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Gn(r.head))}function $t(e){return _x(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Ex(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 _p(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var fs=P(()=>{"use strict"});function Ta(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 Ep(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function jt(e){let r=e.trim();if(!r)return null;let t=Ta(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ta(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ta(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Ep(l);for(let u of n){let d=Ep(u);d>c&&(l=u,c=d)}return l}var gs=P(()=>{"use strict"});function Cp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function Pp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Cx(e){return new Set(e.map(r=>Pp(Cp(r)??r)).filter(Boolean))}function Ap(e,r,t){let n=Cp(e)??e;if(!n)return"unrelated";let o=Pp(n);return Cx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ip=P(()=>{"use strict"});function Vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Px(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ft(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Vt(e)}function hs(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Op(e){let r=null;if(typeof e=="string"){let o=jt(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=ft(String(s.prUrl??s.pr_url??"")),a=Vt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Vt(s.mergeCommit??s.merge_commit),reason:Vt(s.reason)})}return n}function Tp(e,r){let t=[],n=ft(Vt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=ft(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Np(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(!Px(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?ft(Vt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?ft(r.targetPrUrls[0]):null):null;if(s){let d=Tp(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Op(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Op(n),a=new Map(i.map(d=>[hs(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>hs(ft(d)??d)).filter(Boolean)),c=Tp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(hs(d)),m=Ap(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=hs(ft(d)??d),m=a.get(p);if(!m){u.push(p);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(p)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Dp(e){if(e.blocked)return e.detail??e.reason}var Mp=P(()=>{"use strict";gs();Ip()});function Ix(e){let r=Date.now();if(e.providerTerminalError||ls(e.finalResult)||e.finalResult&&e.error?.trim()||Kn(e.error)||Kn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:jn(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Wp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Tx(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=$t(o);if(s.blocked){let i=_p(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Np({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Dp(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(Ox(e))return{state:"done",reason:"empty abandoned worker record"};let o=jn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ht({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=ds(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${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>Ax)return{state:"needs_attention",reason:`no first stream event ${la(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Na?{state:"stale",reason:`no log/event/heartbeat activity for ${la(n)}s`}:{state:"ok",reason:"recent activity"}}function Wp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ox(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 Tx(e){let r=null;if(typeof e=="string"?r=jt(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 Lp(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??wr(t))}function Bp(e){let r=mt(e.stdoutPath),t=me(e.heartbeatPath);return Lp(e,r.finalResult,t)}function J(e,r={}){let t=mt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Lp(e,t.finalResult,n),i=o?!1:Y(e.pid),a=Jo(e.stdoutPath),l=Jo(e.stderrPath),c=Jo(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=wp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=od([t.lastEventAt,n.lastHeartbeatAt,zo(e.stdoutPath),zo(e.stderrPath),zo(e.heartbeatPath)]),m=i?null:us(e.workerDir),f=s&&!Pa(s)?s:null,y=t.error||!i&&!s&&Wt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Wt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Wp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Ix({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:h,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),E=g||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",S=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,_=mp({alive:i,finalResult:s,error:k??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),K=S&&!i&&!f?S:_,$=K==="running"||K==="finished"?null:(S===K?e.stopReason:void 0)??fp({stopClass:K,exit:m,error:k??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:E,stopClass:K,stopReason:$,exit:m,attention:w,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??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 xe(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Up(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Da(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 Ax,Na,fe=P(()=>{"use strict";dt();$n();Aa();xr();cs();Ia();ps();xp();fs();Mp();gs();O();Ax=18e4,Na=6e5});import{readFileSync as Nx}from"node:fs";function Dx(e){if(!e||process.platform!=="linux")return null;try{return Nx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Fp(e){if(!e.pid||process.platform!=="linux")return!0;let r=Dx(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 qr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!Fp(e)?!1:!Bp(e)}var ks=P(()=>{"use strict";fe();O()});import Hp from"node:os";import $p from"node:path";function Kp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Mx(e=U(),r,t){let n=Kp(e.perWorkerMemBytes,ys),o=Kp(e.memReserveBytes,Rs),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):vs)),i=Ss({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Hp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function jp(e,r={}){let t=r.perWorkerMemBytes??ys,n=r.memReserveBytes??Rs,o=r.memUtilization??vs,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,bs)}function Wx(){return Nd()}function Lx(e){let r=0;for(let t of ar(e)){let n=I($p.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!qr(n)||r++}return r}function Ma(){let e=0;for(let r of Xe())e+=Lx(r);return e}function Gt(){let e=[];for(let r of Xe())for(let t of ar(r)){let n=I($p.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&qr(n)&&e.push({runId:r.id,workerName:t})}return e}function Yn(e){let r=e.config??U(),t=e.totalMemBytes??Hp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Mx(r,e.configuredMaxWorkersOverride,t),c=Sr(r),u=e.freeMemBytes??Wx(),d=e.activeWorkers??Ma(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Wn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Gr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var ys,Rs,vs,bs,Yt=P(()=>{"use strict";Dd();H();Le();ts();ws();Ln();B();Bn();ks();O();ys=500*1024*1024,Rs=4*1024*1024*1024,vs=.85,bs=64});function qn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ss(e){let r=e.config??{},t=e.env??process.env,n=qn(r.perWorkerMemBytes,ys),o=qn(r.memReserveBytes,Rs),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):vs)),i=jp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:qn(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=qn(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,bs),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&qn(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,bs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var ws=P(()=>{"use strict";Yt()});import{homedir as Bx}from"node:os";import Ux from"node:path";var Vp,Wa=P(()=>{"use strict";Vp=Ux.join(Bx(),".kynver",".env")});var Gp=P(()=>{"use strict"});var Yp=P(()=>{"use strict";Gp()});var qp=P(()=>{"use strict"});var La=P(()=>{"use strict";Yp();qp();An()});import{existsSync as Fx,readFileSync as Kx}from"node:fs";function Ba(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Fx("/proc/version")){let e=Kx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ua=P(()=>{"use strict"});var Jp=P(()=>{"use strict";Ua()});var xs=P(()=>{"use strict";Wa();Vr();H();La();Jp()});import $x from"node:os";function Fa(e,r){let t=(r??$x.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Qp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Zp(e,r){let t=e.trim();if(!t)return Fa(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=Qp(t.slice(n+1));return s?`${o}:${s}`:Fa(o)}return`${r}:${Qp(t)}`}function _s(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Zp(r,e.boxKind):Fa(e.boxKind,e.hostLabel)}var Es=P(()=>{"use strict";Le();Le()});var em=P(()=>{"use strict";Wa();La();xs()});function Ps(){return Cs}function tm(e){if(!Cs)return e;if(!rm)throw new Ka;return rm}function Qe(e,r=process.env){if(Cs)return;let t=r[e]?.trim();return t||void 0}function $a(){if(Cs)throw new Ha}var Ka,Ha,Cs,rm,Jn=P(()=>{"use strict";Ka=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ha=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Cs=!1,rm=null});import{existsSync as _r,mkdirSync as jx,readdirSync as As,renameSync as nm,statSync as Vx}from"node:fs";import Er from"node:path";function sm(e){try{return Vx(e).isDirectory()}catch{return!1}}function Gx(e){if(!_r(e))return!0;for(let r of om){let t=Er.join(e,r);if(_r(t)&&(!sm(t)||As(t).length>0))return!1}return!0}function Yx(e){let r=Er.join(e,"runs");if(!_r(r)||!sm(r))return!1;for(let t of As(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Er.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function qx(e){let r=Er.join(e,"runs");if(!_r(r))return!1;for(let t of As(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(Er.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Jx(e){let r=Er.join(e,"ghost");return _r(r)?!_r(Er.join(r,"runs")):qx(e)}function im(e){return Yx(e.sharedRoot)?Gx(e.forgeRoot)?Jx(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function am(e,r){jx(r,{recursive:!0});for(let t of om){let n=Er.join(e,t),o=Er.join(r,t);if(_r(n)){if(_r(o)&&As(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(_r(o)){nm(n,o);continue}nm(n,o)}}}var om,lm=P(()=>{"use strict";O();om=["runs","worktrees"]});import{existsSync as ve}from"node:fs";import{homedir as zx}from"node:os";import ge from"node:path";function ja(e=process.env){return e.HOME?.trim()||zx()}function Va(e=process.env){return ge.join(ja(e),".kynver","harness")}function Is(e){let r=ge.resolve(We(e.trim()));for(;Xx.has(ge.basename(r));)r=ge.dirname(r);return r}function Qx(e,r=process.env){return ge.join(Va(r),e)}function Zx(e=process.env){let r=Va(e);if(ve(ge.join(r,"runs")))return!0;if(ve(r)&&!ve(ge.join(r,"ghost"))&&!ve(ge.join(r,"forge")))return ve(r);let t=ge.join(ja(e),cm);return ve(t)}function Os(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Is(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Is(n),source:"config"};let o=Qx(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!e_(o))return{harnessRoot:o,source:"box_scoped"};let i=Va(r);if(e.boxKind==="forge"){let a=im({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&am(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Zx(r)){if(ve(ge.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(ve(i)&&!ve(ge.join(i,"ghost"))&&!ve(ge.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=ge.join(ja(r),cm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function e_(e){if(!ve(e))return!0;for(let r of["runs","worktrees"]){let t=ge.join(e,r);if(ve(t))return!1}return!0}var cm,Xx,Ga=P(()=>{"use strict";Vr();lm();cm=ge.join(".openclaw","harness");Xx=new Set(["runs","worktrees"])});import um from"node:os";function Ts(e){return e?.trim()?e.trim():null}function r_(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function t_(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function qt(e=U(),r=process.env,t={}){let n=br(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Ts(r.KYNVER_BOX_KIND)),a=t.strict===!0||t_(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=Ts(e.runnerId),c=Ts(r.KYNVER_RUNTIME_ID)??Ts(r.OPENCLAW_RUNTIME_ID),u=l??c??r_(n.boxKind,um.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=Ss({config:e,env:r,totalMemBytes:um.totalmem()}),m=Wn(n.boxKind,p.configuredMaxWorkers??ka(n.boxKind,p.autoCap)),f=Os({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var zn=P(()=>{"use strict";H();Le();ts();ws();Ga()});var pm=P(()=>{"use strict";On();Le();Es();H();xs();em();Mn();Jn();zn()});function lr(e){let r=e.trim().toLowerCase();return s_[r]??r}var mm,o_,s_,Ns=P(()=>{"use strict";mm=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],o_=mm.join("|"),s_={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var fm=P(()=>{"use strict";Vr()});var gm=P(()=>{"use strict";fm()});import{execFileSync as i_}from"node:child_process";function Ja(e=process.env){let r=e[a_]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function l_(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return i_(e,r,n)}function c_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Ya(e,r){let t=JSON.stringify(gt),n=JSON.stringify(r),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${t}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${t}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}`}function hm(e={}){if(Ja(e.env??process.env)==="file")return null;let t=c_(e.platform??process.platform);return t?new qa(t,e.exec):null}var gt,a_,Cr,qa,km=P(()=>{"use strict";gt="kynver",a_="KYNVER_CREDENTIAL_STORE";Cr=5e3;qa=class{constructor(r,t=l_){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",gt,"-a",r,"-w"],{timeoutMs:Cr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",gt,"account",r],{timeoutMs:Cr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ya("get",r)],{timeoutMs:Cr}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(r,t){if(!t||/[\r\n]/.test(t))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",gt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Cr}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",gt,"account",r],{input:`${t}
76
+ `,timeoutMs:Cr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ya("set",r)],{input:`${t}
77
+ `,timeoutMs:Cr})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",gt,"-a",r],{timeoutMs:Cr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",gt,"account",r],{timeoutMs:Cr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ya("delete",r)],{timeoutMs:Cr})}catch{}}}});function Xn(){return za||(za=new Xa),za}var Qa,u_,Ds,Xa,za,Za=P(()=>{"use strict";km();Qa="api-key",u_=6e4,Ds=class extends Error{constructor(r){super(`KYNVER_CREDENTIAL_STORE=keychain but the OS keychain could not store "${r}"; refusing to write the secret to disk`),this.name="KeychainUnavailableError"}},Xa=class{cache=new Map;keychain;env;now;constructor(r={}){this.env=r.env??process.env,this.keychain=r.keychain===void 0?hm({env:this.env}):r.keychain,this.now=r.now??Date.now}get available(){return this.keychain!==null}get backend(){return this.keychain?.backend??null}read(r){if(!this.keychain)return null;let t=this.cache.get(r);if(t&&this.now()-t.at<u_)return t.value;let n=this.keychain.get(r);return this.cache.set(r,{value:n,at:this.now()}),n}write(r,t){let n=Ja(this.env);if(!this.keychain){if(n==="keychain")throw new Ds(r);return!1}let o=this.keychain.set(r,t);if(o)this.cache.set(r,{value:t,at:this.now()});else if(this.cache.delete(r),n==="keychain")throw new Ds(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},za=null});import{existsSync as Rm,mkdirSync as p_,readFileSync as vm,writeFileSync as m_}from"node:fs";import{homedir as f_,totalmem as PF}from"node:os";import tl from"node:path";function g_(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:We(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:We(e.defaultRepo.trim())}:{}}}function bm(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!vd(We(r))?e:{...e,defaultBase:Rd}}function h_(){if(!Rm(ym))return null;try{return JSON.parse(vm(ym,"utf8"))}catch{return null}}function U(){let e=h_();return e?bm(g_(e)):{}}function Ms(){if($a(),!Rm(el))return{};try{return JSON.parse(vm(el,"utf8"))}catch{return{}}}function rl(e){$a(),p_(nl,{recursive:!0}),m_(el,`${JSON.stringify(e,null,2)}
78
+ `,{mode:384})}function k_(e,r,t,n={}){let o=Ms();if(Xn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),rl(i);return}rl({...o,...n,[r]:t})}function y_(e,r){let t=Xn().read(e);return t||Ms()[r]}function ol(){return tm(R_)}function Pr(){return ol().getApiKey()}function Jt(e){return ol().getRunnerToken(e)}function sl(e,r){ol().persistRunnerToken(e,r)}function Q(e){let r=Qn(e);return r||xm("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function il(e){return Qn(e)}function Qn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||U().apiBaseUrl;return Nn(r)}function v_(e,r){let t=e||Jt(r)||(r?void 0:Jt(U().agentOsId));if(t)return String(t);let n=Qe("KYNVER_RUNTIME_SECRET")||Qe("KYNVER_CRON_SECRET")||Qe("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 b_(e,r,t){let n=v_(e,r);if(n)return{ok:!0,secret:n};let o=Pr(),s=Qn(t?.baseUrl);if(o&&r&&s)try{let i=await al(r,{baseUrl:s,apiKey:o});return sl(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 ee(e,r,t){let n=await b_(e,r,t);if(n.ok)return n.secret;xm(n.reason)}async function Sm(e,r){let t=Pr(),n=Qn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await al(e,{baseUrl:n,apiKey:t});return sl(e,o),o}catch{return null}}async function wm(e,r,t){let n=Pr(),o=Qn(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 al(r,{baseUrl:o,apiKey:n});return s&&s!==e?(sl(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 al(e,r){let t=r?.apiKey||Pr();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${Q(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await Dn(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(r?.enableMcpUpdates?{enableMcpUpdates:!0}:{})}),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}function xm(e){console.error(e),process.exit(1)}var nl,ym,el,GF,YF,R_,H=P(()=>{"use strict";On();Vr();fa();Cd();Mn();Le();ts();ws();Ln();xs();pm();Ns();zn();gm();Jn();Za();nl=tl.join(f_(),".kynver"),ym=tl.join(nl,"config.json"),el=tl.join(nl,"credentials");GF=500*1024*1024,YF=4*1024*1024*1024;R_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:y_(Qa,"apiKey")},getRunnerToken(e){let r=Ms();if(!!r.runnerToken&&!!e&&r.runnerTokenAgentOsId===e)return r.runnerToken;let n=process.env.KYNVER_RUNNER_TOKEN?.trim();if(n)return n;if(r.runnerToken&&!(e&&r.runnerTokenAgentOsId&&r.runnerTokenAgentOsId!==e))return r.runnerToken},persistApiKey(e){k_(Qa,"apiKey",e)},persistRunnerToken(e,r){rl({...Ms(),runnerToken:r,runnerTokenAgentOsId:e})}}});import ll from"node:path";function he(e){return Is(e)}function Ue(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return he(e);let r=U(),t=r.harnessRoot?.trim();if(t)return he(t);let n=qt(r,process.env);return n.identity?n.identity.harnessRoot:Os({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return ll.join(he(e),"runs")}function zt(e){return ll.join(he(e),"worktrees")}function _m(){let e=Ue();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:zt(e)}}function Ar(e,r){return ll.join(e,x(r))}var Ze=P(()=>{"use strict";H();Ga();zn();O()});import{existsSync as Ws,readdirSync as S_,statSync as w_}from"node:fs";import ht from"node:path";function le(){return _m()}function q(e){let{runsDir:r}=le(),t=ht.join(Ar(r,x(e)),"run.json");return Ws(t)||Je(`run '${e}' not found`),I(t)}function Xe(){let{runsDir:e}=le();return Em(e)}function Ls(e){return Em(Ae(e))}function x_(e){try{return w_(e).isDirectory()}catch{return!1}}function Em(e){if(!Ws(e))return[];let r=[];for(let t of S_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ht.join(e,t.name);if(!x_(n))continue;let o=I(ht.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Xt(e,r){let{runsDir:t}=le(),n=ht.join(Ar(t,x(e)),"run.json"),o=ht.join(Ar(t,x(e)),"workers",x(r),"worker.json");return Ws(o)||(Ws(n)||Je(`run '${e}' not found`),Je(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=le();ue(ht.join(Ar(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(ht.join(Ar(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return Zn(r,e)}function Zn(e,r){return Ar(Ae(e),x(r))}var B=P(()=>{"use strict";Ze();O()});import{parentPort as Ob,workerData as nL}from"node:worker_threads";var _n=null,Ju=-1,zu=0;function Xu(e){_n=e}function Qu(e=Date.now()){return!_n||_n.stallCount===Ju&&e-zu<9e5?null:(Ju=_n.stallCount,zu=e,_n)}var Wb="embedded-1",Lb=[{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"}],Bb={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
79
79
  `),"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(`
80
80
  `),"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(`
81
81
  `),"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(`
82
- `)},Ob={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Nt={version:Pb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Ab,instructions:Ib,policyThresholds:Ob};var Sn=Nt,Tb="embedded";function Ju(){return Sn.version}function zu(e,r){Sn=e,Tb=r}function wn(e){let r=Sn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Nt.instructions[e];return typeof t=="string"?t:""}function ea(e,r){let t=Sn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Nt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Xu(e){if(!e)return null;let r=e.trim().toLowerCase();return Sn.personas.find(t=>t.slug===r)??null}_n();import yb from"node:path";B();us();O();import k_ from"node:path";function y_(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Os(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(k_.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!Yr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...y_(o)})}return t}H();function zn(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}}On();H();function xm(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}function wm(e){return new Error(`callback timeout after ${e}ms`)}async function _m(e,r){let t=xm(r),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(wm(t))},t)})])}catch(i){throw s?wm(t):i}finally{o&&clearTimeout(o)}}function Em(e,r){let t=xm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function gt(e,r,t,n){try{return await _m(async o=>{let s=await In(e,{method:"POST",headers:zn(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Em(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await gt(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Rm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await gt(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function nl(e,r,t){try{return await _m(async n=>{let o=await In(e,{method:"GET",headers:zn(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Em(n,t?.timeoutMs)}}H();Vn();import{spawnSync as O_}from"node:child_process";import{randomBytes as T_}from"node:crypto";import{createPublicKey as x_,verify as __}from"node:crypto";import{createHash as R_,createPublicKey as tK,verify as nK}from"node:crypto";function sl(e){return JSON.stringify(ol(e))}function ol(e){if(Array.isArray(e))return e.map(ol);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ol(e[t]);return r}return e}function il(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 Cm(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=il(t);n&&r.push(n)}return r}function Pm(e=process.env){if(e.NODE_ENV==="production")return!1;let r=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var sK=Buffer.from("302a300506032b6570032100","hex"),Am="ca-6297fb8e1773",v_={[Am]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function b_(e){return`ca-${R_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Im(e,r=process.env){let t=Cm(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>b_(o)===e)??null;let n=v_[e];return!n||e===Am&&!Pm(r)?null:il(n)}var S_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,w_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Ts(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(S_)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(t))return"read_only";for(let s of r.matchAll(w_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var E_=120,Om=["write","read_only","land_pr","verify_live"],C_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var P_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Tm(e){let r=e.trim();if(!r||r.includes("\0")||/\s/.test(r))return null;let t,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(r);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(r)){let a;try{a=new URL(r)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;t=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))t=o[1],n=o[2];else return null;t=t.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${t}/${s.join("/")}`;return P_.test(i)&&i.length<=512?i:null}function Nm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Ts(r)==="read_only"?"read_only":"write"}function A_(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;if(Object.keys(r).sort().join(",")!=="payload,publicKeyId,signature"||typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.payload;if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).sort().join(",")!==[...C_].join(",")||t.v!==1||t.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof t[n]!="string"||!t[n])return!1;return!(typeof t.attempt!="number"||!Number.isInteger(t.attempt)||t.attempt<0||typeof t.exp!="number"||!Number.isFinite(t.exp)||!Om.includes(t.operationClass))}var I_=Buffer.from("302a300506032b6570032100","hex");function Dm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!A_(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(r))if(o[a]!==r[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+E_+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Im(e.publicKeyId,t);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=x_({key:Buffer.concat([I_,Buffer.from(s)]),format:"der",type:"spki"});return __(null,Buffer.from(sl(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}O();var al=class{constructor(r=4096){this.capacity=r}capacity;order=[];keys=new Set;consume(r){if(this.keys.has(r))return!1;for(this.keys.add(r),this.order.push(r);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};function N_(e){let r=(c,u)=>({allow:!1,code:c,reason:u}),{policy:t,identity:n}=e;if(!n)return r("no_identity","the desktop runtime has not been prepared");if(!t)return r("no_policy","no approved execution policy on this computer");if(t.accountId!==n.accountId||t.agentOsId!==n.agentOsId)return r("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return r("repo_identity_unavailable","the repository has no canonical remote identity");if(t.repoIdentity!==e.repoIdentity)return r("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return r("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=Nm(e.decision),a=Dm(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return r(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?t.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${t.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:t.repoIdentity,operationClass:i}}:r("replayed","this claim authorization was already used")}var D_=null,M_=null,W_=new al,L_=new Set;function Mm(){return bs()}function Wm(e){return{v:1,repoIdentity:e,requestNonce:T_(16).toString("base64url")}}function Lm(e){let r=O_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Tm(r.stdout.trim())}function Bm(e){let r=N_({...e,policy:D_,identity:M_,consumed:W_});if(!r.allow){let t=e.decision.task??{},n={taskId:typeof t.id=="string"?t.id:"",code:r.code,reason:r.reason,...r.consentRequired?{consentRequired:r.consentRequired}:{}};for(let o of L_)try{o(n)}catch{}}return r}function Um(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function Xn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Fm(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeout===!0||r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}function ll(e){if(!e||typeof e!="object")return!1;let r=e;return r.timeout===!0?!0:(typeof r.error=="string"?r.error.toLowerCase():"").includes("timeout")}var B_=["implementation","review","landing"],U_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function F_(e){return B_.includes(e)}function K_(e){return U_.includes(e)}function Km(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||F_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:K_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Hm=Nt.personas.map(Km),H_=new Map(Hm.map(e=>[e.slug,e]));function $_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=H_.get(r)??null,n=Xu(r);if(!n)return t;let o=Km(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function cl(e){return $_(e)?.defaultRoleLane??null}function $m(){return Hm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function jm(e){return(e??"").trim().toLowerCase()}function j_(e){switch(jm(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 V_(e){let r=jm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=j_(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Vm(e){return V_(e)??"any"}Nn();H();We();function G_(e=process.env){let r=U();return br(r,e)!=="forge"}function Ns(e,r=process.env){if(G_(r))return e?.maxConcurrentWorkers??void 0}async function Ds(e,r){let t=Q(r.baseUrl?String(r.baseUrl):void 0),n=await ee(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await nl(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}}Vt();var Y_={fetchPreferences:Ds,configuredOverride:Ns,observe:$n};async function Gm(e,r=Y_){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Vt();B();B();function Ms(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function ul(e){return e.toLowerCase()}function q_(e){let r=Ms(e,"roleLane");if(r)return r;let t=ul(Ms(e,"executorRef")),n=ul(Ms(e,"title")),o=ul(Ms(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=cl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Ym(e){let r=q_(e);return r?{...e,roleLane:r}:e}H();var J_=/^claude[-_]/i,z_=/^(?:opus|sonnet|haiku)\b/i;function qm(e){let r=e.trim();return J_.test(r)||z_.test(r)}function Jm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function dl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function zm(e){return e.trim().toLowerCase().startsWith("gemini-")}function X_(e){return Jm(e)?"codex":qm(e)?"claude":zm(e)?"gemini":(dl(e),"cursor")}function Q_(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Z_(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?qm(n)||Jm(n)||dl(n)||zm(n)?{lane:t,model:n,provider:X_(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Ue(e){let r=typeof e=="string"?e.trim():"";return r?Q_(r)??Z_(r):null}function Xm(e){let r=Ue(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!dl(r.model)):!1}Es();Es();var Ir="cursor",eE=new Set(["claude","opus","anthropic"]),rE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Qn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ar(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return eE.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ws(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ar(r))return!0;let t=Qn(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ue(Qn(e,"executorRef"));if(n?.provider&&Ar(n.provider)||n?.model&&Ar(tE(n.model)))return!0;let o=Qn(e,"description");if(rE.some(i=>i.test(o)))return!0;let s=Qn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function tE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function nE(e,r){return{provider:Ir,model:Ls,rule:`policy:cursor_default${r}`,requestedModel:e}}var oE=["explicit:","executor_ref:","factory:","task:"];function sE(e){return oE.some(r=>e.startsWith(r))}function pl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ue(Qn(e,"executorRef"))?.provider?!0:Ws(e)}function Qm(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ar(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||sE(r.rule)||pl(t)||!Ar(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return nE(r.model,o)}function Zm(e,r=Ir){let t=e?.trim();return t?ar(t):r}var ef={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function zt(e){return ef[e]}function rf(){return Object.values(ef)}import{existsSync as aE}from"node:fs";import{homedir as lE}from"node:os";import Zn from"node:path";Rr();import{createHash as tf}from"node:crypto";import{statSync as iE}from"node:fs";import{spawnSync as nf}from"node:child_process";function lr(e){try{let r=iE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Xt(e){return tf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Fe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function er(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r),i=nf(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Bs(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return nf(o,s,{windowsHide:!0,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 cE="codex";function uE(){let e=lE();return[process.env.CODEX_HOME?.trim()?Zn.join(Zn.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Zn.join(e,".codex","auth.json"),Zn.join(e,".config","codex","auth.json")].filter(t=>!!t)}function dE(e){return Zn.dirname(e)}function pE(e){let r,t;for(let n of uE()){if(!aE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:dE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function of(e=new Date().toISOString()){let r=Fe(cE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Xt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=pE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?lr(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as mE}from"node:fs";import{homedir as fE}from"node:os";import ml from"node:path";function gE(){let e=process.env.HERMES_HOME?.trim(),r=e?ml.resolve(e):ml.join(fE(),".hermes");return ml.join(r,"auth.json")}function Us(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=gE(),o=mE(n),s=Bs(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?lr(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 Qt(e=new Date().toISOString()){let r=of(e);if(r.ready)return{...r,path:"codex_cli"};let t=Us(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 sf=["low","medium","high"],af={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function lf(e,r){let t=zt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function hE(e,r){let t=zt(e.providerId),n=zt(r.providerId),o=sf.indexOf(t.costTier)-sf.indexOf(n.costTier);if(o!==0)return o;let s=af[e.binding.authSource]-af[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function fl(e){let r=rf().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&lf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(hE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return lf(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 kE}from"node:fs";import{homedir as yE}from"node:os";import RE from"node:path";var vE="claude";function bE(){let e=yE();return[RE.join(e,".claude",".credentials.json")]}function cf(e=new Date().toISOString()){let r=Fe(vE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Xt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=bE().find(i=>kE(i)),o=Bs(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?lr(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 GE}from"node:fs";import{homedir as VE}from"node:os";import rn from"node:path";wr();O();import{closeSync as Rl,existsSync as ff,mkdirSync as TE,openSync as vl,statSync as NE,unlinkSync as pf}from"node:fs";import{spawn as DE}from"node:child_process";import ME from"node:os";import cr from"node:path";ia();var SE="KYNVER_NO_PROD_DB_CREDENTIALS",wE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=sa(e);if(!r.reviewWorker)return t;let n={...t,[SE]:"1"};for(let o of wE)delete n[o];return n}var xE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function uf(e){return e.replace(xE,"")}var df=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Fs(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function _E(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var EE=new Set(["cursor"]);function CE(e){let r=e.trim().toLowerCase();return EE.has(r)?"auto":null}function gl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return df.test(o)||!Fs(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 Zt(e,r){let t=(e??"").trim();return t?Fs(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 hl(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function en(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return Fs(o)||!_E(o)&&df.test(o)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function kl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=CE(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")`}:Fs(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}}import{existsSync as eo,readdirSync as PE}from"node:fs";import ht from"node:path";var AE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function IE(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 OE(e){let r=ht.join(e,"versions");if(!eo(r))return null;let t=null,n=-1;for(let o of PE(r,{withFileTypes:!0})){if(!o.isDirectory()||!AE.test(o.name))continue;let s=IE(o.name);s==null||s<=n||(n=s,t=ht.join(r,o.name))}return t}function Ks(e){let r=e?.trim()||ht.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=ht.join(r,"node.exe"),n=ht.join(r,"index.js");if(eo(t)&&eo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=OE(r);if(!o)return null;let s=ht.join(o,"node.exe"),i=ht.join(o,"index.js");return!eo(s)||!eo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var yl="composer-2.5",WE=15e3,LE=6e4,BE=3e4;function UE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function Sl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&ff(cr.join(cr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ks(cr.dirname(e)):t?{nodeExe:e,indexJs:cr.join(cr.dirname(e),"index.js"),versionDir:cr.dirname(e)}:Ks();if(o)return UE(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:ce()}}function FE(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:cr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function gf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function bl(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 KE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||cr.join(ME.homedir(),".kynver","locks");return TE(e,{recursive:!0}),cr.join(e,"cursor-agent-start.lock")}function HE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=KE(),r=bl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",LE),t=bl("KYNVER_CURSOR_START_LOCK_STALE_MS",BE),n=Date.now();for(;;)try{let o=vl(e,"wx");return Rl(o),()=>{try{pf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-NE(e).mtimeMs>t){pf(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);gf(250)}}function hf(e=process.env){let r=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(r)return r;if(process.platform==="win32"){let t=Ks(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=cr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(ff(n))return n}return"agent"}function $E(){return hf(process.env)}var kf={name:"cursor",defaultModel:yl,preflightModel(e){return kl(e,yl)},start(e){let r=kl(e.model,yl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=vl(e.stdoutPath,"a"),o=vl(e.stderrPath,"a"),s=["ignore",n,o],i=$E(),a=Sl(i),l=HE(),c;try{let[u,d]=a.shell?[a.executable,mf(e,t,a.prefixArgs)]:Pe(a.executable,mf(e,t,a.prefixArgs),e.workerDir);c=DE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:FE(i,a,e.reviewWorker)})),gf(bl("KYNVER_CURSOR_START_LOCK_HOLD_MS",WE))}finally{l(),Rl(n),Rl(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}}};function mf(e,r,t=[]){return[...t,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",r,e.prompt]}import{spawnSync as jE}from"node:child_process";function wl(e,r=process.env){try{let t;try{t=Sl(e)}catch{t={executable:e,prefixArgs:[]}}let n=jE(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function xl(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(rn.join(t,".config","cursor","auth.json")),r.push(rn.join(t,".cursor-agent","auth.json")));let n=VE();if(r.push(rn.join(n,".config","cursor","auth.json")),r.push(rn.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(rn.join(o,"cursor-agent","auth.json")),s&&r.push(rn.join(s,"cursor","auth.json"))}return r}var YE="agent";function yf(e=new Date().toISOString()){let r=Fe(YE,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Xt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=xl().find(a=>GE(a)),o=wl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as qE,readFileSync as JE}from"node:fs";import{homedir as zE}from"node:os";import _l from"node:path";var XE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function QE(){let e=process.env.HERMES_HOME?.trim(),r=e?_l.resolve(e):_l.join(zE(),".hermes");return _l.join(r,".env")}function ZE(e){try{let r=JE(e,"utf8"),t=[];for(let n of XE)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rf(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=QE(),o=qE(n),s=o?ZE(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?lr(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 vf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Qt(r),n={codex:t,cursor:yf(r),claude:cf(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()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rf(r),hermesOpenAiCodex:Us(r),codexAdapterPath:t.path,readyCount:o}}var eC=[/\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],rC=[/\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 El(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function tC(e){let r=El(e,"executorRef").toLowerCase(),t=El(e,"title").toLowerCase(),n=El(e,"description").toLowerCase(),o=`${r}
82
+ `)},Ub={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:Wb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Lb,instructions:Bb,policyThresholds:Ub};var En=Mt,Fb="embedded";function Zu(){return En.version}function ed(e,r){En=e,Fb=r}function Cn(e){let r=En.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function ia(e,r){let t=En.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function rd(e){if(!e)return null;let r=e.trim().toLowerCase();return En.personas.find(t=>t.slug===r)??null}An();import Eb from"node:path";B();ks();O();import __ from"node:path";function E_(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 Bs(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(__.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!qr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...E_(o)})}return t}H();function eo(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}}Mn();H();function Pm(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}function Cm(e){return new Error(`callback timeout after ${e}ms`)}async function Am(e,r){let t=Pm(r),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(Cm(t))},t)})])}catch(i){throw s?Cm(t):i}finally{o&&clearTimeout(o)}}function Im(e,r){let t=Pm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function kt(e,r,t,n){try{return await Am(async o=>{let s=await Dn(e,{method:"POST",headers:eo(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Im(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await kt(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await wm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await kt(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function cl(e,r,t){try{return await Am(async n=>{let o=await Dn(e,{method:"GET",headers:eo(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Im(n,t?.timeoutMs)}}H();Jn();import{spawnSync as U_}from"node:child_process";import{randomBytes as F_}from"node:crypto";import{createPublicKey as T_,verify as N_}from"node:crypto";import{createHash as C_,createPublicKey as yK,verify as RK}from"node:crypto";function dl(e){return JSON.stringify(ul(e))}function ul(e){if(Array.isArray(e))return e.map(ul);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ul(e[t]);return r}return e}function pl(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 Om(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=pl(t);n&&r.push(n)}return r}function Tm(e=process.env){if(e.NODE_ENV==="production")return!1;let r=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var bK=Buffer.from("302a300506032b6570032100","hex"),Nm="ca-6297fb8e1773",P_={[Nm]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function A_(e){return`ca-${C_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Dm(e,r=process.env){let t=Om(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>A_(o)===e)??null;let n=P_[e];return!n||e===Nm&&!Tm(r)?null:pl(n)}var I_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,O_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Us(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(I_)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(t))return"read_only";for(let s of r.matchAll(O_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var D_=120,Mm=["write","read_only","land_pr","verify_live"],M_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var W_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Wm(e){let r=e.trim();if(!r||r.includes("\0")||/\s/.test(r))return null;let t,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(r);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(r)){let a;try{a=new URL(r)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;t=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))t=o[1],n=o[2];else return null;t=t.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${t}/${s.join("/")}`;return W_.test(i)&&i.length<=512?i:null}function Lm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Us(r)==="read_only"?"read_only":"write"}function L_(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;if(Object.keys(r).sort().join(",")!=="payload,publicKeyId,signature"||typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.payload;if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).sort().join(",")!==[...M_].join(",")||t.v!==1||t.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof t[n]!="string"||!t[n])return!1;return!(typeof t.attempt!="number"||!Number.isInteger(t.attempt)||t.attempt<0||typeof t.exp!="number"||!Number.isFinite(t.exp)||!Mm.includes(t.operationClass))}var B_=Buffer.from("302a300506032b6570032100","hex");function Bm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!L_(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(r))if(o[a]!==r[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+D_+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Dm(e.publicKeyId,t);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=T_({key:Buffer.concat([B_,Buffer.from(s)]),format:"der",type:"spki"});return N_(null,Buffer.from(dl(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}O();var ml=class{constructor(r=4096){this.capacity=r}capacity;order=[];keys=new Set;consume(r){if(this.keys.has(r))return!1;for(this.keys.add(r),this.order.push(r);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};function K_(e){let r=(c,u)=>({allow:!1,code:c,reason:u}),{policy:t,identity:n}=e;if(!n)return r("no_identity","the desktop runtime has not been prepared");if(!t)return r("no_policy","no approved execution policy on this computer");if(t.accountId!==n.accountId||t.agentOsId!==n.agentOsId)return r("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return r("repo_identity_unavailable","the repository has no canonical remote identity");if(t.repoIdentity!==e.repoIdentity)return r("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return r("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=Lm(e.decision),a=Bm(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return r(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?t.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${t.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:t.repoIdentity,operationClass:i}}:r("replayed","this claim authorization was already used")}var H_=null,$_=null,j_=new ml,V_=new Set;function Um(){return Ps()}function Fm(e){return{v:1,repoIdentity:e,requestNonce:F_(16).toString("base64url")}}function Km(e){let r=U_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Wm(r.stdout.trim())}function Hm(e){let r=K_({...e,policy:H_,identity:$_,consumed:j_});if(!r.allow){let t=e.decision.task??{},n={taskId:typeof t.id=="string"?t.id:"",code:r.code,reason:r.reason,...r.consentRequired?{consentRequired:r.consentRequired}:{}};for(let o of V_)try{o(n)}catch{}}return r}function $m(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function ro(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function jm(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeout===!0||r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}function fl(e){if(!e||typeof e!="object")return!1;let r=e;return r.timeout===!0?!0:(typeof r.error=="string"?r.error.toLowerCase():"").includes("timeout")}var G_=["implementation","review","landing"],Y_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function q_(e){return G_.includes(e)}function J_(e){return Y_.includes(e)}function Vm(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||q_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:J_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Gm=Mt.personas.map(Vm),z_=new Map(Gm.map(e=>[e.slug,e]));function X_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=z_.get(r)??null,n=rd(r);if(!n)return t;let o=Vm(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function gl(e){return X_(e)?.defaultRoleLane??null}function Ym(){return Gm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function qm(e){return(e??"").trim().toLowerCase()}function Q_(e){switch(qm(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 Z_(e){let r=qm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=Q_(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Jm(e){return Z_(e)??"any"}Ln();H();Le();function eE(e=process.env){let r=U();return Sr(r,e)!=="forge"}function Fs(e,r=process.env){if(eE(r))return e?.maxConcurrentWorkers??void 0}async function Ks(e,r){let t=Q(r.baseUrl?String(r.baseUrl):void 0),n=await ee(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await cl(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}}Yt();var rE={fetchPreferences:Ks,configuredOverride:Fs,observe:Yn};async function zm(e,r=rE){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Yt();B();B();function Hs(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function hl(e){return e.toLowerCase()}function tE(e){let r=Hs(e,"roleLane");if(r)return r;let t=hl(Hs(e,"executorRef")),n=hl(Hs(e,"title")),o=hl(Hs(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=gl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Xm(e){let r=tE(e);return r?{...e,roleLane:r}:e}H();var nE=/^claude[-_]/i,oE=/^(?:opus|sonnet|haiku)\b/i;function Qm(e){let r=e.trim();return nE.test(r)||oE.test(r)}function Zm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function kl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function ef(e){return e.trim().toLowerCase().startsWith("gemini-")}function sE(e){return Zm(e)?"codex":Qm(e)?"claude":ef(e)?"gemini":(kl(e),"cursor")}function iE(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function aE(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?Qm(n)||Zm(n)||kl(n)||ef(n)?{lane:t,model:n,provider:sE(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Oe(e){let r=typeof e=="string"?e.trim():"";return r?iE(r)??aE(r):null}function rf(e){let r=Oe(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!kl(r.model)):!1}Ns();Ns();var Or="cursor",lE=new Set(["claude","opus","anthropic"]),cE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function to(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 lE.has(r)?!0:r.includes("claude")||r.includes("opus")}function $s(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ir(r))return!0;let t=to(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Oe(to(e,"executorRef"));if(n?.provider&&Ir(n.provider)||n?.model&&Ir(uE(n.model)))return!0;let o=to(e,"description");if(cE.some(i=>i.test(o)))return!0;let s=to(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function uE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function dE(e,r){return{provider:Or,model:js,rule:`policy:cursor_default${r}`,requestedModel:e}}var pE=["explicit:","executor_ref:","factory:","task:"];function mE(e){return pE.some(r=>e.startsWith(r))}function yl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Oe(to(e,"executorRef"))?.provider?!0:$s(e)}function tf(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(n||mE(r.rule)||yl(t)||!Ir(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return dE(r.model,o)}function nf(e,r=Or){let t=e?.trim();return t?lr(t):r}var of={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function Qt(e){return of[e]}function sf(){return Object.values(of)}import{existsSync as gE}from"node:fs";import{homedir as hE}from"node:os";import no from"node:path";vr();import{createHash as af}from"node:crypto";import{statSync as fE}from"node:fs";import{spawnSync as lf}from"node:child_process";function cr(e){try{let r=fE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return af("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Zt(e){return af("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Fe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function er(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r),i=lf(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Vs(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return lf(o,s,{windowsHide:!0,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 kE="codex";function yE(){let e=hE();return[process.env.CODEX_HOME?.trim()?no.join(no.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,no.join(e,".codex","auth.json"),no.join(e,".config","codex","auth.json")].filter(t=>!!t)}function RE(e){return no.dirname(e)}function vE(e){let r,t;for(let n of yE()){if(!gE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:RE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function cf(e=new Date().toISOString()){let r=Fe(kE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Zt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=vE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?cr(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as bE}from"node:fs";import{homedir as SE}from"node:os";import Rl from"node:path";function wE(){let e=process.env.HERMES_HOME?.trim(),r=e?Rl.resolve(e):Rl.join(SE(),".hermes");return Rl.join(r,"auth.json")}function Gs(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=wE(),o=bE(n),s=Vs(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?cr(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 en(e=new Date().toISOString()){let r=cf(e);if(r.ready)return{...r,path:"codex_cli"};let t=Gs(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 uf=["low","medium","high"],df={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function pf(e,r){let t=Qt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function xE(e,r){let t=Qt(e.providerId),n=Qt(r.providerId),o=uf.indexOf(t.costTier)-uf.indexOf(n.costTier);if(o!==0)return o;let s=df[e.binding.authSource]-df[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function vl(e){let r=sf().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&pf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(xE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return pf(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 _E}from"node:fs";import{homedir as EE}from"node:os";import CE from"node:path";var PE="claude";function AE(){let e=EE();return[CE.join(e,".claude",".credentials.json")]}function mf(e=new Date().toISOString()){let r=Fe(PE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Zt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=AE().find(i=>_E(i)),o=Vs(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?cr(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 eC}from"node:fs";import{homedir as ZE}from"node:os";import on from"node:path";xr();O();import{closeSync as xl,existsSync as yf,mkdirSync as FE,openSync as _l,statSync as KE,unlinkSync as hf}from"node:fs";import{spawn as HE}from"node:child_process";import $E from"node:os";import ur from"node:path";pa();var IE="KYNVER_NO_PROD_DB_CREDENTIALS",OE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=da(e);if(!r.reviewWorker)return t;let n={...t,[IE]:"1"};for(let o of OE)delete n[o];return n}var TE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function ff(e){return e.replace(TE,"")}var gf=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ys(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function NE(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var DE=new Set(["cursor"]);function ME(e){let r=e.trim().toLowerCase();return DE.has(r)?"auto":null}function bl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=ff(t).trim()||r;return gf.test(o)||!Ys(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 rn(e,r){let t=(e??"").trim();return t?Ys(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 tn(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function nn(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=ff(t).trim()||r;return Ys(o)||!NE(o)&&gf.test(o)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function Sl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=ME(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")`}:Ys(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}}import{existsSync as oo,readdirSync as WE}from"node:fs";import yt from"node:path";var LE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function BE(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 UE(e){let r=yt.join(e,"versions");if(!oo(r))return null;let t=null,n=-1;for(let o of WE(r,{withFileTypes:!0})){if(!o.isDirectory()||!LE.test(o.name))continue;let s=BE(o.name);s==null||s<=n||(n=s,t=yt.join(r,o.name))}return t}function qs(e){let r=e?.trim()||yt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=yt.join(r,"node.exe"),n=yt.join(r,"index.js");if(oo(t)&&oo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=UE(r);if(!o)return null;let s=yt.join(o,"node.exe"),i=yt.join(o,"index.js");return!oo(s)||!oo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var wl="composer-2.5",jE=15e3,VE=6e4,GE=3e4;function YE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function Cl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&yf(ur.join(ur.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?qs(ur.dirname(e)):t?{nodeExe:e,indexJs:ur.join(ur.dirname(e),"index.js"),versionDir:ur.dirname(e)}:qs();if(o)return YE(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:ce()}}function qE(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:ur.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function Rf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function El(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 JE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||ur.join($E.homedir(),".kynver","locks");return FE(e,{recursive:!0}),ur.join(e,"cursor-agent-start.lock")}function zE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=JE(),r=El("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",VE),t=El("KYNVER_CURSOR_START_LOCK_STALE_MS",GE),n=Date.now();for(;;)try{let o=_l(e,"wx");return xl(o),()=>{try{hf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-KE(e).mtimeMs>t){hf(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Rf(250)}}function vf(e=process.env){let r=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(r)return r;if(process.platform==="win32"){let t=qs(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=ur.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(yf(n))return n}return"agent"}function XE(){return vf(process.env)}var bf={name:"cursor",defaultModel:wl,preflightModel(e){return Sl(e,wl)},start(e){let r=Sl(e.model,wl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=_l(e.stdoutPath,"a"),o=_l(e.stderrPath,"a"),s=["ignore",n,o],i=XE(),a=Cl(i),l=zE(),c;try{let[u,d]=a.shell?[a.executable,kf(e,t,a.prefixArgs)]:Pe(a.executable,kf(e,t,a.prefixArgs),e.workerDir);c=HE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:qE(i,a,e.reviewWorker)})),Rf(El("KYNVER_CURSOR_START_LOCK_HOLD_MS",jE))}finally{l(),xl(n),xl(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}}};function kf(e,r,t=[]){return[...t,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",r,e.prompt]}import{spawnSync as QE}from"node:child_process";function Pl(e,r=process.env){try{let t;try{t=Cl(e)}catch{t={executable:e,prefixArgs:[]}}let n=QE(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function Al(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(on.join(t,".config","cursor","auth.json")),r.push(on.join(t,".cursor-agent","auth.json")));let n=ZE();if(r.push(on.join(n,".config","cursor","auth.json")),r.push(on.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(on.join(o,"cursor-agent","auth.json")),s&&r.push(on.join(s,"cursor","auth.json"))}return r}var rC="agent";function Sf(e=new Date().toISOString()){let r=Fe(rC,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Zt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Al().find(a=>eC(a)),o=Pl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?cr(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as tC,readFileSync as nC}from"node:fs";import{homedir as oC}from"node:os";import Il from"node:path";var sC=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function iC(){let e=process.env.HERMES_HOME?.trim(),r=e?Il.resolve(e):Il.join(oC(),".hermes");return Il.join(r,".env")}function aC(e){try{let r=nC(e,"utf8"),t=[];for(let n of sC)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function wf(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=iC(),o=tC(n),s=o?aC(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?cr(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 xf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=en(r),n={codex:t,cursor:Sf(r),claude:mf(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()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:wf(r),hermesOpenAiCodex:Gs(r),codexAdapterPath:t.path,readyCount:o}}var lC=[/\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],cC=[/\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 Ol(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function uC(e){let r=Ol(e,"executorRef").toLowerCase(),t=Ol(e,"title").toLowerCase(),n=Ol(e,"description").toLowerCase(),o=`${r}
83
83
  ${t}
84
- ${n}`;return eC.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":rC.some(s=>s.test(o))?"low":"elevated"}function nC(e){let r=zt(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 oC(e){let r=e.inventory??vf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function kt(e){let r=nC({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 bf(e){let r=e.task??{},t=tC(r),n=oC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Qt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ir;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=fl({inventory:n,riskClass:t});return kt(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 kt({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 kt({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 kt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=fl({inventory:n,riskClass:t});if(a)return kt({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 kt({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"}})}wr();import{closeSync as Cf,openSync as Pf}from"node:fs";import{spawn as fC}from"node:child_process";O();Rr();Bn();import{unlinkSync as sC,writeFileSync as iC}from"node:fs";import aC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function Cl(e){return`${JSON.stringify(e)}
85
- `}function Pl(e){let r;try{r=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!r||typeof r!="object"||Array.isArray(r))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let t=r,n=typeof t.id=="string"?t.id:"";if(t.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(t.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(t.op==="call_tool"){if(typeof t.name!="string"||!t.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:t.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var lC="KYNVER_WORKER_MCP_TOOLS",cC="mcp-config.json",oe="kynver",ro=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Sf=ro.map(e=>`mcp__${oe}__${e}`),uC={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};function to(e){if(!e||e.length===0)return[...ro];let r=new Set;for(let t of e)for(let n of uC[t]??[])r.add(n);return ro.filter(t=>r.has(t))}function wf(e){return to(e).map(r=>`mcp__${oe}__${r}`)}var dC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],pC=["openai-compatible","gemini-api"];function mC(e){return dC.includes(e)}function Al(e){return pC.includes(e)}function xf(e){return mC(e)&&!Al(e)}function no(e=process.env){let r=e[lC]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function _f(e){return aC.join(e,cC)}function Ef(e){let r=_f(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return iC(r,`${JSON.stringify(t,null,2)}
86
- `,{mode:384}),r}function Hs(e){try{return sC(_f(e)),!0}catch{return!1}}Bn();function gC(e,r){let n=If(e,r).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}var Af={name:"claude",defaultModel:Le,preflightModel(e){return gl(e,Le)},start(e){let r=gl(e.model,Le);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;gC(e,t);let n=zd(t,{pinned:e.modelPinned===!0}),[o,s]=pe("claude",If(e,t,n)),i=Pf(e.stdoutPath,"a"),a=Pf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=fC(c,u,ae({cwd:e.worktreePath,detached:ce(),stdio:l,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Cf(i),Cf(a),!d.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return d.unref(),{pid:d.pid,model:t}}};function If(e,r,t){return["--model",r,...Xd(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Sf).join(",")}`]:[],"--",e.prompt]}wr();import{closeSync as Mf,existsSync as SC,openSync as Wf}from"node:fs";import{spawn as Ol}from"node:child_process";O();Rr();wr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as hC}from"node:child_process";O();Rr();var $s="gpt-5.6-sol";var Il=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||$s;function kC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function yC(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 Nf={name:"hermes-codex",defaultModel:Il,preflightModel(e){return Zt(e,Il)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=Zt(e.model,Il);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=pe(n,yC(t,e.prompt)),i=Tf(e.stdoutPath,"a"),a=Tf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=hC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:kC(e.reviewWorker,e.codexHome)}));if(Of(i),Of(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:t}}};var RC="KYNVER_CODEX_WINDOWS_SANDBOX",vC="unelevated";function bC(e=process.env){return e[RC]?.trim().toLowerCase()==="elevated"?"elevated":vC}function Df(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${bC(r)}"`]}function wC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||$s}var Or=wC();function Tl(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function xC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function _C(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Df(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function EC(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Ol(l,c,t)}if(!SC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Ol(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Ol(i,a,t)}var Lf={name:"codex",defaultModel:Or,preflightModel(e){return Zt(e,Or)},start(e){if(Qt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Nf.start(e);let t=Zt(e.model,Or);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Wf(e.stdoutPath,"a"),s=Wf(e.stderrPath,"a"),i=["ignore",o,s],a=Tl(),l=_C(n,e.prompt,e.executionMode),c;try{c=EC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:xC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Mf(o),Mf(s)}if(!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}}};wr();import{closeSync as Bf,openSync as Uf}from"node:fs";import TC from"node:path";import{fileURLToPath as NC}from"node:url";import{spawn as DC}from"node:child_process";O();import{existsSync as js}from"node:fs";import yt from"node:path";import{fileURLToPath as CC}from"node:url";function PC(e,r){let t=yt.resolve(e);for(;;){let n=yt.join(t,r);if(js(n))return n;let o=yt.dirname(t);if(o===t)return null;t=o}}function AC(e){return PC(e,yt.join("node_modules",".bin","tsx"))??"npx"}function Nl(e,r){if(e.endsWith(".ts")){let t=AC(yt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Vs(e){if(e.explicitCliPath)return js(e.explicitCliPath)?Nl(e.explicitCliPath,e.nodeExecutable):null;let r=CC(new URL(".",e.importMetaUrl)),t=yt.join(r,"cli.js");if(js(t))return Nl(t,e.nodeExecutable);let n=yt.join(r,"cli.ts");return js(n)?Nl(n,e.nodeExecutable):null}var IC="X-Kynver-Job-Token",io={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function OC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function oo(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[IC]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function so(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Gs(e,r,t){let n=OC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=so(t.memoryQuery);s&&o.set("memoryQuery",s);let i=so(t.mode);return i&&o.set("mode",i),oo(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),oo(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=so(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return oo(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return oo(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return oo(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...so(t.eventKey)?{eventKey:so(t.eventKey)}:{}}})}}function tn(e){return ro.includes(e)}function Ys(e){return to(e).filter(tn).map(r=>{let t=io[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var Rt="openai-compatible",MC=600*1e3;function Dl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var ao=class extends Error{};function WC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new ao(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new ao(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new ao(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):MC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var LC="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function Ml(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:LC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function BC(){let e=NC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=TC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Vs({importMetaUrl:import.meta.url,explicitCliPath:t,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${t} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function UC(e,r,t){let n=e.workerToolGrant,o=n?Ys(n.capabilities):void 0;return{provider:Rt,model:t,request:Ml(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Wl(e,r,t){let n=BC(),o=Uf(e.stdoutPath,"a"),s=Uf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=DC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Bf(o),Bf(s),!c.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(r)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${r.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:t}}var Ff={name:Rt,get defaultModel(){return Dl()},preflightModel(e){return hl(e,Dl())},start(e){let r=hl(e.model,Dl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=WC(process.env),o=UC(e,n,t);return Wl(e,o,t)}};wr();import{closeSync as Vf,openSync as Gf}from"node:fs";import{spawn as HC}from"node:child_process";O();Rr();import FC from"node:path";var KC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function qs(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function Js(e){let r=FC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Kf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Hf(e){let r=e.trim().toLowerCase();return!r||KC.has(r)?[]:["--model",e.trim()]}function $f(e,r){return[...Hf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function jf(e,r){return["--model",r,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",oe]:[],"--prompt",e.prompt]}var ur="gemini";function Oe(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function $C(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Yf={name:ur,get defaultModel(){return Oe()},preflightModel(e){return en(e,Oe())},start(e){let r=en(e.model,Oe());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=qs(),n=Js(t),o=n==="antigravity"?Kf(r):r.model,s=n==="antigravity"?$f(e,o):jf(e,o),[i,a]=pe(t,s),l=Gf(e.stdoutPath,"a"),c=Gf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=HC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:$C(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Vf(l),Vf(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${t}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}};var dr="gemini-api",qf="https://generativelanguage.googleapis.com/v1beta/openai",jC=600*1e3,lo=class extends Error{};function VC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function GC(e=process.env){let r=VC(e);if(!r)throw new lo('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||qf,n;try{n=new URL(t)}catch{throw new lo(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new lo(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):jC;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function YC(e,r,t){let n=e.workerToolGrant,o=n?Ys(n.capabilities):void 0,s=Ml(r,t,e.prompt,o);return{provider:dr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Jf={name:dr,get defaultModel(){return Oe()},preflightModel(e){return en(e,Oe())},start(e){let r=en(e.model,Oe());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=GC(process.env),o=YC(e,n,t);return Wl(e,o,t)}};var qC=Le,Ls="composer-2.5";function xe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function JC(e){if(!e)return;let r=xe(e,"workerModelOverride")||xe(e,"modelOverride");return r||`${xe(e,"title")}
87
- ${xe(e,"description")}
88
- ${xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function zf(e){return e.toLowerCase()}function Qf(e,r=U(),t=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(r.defaultModel?.trim()||t.KYNVER_DEFAULT_MODEL?.trim()):!1}function Bl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||qC}function zs(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":r.startsWith("gemini-")?ur:"cursor"}function zC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ls,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Le,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Oe(),provider:ur,rule:n&&n!==ur?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Oe(),provider:dr,rule:n&&n!==dr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Xf(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var XC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Zf(e,r,t){return XC.has(e)?ut:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?ut:Le}function QC(e){let r=zf(xe(e,"executorRef")),t=xe(e,"title").toLowerCase(),n=xe(e,"priority")||"normal",o=zf(xe(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Zf(o,r,t);return{provider:"claude",model:i,rule:i===ut?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Ue(xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Or},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Ue(xe(e,"executorRef"));return{provider:Rt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Ue(xe(e,"executorRef"));return{provider:dr,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Ue(xe(e,"executorRef"));return{provider:ur,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini"}}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:Or,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 Xf(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Xf(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=Bl();return{model:s,provider:zs(s),rule:"default:global"}}function ZC(e){return e?Ue(xe(e,"executorRef")):null}function eP(e){switch(ar(e)){case ur:case dr:return Oe();case"claude":return Le;case"codex":return Or;case"cursor":return Ls;default:return}}var Ll="explicit:cli_provider",eg="config:worker_provider";function rg(e,r,t){let n=ar(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:eP(n)??e.model,rule:t}}function rP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Ll?e:rg(e,t,Ll)}function tP(e,r){if(r.explicitProvider?.trim()||pl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=ar(t);return n===Ir||n===e.provider?e:rg(e,n,eg)}function Xs(e){let r,t=ZC(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=zC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||zs(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||zs(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Ws(e.task)){let l=JC(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",p=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Zf(d,p,m),u=c===ut?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=QC(e.task);r={...l,requestedModel:l.model}}else{let l=Bl();r={model:l,provider:e.explicitProvider?.trim()||zs(l),rule:"default:global",requestedModel:l}}r=rP(r,e.explicitProvider),r=tP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&ar(e.configuredProvider)!==Ir&&r.rule==="config:worker_provider",i=Qm({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Ll||i.rule===eg||Ar(i.provider)&&(e.explicitProviderIsOperatorOverride||Ws(e.task))||i.provider===Rt||i.provider===ur||i.provider===dr||i.provider==="codex")return i;let a=bf({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??Or:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function tg(e,r,t){return e||r||t||Bl()||Le}function nP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ng(e){return e?.trim()||void 0}function og(e){let r=nP(e.task),t=Ue(r),n=e.explicitProvider?.trim().toLowerCase(),o=ng(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,a=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=ng(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&Xm(r)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Ar(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}function sg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ig(){return{maxTaskAttempts:sg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(ea("harness.maxTaskAttempts",4))),dispatchCooldownMs:sg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(ea("harness.dispatchCooldownMs",5e3)))}}H();import iP from"node:path";B();fe();O();var Ul="kynver-harness:",ag="@runner:";function Fl(e){return e?.trim()?e.trim():null}function oP(e){let r=Fl(e);if(!r?.startsWith(Ul))return null;let t=r.slice(Ul.length),n=t.indexOf(ag);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function co(e,r){let t=e.trim(),n=r.trim();return`${Ul}${t}${ag}${n}`}function sP(e,r){let t=Fl(r);return t?oP(e)===t:!1}function Qs(e){let r=Fl(e.workerLeaseOwner);return r&&sP(r,e.runId)?r:co(e.runId,e.runnerId)}H();import lg from"node:os";We();function Tr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Tr(t.runnerId)??Tr(r.KYNVER_RUNTIME_ID)??Tr(r.OPENCLAW_RUNTIME_ID)??Tr(r.HOSTNAME)??lg.hostname(),hostname:Tr(r.HOSTNAME)??lg.hostname(),profile:Tr(r.KYNVER_RUNNER_PROFILE)??Tr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Tr(r.KYNVER_HARNESS_REPO)??Tr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Ju()}}H();async function Zs(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Q(e.baseUrl);try{let o=await ee(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(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}B();async function ei(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await Zs({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&L(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function cg(e,r){return I(iP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function ug(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Q(r.baseUrl?String(r.baseUrl):void 0),s=await ee(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Kl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=cg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(J(p).status==="done"){u.push(d);continue}let f=Qs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await ei({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,b=await X(k,s,{leaseOwner:y.leaseOwner??f,leaseDurationMs:i,...y.leaseToken?{leaseToken:y.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let g=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function dg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=cg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as LO,mkdirSync as BO}from"node:fs";import dn from"node:path";B();O();import aP from"node:path";function pg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function mg(e,r,t,n){return pg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ri(e,r={}){let t=r.isAlive??Y,n=r.kill??De,o=r.sleep??jo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Hl(e,r,t,n,o={}){mg(e,r,t,n);let s=ri(r.pid,o),i=ri(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function fg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(aP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ri(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function lP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function gg(e,r,t,n={}){if(!lP(n.env))throw Hl(e,r,"watcher_attach_failed",t,n.deps),r.status="failed",L(e,r),new Error(`watcher_attach_failed: ${t}; worker stopped instead of running unwatched`)}wa();de();B();B();var hg="unknown";function kg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==hg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==hg&&t.push({ref:n,source:"base"}),t.push({ref:"origin/main",source:"origin/main"}),t.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of t)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${r||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var cP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,uP="next-action-fix:";function ti(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ti(e)}function dP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(uP)||t.includes("repair")||t.includes("unblock"))}function pP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(cP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ti(String(n.targetPrUrl??n.target_pr_url??"")),s=ti(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?yg(o):null,targetPrBranch:s}}catch{return r}}function Rg(e){if(!dP(e))return null;let r=pP(e.description),t=e.prUrl?yg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ti(e.branch)}:null}function vg(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 bg(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=[...wn(`worker.prompt.progress.${n}`).split(`
89
- `),o],i=wn(`worker.prompt.merge_gate.${n}`).split(`
90
- `),a=wn(`worker.prompt.plan_artifacts.${n}`).split(`
91
- `);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...wn("worker.prompt.core_rules").split(`
92
- `),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...vg({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
93
- `)}O();H();var ni={claude:Af,codex:Lf,cursor:kf,[ur]:Yf,[dr]:Jf,[Rt]:Ff},Sg=null;function wg(e){if(Sg)return Sg;let r=e?.trim();if(r){let o=ni[ar(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(ni).join(", ")}`);return o}let t=Zm(U().workerProvider),n=ni[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(ni).join(", ")}`);return n}O();import{spawn as xO}from"node:child_process";import{existsSync as _O,openSync as EO,closeSync as Ek}from"node:fs";import CO from"node:path";B();function xg(e){return!!e.completionReportedAt?.trim()}function oi(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function mP(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function $l(e){return!!(mP(e.completionBlocker)||e.completionOutcome==="rejected")}function uo(e){return xg(e)&&!$l(e)}B();fe();H();import Ai from"node:path";function jl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function po(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var fP=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),_g=new Set(["done","failed","cancelled"]);function Eg(e){let r=jl(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=po(r.outcome),n=po(r.detail)??po(r.error),o=jl(r.task),s=jl(r.closedTask),i=o?po(o.status):null,a=s?po(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&_g.has(i)||a!==null&&_g.has(a))||t!==null&&fP.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function Cg(e){return e.taskAdvanced}B();ss();var gP="expert-lane-pr-review:",hP="plan-review-task",kP="scheduledjob:",si=new Set(["lorentz","dalton","rhea","sentinel"]);function yP(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Vl(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function RP(e,r){return e.startsWith("factory:")?e.includes("lb")||Vl(r):!1}function ii(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
94
- ${n}`,s=yP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock:")||r==="lane:over_attempt_recovery"||r.startsWith("next-action-fix:")||r.startsWith("next-action-landing:")||r.startsWith("code-work-lane-chain:release:")?!1:!!(r.startsWith(gP)||r===hP||r.startsWith("daemon-review:")||s&&si.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||RP(r,o)||Vl(o))||r.startsWith(kP)&&e.parentTaskId&&s&&si.has(s)||e.planId&&!e.parentTaskId&&s&&si.has(s)&&Vl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&si.has(s))}var Pg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,vP=new Set($m()),bP=/no commits between/i;function Ag(e){return!!(e&&bP.test(e))}function be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ig(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:be(e.head)}function Og(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?be(t[0]):null}function SP(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 wP(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&vP.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&Pg.test(n))}function xP(e,r){if(e.changedFiles.length>0)return!0;let t=be(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=SP(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(be(e.headCommit)||Ig(e.gitAncestry))}function Tg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(ii({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=be(e.routingRule)??"";if(r&&Pg.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(wP(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(be(e.patchPath)||be(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(be(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(be(e.prUrl)??be(e.taskPrUrl)??be(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 xP(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Ng(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:be(r?.headCommit)??Ig(e.gitAncestry),prUrl:be(r?.prUrl)??null}}import{spawnSync as _P}from"node:child_process";function Mg(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Dg(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Dg(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 Dg(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}de();function EP(e,r,t){try{let n=_P(e,t,{windowsHide:!0,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 li={git:(e,r)=>ne(e,r),gh:(e,r)=>EP("gh",e,r)};function CP(e){return e.split(`
95
- `).map(r=>r.trim()).find(Boolean)??""}function Lg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Mg(t.stdout)}function vt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function ai(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}}var Wg="Kynver-Task";function PP(e,r){let t=r?.trim();return!t||!/^[\w.-]{1,128}$/.test(t)||new RegExp(`^${Wg}:`,"m").test(e)?e:`${e.trimEnd()}
84
+ ${n}`;return lC.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":cC.some(s=>s.test(o))?"low":"elevated"}function dC(e){let r=Qt(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 pC(e){let r=e.inventory??xf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Rt(e){let r=dC({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 _f(e){let r=e.task??{},t=uC(r),n=pC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:en())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Or;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=vl({inventory:n,riskClass:t});return Rt(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 Rt({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 Rt({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 Rt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=vl({inventory:n,riskClass:t});if(a)return Rt({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 Rt({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"}})}xr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as SC}from"node:child_process";O();vr();Hn();import{unlinkSync as mC,writeFileSync as fC}from"node:fs";import gC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function Tl(e){return`${JSON.stringify(e)}
85
+ `}function Nl(e){let r;try{r=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!r||typeof r!="object"||Array.isArray(r))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let t=r,n=typeof t.id=="string"?t.id:"";if(t.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(t.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(t.op==="call_tool"){if(typeof t.name!="string"||!t.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:t.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var hC="KYNVER_WORKER_MCP_TOOLS",kC="mcp-config.json",oe="kynver",so=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Ef=so.map(e=>`mcp__${oe}__${e}`),yC={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};function io(e){if(!e||e.length===0)return[...so];let r=new Set;for(let t of e)for(let n of yC[t]??[])r.add(n);return so.filter(t=>r.has(t))}function Cf(e){return io(e).map(r=>`mcp__${oe}__${r}`)}var RC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],vC=["openai-compatible","gemini-api"];function bC(e){return RC.includes(e)}function Dl(e){return vC.includes(e)}function Pf(e){return bC(e)&&!Dl(e)}function ao(e=process.env){let r=e[hC]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function Af(e){return gC.join(e,kC)}function If(e){let r=Af(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return fC(r,`${JSON.stringify(t,null,2)}
86
+ `,{mode:384}),r}function Js(e){try{return mC(Af(e)),!0}catch{return!1}}Hn();function wC(e,r){let n=Df(e,r).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}var Nf={name:"claude",defaultModel:Be,preflightModel(e){return bl(e,Be)},start(e){let r=bl(e.model,Be);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;wC(e,t);let n=ep(t,{pinned:e.modelPinned===!0}),[o,s]=pe("claude",Df(e,t,n)),i=Tf(e.stdoutPath,"a"),a=Tf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=SC(c,u,ae({cwd:e.worktreePath,detached:ce(),stdio:l,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Of(i),Of(a),!d.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return d.unref(),{pid:d.pid,model:t}}};function Df(e,r,t){return["--model",r,...rp(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Ef).join(",")}`]:[],"--",e.prompt]}xr();import{closeSync as Uf,existsSync as IC,openSync as Ff}from"node:fs";import{spawn as Wl}from"node:child_process";O();vr();xr();import{closeSync as Mf,openSync as Wf}from"node:fs";import{spawn as xC}from"node:child_process";O();vr();var zs="gpt-5.6-sol";var Ml=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||zs;function _C(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function EC(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Lf={name:"hermes-codex",defaultModel:Ml,preflightModel(e){return rn(e,Ml)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=rn(e.model,Ml);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=pe(n,EC(t,e.prompt)),i=Wf(e.stdoutPath,"a"),a=Wf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=xC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:_C(e.reviewWorker,e.codexHome)}));if(Mf(i),Mf(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:t}}};var CC="KYNVER_CODEX_WINDOWS_SANDBOX",PC="unelevated";function AC(e=process.env){return e[CC]?.trim().toLowerCase()==="elevated"?"elevated":PC}function Bf(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${AC(r)}"`]}function OC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||zs}var Tr=OC();function Ll(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function TC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function NC(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Bf(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function DC(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Wl(l,c,t)}if(!IC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Wl(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Wl(i,a,t)}var Kf={name:"codex",defaultModel:Tr,preflightModel(e){return rn(e,Tr)},start(e){if(en().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Lf.start(e);let t=rn(e.model,Tr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Ff(e.stdoutPath,"a"),s=Ff(e.stderrPath,"a"),i=["ignore",o,s],a=Ll(),l=NC(n,e.prompt,e.executionMode),c;try{c=DC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:TC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Uf(o),Uf(s)}if(!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}}};xr();import{closeSync as Hf,openSync as $f}from"node:fs";import FC from"node:path";import{fileURLToPath as KC}from"node:url";import{spawn as HC}from"node:child_process";O();import{existsSync as Xs}from"node:fs";import vt from"node:path";import{fileURLToPath as MC}from"node:url";function WC(e,r){let t=vt.resolve(e);for(;;){let n=vt.join(t,r);if(Xs(n))return n;let o=vt.dirname(t);if(o===t)return null;t=o}}function LC(e){return WC(e,vt.join("node_modules",".bin","tsx"))??"npx"}function Bl(e,r){if(e.endsWith(".ts")){let t=LC(vt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Qs(e){if(e.explicitCliPath)return Xs(e.explicitCliPath)?Bl(e.explicitCliPath,e.nodeExecutable):null;let r=MC(new URL(".",e.importMetaUrl)),t=vt.join(r,"cli.js");if(Xs(t))return Bl(t,e.nodeExecutable);let n=vt.join(r,"cli.ts");return Xs(n)?Bl(n,e.nodeExecutable):null}var BC="X-Kynver-Job-Token",uo={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function UC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function lo(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[BC]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function co(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Zs(e,r,t){let n=UC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=co(t.memoryQuery);s&&o.set("memoryQuery",s);let i=co(t.mode);return i&&o.set("mode",i),lo(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),lo(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=co(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return lo(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return lo(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return lo(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...co(t.eventKey)?{eventKey:co(t.eventKey)}:{}}})}}function sn(e){return so.includes(e)}function an(e){return io(e).filter(sn).map(r=>{let t=uo[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var bt="openai-compatible",$C=600*1e3;function Ul(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var po=class extends Error{};function jC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new po(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new po(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new po(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):$C;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var VC="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function mo(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:VC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function GC(){let e=KC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=FC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Qs({importMetaUrl:import.meta.url,explicitCliPath:t,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${t} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function YC(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0;return{provider:bt,model:t,request:mo(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function fo(e,r,t){let n=GC(),o=$f(e.stdoutPath,"a"),s=$f(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=HC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Hf(o),Hf(s),!c.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(r)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${r.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:t}}var jf={name:bt,get defaultModel(){return Ul()},preflightModel(e){return tn(e,Ul())},start(e){let r=tn(e.model,Ul());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=jC(process.env),o=YC(e,n,t);return fo(e,o,t)}};xr();import{closeSync as Jf,openSync as zf}from"node:fs";import{spawn as zC}from"node:child_process";O();vr();import qC from"node:path";var JC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function ei(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function ri(e){let r=qC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Vf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Gf(e){let r=e.trim().toLowerCase();return!r||JC.has(r)?[]:["--model",e.trim()]}function Yf(e,r){return[...Gf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function qf(e,r){return["--model",r,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",oe]:[],"--prompt",e.prompt]}var dr="gemini";function Te(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function XC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Xf={name:dr,get defaultModel(){return Te()},preflightModel(e){return nn(e,Te())},start(e){let r=nn(e.model,Te());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=ei(),n=ri(t),o=n==="antigravity"?Vf(r):r.model,s=n==="antigravity"?Yf(e,o):qf(e,o),[i,a]=pe(t,s),l=zf(e.stdoutPath,"a"),c=zf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=zC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:XC(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Jf(l),Jf(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${t}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}};var pr="gemini-api",Qf="https://generativelanguage.googleapis.com/v1beta/openai",QC=600*1e3,go=class extends Error{};function ZC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function eP(e=process.env){let r=ZC(e);if(!r)throw new go('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||Qf,n;try{n=new URL(t)}catch{throw new go(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${Qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new go(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):QC;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function rP(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0,s=mo(r,t,e.prompt,o);return{provider:pr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Zf={name:pr,get defaultModel(){return Te()},preflightModel(e){return nn(e,Te())},start(e){let r=nn(e.model,Te());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=eP(process.env),o=rP(e,n,t);return fo(e,o,t)}};var tr="venice",Fl="https://api.venice.ai/api/v1",tP="venice-uncensored-1-2",nP="KYNVER_VENICE_API_KEY",oP="VENICE_API_KEY",sP="KYNVER_VENICE_BASE_URL",iP="KYNVER_VENICE_DEFAULT_MODEL";function eg(e=process.env){return e[nP]?.trim()||e[oP]?.trim()||void 0}function rg(e=process.env){return(e[sP]?.trim()||Fl).replace(/\/+$/,"")}function Jr(e=process.env){return e[iP]?.trim()||tP}function tg(e){return{"content-type":"application/json",authorization:`Bearer ${e}`}}var aP=Be,js="composer-2.5";function be(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function lP(e){if(!e)return;let r=be(e,"workerModelOverride")||be(e,"modelOverride");return r||`${be(e,"title")}
87
+ ${be(e,"description")}
88
+ ${be(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function ng(e){return e.toLowerCase()}function sg(e,r=U(),t=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(r.defaultModel?.trim()||t.KYNVER_DEFAULT_MODEL?.trim()):!1}function Hl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||aP}function ti(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":r.startsWith("gemini-")?dr:"cursor"}function cP(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:js,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Be,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Te(),provider:dr,rule:n&&n!==dr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Te(),provider:pr,rule:n&&n!==pr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="venice"||t==="venice-ai"||t==="venice_ai"?{model:Jr(),provider:tr,rule:n&&n!==tr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function og(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var uP=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function ig(e,r,t){return uP.has(e)?pt:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?pt:Be}function dP(e){let r=ng(be(e,"executorRef")),t=be(e,"title").toLowerCase(),n=be(e,"priority")||"normal",o=ng(be(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=ig(o,r,t);return{provider:"claude",model:i,rule:i===pt?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Tr,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Oe(be(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Tr},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Oe(be(e,"executorRef"));return{provider:bt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:venice")||r.startsWith("venice:")){let i=Oe(be(e,"executorRef"));return{provider:tr,...i?.model?{model:i.model}:{model:Jr()},rule:"lane:venice"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Oe(be(e,"executorRef"));return{provider:pr,...i?.model?{model:i.model}:{model:Te()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Oe(be(e,"executorRef"));return{provider:dr,...i?.model?{model:i.model}:{model:Te()},rule:"lane:gemini"}}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:Tr,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 og(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(og(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=Hl();return{model:s,provider:ti(s),rule:"default:global"}}function pP(e){return e?Oe(be(e,"executorRef")):null}function mP(e){switch(lr(e)){case dr:case pr:return Te();case tr:return Jr();case"claude":return Be;case"codex":return Tr;case"cursor":return js;default:return}}var Kl="explicit:cli_provider",ag="config:worker_provider";function lg(e,r,t){let n=lr(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:mP(n)??e.model,rule:t}}function fP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Kl?e:lg(e,t,Kl)}function gP(e,r){if(r.explicitProvider?.trim()||yl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=lr(t);return n===Or||n===e.provider?e:lg(e,n,ag)}function ni(e){let r,t=pP(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=cP(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||ti(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||ti(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&$s(e.task)){let l=lP(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",p=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=ig(d,p,m),u=c===pt?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=dP(e.task);r={...l,requestedModel:l.model}}else{let l=Hl();r={model:l,provider:e.explicitProvider?.trim()||ti(l),rule:"default:global",requestedModel:l}}r=fP(r,e.explicitProvider),r=gP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&lr(e.configuredProvider)!==Or&&r.rule==="config:worker_provider",i=tf({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Kl||i.rule===ag||Ir(i.provider)&&(e.explicitProviderIsOperatorOverride||$s(e.task))||i.provider===bt||i.provider===dr||i.provider===pr||i.provider===tr||i.provider==="codex")return i;let a=_f({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??Tr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function cg(e,r,t){return e||r||t||Hl()||Be}function hP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ug(e){return e?.trim()||void 0}function dg(e){let r=hP(e.task),t=Oe(r),n=e.explicitProvider?.trim().toLowerCase(),o=ug(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,a=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=ug(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&rf(r)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Ir(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}function pg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function mg(){return{maxTaskAttempts:pg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(ia("harness.maxTaskAttempts",4))),dispatchCooldownMs:pg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(ia("harness.dispatchCooldownMs",5e3)))}}H();import RP from"node:path";B();fe();O();var $l="kynver-harness:",fg="@runner:";function jl(e){return e?.trim()?e.trim():null}function kP(e){let r=jl(e);if(!r?.startsWith($l))return null;let t=r.slice($l.length),n=t.indexOf(fg);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function ho(e,r){let t=e.trim(),n=r.trim();return`${$l}${t}${fg}${n}`}function yP(e,r){let t=jl(r);return t?kP(e)===t:!1}function oi(e){let r=jl(e.workerLeaseOwner);return r&&yP(r,e.runId)?r:ho(e.runId,e.runnerId)}H();import gg from"node:os";Le();function Nr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Nr(t.runnerId)??Nr(r.KYNVER_RUNTIME_ID)??Nr(r.OPENCLAW_RUNTIME_ID)??Nr(r.HOSTNAME)??gg.hostname(),hostname:Nr(r.HOSTNAME)??gg.hostname(),profile:Nr(r.KYNVER_RUNNER_PROFILE)??Nr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Nr(r.KYNVER_HARNESS_REPO)??Nr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Zu()}}H();async function si(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Q(e.baseUrl);try{let o=await ee(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(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}B();async function ii(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await si({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&L(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function hg(e,r){return I(RP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function kg(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Q(r.baseUrl?String(r.baseUrl):void 0),s=await ee(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Vl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=hg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(J(p).status==="done"){u.push(d);continue}let f=oi({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await ii({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,b=await X(k,s,{leaseOwner:y.leaseOwner??f,leaseDurationMs:i,...y.leaseToken?{leaseToken:y.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let g=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function yg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=hg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as ZO,mkdirSync as eT}from"node:fs";import gn from"node:path";B();O();import vP from"node:path";function Rg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function vg(e,r,t,n){return Rg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ai(e,r={}){let t=r.isAlive??Y,n=r.kill??Me,o=r.sleep??Xo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Gl(e,r,t,n,o={}){vg(e,r,t,n);let s=ai(r.pid,o),i=ai(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function bg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(vP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ai(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function bP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function Sg(e,r,t,n={}){if(!bP(n.env))throw Gl(e,r,"watcher_attach_failed",t,n.deps),r.status="failed",L(e,r),new Error(`watcher_attach_failed: ${t}; worker stopped instead of running unwatched`)}Aa();de();B();B();var wg="unknown";function xg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==wg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==wg&&t.push({ref:n,source:"base"}),t.push({ref:"origin/main",source:"origin/main"}),t.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of t)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${r||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var SP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,wP="next-action-fix:";function li(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _g(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:li(e)}function xP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(wP)||t.includes("repair")||t.includes("unblock"))}function _P(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(SP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=li(String(n.targetPrUrl??n.target_pr_url??"")),s=li(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?_g(o):null,targetPrBranch:s}}catch{return r}}function Eg(e){if(!xP(e))return null;let r=_P(e.description),t=e.prUrl?_g(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??li(e.branch)}:null}function Cg(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 Pg(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(`
89
+ `),o],i=Cn(`worker.prompt.merge_gate.${n}`).split(`
90
+ `),a=Cn(`worker.prompt.plan_artifacts.${n}`).split(`
91
+ `);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...Cn("worker.prompt.core_rules").split(`
92
+ `),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...Cg({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
93
+ `)}O();H();var EP=600*1e3,ko=class extends Error{};function CP(e=process.env){let r=eg(e);if(!r)throw new ko('the "venice" worker provider requires KYNVER_VENICE_API_KEY (or VENICE_API_KEY) on the daemon host \u2014 create a key at https://venice.ai/settings/api.');let t=rg(e),n;try{n=new URL(t)}catch{throw new ko(`KYNVER_VENICE_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${Fl}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ko(`KYNVER_VENICE_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):EP;return{baseUrl:t,apiKey:r,timeoutMs:s}}function PP(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0,s=mo(r,t,e.prompt,o);return s.headers=tg(r.apiKey??""),{provider:tr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Ag={name:tr,get defaultModel(){return Jr()},preflightModel(e){return tn(e,Jr())},start(e){let r=tn(e.model,Jr());if(!r.ok)throw new Error(`venice provider model preflight failed: ${r.note}`);let t=CP(process.env);return fo(e,PP(e,t,r.model),r.model)}};var ci={claude:Nf,codex:Kf,cursor:bf,[dr]:Xf,[pr]:Zf,[bt]:jf,[tr]:Ag},Ig=null;function Og(e){if(Ig)return Ig;let r=e?.trim();if(r){let o=ci[lr(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(ci).join(", ")}`);return o}let t=nf(U().workerProvider),n=ci[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(ci).join(", ")}`);return n}O();import{spawn as FO}from"node:child_process";import{existsSync as KO,openSync as HO,closeSync as Dk}from"node:fs";import $O from"node:path";B();function Tg(e){return!!e.completionReportedAt?.trim()}function ui(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function AP(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Yl(e){return!!(AP(e.completionBlocker)||e.completionOutcome==="rejected")}function yo(e){return Tg(e)&&!Yl(e)}B();fe();H();import Mi from"node:path";function ql(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ro(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var IP=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),Ng=new Set(["done","failed","cancelled"]);function Dg(e){let r=ql(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=Ro(r.outcome),n=Ro(r.detail)??Ro(r.error),o=ql(r.task),s=ql(r.closedTask),i=o?Ro(o.status):null,a=s?Ro(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&Ng.has(i)||a!==null&&Ng.has(a))||t!==null&&IP.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function Mg(e){return e.taskAdvanced}B();ps();var OP="expert-lane-pr-review:",TP="plan-review-task",NP="scheduledjob:",di=new Set(["lorentz","dalton","rhea","sentinel"]);function DP(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Jl(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function MP(e,r){return e.startsWith("factory:")?e.includes("lb")||Jl(r):!1}function pi(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
94
+ ${n}`,s=DP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock:")||r==="lane:over_attempt_recovery"||r.startsWith("next-action-fix:")||r.startsWith("next-action-landing:")||r.startsWith("code-work-lane-chain:release:")?!1:!!(r.startsWith(OP)||r===TP||r.startsWith("daemon-review:")||s&&di.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||MP(r,o)||Jl(o))||r.startsWith(NP)&&e.parentTaskId&&s&&di.has(s)||e.planId&&!e.parentTaskId&&s&&di.has(s)&&Jl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&di.has(s))}var Wg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,WP=new Set(Ym()),LP=/no commits between/i;function Lg(e){return!!(e&&LP.test(e))}function Se(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Bg(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Se(e.head)}function Ug(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?Se(t[0]):null}function BP(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 UP(e,r){if(r.changedFiles.length>0)return!1;let t=Se(e.personaSlug)?.toLowerCase();if(t&&WP.has(t))return!0;let n=Se(e.routingRule)??"";return!!(n&&Wg.test(n))}function FP(e,r){if(e.changedFiles.length>0)return!0;let t=Se(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=BP(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(Se(e.headCommit)||Bg(e.gitAncestry))}function Fg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(pi({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=Se(e.routingRule)??"";if(r&&Wg.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(UP(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(Se(e.patchPath)||Se(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(Se(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(Se(e.prUrl)??Se(e.taskPrUrl)??Se(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 FP(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Kg(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:Se(r?.headCommit)??Bg(e.gitAncestry),prUrl:Se(r?.prUrl)??null}}import{spawnSync as KP}from"node:child_process";function $g(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Hg(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Hg(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 Hg(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}de();function HP(e,r,t){try{let n=KP(e,t,{windowsHide:!0,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 fi={git:(e,r)=>ne(e,r),gh:(e,r)=>HP("gh",e,r)};function $P(e){return e.split(`
95
+ `).map(r=>r.trim()).find(Boolean)??""}function Vg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:$g(t.stdout)}function St(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function mi(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}}var jg="Kynver-Task";function jP(e,r){let t=r?.trim();return!t||!/^[\w.-]{1,128}$/.test(t)||new RegExp(`^${jg}:`,"m").test(e)?e:`${e.trimEnd()}
96
96
 
97
- ${Wg}: ${t}`}function mo(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",PP(n,e.taskId)]);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=vt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Bg(e){let r=e.remoteBranch.trim();if(!r)return{ok:!1,detail:"missing remote branch"};let t=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${r}`]);return t.status!==0&&!/already up to date/i.test(t.stderr||t.stdout)?{ok:!1,detail:t.stderr||t.stdout||t.error||"git push to PR branch failed"}:{ok:!0}}function Ug(e){let r=ai(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=AP(t.stdout)??ai(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 AP(e){let t=CP(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function Fg(e){return`t-${x(e)}-a`}function Kg(e,r){let t=Fg(r);if(e.headRefName.toLowerCase().includes(t))return!0;let n=r.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function fo(e){return e.trim().toLowerCase()}function Hg(e,r){if(!e.length)return null;if(r){let t=fo(r),n=e.find(o=>fo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function $g(e,r){let t=fo(r);return e.filter(n=>fo(n.url)!==t).map(n=>n.url)}function jg(e){try{let r=JSON.parse(e);return Array.isArray(r)?r.map(t=>({url:t.url?.trim()??"",number:Number(t.number)||0,headRefName:t.headRefName?.trim()??"",createdAt:t.createdAt?.trim()??"",body:t.body,title:t.title})).filter(t=>t.url&&t.number>0&&t.headRefName):[]}catch{return[]}}function IP(e){let r=new Set,t=[];for(let n of e){let o=fo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function OP(e,r,t,n){let o=n.gh(e,["search","prs",t,"--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:jg(o.stdout).filter(s=>Kg(s,t))}function TP(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=Fg(t);return jg(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Kg(i,t))}function Gl(e,r,t,n){let o=t.trim();if(!o)return[];let s=OP(e,r,o,n),i=TP(e,r,o,n);return IP([...s,...i])}function NP(e){let r=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Yl(e){let r=$g(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=NP(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?t.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:t,failed:n}}function Vg(e,r,t,n){let o=t.trim();if(!o||!r.trim())return null;let s=n.gh(e,["api",`repos/${r}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}function DP(e){return e.gh(process.cwd(),["--version"]).status===0}function MP(e,r){return`AgentOS harness: ${e} (${r})`}function WP(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(`
98
- `)}function qr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function LP(e){return qr(e.prUrlHint)??Og(e.status.finalResult)??qr(e.worker.taskPrUrl)??null}function BP(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??vt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=mo({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,taskId:e.taskId,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Bg({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=vt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function ql(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??vt(e.snapshot.worktreePath,e.exec)??void 0};let r=mo({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,taskId:e.taskId,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 Jl(e,r=li){let t=LP(e),n=Ng(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Tg({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?ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),exec:r}):{ok:!0};if(t)return ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),exec:r});if(!DP(r)){let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} 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=Lg(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 h=!1,w=!1,E=n.headCommit??vt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=mo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,taskId:qr(e.worker.taskId),hasDirtyFiles:!0,exec:r});if(!S.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${S.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};h=S.committed,w=S.pushed,E=S.headCommit??E}else{let S=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(S.status!==0&&!/already up to date/i.test(S.stderr||S.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${S.stderr||S.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};w=S.status===0}return{ok:!0,prUrl:a,headCommit:E,committed:h,pushed:w}}let l=qr(e.worker.taskId),c=[];if(l){c=Gl(n.worktreePath,i,l,r);let h=Hg(c);if(h){let w=BP({snapshot:n,canonical:h,workerName:e.worker.name,taskId:l,exec:r});return w.ok&&w.prUrl&&Yl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=ai(n.worktreePath,i,n.branch,r);if(u)return ql({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=mo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),hasDirtyFiles:d,exec:r});if(d&&!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=y.committed,m=y.pushed,!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.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 h=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(h.status!==0&&!/already up to date/i.test(h.stderr||h.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${h.stderr||h.stdout||h.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=h.status===0}f=y.headCommit??f??vt(n.worktreePath,r)??void 0;let k=f?Vg(n.worktreePath,i,f,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:f,committed:p,pushed:m,created:!1};let b=e.run.base?.trim()||"main",g=Ug({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:MP(e.worker.name,e.worker.runId),body:WP(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Ag(g.detail))return{ok:!0,headCommit:f??void 0,committed:p,pushed:m};let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} 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`."}}if(l&&g.prUrl){let w=[...c.length>0?c:Gl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Yl({worktreePath:n.worktreePath,repo:i,rows:w,canonicalPrUrl:g.prUrl,exec:r})}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:p,pushed:m,created:g.created}}fe();ct();xa();B();fe();O();import xA from"node:path";O();import UP from"node:path";var go=new Map,zl=new Map;function Xl(e){clearInterval(zl.get(e)),zl.delete(e)}function Ql(e,r){if(Xl(e),!go.has(e))return;let t=setInterval(()=>{(I(UP.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&nn(e)},1e3);t.unref(),zl.set(e,t)}function Zl(e,r){Xl(e);let t=go.get(e);t&&t.close(),go.set(e,r)}async function Jr(e){Xl(e);let r=go.get(e);return r?(go.delete(e),await r.close(),!0):!1}function nn(e){Jr(e).catch(()=>{})}de();import{appendFileSync as FP,existsSync as Yg,mkdirSync as qg,readFileSync as KP,rmSync as Gg,writeFileSync as HP}from"node:fs";import Nr from"node:path";var Jg=Nr.join(".cursor","mcp.json");function zg(e){return Nr.join(e,Jg)}function $P(e){return Z(e,["ls-files","--error-unmatch",Jg.split(Nr.sep).join("/")],{allowFailure:!0}).trim().length>0}function jP(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Nr.isAbsolute(r)?r:Nr.join(e,r),n=Nr.join(t,"info","exclude"),o=".cursor/mcp.json";try{qg(Nr.dirname(n),{recursive:!0});let s=Yg(n)?KP(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;FP(n,`${s.endsWith(`
97
+ ${jg}: ${t}`}function vo(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",jP(n,e.taskId)]);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=St(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Gg(e){let r=e.remoteBranch.trim();if(!r)return{ok:!1,detail:"missing remote branch"};let t=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${r}`]);return t.status!==0&&!/already up to date/i.test(t.stderr||t.stdout)?{ok:!1,detail:t.stderr||t.stdout||t.error||"git push to PR branch failed"}:{ok:!0}}function Yg(e){let r=mi(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=VP(t.stdout)??mi(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 VP(e){let t=$P(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function qg(e){return`t-${x(e)}-a`}function Jg(e,r){let t=qg(r);if(e.headRefName.toLowerCase().includes(t))return!0;let n=r.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function bo(e){return e.trim().toLowerCase()}function zg(e,r){if(!e.length)return null;if(r){let t=bo(r),n=e.find(o=>bo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Xg(e,r){let t=bo(r);return e.filter(n=>bo(n.url)!==t).map(n=>n.url)}function Qg(e){try{let r=JSON.parse(e);return Array.isArray(r)?r.map(t=>({url:t.url?.trim()??"",number:Number(t.number)||0,headRefName:t.headRefName?.trim()??"",createdAt:t.createdAt?.trim()??"",body:t.body,title:t.title})).filter(t=>t.url&&t.number>0&&t.headRefName):[]}catch{return[]}}function GP(e){let r=new Set,t=[];for(let n of e){let o=bo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function YP(e,r,t,n){let o=n.gh(e,["search","prs",t,"--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:Qg(o.stdout).filter(s=>Jg(s,t))}function qP(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=qg(t);return Qg(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Jg(i,t))}function zl(e,r,t,n){let o=t.trim();if(!o)return[];let s=YP(e,r,o,n),i=qP(e,r,o,n);return GP([...s,...i])}function JP(e){let r=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Xl(e){let r=Xg(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=JP(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?t.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:t,failed:n}}function Zg(e,r,t,n){let o=t.trim();if(!o||!r.trim())return null;let s=n.gh(e,["api",`repos/${r}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}function zP(e){return e.gh(process.cwd(),["--version"]).status===0}function XP(e,r){return`AgentOS harness: ${e} (${r})`}function QP(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(`
98
+ `)}function zr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ZP(e){return zr(e.prUrlHint)??Ug(e.status.finalResult)??zr(e.worker.taskPrUrl)??null}function eA(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??St(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=vo({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,taskId:e.taskId,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Gg({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=St(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Ql(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??St(e.snapshot.worktreePath,e.exec)??void 0};let r=vo({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,taskId:e.taskId,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 Zl(e,r=fi){let t=ZP(e),n=Kg(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Fg({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?Ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),exec:r}):{ok:!0};if(t)return Ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),exec:r});if(!zP(r)){let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} 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=Vg(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 h=!1,w=!1,E=n.headCommit??St(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=vo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,taskId:zr(e.worker.taskId),hasDirtyFiles:!0,exec:r});if(!S.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${S.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};h=S.committed,w=S.pushed,E=S.headCommit??E}else{let S=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(S.status!==0&&!/already up to date/i.test(S.stderr||S.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${S.stderr||S.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};w=S.status===0}return{ok:!0,prUrl:a,headCommit:E,committed:h,pushed:w}}let l=zr(e.worker.taskId),c=[];if(l){c=zl(n.worktreePath,i,l,r);let h=zg(c);if(h){let w=eA({snapshot:n,canonical:h,workerName:e.worker.name,taskId:l,exec:r});return w.ok&&w.prUrl&&Xl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=mi(n.worktreePath,i,n.branch,r);if(u)return Ql({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=vo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),hasDirtyFiles:d,exec:r});if(d&&!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=y.committed,m=y.pushed,!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.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 h=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(h.status!==0&&!/already up to date/i.test(h.stderr||h.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${h.stderr||h.stdout||h.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=h.status===0}f=y.headCommit??f??St(n.worktreePath,r)??void 0;let k=f?Zg(n.worktreePath,i,f,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:f,committed:p,pushed:m,created:!1};let b=e.run.base?.trim()||"main",g=Yg({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:XP(e.worker.name,e.worker.runId),body:QP(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Lg(g.detail))return{ok:!0,headCommit:f??void 0,committed:p,pushed:m};let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} 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`."}}if(l&&g.prUrl){let w=[...c.length>0?c:zl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Xl({worktreePath:n.worktreePath,repo:i,rows:w,canonicalPrUrl:g.prUrl,exec:r})}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:p,pushed:m,created:g.created}}fe();dt();Ia();B();fe();O();import FA from"node:path";O();import rA from"node:path";var So=new Map,ec=new Map;function rc(e){clearInterval(ec.get(e)),ec.delete(e)}function tc(e,r){if(rc(e),!So.has(e))return;let t=setInterval(()=>{(I(rA.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&ln(e)},1e3);t.unref(),ec.set(e,t)}function nc(e,r){rc(e);let t=So.get(e);t&&t.close(),So.set(e,r)}async function Xr(e){rc(e);let r=So.get(e);return r?(So.delete(e),await r.close(),!0):!1}function ln(e){Xr(e).catch(()=>{})}de();import{appendFileSync as tA,existsSync as rh,mkdirSync as th,readFileSync as nA,rmSync as eh,writeFileSync as oA}from"node:fs";import Dr from"node:path";var nh=Dr.join(".cursor","mcp.json");function oh(e){return Dr.join(e,nh)}function sA(e){return Z(e,["ls-files","--error-unmatch",nh.split(Dr.sep).join("/")],{allowFailure:!0}).trim().length>0}function iA(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Dr.isAbsolute(r)?r:Dr.join(e,r),n=Dr.join(t,"info","exclude"),o=".cursor/mcp.json";try{th(Dr.dirname(n),{recursive:!0});let s=rh(n)?nA(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;tA(n,`${s.endsWith(`
99
99
  `)||!s?"":`
100
100
  `}${o}
101
- `)}catch{}}function Xg(e){if($P(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .cursor/mcp.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=zg(e.worktreePath);qg(Nr.dirname(r),{recursive:!0});let t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return HP(r,`${JSON.stringify(t,null,2)}
102
- `,{mode:384}),jP(e.worktreePath),{ok:!0,configPath:r}}function ci(e){let r=zg(e);if(!Yg(r))return!1;try{Gg(r,{force:!0});let t=Nr.dirname(r);return Gg(t,{recursive:!1}),!0}catch{return!0}}Rr();import{copyFileSync as VP,existsSync as ui,mkdirSync as GP,readFileSync as YP,rmSync as qP,symlinkSync as JP,writeFileSync as zP}from"node:fs";import{spawnSync as XP}from"node:child_process";import{homedir as QP}from"node:os";import zr from"node:path";var ZP="codex-home";function Qg(e){return zr.join(e,ZP)}function eA(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return zr.resolve(r);let t=QP();for(let n of[zr.join(t,".codex"),zr.join(t,".config","codex")])if(ui(n))return n;return null}function rA(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${oe}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${oe}.env]`,`${rr} = ${JSON.stringify(e)}`,""].join(`
103
- `)}function tA(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function Zg(e){let r=eA(e.env??process.env),t=r?zr.join(r,"config.toml"):null,n=t&&ui(t)?YP(t,"utf8"):"";if(n&&tA(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=Qg(e.workerDir);GP(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
101
+ `)}catch{}}function sh(e){if(sA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .cursor/mcp.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=oh(e.worktreePath);th(Dr.dirname(r),{recursive:!0});let t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return oA(r,`${JSON.stringify(t,null,2)}
102
+ `,{mode:384}),iA(e.worktreePath),{ok:!0,configPath:r}}function gi(e){let r=oh(e);if(!rh(r))return!1;try{eh(r,{force:!0});let t=Dr.dirname(r);return eh(t,{recursive:!1}),!0}catch{return!0}}vr();import{copyFileSync as aA,existsSync as hi,mkdirSync as lA,readFileSync as cA,rmSync as uA,symlinkSync as dA,writeFileSync as pA}from"node:fs";import{spawnSync as mA}from"node:child_process";import{homedir as fA}from"node:os";import Qr from"node:path";var gA="codex-home";function ih(e){return Qr.join(e,gA)}function hA(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return Qr.resolve(r);let t=fA();for(let n of[Qr.join(t,".codex"),Qr.join(t,".config","codex")])if(hi(n))return n;return null}function kA(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${oe}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${oe}.env]`,`${rr} = ${JSON.stringify(e)}`,""].join(`
103
+ `)}function yA(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function ah(e){let r=hA(e.env??process.env),t=r?Qr.join(r,"config.toml"):null,n=t&&hi(t)?cA(t,"utf8"):"";if(n&&yA(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=ih(e.workerDir);lA(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
104
104
  `)?"":`
105
- `;return zP(zr.join(o,"config.toml"),`${n}${s}${rA(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:nA(r,o)}}function nA(e,r){let t=e?zr.join(e,"auth.json"):null;if(!t||!ui(t))return"none";let n=zr.join(r,"auth.json");try{return JP(t,n,"file"),"symlink"}catch{try{return VP(t,n),"copy"}catch{return"none"}}}function ho(e){let r=Qg(e);if(!ui(r))return!1;try{return qP(r,{recursive:!0,force:!0}),!0}catch{return!1}}function eh(e,r,t=1e4){try{let[n,o]=pe(r,["--version"]),s=XP(n,o,{env:{...process.env,CODEX_HOME:e},encoding:"utf8",timeout:t,windowsHide:!0});return s.error&&s.error.code==="ENOENT"?{ok:!0}:s.status===0?{ok:!0}:{ok:!1,detail:(s.stderr||s.stdout||`exit ${s.status??"unknown"}`).toString().replace(/\s+/g," ").trim().slice(0,200)}}catch{return{ok:!0}}}de();import{appendFileSync as oA,existsSync as ec,mkdirSync as th,readFileSync as nh,rmSync as rh,writeFileSync as sA}from"node:fs";import Dr from"node:path";var oh=Dr.join(".agents","mcp_config.json");function sh(e){return Dr.join(e,oh)}function iA(e){return Z(e,["ls-files","--error-unmatch",oh.split(Dr.sep).join("/")],{allowFailure:!0}).trim().length>0}function aA(e){if(!ec(e))return{};try{let r=JSON.parse(nh(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t=r.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return{}}}function lA(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Dr.isAbsolute(r)?r:Dr.join(e,r),n=Dr.join(t,"info","exclude"),o=".agents/mcp_config.json";try{th(Dr.dirname(n),{recursive:!0});let s=ec(n)?nh(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;oA(n,`${s.endsWith(`
105
+ `;return pA(Qr.join(o,"config.toml"),`${n}${s}${kA(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:RA(r,o)}}function RA(e,r){let t=e?Qr.join(e,"auth.json"):null;if(!t||!hi(t))return"none";let n=Qr.join(r,"auth.json");try{return dA(t,n,"file"),"symlink"}catch{try{return aA(t,n),"copy"}catch{return"none"}}}function wo(e){let r=ih(e);if(!hi(r))return!1;try{return uA(r,{recursive:!0,force:!0}),!0}catch{return!1}}function lh(e,r,t=1e4){try{let[n,o]=pe(r,["--version"]),s=mA(n,o,{env:{...process.env,CODEX_HOME:e},encoding:"utf8",timeout:t,windowsHide:!0});return s.error&&s.error.code==="ENOENT"?{ok:!0}:s.status===0?{ok:!0}:{ok:!1,detail:(s.stderr||s.stdout||`exit ${s.status??"unknown"}`).toString().replace(/\s+/g," ").trim().slice(0,200)}}catch{return{ok:!0}}}de();import{appendFileSync as vA,existsSync as oc,mkdirSync as uh,readFileSync as dh,rmSync as ch,writeFileSync as bA}from"node:fs";import Mr from"node:path";var ph=Mr.join(".agents","mcp_config.json");function mh(e){return Mr.join(e,ph)}function SA(e){return Z(e,["ls-files","--error-unmatch",ph.split(Mr.sep).join("/")],{allowFailure:!0}).trim().length>0}function wA(e){if(!oc(e))return{};try{let r=JSON.parse(dh(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t=r.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return{}}}function xA(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Mr.isAbsolute(r)?r:Mr.join(e,r),n=Mr.join(t,"info","exclude"),o=".agents/mcp_config.json";try{uh(Mr.dirname(n),{recursive:!0});let s=oc(n)?dh(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;vA(n,`${s.endsWith(`
106
106
  `)||!s?"":`
107
107
  `}${o}
108
- `)}catch{}}function ih(e){if(iA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=sh(e.worktreePath),t=aA(r);if(oe in t)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${oe}" server \u2014 refusing to overwrite it`};th(Dr.dirname(r),{recursive:!0});let n={mcpServers:{...t,[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return sA(r,`${JSON.stringify(n,null,2)}
109
- `,{mode:384}),lA(e.worktreePath),{ok:!0,configPath:r}}function di(e){let r=sh(e);if(!ec(r))return!1;try{return rh(r,{force:!0}),rh(Dr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as cA,existsSync as rc,mkdirSync as uA,readFileSync as dA,rmSync as pA,symlinkSync as mA,writeFileSync as fA}from"node:fs";import{homedir as gA}from"node:os";import Mr from"node:path";var hA="gemini-home";function ah(e){return Mr.join(e,hA)}function kA(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||gA()}function yA(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Mr.join(Mr.resolve(r),".gemini"):Mr.join(kA(e),".gemini")}function RA(e){if(!rc(e))return{};try{let r=JSON.parse(dA(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function vA(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function bA(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function SA(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function lh(e){let r=e.env??process.env,t=yA(r),n=RA(Mr.join(t,"settings.json"));if(vA(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=ah(e.workerDir),s=Mr.join(o,".gemini");uA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...bA(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:SA(e.brokerSocketPath)}};return fA(Mr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
110
- `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:wA(t,s)}}function wA(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Mr.join(e,o);if(!rc(s))continue;let i=Mr.join(r,o);try{mA(s,i,"file"),n==="none"&&(n="symlink")}catch{try{cA(s,i),n="copy"}catch{}}}return n}function pi(e){let r=ah(e);if(!rc(r))return!1;try{return pA(r,{recursive:!0,force:!0}),!0}catch{return!1}}var _A=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function ch(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function EA(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Xr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:EA(r);return{finalResult:r??t??"completed",summary:t}}function mi(e,r,t){if(ch(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Xr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(nn(e.workerDir),Hs(e.workerDir),ho(e.workerDir),pi(e.workerDir)),e.worktreePath&&(ci(e.worktreePath),di(e.worktreePath))}function CA(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 uh(e,r,t={}){let n=CA(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=I(xA.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||ch(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!_A.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Hl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}mi(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}Un();function fi(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function PA(e){let r=e.lastHeartbeatPhase?.trim();if(!r||r==="complete")return null;let t=e.lastHeartbeatSummary?.trim();return t?{summary:t,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:r,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function AA(e){let r=Fn(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function IA(e){let r=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${r}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:r,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function gi(e){let{worker:r,status:t}=e;if(fi(t.finalResult)){let u=me(r.heartbeatPath),d=Sr(u),p=fi(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Xr(t)}}if(t.alive)return null;let n=dt(r.stdoutPath);if(fi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Xr(u)}}let o=me(r.heartbeatPath),s=Sr(o);if(fi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Xr(u)}}let i=AA(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Xr(u)}}let a=PA(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Xr(u)}}let l=IA({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Xr(c)}}function hi(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Un();function ki(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 dh(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 ph(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function mh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function gh(e){let r=mh(e);if(!r)return[];let t=mh(r.worktreeHandoff),n=ph(t?.disposableArtifactsRemoved);return n.length?n:ph(r.disposableArtifactsRemoved)}function fh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function hh(e,r){let t=ki(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>fh(o)));return t.every(o=>{let s=fh(dh(o));return n.has(s)})}function yi(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function OA(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 TA(e){let r=kh(e.disposableArtifactsRemoved),t=gh(e.finalResult);return[...new Set([...r,...t])]}function yh(e){let r=kh(e.changedFiles),t=ki(r),n=TA(e),o=t.length===0||hh(r,n);return yi(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`}:yi(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`}:yi(e.artifactBundlePath)||yi(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}:OA(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`}}Ze();import{existsSync as XA,renameSync as QA}from"node:fs";import{mkdirSync as GA}from"node:fs";import YA from"node:path";import{DatabaseSync as qA}from"node:sqlite";var tc=class extends Error{constructor(r,t){super(`local-run-store schema version ${r} is newer than this runtime supports (${t}); refusing to open. Upgrade the runtime or quarantine the database deliberately.`),this.name="SchemaDowngradeRefusedError"}},NA=[`CREATE TABLE IF NOT EXISTS local_meta (
108
+ `)}catch{}}function fh(e){if(SA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=mh(e.worktreePath),t=wA(r);if(oe in t)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${oe}" server \u2014 refusing to overwrite it`};uh(Mr.dirname(r),{recursive:!0});let n={mcpServers:{...t,[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return bA(r,`${JSON.stringify(n,null,2)}
109
+ `,{mode:384}),xA(e.worktreePath),{ok:!0,configPath:r}}function ki(e){let r=mh(e);if(!oc(r))return!1;try{return ch(r,{force:!0}),ch(Mr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as _A,existsSync as sc,mkdirSync as EA,readFileSync as CA,rmSync as PA,symlinkSync as AA,writeFileSync as IA}from"node:fs";import{homedir as OA}from"node:os";import Wr from"node:path";var TA="gemini-home";function gh(e){return Wr.join(e,TA)}function NA(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||OA()}function DA(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Wr.join(Wr.resolve(r),".gemini"):Wr.join(NA(e),".gemini")}function MA(e){if(!sc(e))return{};try{let r=JSON.parse(CA(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function WA(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function LA(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function BA(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function hh(e){let r=e.env??process.env,t=DA(r),n=MA(Wr.join(t,"settings.json"));if(WA(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=gh(e.workerDir),s=Wr.join(o,".gemini");EA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...LA(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:BA(e.brokerSocketPath)}};return IA(Wr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
110
+ `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:UA(t,s)}}function UA(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Wr.join(e,o);if(!sc(s))continue;let i=Wr.join(r,o);try{AA(s,i,"file"),n==="none"&&(n="symlink")}catch{try{_A(s,i),n="copy"}catch{}}}return n}function yi(e){let r=gh(e);if(!sc(r))return!1;try{return PA(r,{recursive:!0,force:!0}),!0}catch{return!1}}var KA=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function kh(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function HA(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 Zr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:HA(r);return{finalResult:r??t??"completed",summary:t}}function Ri(e,r,t){if(kh(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Zr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(ln(e.workerDir),Js(e.workerDir),wo(e.workerDir),yi(e.workerDir)),e.worktreePath&&(gi(e.worktreePath),ki(e.worktreePath))}function $A(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 yh(e,r,t={}){let n=$A(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=I(FA.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||kh(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!KA.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Gl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}Ri(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}$n();function vi(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function jA(e){let r=e.lastHeartbeatPhase?.trim();if(!r||r==="complete")return null;let t=e.lastHeartbeatSummary?.trim();return t?{summary:t,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:r,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function VA(e){let r=jn(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function GA(e){let r=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${r}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:r,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function bi(e){let{worker:r,status:t}=e;if(vi(t.finalResult)){let u=me(r.heartbeatPath),d=wr(u),p=vi(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Zr(t)}}if(t.alive)return null;let n=mt(r.stdoutPath);if(vi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Zr(u)}}let o=me(r.heartbeatPath),s=wr(o);if(vi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Zr(u)}}let i=VA(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Zr(u)}}let a=jA(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Zr(u)}}let l=GA({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Zr(c)}}function Si(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}$n();function wi(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 Rh(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 vh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function bh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function wh(e){let r=bh(e);if(!r)return[];let t=bh(r.worktreeHandoff),n=vh(t?.disposableArtifactsRemoved);return n.length?n:vh(r.disposableArtifactsRemoved)}function Sh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function xh(e,r){let t=wi(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Sh(o)));return t.every(o=>{let s=Sh(Rh(o));return n.has(s)})}function xi(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _h(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function YA(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 qA(e){let r=_h(e.disposableArtifactsRemoved),t=wh(e.finalResult);return[...new Set([...r,...t])]}function Eh(e){let r=_h(e.changedFiles),t=wi(r),n=qA(e),o=t.length===0||xh(r,n);return xi(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`}:xi(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`}:xi(e.artifactBundlePath)||xi(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}:YA(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`}}Ze();import{existsSync as mI,renameSync as fI}from"node:fs";import{mkdirSync as lI}from"node:fs";import cI from"node:path";import{DatabaseSync as uI}from"node:sqlite";var ic=class extends Error{constructor(r,t){super(`local-run-store schema version ${r} is newer than this runtime supports (${t}); refusing to open. Upgrade the runtime or quarantine the database deliberately.`),this.name="SchemaDowngradeRefusedError"}},JA=[`CREATE TABLE IF NOT EXISTS local_meta (
111
111
  key TEXT PRIMARY KEY,
112
112
  value TEXT NOT NULL
113
113
  ) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
@@ -133,8 +133,8 @@ ${Wg}: ${t}`}function mo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirty
133
133
  payload_json TEXT NOT NULL,
134
134
  created_at TEXT NOT NULL,
135
135
  PRIMARY KEY (scope, seq)
136
- ) STRICT`];function DA(e){if(!e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'local_meta'").get())return null;let t=e.prepare("SELECT value FROM local_meta WHERE key = 'schema_version'").get();if(!t?.value)return null;let n=Number.parseInt(t.value,10);return Number.isFinite(n)?n:null}function Rh(e,r){let t=DA(e);if(t!==null&&t>1)throw new tc(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of NA)e.exec(n);e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(1)),e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_applied_at', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(r),e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}import{existsSync as MA,realpathSync as WA,readFileSync as LA}from"node:fs";import vh from"node:path";var BA=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),UA=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function FA(){try{return LA("/proc/self/mounts","utf8")}catch{return null}}function KA(e){let r=vh.resolve(e);for(let t=0;t<64;t+=1){if(MA(r))try{return WA.native(r)}catch{return r}let n=vh.dirname(r);if(n===r)return r;r=n}return r}function HA(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function $A(e){let r=[];for(let t of e.split(`
137
- `)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:HA(n[1]),fsType:n[2]})}return r}function bh(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function jA(e,r){let t=null,n=bh(e);for(let o of r){let s=bh(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function Sh(e,r){let n=(r?.resolveRealPath??KA)(e),o=(r?.mountsSource??FA)();if(o===null)return{verdict:"rejected",reason:"Mount information unavailable \u2014 the filesystem type cannot be established safely, so WAL mode is refused (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let s=jA(n,$A(o));if(!s)return{verdict:"rejected",reason:"No mount entry covers the resolved database path \u2014 refusing WAL mode (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let i=s.fsType.toLowerCase();return UA.has(i)||i.startsWith("fuse.")?{verdict:"rejected",reason:`Filesystem '${i}' is network-like or crosses an OS boundary; SQLite WAL locking is not safe there.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:BA.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var Ri=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},JA="local-run-store.sqlite",zA=5e3,ko=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=Sh(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new Ri(t.reason);GA(r.directory,{recursive:!0,mode:448});let n=YA.join(r.directory,r.filename??JA),o=new qA(n,{timeout:r.busyTimeoutMs??zA}),s=r.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new Ri(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Rh(o,s().toISOString())}catch(i){throw o.close(),i}return new e(o,n,s)}inImmediateTransaction(r){this.db.exec("BEGIN IMMEDIATE");try{let t=r();return this.db.exec("COMMIT"),t}catch(t){throw this.db.exec("ROLLBACK"),t}}registerProcessIdentity(r){let t=this.now().toISOString();return this.inImmediateTransaction(()=>{this.db.prepare(`INSERT INTO process_identity
136
+ ) STRICT`];function zA(e){if(!e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'local_meta'").get())return null;let t=e.prepare("SELECT value FROM local_meta WHERE key = 'schema_version'").get();if(!t?.value)return null;let n=Number.parseInt(t.value,10);return Number.isFinite(n)?n:null}function Ch(e,r){let t=zA(e);if(t!==null&&t>1)throw new ic(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of JA)e.exec(n);e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(1)),e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_applied_at', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(r),e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}import{existsSync as XA,realpathSync as QA,readFileSync as ZA}from"node:fs";import Ph from"node:path";var eI=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),rI=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function tI(){try{return ZA("/proc/self/mounts","utf8")}catch{return null}}function nI(e){let r=Ph.resolve(e);for(let t=0;t<64;t+=1){if(XA(r))try{return QA.native(r)}catch{return r}let n=Ph.dirname(r);if(n===r)return r;r=n}return r}function oI(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function sI(e){let r=[];for(let t of e.split(`
137
+ `)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:oI(n[1]),fsType:n[2]})}return r}function Ah(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function iI(e,r){let t=null,n=Ah(e);for(let o of r){let s=Ah(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function Ih(e,r){let n=(r?.resolveRealPath??nI)(e),o=(r?.mountsSource??tI)();if(o===null)return{verdict:"rejected",reason:"Mount information unavailable \u2014 the filesystem type cannot be established safely, so WAL mode is refused (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let s=iI(n,sI(o));if(!s)return{verdict:"rejected",reason:"No mount entry covers the resolved database path \u2014 refusing WAL mode (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let i=s.fsType.toLowerCase();return rI.has(i)||i.startsWith("fuse.")?{verdict:"rejected",reason:`Filesystem '${i}' is network-like or crosses an OS boundary; SQLite WAL locking is not safe there.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:eI.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var _i=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},dI="local-run-store.sqlite",pI=5e3,xo=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=Ih(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new _i(t.reason);lI(r.directory,{recursive:!0,mode:448});let n=cI.join(r.directory,r.filename??dI),o=new uI(n,{timeout:r.busyTimeoutMs??pI}),s=r.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new _i(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Ch(o,s().toISOString())}catch(i){throw o.close(),i}return new e(o,n,s)}inImmediateTransaction(r){this.db.exec("BEGIN IMMEDIATE");try{let t=r();return this.db.exec("COMMIT"),t}catch(t){throw this.db.exec("ROLLBACK"),t}}registerProcessIdentity(r){let t=this.now().toISOString();return this.inImmediateTransaction(()=>{this.db.prepare(`INSERT INTO process_identity
138
138
  (process_key, pid, runtime_version, node_version, started_at, registered_at)
139
139
  VALUES (?, ?, ?, ?, ?, ?)
140
140
  ON CONFLICT(process_key) DO UPDATE SET
@@ -158,26 +158,26 @@ ${Wg}: ${t}`}function mo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirty
158
158
  LIMIT ?`).all(...s,n).map(l=>({idempotencyKey:l.idempotency_key,operation:l.operation,resultJson:l.result_json,recordedAt:l.recorded_at}))}deleteOperationReceiptsByKeys(r){return r.length===0?0:this.inImmediateTransaction(()=>{let t=this.db.prepare("DELETE FROM operation_receipts WHERE idempotency_key = ?"),n=0;for(let o of r)n+=Number(t.run(o).changes);return n})}getOperationReceipt(r){let t=this.db.prepare(`SELECT idempotency_key, operation, result_json, recorded_at
159
159
  FROM operation_receipts WHERE idempotency_key = ?`).get(r);return t?{idempotencyKey:t.idempotency_key,operation:t.operation,resultJson:t.result_json,recordedAt:t.recorded_at}:null}saveRecoveryCheckpoint(r){return this.inImmediateTransaction(()=>{let t=this.db.prepare("SELECT COALESCE(MAX(seq), 0) AS max_seq FROM recovery_checkpoints WHERE scope = ?").get(r.scope),n=Number(t.max_seq)+1;return this.db.prepare(`INSERT INTO recovery_checkpoints (scope, seq, payload_json, created_at)
160
160
  VALUES (?, ?, ?, ?)`).run(r.scope,n,r.payloadJson,this.now().toISOString()),{seq:n}})}latestRecoveryCheckpoint(r){let t=this.db.prepare(`SELECT scope, seq, payload_json, created_at FROM recovery_checkpoints
161
- WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(r);return t?{scope:t.scope,seq:t.seq,payloadJson:t.payload_json,createdAt:t.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(r){let t=this.db.prepare(`PRAGMA ${r}`).get();return String(Object.values(t)[0])}close(){this.db.close()}};function ZA(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;XA(o)&&QA(o,`${t}${n}`)}return t}function wh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ko.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=ZA(n,r);try{return{store:ko.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function eI(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function rI(){return tI.classifyOptions??eI()}var tI={};var nI=300*1e3,Wr=null,vi=0;function oI(e){vi+=1;try{let r=rI(),t=wh({directory:e,...r?{classifyOptions:r}:{}});return{store:t.store,status:{state:"open",harnessRoot:e,databasePath:t.store.databasePath,schemaVersion:t.store.localSchemaVersion(),recovered:t.recovered,quarantinedTo:t.quarantinedTo,reason:null,openAttempts:vi},failedAtMs:null,permanentRefusal:!1}}catch(r){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${r.name}: ${r.message}`,openAttempts:vi},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function sI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=nI}function z(e=Date.now()){let r=Be();return(!Wr||Wr.status.harnessRoot!==r||sI(Wr,e))&&(aI(),Wr=oI(r)),Wr.store}function iI(){return Wr?Wr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:vi}}function xh(){return z(),iI()}function aI(){try{Wr?.store?.close()}catch{}Wr=null}H();O();import{existsSync as lI,readFileSync as cI}from"node:fs";import{homedir as uI}from"node:os";import dI from"node:path";var pI=3e4,tr=null;function _h(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return dI.join(uI(),".kynver",`local-run-store-flags-${r}.json`)}function nc(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function Eh(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.localRunStoreFlags;return t===void 0?null:nc(t)}function Ch(e,r){try{let t=_h(e),n={contractVersion:1,agentOsId:e,flags:nc(r),deliveredAt:new Date().toISOString()};ue(t,n),tr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Ph(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(tr&&e-tr.loadedAtMs<pI)return tr.flags;try{let r=U().agentOsId?.trim();if(!r)return tr={flags:{},loadedAtMs:e,file:null},tr.flags;let t=_h(r);if(!lI(t))return tr={flags:{},loadedAtMs:e,file:t},tr.flags;let n=JSON.parse(cI(t,"utf8")),o=n?.contractVersion===1?nc(n.flags):{};return tr={flags:o,loadedAtMs:e,file:t},o}catch{return tr={flags:{},loadedAtMs:e,file:null},tr.flags}}var mI=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}];function fI(e){let r=e?.trim().toLowerCase()??"";return r===""?{mode:"off",unknown:!1}:r==="off"||r==="shadow"||r==="enforce"?{mode:r,unknown:!1}:{mode:"off",unknown:!0}}function Lr(e=process.env){let r={},t={},n=[],o=Ph();for(let s of mI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=fI(i);r[s.key]=c.mode,t[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){r[s.key]=l,t[s.key]="server";continue}r[s.key]="off",t[s.key]="default"}return{flags:r,sources:t,warnings:n}}var Te={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Br(e=process.env){return Lr(e).flags.dispatchReceipts}function oc(e){return Br(e)!=="off"}function sc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function Ro(e,r,t){if(!oc())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:sc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Te.storeFailures+=1}}function Ih(e){Ro("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function bi(e){Ro("spawned",e)}function on(e,r){Ro("released",e,{reasonClass:r})}function Oh(e){Ro("completion-sent",e)}function ic(e,r){Ro("completion-acked",e,{outcome:r})}function Th(e){if(!oc())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(t){let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return Te.completionReplaysObserved+=1,!0}}catch{Te.storeFailures+=1}return!1}function ac(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Nh(e){if(Br()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(!t)return!1;let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(Te.completionReplaysShortCircuited+=1,!0):!1}catch{return Te.storeFailures+=1,!1}}var gI=600*1e3;function Dh(e,r){if(Br()!=="enforce")return;let t=z();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Te.storeFailures+=1}}function Mh(e,r){if(Br()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??gI;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Te.storeFailures+=1,[]}}function yo(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var hI=900*1e3,Ah=10080*60*1e3,kI=1440*60*1e3,yI=500,RI=300;function Wh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!oc())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??hI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Ah).toISOString(),limit:yI}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let p=t.getOperationReceipt(`dispatch:spawned:${u}`),m=t.getOperationReceipt(`dispatch:released:${u}`);if(p||m){n-d>=kI&&a.length+5<=RI&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=yo(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=yo(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Br()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Ah}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Te.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Te.storeFailures+=1,r}}function Lh(){return{"dispatchReceipts.storeFailures":Te.storeFailures,"dispatchReceipts.completionReplaysObserved":Te.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Te.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Te.agedReceiptsPruned}}var sn=900*1e3,uc="admission-shadow",lc="worker-slot:",Qr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},cc=!1;function Bh(){cc=!1}function Ur(e=process.env){return Lr(e).flags.admission}function Si(e,r){return`${lc}${e}:${r}`}function Uh(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Si(e,r),uc,sn)}catch{Qr.storeFailures+=1}}function vo(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.releaseAdmission(Si(e,r),uc)}catch{Qr.storeFailures+=1}}function Fh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Ur()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Si(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:lc,limit:500}),s=new Set(o.map(p=>p.key)),i=[...n].filter(p=>!s.has(p)).length,a=o.filter(p=>!n.has(p.key)).length,l=!cc;cc=!0,!l&&i>0&&(Qr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Si(p.runId,p.workerName),uc,sn),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,Qr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:lc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return Qr.storeFailures+=1,r}}function Kh(){return{"admission.storeFailures":Qr.storeFailures,"admission.missingForLive":Qr.missingForLive,"admission.deadSlotsReleased":Qr.deadSlotsReleased}}var dc="worker-slot-n:",wi=64;function Hh(e){return`${dc}${e}`}function xi(e,r){return`${e}:${r}`}var Zr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function $h(e){if(Ur()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(wi,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Zr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=xi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Hh(o),n,sn).acquired)return{admitted:!0,slot:o};return Zr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Zr.enforceStoreFailures+=1,{admitted:!0}}}function et(e,r){if(Ur()==="off")return;let t=z();if(t)try{let n=xi(e,r),o=t.listAdmissionReservations({keyPrefix:dc,limit:wi});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Zr.enforceStoreFailures+=1}}function jh(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Ur()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>xi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:dc,limit:wi}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,sn),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=xi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<wi;d+=1)if(t.tryReserveAdmission(Hh(d),u,sn).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Zr.enforceStoreFailures+=1,r}}function Vh(){return{"admission.enforceStoreFailures":Zr.enforceStoreFailures,"admission.refusedSlotsExhausted":Zr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Zr.admissionsRefusedDiskBackstop}}O();O();var vI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,bI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Gh=new Set(["undefined","null"]),Yh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function SI(e){let r=e.trim();if(!vI.test(r))throw new Error(`invalid run id: ${e}`);return r}function wI(e){let r=e.trim();if(!bI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function qh(e){return typeof e=="string"?e.trim():""}function pc(e){let r=qh(e.run),t=qh(e.name);return(!r||Gh.has(r))&&Je(`missing --run RUN_ID (${Yh})`),(!t||Gh.has(t))&&Je(`missing --name WORKER_NAME (${Yh})`),{runId:SI(r),workerName:wI(t)}}import{existsSync as xI,mkdirSync as _I,readFileSync as EI,writeFileSync as CI}from"node:fs";import{homedir as PI}from"node:os";import tk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function bo(e){return Lr(process.env).flags[e]}var JG=1800*1e3;function mc(e){return`mesh-cron-lease:${e}`}function Jh(e,r){if(bo("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(mc(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(r.leaseToken??null)&&(o.holderBoxId??null)===(r.holderBoxId??null)&&o.authorized===r.authorized)return}t.saveRecoveryCheckpoint({scope:mc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function zh(e,r){let t=bo("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(mc(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(_e.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(_e.meshEnforceStaleInversions+=1,null):s}catch{return _e.meshStoreFailures+=1,null}}function _i(e){return`quota-cooldown:${e}`}var Xh="quota-preflight";function Qh(e,r){if(bo("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(_i(e),Xh,r)}catch{_e.quotaStoreFailures+=1}}function Zh(e){if(bo("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(_i(e),Xh)}catch{_e.quotaStoreFailures+=1}}function ek(e,r){let t=bo("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:_i(e),limit:50}).find(i=>i.key===_i(e)),s=!!o;return s!==r&&(_e.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return _e.quotaStoreFailures+=1,null}}function rk(){return{"keeper.storeFailures":_e.keeperStoreFailures,"meshLease.storeFailures":_e.meshStoreFailures,"meshLease.divergences":_e.meshLeaseDivergences,"meshLease.enforceStaleInversions":_e.meshEnforceStaleInversions,"quota.storeFailures":_e.quotaStoreFailures,"quota.verdictDivergences":_e.quotaVerdictDivergences}}var AI=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,II=30,OI=5,TI=240;function NI(e){let r=e?.trim();return!!(r&&AI.test(r))}function DI(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function fc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(TI,Math.max(OI,e)):II}function nk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||tk.join(PI(),".kynver","provider-quota-cooldowns.json")}function So(e){return(e??"").trim().toLowerCase()}function gc(){let e=nk();if(!xI(e))return{};try{let r=JSON.parse(EI(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[So(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function hc(e){let r=nk();try{_I(tk.dirname(r),{recursive:!0}),CI(r,`${JSON.stringify(e,null,2)}
162
- `,"utf8")}catch{}}function MI(e,r,t=Date.now()){let n=So(e);if(!n)return;let o=gc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},hc(o),Qh(n,fc()*6e4)}function WI(e){let r=So(e);if(!r)return!1;Zh(r);let t=gc();return r in t?(delete t[r],hc(t),!0):!1}function ok(e,r=Date.now()){if(!DI())return{ok:!0};let t=So(e);if(!t)return{ok:!0};let n=gc(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+fc()*6e4>r),i=ek(t,s);if(i)return i.blocked?{ok:!1,provider:t,reason:`provider "${t}" is inside its local quota cooldown`+(i.retryAtIso?` \u2014 preflight declines spawn until ${i.retryAtIso}`:""),retryAtIso:i.retryAtIso??new Date(r).toISOString()}:{ok:!0};if(!o)return{ok:!0};let a=Date.parse(o.lastExhaustedAt),l=a+fc()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],hc(n),{ok:!0};let c=new Date(l).toISOString();return{ok:!1,provider:t,reason:`provider "${t}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${c}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:c}}function LI(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function sk(e){let r=So(e.provider);if(!r)return"none";let t=LI(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?NI(t)?(MI(r,t,e.nowMs??Date.now()),"recorded"):WI(r)?"cleared":"none":"none"}function ik(e){let r=e.usage;return!r||r.inputTokens===void 0&&r.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:r.model?.trim()||e.model?.trim()||null,inputTokens:r.inputTokens??null,outputTokens:r.outputTokens??null}}import{statSync as lO}from"node:fs";import cO from"node:path";Ya();import{createECDH as pk,randomBytes as KI}from"node:crypto";import{chmodSync as mk,existsSync as ck,mkdirSync as HI,readFileSync as $I,readdirSync as jI,renameSync as VI,writeFileSync as GI}from"node:fs";import{homedir as YI}from"node:os";import fk from"node:path";import{createCipheriv as sY,createDecipheriv as iY,createECDH as aY,createHash as FI,hkdfSync as lY,randomBytes as cY}from"node:crypto";var BI=/^[A-Z][A-Z0-9_]{1,63}$/;var nr={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},UI=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function ak(e){return typeof e=="string"&&BI.test(e)&&!UI.has(e)&&!e.startsWith("KYNVER_")}function lk(e){return FI("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var uk="secret-store-keys";function an(){return fk.join(YI(),".kynver","secrets")}function yc(e){HI(e,{recursive:!0,mode:448});try{mk(e,448)}catch{}}function Rc(e,r){let t=`${e}.${process.pid}.tmp`;GI(t,r,{mode:384});try{mk(t,384)}catch{}VI(t,e)}function dk(e){if(!e)return null;try{let r=JSON.parse(e);if(r.v===1&&typeof r.ecdh=="string"&&typeof r.vault=="string")return{v:1,ecdh:r.ecdh,vault:r.vault}}catch{}return null}function Ei(e,r){let t=Buffer.from(e.ecdh,"base64"),n=Buffer.from(e.vault,"base64");if(t.length!==32||n.length!==32)throw new Error("secret store keys are corrupt");let o=pk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:lk(s),vaultKey:n,keyStore:r}}var qI=e=>fk.join(e,"keys.json"),kc=class extends Error{constructor(){super("Saved secrets exist on this computer but their key can't be read (is the OS keyring locked?). Unlock it and try again."),this.name="SecretKeysUnavailableError"}};function gk(e={}){let r=e.root??an(),t=e.keychain??Yn(),n=t.available?dk(t.read(uk)):null;if(n)return Ei(n,"keychain");let o=qI(r),s=ck(o)?dk($I(o,"utf8")):null;if(s)return Ei(s,"file");if(ck(r)&&jI(r).some(d=>d.endsWith(".vault.json")))throw new kc;let i=pk("prime256v1");i.generateKeys();let a=Buffer.alloc(32),l=i.getPrivateKey();l.copy(a,32-l.length);let c={v:1,ecdh:a.toString("base64"),vault:KI(32).toString("base64")},u=JSON.stringify(c);return t.write(uk,u)?Ei(c,"keychain"):(yc(r),Rc(o,`${u}
163
- `),Ei(c,"file"))}function JI(e){let r=new Set([e]),t=Buffer.from(e,"utf8").toString("base64");r.add(t),r.add(t.replace(/=+$/,"")),r.add(t.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""));let n=encodeURIComponent(e);n!==e&&r.add(n);let o=e.trim();return o&&o!==e&&r.add(o),[...r].filter(s=>s.length>=nr.minRedactChars)}function zI(e){return e.length>=nr.minValueChars&&e.length<nr.minRedactChars}function XI(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function hk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;zI(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of JI(o.value))r.push({needle:i,label:s,token:!1})}r.sort((o,s)=>s.needle.length-o.needle.length||Number(o.token)-Number(s.token));let t=new Set,n=r.filter(o=>{let s=`${o.token?"t":"s"}:${o.needle}`;return t.has(s)?!1:(t.add(s),!0)});return{empty:n.length===0,maxLength:n.reduce((o,s)=>Math.max(o,s.needle.length),0),partialSuffixLength(o){let s=0;for(let i of n){let a=i.needle[0];for(let l=Math.min(i.needle.length-1,o.length);l>s;l--)if(o[o.length-l]===a&&o.endsWith(i.needle.slice(0,l))){s=l;break}}return s},redact(o){if(!o||n.length===0)return o;let s=o;for(let i of n)if(i.token){let a=new RegExp(`(^|[^A-Za-z0-9_])${XI(i.needle)}(?=$|[^A-Za-z0-9_])`,"g");s=s.replace(a,`$1${i.label}`)}else s.includes(i.needle)&&(s=s.split(i.needle).join(i.label));return s}}}import{createHash as tO,randomBytes as nO}from"node:crypto";import{existsSync as oO,readFileSync as sO,rmSync as iO}from"node:fs";import aO from"node:path";import{createCipheriv as QI,createDecipheriv as ZI,randomBytes as eO,scrypt as SY,timingSafeEqual as wY}from"node:crypto";var rO=32,kk=12,vc=16,xY={N:2**17,r:8,p:1},_Y=2**14;var ln=class extends Error{constructor(r="the saved-login vault could not be decrypted"){super(r),this.name="VaultCryptoError"}};function bc(e,r,t){if(e.length!==rO)throw new ln("bad key length");let n=eO(kk),o=QI("aes-256-gcm",e,n);o.setAAD(Buffer.from(t,"utf8"));let s=Buffer.concat([o.update(r),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Sc(e,r,t){try{let n=Buffer.from(r.n,"base64"),o=Buffer.from(r.c,"base64");if(n.length!==kk||o.length<vc)throw new ln;let s=ZI("aes-256-gcm",e,n);return s.setAAD(Buffer.from(t,"utf8")),s.setAuthTag(o.subarray(o.length-vc)),Buffer.concat([s.update(o.subarray(0,o.length-vc)),s.final()])}catch(n){throw n instanceof ln?n:new ln}}var EY=Buffer.from("kynver-site-login-key-check-v1","utf8");var Se=class extends Error{constructor(t,n){super(t);this.code=n;this.name="SecretStoreError"}code};function wc(e){return`${tO("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ci=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
164
- `))throw new Se("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
165
- `)},cn=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Pi=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new Se("workspace is required","invalid");this.root=r.root??an(),this.file=aO.join(this.root,wc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!oO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(sO(this.file,"utf8"))}catch{throw new Se("The saved-secrets file is damaged.","corrupt")}if(r.v!==1||!Array.isArray(r.secrets))throw new Se("The saved-secrets file is damaged.","corrupt");if(r.agentOsId!==this.opts.agentOsId)throw new Se("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:r.agentOsId,secrets:r.secrets}}write(r){yc(this.root),Rc(this.file,`${JSON.stringify(r)}
166
- `)}list(){return this.read().secrets.map(cn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?cn(t):null}put(r){if(!ak(r.name))throw new Se("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new Se("The secret is empty.","invalid");if(r.value.trim().length<nr.minValueChars)throw new Se(`The secret is too short \u2014 use at least ${nr.minValueChars} characters.`,"invalid");if(t>nr.maxValueBytes)throw new Se("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,nr.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===r.name);if(i)return i.value=bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ci(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:cn(i),replaced:!0};if(o.secrets.length>=nr.maxSecrets)throw new Se("This computer already holds the most secrets allowed.","full");let a=`sec_${nO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ci(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:cn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new Se("No saved secret by that name.","not_found");try{let n=Sc(this.opts.vaultKey,t.value,Ci(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:cn(t),value:n}}catch{throw new Se(`The saved value for ${t.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let r=[];for(let t of this.read().secrets)try{r.push({name:t.name,value:Sc(this.opts.vaultKey,t.value,Ci(this.opts.agentOsId,t.handle,t.name)).toString("utf8")})}catch{}return r}touch(r){if(r.length===0)return;let t=this.read(),n=this.now().toISOString();for(let o of t.secrets)r.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(t)}remove(r){let t=this.read(),n=t.secrets.findIndex(s=>r.handle?s.handle===r.handle:s.name===r.name);if(n<0)throw new Se("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?iO(this.file,{force:!0}):this.write(t),cn(o)}};var uO=64,xc=new Map;function dO(e,r){return`${r}\0${e}`}function pO(e){try{let r=lO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function mO(e,r=an()){if(!e)return null;let t=cO.join(r,wc(e)),n=pO(t),o=dO(e,r);if(!n)return xc.delete(o),null;let s=xc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=gk({root:r}),a=hk(new Pi({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return xc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function _c(e,r,t){if(typeof e=="string")return r.redact(e);if(t>uO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>_c(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=_c(s,r,t+1);return n}function yk(e,r,t=an()){let n=mO(e,t);return!n||n.empty?r:_c(r,n,0)}async function Rk(e,r,t){let n=await fetch(e,{method:"POST",headers:zn(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 fO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function vk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function wo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function hO(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 Sk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function kO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function un(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function yO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ec(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function RO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function _o(e){let{runId:r,workerName:t}=pc(e),n=Jt(r,t),o=q(n.runId),s=J(n,Ec(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!we(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&&uo(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&$l(n)&&yO(n),!s.finalResult&&s.alive===!1){let _=gi({worker:n,status:s});_&&hi(n,_)&&(L(n.runId,n),n=Jt(r,t),s=J(n,Ec(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Jl({worker:n,run:o,status:s});if(!_.ok)return un(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ec(o)),s=RO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=yh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return un(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{sk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Q(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await ee(p,i,{baseUrl:d});a&&(await ei({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Jt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=ik({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=yk(i,{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(),...k?{workerUsage:k}:{},status:n.leaseToken?{...y,leaseToken:n.leaseToken}:y,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}}),g=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(g){if(Th(g),Nh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return oi(n,n.runId,_),mi(n,s,{source:"harness-completion"}),un(n,void 0),vo(n.runId,n.name),et(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Oh(g)}let h=await Rk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await ym(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Rk(f,m,b))}if(h.ok){let _=Eg(h.parsed);if(!Cg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;un(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return oi(n,n.runId,Ye),g&&ic(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}un(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};oi(n,n.runId,$),mi(n,s,{source:"harness-completion"}),g&&ic(g,"acknowledged"),vo(n.runId,n.name),et(n.runId,n.name);let C=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:K,...C?{prHandoff:{prUrl:C}}:{}}}let w=h.status===401||h.status===403,E=fO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return un(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function wk(e){let{run:r,workerName:t,worker:n}=e,o=J(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ft({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=Sk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=vk(n.completionResponse),m=vk(p?.task),f=wo(p?.outcome),y=wo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=wo(m?.prUrl)??wo(p?.prUrl),g=wo(n.completionReportedAt),h=gO({finished:we(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=hO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:we(o)}),E=kO({changedFiles:o.changedFiles,headCommit:s,prUrl:b??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 S=n.instructionPolicyEvidence;if(!S||typeof S!="object")return null;let _=S.ruleSlugs;return Array.isArray(_)?_.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:b,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:y,completionRouteOutcome:f,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:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function vO(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&&!Sk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function bO(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 xo(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 bk(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 SO(e){let r=e.filter(bk),t=e.filter(n=>{if(bk(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 xk(e,r,t){let n={runId:e.id,name:e.name,status:Pa(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:xo(r,"status"),attentionCounts:xo(r,"attention"),lifecycleCounts:xo(r,"lifecycleStage")},n.controller=SO(r)),n}function wO(e){return e.status==="done"&&e.attention==="done"}function Cc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Ai.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?wk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=xk(r,n,!1);return ue(Ai.join(N(r.id),"last-board.json"),o),o}function Pc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Ai.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?vO(a)?bO(i,a):wk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!wO(i)),s=xk(r,o,!0);return s.status=Pa(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:xo(n,"status"),allAttentionCounts:xo(n,"attention")},ue(Ai.join(N(r.id),"last-board-compact.json"),s),s}async function _k(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Cc(t),s=Q(e.baseUrl?String(e.baseUrl):void 0),i=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(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}}O();H();B();O();var Dq=360*60*1e3;function Ck(e){let r=e.nodeExecutable??process.execPath,t=Vs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!_O(n))return;let o=CO.join(e.workerDir,"auto-complete.log"),s;try{s=EO(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=xO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&Ek(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Ek(s)}catch{}return}}de();function Pk(e,r,t){Z(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}We();Rs();H();import DO from"node:net";import{chmodSync as MO,unlinkSync as WO}from"node:fs";import{createHash as PO}from"node:crypto";import{chmodSync as AO,mkdirSync as IO}from"node:fs";import Ak from"node:os";import OO from"node:path";var TO=100,NO="\\\\.\\pipe\\";function Ik(e,r){return PO("sha256").update(e).digest("hex").slice(0,r)}function Ac(e){let r=e.platform??process.platform,t=Ik(e.agentOsId,12),n=Ik(e.workerKey,16);if(r==="win32")return{socketPath:`${NO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=OO.posix,s=e.homeDir??Ak.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=TO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Ak.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Ic(e){e.socketDir&&(IO(e.socketDir,{recursive:!0,mode:448}),AO(e.socketDir,448))}var Eo=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=to(r.capabilities),this.server=DO.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Ic(r.address),await new Promise((n,o)=>{t.server.once("error",o),t.server.listen(r.address.socketPath,()=>{t.server.removeListener("error",o),n()})}),!r.address.isNamedPipe)try{MO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(tn).map(r=>io[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{WO(this.opts.address.socketPath)}catch{}}}refuse(r,t){this.opts.onRefusal?.(r,t)}async handleConnection(r){this.sockets.add(r),r.on("close",()=>{this.sockets.delete(r),this.connections.delete(r)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(r,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),r.end();return}this.connections.add(r);let t=await this.opts.identity.verify({socket:r,workerPid:this.opts.workerPid});if(!t.ok){this.refuse("identity_refused",t.detail),this.write(r,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),r.end();return}let n="";r.setEncoding("utf8"),r.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(r,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),r.end();return}let s=n.indexOf(`
161
+ WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(r);return t?{scope:t.scope,seq:t.seq,payloadJson:t.payload_json,createdAt:t.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(r){let t=this.db.prepare(`PRAGMA ${r}`).get();return String(Object.values(t)[0])}close(){this.db.close()}};function gI(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;mI(o)&&fI(o,`${t}${n}`)}return t}function Oh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=xo.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=gI(n,r);try{return{store:xo.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function hI(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function kI(){return yI.classifyOptions??hI()}var yI={};var RI=300*1e3,Lr=null,Ei=0;function vI(e){Ei+=1;try{let r=kI(),t=Oh({directory:e,...r?{classifyOptions:r}:{}});return{store:t.store,status:{state:"open",harnessRoot:e,databasePath:t.store.databasePath,schemaVersion:t.store.localSchemaVersion(),recovered:t.recovered,quarantinedTo:t.quarantinedTo,reason:null,openAttempts:Ei},failedAtMs:null,permanentRefusal:!1}}catch(r){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${r.name}: ${r.message}`,openAttempts:Ei},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function bI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=RI}function z(e=Date.now()){let r=Ue();return(!Lr||Lr.status.harnessRoot!==r||bI(Lr,e))&&(wI(),Lr=vI(r)),Lr.store}function SI(){return Lr?Lr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Ei}}function Th(){return z(),SI()}function wI(){try{Lr?.store?.close()}catch{}Lr=null}H();O();import{existsSync as xI,readFileSync as _I}from"node:fs";import{homedir as EI}from"node:os";import CI from"node:path";var PI=3e4,nr=null;function Nh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return CI.join(EI(),".kynver",`local-run-store-flags-${r}.json`)}function ac(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function Dh(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.localRunStoreFlags;return t===void 0?null:ac(t)}function Mh(e,r){try{let t=Nh(e),n={contractVersion:1,agentOsId:e,flags:ac(r),deliveredAt:new Date().toISOString()};ue(t,n),nr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Wh(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(nr&&e-nr.loadedAtMs<PI)return nr.flags;try{let r=U().agentOsId?.trim();if(!r)return nr={flags:{},loadedAtMs:e,file:null},nr.flags;let t=Nh(r);if(!xI(t))return nr={flags:{},loadedAtMs:e,file:t},nr.flags;let n=JSON.parse(_I(t,"utf8")),o=n?.contractVersion===1?ac(n.flags):{};return nr={flags:o,loadedAtMs:e,file:t},o}catch{return nr={flags:{},loadedAtMs:e,file:null},nr.flags}}var AI=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}];function II(e){let r=e?.trim().toLowerCase()??"";return r===""?{mode:"off",unknown:!1}:r==="off"||r==="shadow"||r==="enforce"?{mode:r,unknown:!1}:{mode:"off",unknown:!0}}function Br(e=process.env){let r={},t={},n=[],o=Wh();for(let s of AI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=II(i);r[s.key]=c.mode,t[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){r[s.key]=l,t[s.key]="server";continue}r[s.key]="off",t[s.key]="default"}return{flags:r,sources:t,warnings:n}}var Ne={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Ur(e=process.env){return Br(e).flags.dispatchReceipts}function lc(e){return Ur(e)!=="off"}function cc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function Eo(e,r,t){if(!lc())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:cc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Ne.storeFailures+=1}}function Bh(e){Eo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function Ci(e){Eo("spawned",e)}function cn(e,r){Eo("released",e,{reasonClass:r})}function Uh(e){Eo("completion-sent",e)}function uc(e,r){Eo("completion-acked",e,{outcome:r})}function Fh(e){if(!lc())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(cc("completion-acked",e));if(t){let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return Ne.completionReplaysObserved+=1,!0}}catch{Ne.storeFailures+=1}return!1}function dc(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Kh(e){if(Ur()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(cc("completion-acked",e));if(!t)return!1;let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(Ne.completionReplaysShortCircuited+=1,!0):!1}catch{return Ne.storeFailures+=1,!1}}var OI=600*1e3;function Hh(e,r){if(Ur()!=="enforce")return;let t=z();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Ne.storeFailures+=1}}function $h(e,r){if(Ur()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??OI;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Ne.storeFailures+=1,[]}}function _o(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var TI=900*1e3,Lh=10080*60*1e3,NI=1440*60*1e3,DI=500,MI=300;function jh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!lc())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??TI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Lh).toISOString(),limit:DI}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let p=t.getOperationReceipt(`dispatch:spawned:${u}`),m=t.getOperationReceipt(`dispatch:released:${u}`);if(p||m){n-d>=NI&&a.length+5<=MI&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=_o(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=_o(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Ur()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Lh}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Ne.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Ne.storeFailures+=1,r}}function Vh(){return{"dispatchReceipts.storeFailures":Ne.storeFailures,"dispatchReceipts.completionReplaysObserved":Ne.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Ne.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Ne.agedReceiptsPruned}}var un=900*1e3,fc="admission-shadow",pc="worker-slot:",et={storeFailures:0,missingForLive:0,deadSlotsReleased:0},mc=!1;function Gh(){mc=!1}function Fr(e=process.env){return Br(e).flags.admission}function Pi(e,r){return`${pc}${e}:${r}`}function Yh(e,r){if(Fr()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Pi(e,r),fc,un)}catch{et.storeFailures+=1}}function Co(e,r){if(Fr()==="off")return;let t=z();if(t)try{t.releaseAdmission(Pi(e,r),fc)}catch{et.storeFailures+=1}}function qh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Fr()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Pi(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:pc,limit:500}),s=new Set(o.map(p=>p.key)),i=[...n].filter(p=>!s.has(p)).length,a=o.filter(p=>!n.has(p.key)).length,l=!mc;mc=!0,!l&&i>0&&(et.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Pi(p.runId,p.workerName),fc,un),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,et.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:pc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return et.storeFailures+=1,r}}function Jh(){return{"admission.storeFailures":et.storeFailures,"admission.missingForLive":et.missingForLive,"admission.deadSlotsReleased":et.deadSlotsReleased}}var gc="worker-slot-n:",Ai=64;function zh(e){return`${gc}${e}`}function Ii(e,r){return`${e}:${r}`}var rt={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function Xh(e){if(Fr()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Ai,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return rt.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=Ii(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(zh(o),n,un).acquired)return{admitted:!0,slot:o};return rt.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return rt.enforceStoreFailures+=1,{admitted:!0}}}function tt(e,r){if(Fr()==="off")return;let t=z();if(t)try{let n=Ii(e,r),o=t.listAdmissionReservations({keyPrefix:gc,limit:Ai});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{rt.enforceStoreFailures+=1}}function Qh(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Fr()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>Ii(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:gc,limit:Ai}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,un),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=Ii(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Ai;d+=1)if(t.tryReserveAdmission(zh(d),u,un).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return rt.enforceStoreFailures+=1,r}}function Zh(){return{"admission.enforceStoreFailures":rt.enforceStoreFailures,"admission.refusedSlotsExhausted":rt.admissionsRefusedSlots,"admission.refusedDiskBackstop":rt.admissionsRefusedDiskBackstop}}O();O();var WI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,LI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,ek=new Set(["undefined","null"]),rk="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function BI(e){let r=e.trim();if(!WI.test(r))throw new Error(`invalid run id: ${e}`);return r}function UI(e){let r=e.trim();if(!LI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function tk(e){return typeof e=="string"?e.trim():""}function hc(e){let r=tk(e.run),t=tk(e.name);return(!r||ek.has(r))&&Je(`missing --run RUN_ID (${rk})`),(!t||ek.has(t))&&Je(`missing --name WORKER_NAME (${rk})`),{runId:BI(r),workerName:UI(t)}}import{existsSync as FI,mkdirSync as KI,readFileSync as HI,writeFileSync as $I}from"node:fs";import{homedir as jI}from"node:os";import uk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function Po(e){return Br(process.env).flags[e]}var vY=1800*1e3;function kc(e){return`mesh-cron-lease:${e}`}function nk(e,r){if(Po("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(kc(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(r.leaseToken??null)&&(o.holderBoxId??null)===(r.holderBoxId??null)&&o.authorized===r.authorized)return}t.saveRecoveryCheckpoint({scope:kc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function ok(e,r){let t=Po("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(kc(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(_e.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(_e.meshEnforceStaleInversions+=1,null):s}catch{return _e.meshStoreFailures+=1,null}}function Oi(e){return`quota-cooldown:${e}`}var sk="quota-preflight";function ik(e,r){if(Po("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Oi(e),sk,r)}catch{_e.quotaStoreFailures+=1}}function ak(e){if(Po("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(Oi(e),sk)}catch{_e.quotaStoreFailures+=1}}function lk(e,r){let t=Po("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:Oi(e),limit:50}).find(i=>i.key===Oi(e)),s=!!o;return s!==r&&(_e.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return _e.quotaStoreFailures+=1,null}}function ck(){return{"keeper.storeFailures":_e.keeperStoreFailures,"meshLease.storeFailures":_e.meshStoreFailures,"meshLease.divergences":_e.meshLeaseDivergences,"meshLease.enforceStaleInversions":_e.meshEnforceStaleInversions,"quota.storeFailures":_e.quotaStoreFailures,"quota.verdictDivergences":_e.quotaVerdictDivergences}}var VI=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,GI=30,YI=5,qI=240;function JI(e){let r=e?.trim();return!!(r&&VI.test(r))}function zI(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function yc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(qI,Math.max(YI,e)):GI}function dk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||uk.join(jI(),".kynver","provider-quota-cooldowns.json")}function Ao(e){return(e??"").trim().toLowerCase()}function Rc(){let e=dk();if(!FI(e))return{};try{let r=JSON.parse(HI(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[Ao(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function vc(e){let r=dk();try{KI(uk.dirname(r),{recursive:!0}),$I(r,`${JSON.stringify(e,null,2)}
162
+ `,"utf8")}catch{}}function XI(e,r,t=Date.now()){let n=Ao(e);if(!n)return;let o=Rc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},vc(o),ik(n,yc()*6e4)}function QI(e){let r=Ao(e);if(!r)return!1;ak(r);let t=Rc();return r in t?(delete t[r],vc(t),!0):!1}function pk(e,r=Date.now()){if(!zI())return{ok:!0};let t=Ao(e);if(!t)return{ok:!0};let n=Rc(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+yc()*6e4>r),i=lk(t,s);if(i)return i.blocked?{ok:!1,provider:t,reason:`provider "${t}" is inside its local quota cooldown`+(i.retryAtIso?` \u2014 preflight declines spawn until ${i.retryAtIso}`:""),retryAtIso:i.retryAtIso??new Date(r).toISOString()}:{ok:!0};if(!o)return{ok:!0};let a=Date.parse(o.lastExhaustedAt),l=a+yc()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],vc(n),{ok:!0};let c=new Date(l).toISOString();return{ok:!1,provider:t,reason:`provider "${t}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${c}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:c}}function ZI(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function mk(e){let r=Ao(e.provider);if(!r)return"none";let t=ZI(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?JI(t)?(XI(r,t,e.nowMs??Date.now()),"recorded"):QI(r)?"cleared":"none":"none"}function fk(e){let r=e.usage;return!r||r.inputTokens===void 0&&r.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:r.model?.trim()||e.model?.trim()||null,inputTokens:r.inputTokens??null,outputTokens:r.outputTokens??null}}import{statSync as xO}from"node:fs";import _O from"node:path";Za();import{createECDH as vk,randomBytes as nO}from"node:crypto";import{chmodSync as bk,existsSync as kk,mkdirSync as oO,readFileSync as sO,readdirSync as iO,renameSync as aO,writeFileSync as lO}from"node:fs";import{homedir as cO}from"node:os";import Sk from"node:path";import{createCipheriv as IY,createDecipheriv as OY,createECDH as TY,createHash as tO,hkdfSync as NY,randomBytes as DY}from"node:crypto";var eO=/^[A-Z][A-Z0-9_]{1,63}$/;var or={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},rO=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function gk(e){return typeof e=="string"&&eO.test(e)&&!rO.has(e)&&!e.startsWith("KYNVER_")}function hk(e){return tO("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var yk="secret-store-keys";function dn(){return Sk.join(cO(),".kynver","secrets")}function Sc(e){oO(e,{recursive:!0,mode:448});try{bk(e,448)}catch{}}function wc(e,r){let t=`${e}.${process.pid}.tmp`;lO(t,r,{mode:384});try{bk(t,384)}catch{}aO(t,e)}function Rk(e){if(!e)return null;try{let r=JSON.parse(e);if(r.v===1&&typeof r.ecdh=="string"&&typeof r.vault=="string")return{v:1,ecdh:r.ecdh,vault:r.vault}}catch{}return null}function Ti(e,r){let t=Buffer.from(e.ecdh,"base64"),n=Buffer.from(e.vault,"base64");if(t.length!==32||n.length!==32)throw new Error("secret store keys are corrupt");let o=vk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:hk(s),vaultKey:n,keyStore:r}}var uO=e=>Sk.join(e,"keys.json"),bc=class extends Error{constructor(){super("Saved secrets exist on this computer but their key can't be read (is the OS keyring locked?). Unlock it and try again."),this.name="SecretKeysUnavailableError"}};function wk(e={}){let r=e.root??dn(),t=e.keychain??Xn(),n=t.available?Rk(t.read(yk)):null;if(n)return Ti(n,"keychain");let o=uO(r),s=kk(o)?Rk(sO(o,"utf8")):null;if(s)return Ti(s,"file");if(kk(r)&&iO(r).some(d=>d.endsWith(".vault.json")))throw new bc;let i=vk("prime256v1");i.generateKeys();let a=Buffer.alloc(32),l=i.getPrivateKey();l.copy(a,32-l.length);let c={v:1,ecdh:a.toString("base64"),vault:nO(32).toString("base64")},u=JSON.stringify(c);return t.write(yk,u)?Ti(c,"keychain"):(Sc(r),wc(o,`${u}
163
+ `),Ti(c,"file"))}function dO(e){let r=new Set([e]),t=Buffer.from(e,"utf8").toString("base64");r.add(t),r.add(t.replace(/=+$/,"")),r.add(t.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""));let n=encodeURIComponent(e);n!==e&&r.add(n);let o=e.trim();return o&&o!==e&&r.add(o),[...r].filter(s=>s.length>=or.minRedactChars)}function pO(e){return e.length>=or.minValueChars&&e.length<or.minRedactChars}function mO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function xk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;pO(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of dO(o.value))r.push({needle:i,label:s,token:!1})}r.sort((o,s)=>s.needle.length-o.needle.length||Number(o.token)-Number(s.token));let t=new Set,n=r.filter(o=>{let s=`${o.token?"t":"s"}:${o.needle}`;return t.has(s)?!1:(t.add(s),!0)});return{empty:n.length===0,maxLength:n.reduce((o,s)=>Math.max(o,s.needle.length),0),partialSuffixLength(o){let s=0;for(let i of n){let a=i.needle[0];for(let l=Math.min(i.needle.length-1,o.length);l>s;l--)if(o[o.length-l]===a&&o.endsWith(i.needle.slice(0,l))){s=l;break}}return s},redact(o){if(!o||n.length===0)return o;let s=o;for(let i of n)if(i.token){let a=new RegExp(`(^|[^A-Za-z0-9_])${mO(i.needle)}(?=$|[^A-Za-z0-9_])`,"g");s=s.replace(a,`$1${i.label}`)}else s.includes(i.needle)&&(s=s.split(i.needle).join(i.label));return s}}}import{createHash as yO,randomBytes as RO}from"node:crypto";import{existsSync as vO,readFileSync as bO,rmSync as SO}from"node:fs";import wO from"node:path";import{createCipheriv as fO,createDecipheriv as gO,randomBytes as hO,scrypt as YY,timingSafeEqual as qY}from"node:crypto";var kO=32,_k=12,xc=16,JY={N:2**17,r:8,p:1},zY=2**14;var pn=class extends Error{constructor(r="the saved-login vault could not be decrypted"){super(r),this.name="VaultCryptoError"}};function _c(e,r,t){if(e.length!==kO)throw new pn("bad key length");let n=hO(_k),o=fO("aes-256-gcm",e,n);o.setAAD(Buffer.from(t,"utf8"));let s=Buffer.concat([o.update(r),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Ec(e,r,t){try{let n=Buffer.from(r.n,"base64"),o=Buffer.from(r.c,"base64");if(n.length!==_k||o.length<xc)throw new pn;let s=gO("aes-256-gcm",e,n);return s.setAAD(Buffer.from(t,"utf8")),s.setAuthTag(o.subarray(o.length-xc)),Buffer.concat([s.update(o.subarray(0,o.length-xc)),s.final()])}catch(n){throw n instanceof pn?n:new pn}}var XY=Buffer.from("kynver-site-login-key-check-v1","utf8");var we=class extends Error{constructor(t,n){super(t);this.code=n;this.name="SecretStoreError"}code};function Cc(e){return`${yO("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ni=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
164
+ `))throw new we("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
165
+ `)},mn=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Di=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new we("workspace is required","invalid");this.root=r.root??dn(),this.file=wO.join(this.root,Cc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!vO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(bO(this.file,"utf8"))}catch{throw new we("The saved-secrets file is damaged.","corrupt")}if(r.v!==1||!Array.isArray(r.secrets))throw new we("The saved-secrets file is damaged.","corrupt");if(r.agentOsId!==this.opts.agentOsId)throw new we("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:r.agentOsId,secrets:r.secrets}}write(r){Sc(this.root),wc(this.file,`${JSON.stringify(r)}
166
+ `)}list(){return this.read().secrets.map(mn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?mn(t):null}put(r){if(!gk(r.name))throw new we("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new we("The secret is empty.","invalid");if(r.value.trim().length<or.minValueChars)throw new we(`The secret is too short \u2014 use at least ${or.minValueChars} characters.`,"invalid");if(t>or.maxValueBytes)throw new we("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,or.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===r.name);if(i)return i.value=_c(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ni(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:mn(i),replaced:!0};if(o.secrets.length>=or.maxSecrets)throw new we("This computer already holds the most secrets allowed.","full");let a=`sec_${RO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:_c(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ni(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:mn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new we("No saved secret by that name.","not_found");try{let n=Ec(this.opts.vaultKey,t.value,Ni(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:mn(t),value:n}}catch{throw new we(`The saved value for ${t.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let r=[];for(let t of this.read().secrets)try{r.push({name:t.name,value:Ec(this.opts.vaultKey,t.value,Ni(this.opts.agentOsId,t.handle,t.name)).toString("utf8")})}catch{}return r}touch(r){if(r.length===0)return;let t=this.read(),n=this.now().toISOString();for(let o of t.secrets)r.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(t)}remove(r){let t=this.read(),n=t.secrets.findIndex(s=>r.handle?s.handle===r.handle:s.name===r.name);if(n<0)throw new we("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?SO(this.file,{force:!0}):this.write(t),mn(o)}};var EO=64,Pc=new Map;function CO(e,r){return`${r}\0${e}`}function PO(e){try{let r=xO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function AO(e,r=dn()){if(!e)return null;let t=_O.join(r,Cc(e)),n=PO(t),o=CO(e,r);if(!n)return Pc.delete(o),null;let s=Pc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=wk({root:r}),a=xk(new Di({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return Pc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Ac(e,r,t){if(typeof e=="string")return r.redact(e);if(t>EO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>Ac(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=Ac(s,r,t+1);return n}function Ek(e,r,t=dn()){let n=AO(e,t);return!n||n.empty?r:Ac(r,n,0)}async function Ck(e,r,t){let n=await fetch(e,{method:"POST",headers:eo(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 IO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Pk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Io(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function OO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function TO(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 Ik(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function NO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function fn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function DO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ic(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function MO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function To(e){let{runId:r,workerName:t}=hc(e),n=Xt(r,t),o=q(n.runId),s=J(n,Ic(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!xe(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&&yo(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Yl(n)&&DO(n),!s.finalResult&&s.alive===!1){let _=bi({worker:n,status:s});_&&Si(n,_)&&(L(n.runId,n),n=Xt(r,t),s=J(n,Ic(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Zl({worker:n,run:o,status:s});if(!_.ok)return fn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ic(o)),s=MO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=Eh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return fn(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{mk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Q(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await ee(p,i,{baseUrl:d});a&&(await ii({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Xt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=fk({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=Ek(i,{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(),...k?{workerUsage:k}:{},status:n.leaseToken?{...y,leaseToken:n.leaseToken}:y,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}}),g=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(g){if(Fh(g),Kh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return ui(n,n.runId,_),Ri(n,s,{source:"harness-completion"}),fn(n,void 0),Co(n.runId,n.name),tt(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Uh(g)}let h=await Ck(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await Sm(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Ck(f,m,b))}if(h.ok){let _=Dg(h.parsed);if(!Mg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;fn(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return ui(n,n.runId,Ye),g&&uc(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}fn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};ui(n,n.runId,$),Ri(n,s,{source:"harness-completion"}),g&&uc(g,"acknowledged"),Co(n.runId,n.name),tt(n.runId,n.name);let C=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:K,...C?{prHandoff:{prUrl:C}}:{}}}let w=h.status===401||h.status===403,E=IO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return fn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function Ok(e){let{run:r,workerName:t,worker:n}=e,o=J(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ht({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=Ik(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Pk(n.completionResponse),m=Pk(p?.task),f=Io(p?.outcome),y=Io(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=Io(m?.prUrl)??Io(p?.prUrl),g=Io(n.completionReportedAt),h=OO({finished:xe(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=TO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:xe(o)}),E=NO({changedFiles:o.changedFiles,headCommit:s,prUrl:b??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 S=n.instructionPolicyEvidence;if(!S||typeof S!="object")return null;let _=S.ruleSlugs;return Array.isArray(_)?_.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:b,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:y,completionRouteOutcome:f,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:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function WO(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&&!Ik(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function LO(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 Oo(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 Ak(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 BO(e){let r=e.filter(Ak),t=e.filter(n=>{if(Ak(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 Tk(e,r,t){let n={runId:e.id,name:e.name,status:Da(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:Oo(r,"status"),attentionCounts:Oo(r,"attention"),lifecycleCounts:Oo(r,"lifecycleStage")},n.controller=BO(r)),n}function UO(e){return e.status==="done"&&e.attention==="done"}function Oc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Mi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?Ok({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Tk(r,n,!1);return ue(Mi.join(N(r.id),"last-board.json"),o),o}function Tc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Mi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?WO(a)?LO(i,a):Ok({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!UO(i)),s=Tk(r,o,!0);return s.status=Da(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Oo(n,"status"),allAttentionCounts:Oo(n,"attention")},ue(Mi.join(N(r.id),"last-board-compact.json"),s),s}async function Nk(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Oc(t),s=Q(e.baseUrl?String(e.baseUrl):void 0),i=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(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}}O();H();B();O();var sJ=360*60*1e3;function Mk(e){let r=e.nodeExecutable??process.execPath,t=Qs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!KO(n))return;let o=$O.join(e.workerDir,"auto-complete.log"),s;try{s=HO(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=FO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&Dk(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Dk(s)}catch{}return}}de();function Wk(e,r,t){Z(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Le();Es();H();import zO from"node:net";import{chmodSync as XO,unlinkSync as QO}from"node:fs";import{createHash as jO}from"node:crypto";import{chmodSync as VO,mkdirSync as GO}from"node:fs";import Lk from"node:os";import YO from"node:path";var qO=100,JO="\\\\.\\pipe\\";function Bk(e,r){return jO("sha256").update(e).digest("hex").slice(0,r)}function Nc(e){let r=e.platform??process.platform,t=Bk(e.agentOsId,12),n=Bk(e.workerKey,16);if(r==="win32")return{socketPath:`${JO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=YO.posix,s=e.homeDir??Lk.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=qO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Lk.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Dc(e){e.socketDir&&(GO(e.socketDir,{recursive:!0,mode:448}),VO(e.socketDir,448))}var No=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=io(r.capabilities),this.server=zO.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Dc(r.address),await new Promise((n,o)=>{t.server.once("error",o),t.server.listen(r.address.socketPath,()=>{t.server.removeListener("error",o),n()})}),!r.address.isNamedPipe)try{XO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(sn).map(r=>uo[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{QO(this.opts.address.socketPath)}catch{}}}refuse(r,t){this.opts.onRefusal?.(r,t)}async handleConnection(r){this.sockets.add(r),r.on("close",()=>{this.sockets.delete(r),this.connections.delete(r)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(r,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),r.end();return}this.connections.add(r);let t=await this.opts.identity.verify({socket:r,workerPid:this.opts.workerPid});if(!t.ok){this.refuse("identity_refused",t.detail),this.write(r,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),r.end();return}let n="";r.setEncoding("utf8"),r.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(r,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),r.end();return}let s=n.indexOf(`
167
167
  `);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
168
- `)}})}write(r,t){if(!r.destroyed)try{r.write(Cl(t))}catch{}}async handleLine(r,t){let n=Pl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!tn(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Gs({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(r,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(r,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}};var Dk={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function Oc(){return Dk}var UO=7200*1e3;async function Mk(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=x(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||Ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Xs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=wg(o.provider),i=o.model;if(s.preflightModel){let T=s.preflightModel(r.model);if(!T.ok)throw new Error(`model preflight failed for provider "${s.name}": ${T.note??"invalid model/provider combination"}`);T.normalized&&console.error(`[supervisor] ${n}: ${T.note}`),i=T.model}let{worktreesDir:a}=le(),l=dn.join(N(e.id),"workers",n);BO(l,{recursive:!0});let c=dn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(LO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Pk(e.repo,c,u);else{let T=kg({baseCommit:e.baseCommit,base:e.base,verifyRef:te=>Z(e.repo,["rev-parse","--verify","--quiet",`${te}^{commit}`],{allowFailure:!0}).trim().length>0});T.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${T.ref} (${T.source})`),e.baseCommit=Z(e.repo,["rev-parse",T.ref],{allowFailure:!0}).trim()||T.ref,Ie(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=dn.join(l,"stdout.jsonl"),m=dn.join(l,"stderr.log"),f=dn.join(l,"heartbeat.jsonl"),y=bg({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:f,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:r.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,b=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 g=ii({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Al(s.name)&&no()){let T=el();T&&r.agentOsId&&r.taskId?(w={apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let K=xf(s.name);if(_&&K&&no()){let T=el();if(T&&r.agentOsId&&r.taskId){let te=Ac({agentOsId:String(r.agentOsId),workerKey:l}),F=await Eo.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+UO,workerPid:process.pid,identity:Oc(),onRefusal:D=>console.error(`[supervisor] ${n}: worker tools refused a call (${D})`)});if(Zl(l,F),s.name==="codex"){let D=Zg({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=eh(D.codexHome,Tl());M.ok?(E=D.codexHome,h=E):(ho(l),await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=Xg({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&Js(qs())==="antigravity"){let D=ih({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=lh({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=Ef({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${F.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?dp(pp(e.id,String(r.taskId),n)):null,C;try{C=mp($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:Qf(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:y,reviewWorker:g,executionMode:r.executionMode??"write",...w?{workerToolGrant:w}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:wf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Hs(l),ci(c),ho(l),pi(l),di(c),nn(l)),Z(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Z(e.repo,["branch","-D",d],{allowFailure:!0}),T}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let re=tg(C.model,i,s.defaultModel),ke=U(),Ye=vr(process.env,ke),gr=He().runnerId,Hr=ys({boxKind:Ye.boxKind,config:ke,env:process.env}),j={name:n,runId:e.id,status:"running",pid:C.pid,model:re,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,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.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:r.runtimeEnvelopeEvidence}:{},...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)}:{},executionMode:r.executionMode??"write",boxKind:Ye.boxKind,boxId:Hr,runtimeId:gr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),Ql(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:dn.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Ck({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let F=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=F,L(e.id,j)}if(T)T.pid&&(j.completionSidecarPid=T.pid,L(e.id,j));else{let te=j.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";j.completionBlocker=te,j.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,j),gg(e.id,j,te)}}return j}H();Vn();function FO(e,r){let t=Yt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function KO(e){let r=Cr()?.trim();return r||Qe("KYNVER_API_KEY",e)||Qe("KYNVER_RUNTIME_SECRET",e)||Qe("KYNVER_CRON_SECRET",e)||Qe("OPENCLAW_CRON_SECRET",e)||null}async function Wk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.timeoutMs??8e3,s=new Date(n).toISOString(),i=r.fetcher??fetch,a=FO(t,e.agentOsId),l=KO(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}On();function HO(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?An(t)??null:null}function $O(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function jO(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Lk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=HO(t,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(t.KYNVER_AGENT_OS_ID??t.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=$O(t,o),l=jO(t,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}O();H();import{mkdirSync as Uk}from"node:fs";import{homedir as VO,tmpdir as u2}from"node:os";import Ii from"node:path";function Fk(){let e=process.env.KYNVER_STATE_ROOT;return e?Ii.resolve(e):Ii.join(VO(),".kynver","state")}function Oi(){return Ii.join(Fk(),"plan-outbox")}function GO(){return Ii.join(Fk(),"plan-outbox-archive")}function Kk(){let e=Oi(),r=GO();return Uk(e,{recursive:!0}),Uk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var g2=600*1e3,Co={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Hk(){return{"planOutbox.storeFailures":Co.storeFailures,"planOutbox.corruptItemsSeen":Co.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Co.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Co.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Co.halfArchivesCompleted}}import{existsSync as JO,readFileSync as zO,renameSync as R2,readdirSync as v2,rmSync as b2,writeFileSync as S2,unlinkSync as w2}from"node:fs";import $k from"node:path";function jk(e){if(!JO(e))return null;try{return JSON.parse(zO(e,"utf8"))}catch{return null}}function Ti(e){let{outboxDir:r}=Kk();return{jsonPath:$k.join(r,`${e.id}.json`),bodyPath:$k.join(r,e.bodyPath)}}import tT from"node:path";function Dc(e){let r=tT.join(Oi(),`${e}.json`);return jk(r)}function Mc(e){let r=Ti(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(`
169
- `)}function Wc(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}B();function Lc(e){return e?.trim()?e.trim():null}function Vk(e,r){let t=Lc(e.boxKind),n=Lc(e.runnerId),o=Lc(e.harnessRoot);return t&&t!==r.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${t}" but this host is "${r.boxKind}" \u2014 use a run under ${r.harnessRoot}`}:n&&n!==r.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${r.runnerId}"`}:o&&o!==r.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${r.harnessRoot}"`}:!t||!n||!o?(e.boxKind=r.boxKind,e.runnerId=r.runnerId,e.harnessRoot=r.harnessRoot,Ie(e),{ok:!0,stamped:!0}):{ok:!0}}H();Gn();function Gk(e=process.env){return Gt(U(),e,{requireExplicitBoxKind:!0})}function Yk(e){return[...e.errors,...e.warnings].join("; ")}async function Po(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await X(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,transportError:!1,releaseResponse:t.response??t}}function pn(e){if(!e||typeof e!="object")return!1;let r=e;return[r.agentOsId,r.subjectTaskId,r.reviewTaskId,r.signature].every(t=>typeof t=="string"&&!!t)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(r.prUrl)&&/^[a-f0-9]{40}$/.test(r.headSha)&&/^[a-f0-9]{64}$/.test(r.reviewGenerationSha256)&&Number.isSafeInteger(r.reviewAttempt)&&r.reviewAttempt>0&&typeof r.acceptedAt=="string"&&Number.isFinite(Date.parse(r.acceptedAt))}function qk(e,r){return e.signature===r.signature&&e.agentOsId===r.agentOsId&&e.subjectTaskId===r.subjectTaskId&&e.prUrl===r.prUrl&&e.reviewTaskId===r.reviewTaskId&&e.reviewAttempt===r.reviewAttempt&&e.reviewGenerationSha256===r.reviewGenerationSha256&&e.headSha===r.headSha&&e.acceptedAt===r.acceptedAt}import{spawnSync as ly}from"node:child_process";var Jk=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function rt(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function zk(e){let r=typeof e.completedAt=="string"&&e.completedAt||typeof e.startedAt=="string"&&e.startedAt;if(!r)return 0;let t=Date.parse(r);return Number.isFinite(t)?t:0}function Xk(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=rt(o),i=t.get(s);(!i||zk(o)>=zk(i))&&t.set(s,o)}return[...t.values()]}function nT(e){let r=typeof e.detailsUrl=="string"&&e.detailsUrl||typeof e.details_url=="string"&&e.details_url||typeof e.html_url=="string"&&e.html_url||"",t=typeof e.workflowName=="string"?e.workflowName.trim():"",n=e.app&&typeof e.app=="object"?e.app:null,o=typeof n?.slug=="string"?n.slug:"";return t.length>0||o==="github-actions"||/^https:\/\/github\.com\/[^/]+\/[^/]+\/actions\//i.test(r)}function Qk(e){let r=Xk(e),t=[],n=[],o=[];for(let s of r){if(nT(s)){o.push(rt(s));continue}let 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&&Jk.has(i))){if(i){n.push(`${rt(s)}=${i}`);continue}if(!(l&&Jk.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${rt(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${rt(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${rt(s)}=${a}`);continue}t.push(`${rt(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function Zk(e){return Xk(e).some(t=>{let n=rt(t),o=typeof t.conclusion=="string"?t.conclusion.toUpperCase():"",s=typeof t.state=="string"?t.state.toUpperCase():"";return/^vercel/i.test(n)&&(o==="SUCCESS"||s==="SUCCESS")})}var oT=new Set(["CLEAN","HAS_HOOKS"]);function ey(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!oT.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as sT}from"node:child_process";function ry(){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=sT("gh",["auth","token"],{windowsHide:!0,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"}}import{createHash as iT,randomUUID as aT}from"node:crypto";import{closeSync as ty,fsyncSync as ny,mkdirSync as lT,openSync as oy,realpathSync as cT,writeFileSync as uT}from"node:fs";import Bc from"node:path";function iy(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(r=>typeof r=="string"&&!!r.trim())}function sy(e,r,t,n){lT(e,{recursive:!0,mode:448});let o=cT(e),s=oy(Bc.join(o,`${r}.${t}.json`),"wx",384);try{uT(s,JSON.stringify({...n,phase:t},null,2)+`
170
- `),ny(s)}finally{ty(s)}for(let i=o;;i=Bc.dirname(i)){let a=oy(i,"r");try{ny(a)}catch(l){if(!dT(l))throw l}finally{ty(a)}if(i===Bc.dirname(i))break}}function dT(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function ay(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:iT("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:aT(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return sy(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return sy(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function Fc(e){return e?.trim()?["--repo",e.trim()]:[]}function cy(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function uy(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||"{}")}var pT=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,mT=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,fT=/^docs[(:]/i,gT=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function hT(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=fT.test(r)||gT.test(t),o=pT.test(t),s=mT.test(t);return n||o||s||e.vercelCheckSuccess===!0}function kT(e){if(!hT({title:e.title,body:e.body,vercelCheckSuccess:Zk(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 yT(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`);let r=Qk(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(", ")}`);let t=ey(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function RT(e){yT(e),kT(e)}function vT(e){try{return RT(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function bT(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 ST(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 wT(e,r){if(!r?.trim())return;let t=ly("git",["worktree","list","--porcelain"],{windowsHide:!0,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}`)&&ly("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function dy(e){let r=e.cwd??process.cwd(),t=e.exec??li,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!pn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=ry();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=uy(t,r,["pr","view",n,...Fc(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","headRefOid","mergedAt","mergeCommit"].join(",")]);if(a.state==="MERGED")return{prUrl:a.url||n,outcome:"skipped",mergeCommit:a.mergeCommit?.oid??null,provenance:{attribution:"preexisting_merge",mergeInvoked:!1,headSha:a.headRefOid??null,mergedAt:a.mergedAt??null,mergeCommit:a.mergeCommit?.oid??null},reason:`PR #${a.number} is already merged \u2014 land_pr no-op (redelivery)`};if(a.headRefOid?.toLowerCase()!==o.headSha)return s();let l=vT(a);if(l)return e.skipNotReady?{prUrl:a.url||n,outcome:"skipped",reason:l}:{prUrl:a.url||n,outcome:"blocked",reason:l};if(e.dryRun)return{prUrl:a.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};if(!a.headRefOid||!/^[a-f0-9]{40}$/i.test(a.headRefOid)||!iy(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!pn(u)||!qk(o,u))return s();let d=ay(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...Fc(e.repo),"--squash","--match-head-commit",o.headSha])}catch{let k=d.finish({attribution:"unconfirmed",mergeInvoked:!0,headSha:a.headRefOid,mergedAt:null,mergeCommit:null,mergeExitCode:null});return{prUrl:n,outcome:"blocked",reason:"merge invocation threw; outcome unconfirmed",provenance:k}}let m=(k,b)=>d.finish({attribution:b,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:k?.mergedAt??null,mergeCommit:k?.mergeCommit?.oid??null,mergeExitCode:p.status});if(p.status!==0){let k=Uc(t,r,c,e.repo);return k?{prUrl:k.url||a.url||n,outcome:"skipped",mergeCommit:k.mergeCommit?.oid??null,provenance:m(k,"external_merge_observed"),reason:`PR #${a.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:a.url||n,outcome:"blocked",reason:p.stderr||p.stdout||"gh pr merge failed",provenance:m(null,"unconfirmed")}}let f=Uc(t,r,c,e.repo);if(f||(f=Uc(t,r,c,e.repo)),!f)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:m(null,"unconfirmed")};let y=m(f,"invoked_merge_observed");try{let k=ST(t,r,e.repo);bT(t,r,k,a.headRefName),wT(r,a.headRefName)}catch{}return{prUrl:f?.url||a.url||n,outcome:"merged",provenance:y,mergeCommit:f?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function Uc(e,r,t,n){try{let o=uy(e,r,["pr","view",t,...Fc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function py(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return dy({prUrl:n,cwd:e.cwd,repo:cy(n),exec:e.exec,operation:e.operation,acceptedReview:pn(t)?t:void 0,revalidateAcceptedReview:async()=>{let o=await X(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(r.id))}/landing-review`,e.secret,{leaseToken:r.leaseToken,leaseOwner:r.leaseOwner,attempt:r.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&pn(s.acceptedReview)?s.acceptedReview:null}})}H();async function my(e){let r=await ee(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=e.report.provenance?.finishedAt??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:e.report.provenance?.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 X(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function fy(){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(`
171
- `)}var xT="dispatch_start_readback_failed:";function bt(e){return`${xT} ${e.trim()}`}function _T(e){return e.branch?.trim()?e.worktreePath?.trim()?e.heartbeatPath?.trim()?e.startedAt?.trim()?null:"missing local worker startedAt":"missing local worker heartbeatPath":"missing local worker worktreePath":"missing local worker branch"}function ET(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:bt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:bt(`AgentOS task status=${r.status} (expected running)`),detail:{taskId:r.taskId,status:r.status,leaseOwner:r.leaseOwner,blocker:r.blocker},snapshot:r};let s=r.leaseOwner?.trim()??"";if(!s||s!==t.trim())return{ok:!1,error:bt(`leaseOwner mismatch (board=${s||"null"}, expected=${t})`),detail:{taskId:r.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:t},snapshot:r};let i=r.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:bt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=_T(o);return a?{ok:!1,error:bt(a),detail:{taskId:o.taskId,worker:o.name},snapshot:r}:r.heartbeatAt?.trim()?o.executorRef?.trim()&&r.executorRef?.trim()&&o.executorRef.trim()!==r.executorRef.trim()?{ok:!1,error:bt(`executorRef mismatch (board=${r.executorRef}, worker=${o.executorRef})`),detail:{taskId:r.taskId,boardExecutorRef:r.executorRef,workerExecutorRef:o.executorRef},snapshot:r}:{ok:!0,snapshot:r}:{ok:!1,error:bt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function gy(e){let r=await Zs({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return ET({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function hy(e,r,t){r.pid&&Y(r.pid)&&(De(r.pid,"SIGTERM"),Y(r.pid)&&De(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return L(e,n),n}B();function ky(e){let r=typeof e.personaSlug=="string"?e.personaSlug.trim().toLowerCase():"";if(r==="dalton"||r==="lorentz")return!0;let t=typeof e.executorRef=="string"?e.executorRef.trim().toLowerCase():"";if(t.startsWith("expert-lane-pr-review:")||t.startsWith("scheduledjob:")&&e.parentTaskId)return!0;let n=typeof e.title=="string"?e.title.toLowerCase():"";return n.includes("expert pr review")||n.startsWith("[dalton] review")||n.startsWith("[lorentz] review")}async function yy(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,t=await X(r,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!t.ok)return null;let n=t.response;return n&&typeof n=="object"?n:null}var Kl=3600*1e3;function Ry(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function vy(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function CT(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,p=t.contextEnvelopeReady===!0,m=typeof t.runtimeEnvelopeMarkdown=="string"?t.runtimeEnvelopeMarkdown:null,f=AT(t.runtimeEnvelopeReceipt),y=t.runtimeEnvelopeReady===!0,k=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,b=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof k?.promptMarkdown=="string"?k.promptMarkdown:null,g=t.workerMcpToolGrant&&typeof t.workerMcpToolGrant=="object"?t.workerMcpToolGrant:null,h=g&&typeof g.token=="string"&&g.token.trim()?g.token.trim():null,w=h&&Array.isArray(g?.capabilities)?g.capabilities.filter(S=>typeof S=="string"&&S.trim().length>0):null,E=h&&typeof g?.exp=="number"&&Number.isFinite(g.exp)?g.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:k,memoryQualityPromptMarkdown:b,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:p,runtimeEnvelopeMarkdown:m,runtimeEnvelopeEvidence:f,runtimeEnvelopeReady:y,workerMcpToken:h,workerMcpCapabilities:w,workerMcpExpiresAt:E}}function PT(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function AT(e){if(!e||typeof e!="object")return null;let r=e;return typeof r.envelopeId!="string"||!r.envelopeId.trim()?null:{envelopeId:r.envelopeId,envelopeSchemaVersion:typeof r.envelopeSchemaVersion=="string"?r.envelopeSchemaVersion:void 0,generatedAt:typeof r.generatedAt=="string"?r.generatedAt:void 0,injectedAt:typeof r.injectedAt=="string"?r.injectedAt:void 0,mode:typeof r.mode=="string"?r.mode:void 0,memoryIncludedCount:typeof r.memoryIncludedCount=="number"?r.memoryIncludedCount:void 0,memoryOmittedCount:typeof r.memoryOmittedCount=="number"?r.memoryOmittedCount:void 0,degraded:typeof r.degraded=="boolean"?r.degraded:void 0,degradedReason:typeof r.degradedReason=="string"?r.degradedReason:r.degradedReason===null?null:void 0,auditFingerprint:typeof r.auditFingerprint=="string"?r.auditFingerprint:void 0,promptMarkdownChars:typeof r.promptMarkdownChars=="number"?r.promptMarkdownChars:void 0}}function IT(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("",fy());let n=Wc(e);if(n?.outboxId){let o=Dc(n.outboxId);o?t.push("",Mc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
172
- `)}function OT(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 Ni(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){Xn({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},hr=function(){return F.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Lu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ye,n=Re,o=hr,s=Lu;let i=Gk();if(!i.ok||!i.identity){let v=Yk(i);if(r)return{ok:!1,error:v,boundary:i};console.error(`run dispatch failed: ${v}`),process.exit(1)}let a=i.identity;for(let v of i.warnings)console.error(`[dispatch] runner-boundary warning: ${v}`);let l=q(String(yr(String(e.run||""),"--run"))),c=Vk(l,a);if(!c.ok){let v=c.reason??"run does not belong to this runner boundary";if(r)return{ok:!1,error:v,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${v}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(yr(String(e.agentOsId||""),"--agent-os-id")),d=Q(e.baseUrl?String(e.baseUrl):void 0),p=await ee(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=He({runId:l.id}),k=co(l.id,y.runnerId),b=Mm(),g=b?Lm(l.repo):null,h=new WeakMap;if(b&&m&&!g){let v="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(r)return{ok:!1,error:v,runId:l.id};console.error(`run dispatch failed: ${v}`),process.exit(1)}let w=e.diskPath?Vr({diskPath:String(e.diskPath)}):Vr({diskPath:l.repo}),E=await Gm({runId:l.id,agentOsId:u,args:e}),S=OT(e),_=S.size>0,K=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,$=_?Math.min(K,S.size):K;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let v=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await X(v,p,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let C=f?$:Math.min($,E.slotsAvailable);if(!f&&C<=0){let v={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:E.reason??"no resource slots",resourceGate:E};if(r)return{ok:!0,...v};console.log(JSON.stringify(v,null,2));return}let re=Os(l.id),ke=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ye=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Kl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Cc(l.id),...e.lane?{lane:Vm(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(A=>A.trim()).filter(Boolean)}:{}}),gr=Um(),Hr=async v=>{let R=b&&g?Wm(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:gr})??{ok:!1,status:0,response:null},W=A.response;if(R&&Array.isArray(W?.result?.started))for(let G of W.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:W?.result}};f||Xn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:gr});let j=await Hr(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=ll(j.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:j.dispatch.status,response:j.dispatch.response,authRefreshed:j.dispatch.refreshedAuth===!0,authRefreshFailure:j.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&Xn({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:j.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let T=j.result;if(f){let v=Ry(T),R=vy(T),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:T.started.map(W=>({taskId:W.task.id,title:W.task.title,reason:W.reason})),skipped:T.skipped.map(W=>({taskId:W.task.id,skipReason:W.skipReason,reason:W.reason})),diskGate:T.diskGate,resourceGate:T.resourceGate,inspected:T.inspected,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let te=ig(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Po({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&on({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...A};return F.push(G),Re("outcome",{lastOutcome:G}),!1}async function xb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return V(R,"land_pr task missing prUrl");try{let G=await py({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:A,runId:l.id,workerName:`land-pr-${A}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),qe=await my({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(F.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):V(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function _b(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Po({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&on({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return F.push(W),Re("outcome",{lastOutcome:W}),!1}async function Eb(v){let R=v.task,A=CT(v),W=String(R.id);if(_&&!S.has(W))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=PT(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(dg(l.id,W))return _b(R);let qe=Number(R.attempt)||1;if(qe>te.maxTaskAttempts)return V(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let st=R.leaseToken?String(R.leaseToken).trim():"";if(!st)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let it=x(`t-${R.id}-a${R.attempt}`),kr=Xs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Ym(R)});Ih({taskId:W,leaseToken:st,runId:l.id,workerName:it,provider:kr.provider??null});let Qi=og({task:R,routing:kr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Qi.ok)return V(R,Qi.error??"model_routing_mismatch",{modelRoutingGuard:Qi});if(ky(R)){let Ce=await yy({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let Lo=ok(kr.provider);if(!Lo.ok)return V(R,`provider_quota_exhausted: ${Lo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Lo.provider,retryAt:Lo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Bo=Rg({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),$u=$h({runId:l.id,workerName:it,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Aa()});if(!$u.admitted)return V(R,`admission_refused: ${$u.reason}`,{nonFatal:!0});let Uo=A?.workerMcpToken??null;if(Uo&&no()){let Tt=Lk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Tt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Tt.code}: ${Tt.detail}) \u2014 spawning without tools`),Uo=null;else{let Zi=await Wk(Tt.context);Zi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Zi.error??`HTTP ${Zi.httpStatus}`}) \u2014 spawning without tools`),Uo=null)}}fg(l.id,String(R.id),{except:it});let sr=await Mk(l,{name:it,task:IT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Tt=>Tt.trim()).filter(Boolean):[],model:kr.model,provider:kr.provider,routingRule:kr.rule,requestedModel:kr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Bo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Bo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Bo?.targetPrUrl,repairTargetBranch:Bo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Uo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:st,dispatched:!0,executionMode:Ts(R)}),Fo=await gy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:st,worker:sr,baseUrl:d,secret:p});if(!Fo.ok)return hy(l.id,sr,Fo.error??"dispatch_start_readback_failed"),et(l.id,it),V(R,Fo.error??"dispatch_start_readback_failed",{readback:Fo.detail??null});sr.leaseToken!==st&&(sr.leaseToken=st,sr.leaseOwner=k,L(l.id,sr)),bi({taskId:W,leaseToken:st}),Uh(l.id,it);let ju={taskId:R.id,started:!0,worker:sr.name,pid:sr.pid,branch:sr.branch,model:sr.model,provider:kr.provider,routingRule:kr.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??G,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return F.push(ju),Re("worker_started",{lastOutcome:ju}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??W}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return et(l.id,it),V(R,Ce.message)}}let Xi=new Set;for(let v of Mh(l.id))Xi.add(v);async function Bu(v){let R=v.task,A=String(R.id);if(Xi.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?Bm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=W&&!W.allow?await V(R,`desktop_execution_policy_denied:${W.code}: ${W.reason}`,{desktopPolicyDenied:W.code,...W.code==="operation_not_approved"?{nonFatal:!0}:{}}):Lu(v)?await xb(v):await Eb(v);return G||(Xi.add(A),Dh(A,l.id)),G}for(let v of T.started)await Bu(v);if(D.push(...T.skipped??[]),_)for(let v of D){let R=String(v.task.id);S.has(R)&&F.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&F.length<C;){if(hr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};F.push(A),Re("circuit_breaker",{lastOutcome:A});break}let v=await Hr(1);if(!v.dispatch.ok||!v.result){let A=Fm(v.dispatch.response),W=ye();ie=A&&W>0;let G=ll(v.dispatch.response),qe={started:!1,error:G?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...G?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};F.push(qe),Re("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:qe});break}M+=Number(v.result.inspected)||0,D.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(F.length>=C)break;await Bu(A)}}let Wo=F.filter(v=>v.started).length,$r=Ry(T),Ot=vy(T),Uu=Wo===0&&($r?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if(Uu&&$r?.summary){let v=$r.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??$r.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=Ot?`; dispatch_skip_drain scanned=${Ot.scanned??0} advanced=${Ot.advanced??0}`:"",G=$r.progressionReport?.summary?`; ${$r.progressionReport.summary}`:"",qe=Ot?.prLifecycleAttempt?.summary?`; ${Ot.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${$r.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let Fu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Wo,capacityIdle:Uu,admissionExhaustion:$r,dispatchSkipDrain:Ot,outcomes:F,skipped:D.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:M,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:gr},Ku=v=>!v.started&&v.nonFatal!==!0,Cb=F.some(Ku),Hu=ie&&Wo>0?!0:!Cb;if(Xn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Wo,ok:Hu}),r)return{ok:Hu,...Fu};console.log(JSON.stringify(Fu,null,2)),F.some(Ku)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var TT=1;function mn(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 NT(e){let{maxStarts:r,...t}=e;return t}async function Kc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=NT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ni({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:mn(u)}}let n=Math.min(r,TT),o=Math.max(0,r-n),s=await Ni({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=mn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ni({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=mn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function by(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 DT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Ao(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function MT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Sy(e,r){let t=DT(r),n=Ao(t?.recommendedMaxStarts),o=Ao(t?.actionableReady),s=Ao(t?.queuedTasks),i=Ao(t?.boardAdvancedThisTick)??0,a=Ao(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 f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=MT("KYNVER_DAEMON_MAX_DISPATCH_STARTS");p!==null&&(u=Math.min(u,p));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import PN from"node:path";B();Dn();fe();O();import WT from"node:path";var LT=new Set(["running","dispatching","pending","queued","needs_attention"]),St=new Set(["completed","failed","cancelled","done"]);function wt(e){let r=ir(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(WT.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=J(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Mp(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Io(){let e=[];for(let r of Xe()){if(!LT.has(r.status))continue;let t=wt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Dn();fe();O();ct();Un();import{existsSync as ot,lstatSync as lN,readdirSync as cN,readlinkSync as uN,renameSync as Xc,unlinkSync as dN}from"node:fs";import pr from"node:path";Ze();O();import or from"node:path";var BT=`${or.sep}runs${or.sep}runs${or.sep}`;function Di(e){return e.includes(BT)}function Hc(e,r){return or.join(Ae(he(e)),x(r))}function tt(e,r,t){return or.join(Hc(e,r),"workers",x(t))}function wy(e,r,t){let n=he(e);return or.join(n,"runs","runs",x(r),"workers",x(t))}function $c(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function xt(e){return{workerJsonPath:or.join(e,"worker.json"),stdoutPath:or.join(e,"stdout.jsonl"),stderrPath:or.join(e,"stderr.log"),heartbeatPath:or.join(e,"heartbeat.jsonl"),lastStatusPath:or.join(e,"last-status.json")}}function xy(e){let r=xt(tt(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Di(e.statusPath)?e.statusPath:r}import{existsSync as nt,mkdirSync as eN,readdirSync as Iy,renameSync as rN,statSync as Gc}from"node:fs";import se from"node:path";H();Cn();jr();import UT from"node:path";function FT(e){return UT.resolve(Me(e.trim()))}function jc(e,r,t){let n=e?.trim();return n?{repo:FT(n),source:r,persistedInConfig:t}:null}function KT(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function _y(e={}){let r=e.env??process.env,t=e.config??U(),n=jc(t.defaultRepo,"config",!0);if(n)return n;let o=jc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=jc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||KT(Yo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();ct();Ze();B();O();H();import{existsSync as HT,readFileSync as $T,readdirSync as jT,statSync as VT,writeFileSync as GT}from"node:fs";import YT from"node:path";var Ne="<redacted>",Vc=`[^\\s"'\\\\,}\\]]`,qT=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Vc}+`,"gi"),Ne],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Vc}+`,"gi"),Ne],[/\bkynver_u_[A-Za-z0-9_-]+/g,Ne],[/\bkyn_[A-Za-z0-9]{12,}/g,Ne],[/\bsk-ant-[A-Za-z0-9_-]+/g,Ne],[/\bsk-[A-Za-z0-9_-]{8,}/g,Ne],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,Ne],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,Ne],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,Ne],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${Ne}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Vc}+`,"g"),`$1${Ne}`]],JT=12,zT=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,XT=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,QT=256*1024*1024;function ZT(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=JT))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(Ne));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(Ne))}for(let[o,s]of qT)t=t.replace(o,s);return t}function Ey(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&zT.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Cy(e,r=0){if(r>3||!HT(e))return[];let t=[];for(let n of jT(e,{withFileTypes:!0})){let o=YT.join(e,n.name);n.isDirectory()?t.push(...Cy(o,r+1)):n.isFile()&&XT.test(n.name)&&t.push(o)}return t}function Py(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Cy(e)}catch{return t}for(let o of n)try{if(VT(o).size>QT){t.failed.push(o);continue}let s=$T(o,"utf8"),i=ZT(s,r);if(i===s){t.clean+=1;continue}GT(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Oo=900*1e3,tN=3600*1e3;function Oy(e,r){let t=se.resolve(e),n=se.resolve(Ae(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function Yc(e){if(!nt(e))return[];try{return Iy(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function qc(e){let r=se.join(e,"workers");if(!nt(r))return[];try{return Iy(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Ty(e){return se.join(e,"archived-workers")}function nN(e,r){let t=se.join(Ty(e),x(r));return nt(t)?`${t}-${Date.now()}`:t}function Ay(e,r,t){if(!nt(e))return!1;try{let n=r-Gc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ny(e,r=Date.now(),t=Oo){if(!nt(e))return!1;let n=xt(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Ay(n.stdoutPath,r,t)||Ay(n.heartbeatPath,r,t))}function oN(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-Gc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function sN(e,r,t,n){if(Ny(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=oN(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 fn(e,r=Date.now(),t=Oo){for(let n of qc(e))if(Ny(se.join(e,"workers",n),r,t))return!0;return!1}function iN(){let r=_y()?.repo??"",t="unknown";if(r)try{let n=Z(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function aN(e,r){let t=se.join(Ae(e),x(r));if(!nt(t))return null;let n=qc(t);if(n.length===0)return null;let o;try{o=Gc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=tt(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=fn(t);return{id:r,name:r,...iN(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Jc(e){let r=he(e??Be()),t=Ae(r),n=[];for(let o of Yc(t)){let s=se.join(t,o,"run.json");if(nt(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=aN(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:fn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function zc(e,r={}){let t=he(e??Be()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??tN,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Ey(process.env,[Cr,()=>Yt()])))();Jc(t);for(let c of Yc(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=I(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...qc(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=I(b,void 0);if(!g){let E=se.join(Ty(u),x(y));if(nt(E)&&(p.workers[x(y)]||p.workers[y])){delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:E});continue}i.push({runId:p.id,worker:y,action:"skipped",reason:"worker.json missing"});continue}let h=sN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=nN(u,y);eN(se.dirname(w),{recursive:!0}),rN(k,w),Py(w,l()),delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:h.reason,archivePath:w})}f&&Ie(p)}return{workers:i}}function Dy(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Yc(n)){let s=se.join(n,o);fn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function pN(e,r){let t=Hc(e,r),n;try{n=lN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=pr.resolve(pr.dirname(t),uN(t));if(fn(o)||fn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Xc(o,s),dN(t),Xc(s,t),o}function mN(e){let r=[];for(let t of $c()){let n=pr.join(e.fromDir,t),o=pr.join(e.toDir,t);!ot(n)||ot(o)||(Xc(n,o),r.push(t))}return r}function My(e,r){let t=xt(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 fN(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 gN(e){let r=xt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=ot(r.stdoutPath),o=ot(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?dt(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=Sr(a),c=fN({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:pr.join(le().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}),My(u,e.canonicalDir),u}function hN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=tt(r,e.id,o),a=pr.join(i,"worker.json");(Di(s.workerDir)||Di(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ie(e)),t}function kN(e){let r=[],t=tt(e.harnessRoot,e.run.id,e.workerName),n=wy(e.harnessRoot,e.run.id,e.workerName),o=xt(t),s=mN({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=xy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&ot(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=gN({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return L(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=ot(t),u=$c().some(d=>ot(pr.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:pr.join(le().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 L(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 My(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",L(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 yN(e,r){let t=pr.join(N(e.id),"workers");if(!ot(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of cN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Wy(){let{harnessRoot:e}=le(),r=Jc(e),t=[];for(let n of Xe()){let o=pN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),hN(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 yN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:tt(e,n.id,i),statusPath:pr.join(tt(e,n.id,i),"worker.json")}},Ie(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(...kN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}ct();ls();fe();B();Dn();O();import{execFileSync as Ly}from"node:child_process";import By from"node:path";function Qc(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function RN(e){let r=Qc(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function vN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function bN(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 SN(e){let r=null;if(typeof e=="string"?r=Ht(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=Qc(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 wN(e){try{let n=Ly("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Ly("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:Qc(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 xN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??Sr(r)}function _N(e){let r=new Map,t=N(e.id);for(let n of ir(e)){let o=I(By.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of SN(xN(o))){let i=RN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function EN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,vN(r)].filter(Boolean).join(`
173
- `);return bN(n)}function CN(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Zc(e={}){let r=e.lookupPr??wN,t=[],n=new Map;for(let o of Xe()){let s=_N(o),i=N(o.id);for(let a of ir(o)){let l=By.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!CN(c))continue;let u=J(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of EN(c,u.finalResult)){if(d=s.get(m)??null,!d){let f=o.repo||c.worktreePath,y=`${f}#${m}`,k=n.has(y)?n.get(y)??null:r({repoDir:f,prNumber:m});n.has(y)||n.set(y,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let p=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=p,c.reconcileReason="local-only needs_attention superseded by merged PR",L(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 AN=900*1e3;function IN(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Uy(e,r){let t=gi({worker:e,status:r}),n=t?hi(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function ON(e,r){r.stopClass&&(e.stopClass=r.stopClass),r.stopReason&&(e.stopReason=r.stopReason),r.exit&&(e.exitCode=r.exit.exitCode,e.exitSignal=r.exit.signal,e.oomEvidence=r.exit.oomEvidence??null);let t=r.error?.trim();t&&(e.exitStderrTail=t.slice(-1e3))}function Fy(){let e=Wy();if(IN()){let s=Zc(),i=zc();return{workers:[],finalizedRuns:Io(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Xe())for(let i of ir(s)){let a=PN.join(N(s.id),"workers",x(i),"worker.json"),l=I(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=J(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Uy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",L(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=Uy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,ON(l,c),L(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&&Y(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,p=!Number.isFinite(u)||t-u>AN,m=Number.isFinite(d)&&t-d>Ca;if(p&&m){De(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,l.stopClass="stuck",l.stopReason=`stuck (no progress) \u2014 ${c.attention.reason}`,L(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=Zc(),o=zc();return{workers:r,finalizedRuns:Io(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Vt();B();import UN from"node:path";import{readdirSync as TN,readFileSync as NN}from"node:fs";var DN="dispatch:claim:",MN=900*1e3,WN=10080*60*1e3,LN=200,_t={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function BN(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=TN("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(NN(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Ky(e){let r=Br(),t={mode:r,scanned:0,outcomes:[]};if(r!=="enforce")return t;let n=z();if(!n)return t;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??MN,i=e.findOrphanPid??BN,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-WN).toISOString(),limit:LN})}catch{return _t.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(DN.length),d=u.split(":")[0]??"",p=u.slice(d.length+1);if(!(!d||!p))try{let m=Date.parse(c.recordedAt);if(!Number.isFinite(m)||o-m<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let f=yo(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=yo(E.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return S===null||S>=f}))continue;let b={};try{b=c.resultJson?JSON.parse(c.resultJson):{}}catch{b={}}let g=b.runId??null,h=b.workerName??null;if(g&&h&&e.hasLiveWorker({runId:g,workerName:h})){bi({taskId:d,leaseToken:p}),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"finalized_late"});continue}if(g&&h){let E=e.worktreePathFor({runId:g,workerName:h}),S=E?i(E):null;if(S!==null){_t.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_orphan",detail:`live pid ${S} references ${E}`});continue}}if(!g){a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let w=await e.releaseClaim({taskId:d,leaseToken:p,runId:g});w.released?(on({taskId:d,leaseToken:p},"restart_recovery"),h&&(vo(g,h),et(g,h)),_t.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"released"})):w.transportError?a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_transport",detail:w.detail}):(on({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{_t.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function Hy(){return{"dispatchReceipts.recoveredStrandedClaims":_t.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":_t.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":_t.recoveryStoreFailures}}var $y=!1;async function jy(e){if($y||Br()!=="enforce")return null;$y=!0;try{let r=He().runnerId,t=await Ky({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>UN.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Po({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:co(s,r),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return t.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${t.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),t}catch{return null}}H();We();Rs();import ZN from"node:os";Na();import{mkdirSync as jN,readFileSync as VN,renameSync as GN,writeFileSync as YN}from"node:fs";import{homedir as qN}from"node:os";import Mi from"node:path";import{existsSync as FN,readFileSync as KN}from"node:fs";import{dirname as eu,join as Gy}from"node:path";import{fileURLToPath as Vy}from"node:url";function HN(e){let r=eu(Vy(e));for(let t=0;t<6;t+=1){if(FN(Gy(r,"package.json")))return r;let n=eu(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${eu(Vy(e))}`)}function $N(e=import.meta.url){let r=Gy(HN(e),"package.json"),t=JSON.parse(KN(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Yy=$N();function qy(){return Mi.join(qN(),".kynver")}function JN(e=qy()){return Mi.join(e,"doctor-native-windows.json")}function Jy(e=qy()){return Mi.join(e,"native-windows-state.json")}function zN(e,r){jN(Mi.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;YN(t,`${JSON.stringify(r,null,2)}
174
- `,{mode:384}),GN(t,e)}function tu(e){try{return JSON.parse(VN(e,"utf8"))}catch{return null}}function XN(e){let r=tu(JN(e));return!r||typeof r.checkedAt!="string"||typeof r.verdict!="string"?null:{checkedAt:r.checkedAt,runtimeVersion:typeof r.runtimeVersion=="string"?r.runtimeVersion:"unknown",verdict:r.verdict,failing:Array.isArray(r.failing)?r.failing.filter(t=>typeof t=="string"):[],warnings:Array.isArray(r.warnings)?r.warnings.filter(t=>typeof t=="string"):[],providers:r.providers&&typeof r.providers=="object"?Object.fromEntries(Object.entries(r.providers).filter(t=>typeof t[1]=="string")):{},orphanedProcesses:typeof r.orphanedProcesses=="number"?r.orphanedProcesses:0}}function zy(e=new Date,r){try{let t=Jy(r),n=tu(t)??{};zN(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function QN(e){let r=tu(Jy(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var ru=null,Xy=null;function Qy(e){ru=e.admission,Xy=e.ownerKind}function Zy(e={}){let r=e.platform??process.platform,t=e.hostKind??Ta(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:Yy,ownerKind:Xy,nativeWindows:n?{admission:ru?.basis??null,hostCapability:ru?.hostCapability??null,lastDoctor:XN(e.root),lastWorkerCompletedAt:QN(e.root)}:null}}function eR(e,r={}){let t=U(),n=(r.boxKind??br(t)).trim().toLowerCase()||"forge",o=r.hostLabel??ZN.hostname();return{boxId:ys({boxKind:n,hostLabel:o,explicitBoxId:r.boxId,config:t,env:process.env}),boxKind:n,displayName:r.displayName??null,hostLabel:o,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}:{},host:Zy()}}B();Ze();ss();fe();H();import eD from"node:path";B();fe();O();async function rR(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(yr(String(e.run||""),"--run"))),n=String(yr(String(e.agentOsId||""),"--agent-os-id")),o=Q(e.baseUrl?String(e.baseUrl):void 0),s=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=He({runId:t.id}).runnerId,a=await _k({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(eD.join(N(t.id),"workers",x(p),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let f=J(m);if(f.alive||f.finalResult||m.completionReportedAt)continue;try{let g=await _o({run:t.id,name:p,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(g.ok&&!g.skipped){l.push({worker:p,taskId:m.taskId,pid:m.pid,released:!1,deathReported:!0,stopClass:f.stopClass??null});continue}}catch{}let y=Qs({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,b;try{b=await X(k,s,{agentOsId:n,leaseOwner:y,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(g){b={ok:!1,error:g.message}}l.push({worker:p,taskId:m.taskId,pid:m.pid,released:b.ok===!0||b.response?.ok===!0,response:b.response??b})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await X(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(p){u={ok:!1,error:p.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}O();fe();B();O();import rD from"node:path";H();async function tR(e){let r=Q(e.baseUrl),t=await ee(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 X(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 nR(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=I(rD.join(N(t.id),"workers",x(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=J(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 tR({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,L(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}us();H();We();Ze();import Ge from"node:path";as();import Li from"node:path";de();fe();var nu=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function oR(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of nu)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!oR(n)})}function Et(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function To(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?$e(e.changedFiles).length>0:!!(Et(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function No(e){return e.status||(e.status=J(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function ou(e,r){if(e.status)return $e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):En(e.worktreePath);return $e(t).length>0}function tD(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function su(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=tD(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):En(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"}:Go(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:c,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??Et(s)};return e.status=u,u}return No(e)}fe();fe();ct();O();function nD(e,r=Date.now(),t=Oo){let n=me(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function gn(e,r=Date.now(),t=Oo){return Y(e.pid)?!0:nD(e,r,t)}function oD(e,r){return r?r.runTerminalCache.derive(e.run):wt(e.run)}function Fr(e,r=Date.now()){return gn(e.worker,r)}function iu(e,r){return St.has(e.run.status)?!1:oD(e,r)!==null}function sR(e,r,t=Date.now()){if(Fr(e,t))return!0;if(St.has(e.run.status)||iu(e,r))return!1;let n=No(e);return we(n)?!1:!!Fr(e,t)}as();fe();function iR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Fr(e))return!0;let n=r??No(e);return!!(!we(n)||To(n)||$e(n.changedFiles).length>0||Kt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Et(n.finalResult)}).blocked)}de();O();import{existsSync as lR,mkdirSync as sD,writeFileSync as aR}from"node:fs";import Wi from"node:path";function cR(e,r,t){return Wi.join(e,"salvage",x(r),x(t))}function uR(e){return lR(Wi.join(cR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function dR(e){let r=cR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);sD(r,{recursive:!0});let t=Wi.join(r,"salvage.patch"),n=!1;if(lR(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
175
- `);a.trim()&&(aR(t,a.endsWith(`
168
+ `)}})}write(r,t){if(!r.destroyed)try{r.write(Tl(t))}catch{}}async handleLine(r,t){let n=Nl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!sn(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Zs({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(r,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(r,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}};var Hk={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function Mc(){return Hk}var rT=7200*1e3;async function $k(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=x(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||Or,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:ni({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=Og(o.provider),i=o.model;if(s.preflightModel){let T=s.preflightModel(r.model);if(!T.ok)throw new Error(`model preflight failed for provider "${s.name}": ${T.note??"invalid model/provider combination"}`);T.normalized&&console.error(`[supervisor] ${n}: ${T.note}`),i=T.model}let{worktreesDir:a}=le(),l=gn.join(N(e.id),"workers",n);eT(l,{recursive:!0});let c=gn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(ZO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Wk(e.repo,c,u);else{let T=xg({baseCommit:e.baseCommit,base:e.base,verifyRef:te=>Z(e.repo,["rev-parse","--verify","--quiet",`${te}^{commit}`],{allowFailure:!0}).trim().length>0});T.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${T.ref} (${T.source})`),e.baseCommit=Z(e.repo,["rev-parse",T.ref],{allowFailure:!0}).trim()||T.ref,Ie(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=gn.join(l,"stdout.jsonl"),m=gn.join(l,"stderr.log"),f=gn.join(l,"heartbeat.jsonl"),y=Pg({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:f,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:r.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,b=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 g=pi({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Dl(s.name)&&ao()){let T=il();T&&r.agentOsId&&r.taskId?(w={apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let K=Pf(s.name);if(_&&K&&ao()){let T=il();if(T&&r.agentOsId&&r.taskId){let te=Nc({agentOsId:String(r.agentOsId),workerKey:l}),F=await No.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+rT,workerPid:process.pid,identity:Mc(),onRefusal:D=>console.error(`[supervisor] ${n}: worker tools refused a call (${D})`)});if(nc(l,F),s.name==="codex"){let D=ah({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=lh(D.codexHome,Ll());M.ok?(E=D.codexHome,h=E):(wo(l),await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=sh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&ri(ei())==="antigravity"){let D=fh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=hh({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=If({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${F.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?gp(hp(e.id,String(r.taskId),n)):null,C;try{C=kp($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:sg(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:y,reviewWorker:g,executionMode:r.executionMode??"write",...w?{workerToolGrant:w}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:Cf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Js(l),gi(c),wo(l),yi(l),ki(c),ln(l)),Z(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Z(e.repo,["branch","-D",d],{allowFailure:!0}),T}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let re=cg(C.model,i,s.defaultModel),ke=U(),Ye=br(process.env,ke),hr=He().runnerId,$r=_s({boxKind:Ye.boxKind,config:ke,env:process.env}),j={name:n,runId:e.id,status:"running",pid:C.pid,model:re,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,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.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:r.runtimeEnvelopeEvidence}:{},...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)}:{},executionMode:r.executionMode??"write",boxKind:Ye.boxKind,boxId:$r,runtimeId:hr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),tc(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:gn.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Mk({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let F=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=F,L(e.id,j)}if(T)T.pid&&(j.completionSidecarPid=T.pid,L(e.id,j));else{let te=j.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";j.completionBlocker=te,j.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,j),Sg(e.id,j,te)}}return j}H();Jn();function tT(e,r){let t=Jt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function nT(e){let r=Pr()?.trim();return r||Qe("KYNVER_API_KEY",e)||Qe("KYNVER_RUNTIME_SECRET",e)||Qe("KYNVER_CRON_SECRET",e)||Qe("OPENCLAW_CRON_SECRET",e)||null}async function jk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.timeoutMs??8e3,s=new Date(n).toISOString(),i=r.fetcher??fetch,a=tT(t,e.agentOsId),l=nT(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}Mn();function oT(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Nn(t)??null:null}function sT(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function iT(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Vk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=oT(t,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(t.KYNVER_AGENT_OS_ID??t.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=sT(t,o),l=iT(t,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}O();H();import{mkdirSync as Yk}from"node:fs";import{homedir as aT,tmpdir as M2}from"node:os";import Wi from"node:path";function qk(){let e=process.env.KYNVER_STATE_ROOT;return e?Wi.resolve(e):Wi.join(aT(),".kynver","state")}function Li(){return Wi.join(qk(),"plan-outbox")}function lT(){return Wi.join(qk(),"plan-outbox-archive")}function Jk(){let e=Li(),r=lT();return Yk(e,{recursive:!0}),Yk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var F2=600*1e3,Do={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function zk(){return{"planOutbox.storeFailures":Do.storeFailures,"planOutbox.corruptItemsSeen":Do.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Do.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Do.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Do.halfArchivesCompleted}}import{existsSync as dT,readFileSync as pT,renameSync as j2,readdirSync as V2,rmSync as G2,writeFileSync as Y2,unlinkSync as q2}from"node:fs";import Xk from"node:path";function Qk(e){if(!dT(e))return null;try{return JSON.parse(pT(e,"utf8"))}catch{return null}}function Bi(e){let{outboxDir:r}=Jk();return{jsonPath:Xk.join(r,`${e.id}.json`),bodyPath:Xk.join(r,e.bodyPath)}}import yT from"node:path";function Bc(e){let r=yT.join(Li(),`${e}.json`);return Qk(r)}function Uc(e){let r=Bi(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(`
169
+ `)}function Fc(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}B();function Kc(e){return e?.trim()?e.trim():null}function Zk(e,r){let t=Kc(e.boxKind),n=Kc(e.runnerId),o=Kc(e.harnessRoot);return t&&t!==r.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${t}" but this host is "${r.boxKind}" \u2014 use a run under ${r.harnessRoot}`}:n&&n!==r.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${r.runnerId}"`}:o&&o!==r.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${r.harnessRoot}"`}:!t||!n||!o?(e.boxKind=r.boxKind,e.runnerId=r.runnerId,e.harnessRoot=r.harnessRoot,Ie(e),{ok:!0,stamped:!0}):{ok:!0}}H();zn();function ey(e=process.env){return qt(U(),e,{requireExplicitBoxKind:!0})}function ry(e){return[...e.errors,...e.warnings].join("; ")}async function Mo(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await X(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,transportError:!1,releaseResponse:t.response??t}}function hn(e){if(!e||typeof e!="object")return!1;let r=e;return[r.agentOsId,r.subjectTaskId,r.reviewTaskId,r.signature].every(t=>typeof t=="string"&&!!t)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(r.prUrl)&&/^[a-f0-9]{40}$/.test(r.headSha)&&/^[a-f0-9]{64}$/.test(r.reviewGenerationSha256)&&Number.isSafeInteger(r.reviewAttempt)&&r.reviewAttempt>0&&typeof r.acceptedAt=="string"&&Number.isFinite(Date.parse(r.acceptedAt))}function ty(e,r){return e.signature===r.signature&&e.agentOsId===r.agentOsId&&e.subjectTaskId===r.subjectTaskId&&e.prUrl===r.prUrl&&e.reviewTaskId===r.reviewTaskId&&e.reviewAttempt===r.reviewAttempt&&e.reviewGenerationSha256===r.reviewGenerationSha256&&e.headSha===r.headSha&&e.acceptedAt===r.acceptedAt}import{spawnSync as hy}from"node:child_process";var ny=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function nt(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function oy(e){let r=typeof e.completedAt=="string"&&e.completedAt||typeof e.startedAt=="string"&&e.startedAt;if(!r)return 0;let t=Date.parse(r);return Number.isFinite(t)?t:0}function sy(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=nt(o),i=t.get(s);(!i||oy(o)>=oy(i))&&t.set(s,o)}return[...t.values()]}function RT(e){let r=typeof e.detailsUrl=="string"&&e.detailsUrl||typeof e.details_url=="string"&&e.details_url||typeof e.html_url=="string"&&e.html_url||"",t=typeof e.workflowName=="string"?e.workflowName.trim():"",n=e.app&&typeof e.app=="object"?e.app:null,o=typeof n?.slug=="string"?n.slug:"";return t.length>0||o==="github-actions"||/^https:\/\/github\.com\/[^/]+\/[^/]+\/actions\//i.test(r)}function iy(e){let r=sy(e),t=[],n=[],o=[];for(let s of r){if(RT(s)){o.push(nt(s));continue}let 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&&ny.has(i))){if(i){n.push(`${nt(s)}=${i}`);continue}if(!(l&&ny.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${nt(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${nt(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${nt(s)}=${a}`);continue}t.push(`${nt(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function ay(e){return sy(e).some(t=>{let n=nt(t),o=typeof t.conclusion=="string"?t.conclusion.toUpperCase():"",s=typeof t.state=="string"?t.state.toUpperCase():"";return/^vercel/i.test(n)&&(o==="SUCCESS"||s==="SUCCESS")})}var vT=new Set(["CLEAN","HAS_HOOKS"]);function ly(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!vT.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as bT}from"node:child_process";function cy(){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=bT("gh",["auth","token"],{windowsHide:!0,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"}}import{createHash as ST,randomUUID as wT}from"node:crypto";import{closeSync as uy,fsyncSync as dy,mkdirSync as xT,openSync as py,realpathSync as _T,writeFileSync as ET}from"node:fs";import Hc from"node:path";function fy(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(r=>typeof r=="string"&&!!r.trim())}function my(e,r,t,n){xT(e,{recursive:!0,mode:448});let o=_T(e),s=py(Hc.join(o,`${r}.${t}.json`),"wx",384);try{ET(s,JSON.stringify({...n,phase:t},null,2)+`
170
+ `),dy(s)}finally{uy(s)}for(let i=o;;i=Hc.dirname(i)){let a=py(i,"r");try{dy(a)}catch(l){if(!CT(l))throw l}finally{uy(a)}if(i===Hc.dirname(i))break}}function CT(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function gy(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:ST("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:wT(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return my(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return my(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function jc(e){return e?.trim()?["--repo",e.trim()]:[]}function ky(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function yy(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||"{}")}var PT=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,AT=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,IT=/^docs[(:]/i,OT=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function TT(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=IT.test(r)||OT.test(t),o=PT.test(t),s=AT.test(t);return n||o||s||e.vercelCheckSuccess===!0}function NT(e){if(!TT({title:e.title,body:e.body,vercelCheckSuccess:ay(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 DT(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`);let r=iy(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(", ")}`);let t=ly(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function MT(e){DT(e),NT(e)}function WT(e){try{return MT(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function LT(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 BT(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 UT(e,r){if(!r?.trim())return;let t=hy("git",["worktree","list","--porcelain"],{windowsHide:!0,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}`)&&hy("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function Ry(e){let r=e.cwd??process.cwd(),t=e.exec??fi,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!hn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=cy();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=yy(t,r,["pr","view",n,...jc(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","headRefOid","mergedAt","mergeCommit"].join(",")]);if(a.state==="MERGED")return{prUrl:a.url||n,outcome:"skipped",mergeCommit:a.mergeCommit?.oid??null,provenance:{attribution:"preexisting_merge",mergeInvoked:!1,headSha:a.headRefOid??null,mergedAt:a.mergedAt??null,mergeCommit:a.mergeCommit?.oid??null},reason:`PR #${a.number} is already merged \u2014 land_pr no-op (redelivery)`};if(a.headRefOid?.toLowerCase()!==o.headSha)return s();let l=WT(a);if(l)return e.skipNotReady?{prUrl:a.url||n,outcome:"skipped",reason:l}:{prUrl:a.url||n,outcome:"blocked",reason:l};if(e.dryRun)return{prUrl:a.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};if(!a.headRefOid||!/^[a-f0-9]{40}$/i.test(a.headRefOid)||!fy(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!hn(u)||!ty(o,u))return s();let d=gy(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...jc(e.repo),"--squash","--match-head-commit",o.headSha])}catch{let k=d.finish({attribution:"unconfirmed",mergeInvoked:!0,headSha:a.headRefOid,mergedAt:null,mergeCommit:null,mergeExitCode:null});return{prUrl:n,outcome:"blocked",reason:"merge invocation threw; outcome unconfirmed",provenance:k}}let m=(k,b)=>d.finish({attribution:b,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:k?.mergedAt??null,mergeCommit:k?.mergeCommit?.oid??null,mergeExitCode:p.status});if(p.status!==0){let k=$c(t,r,c,e.repo);return k?{prUrl:k.url||a.url||n,outcome:"skipped",mergeCommit:k.mergeCommit?.oid??null,provenance:m(k,"external_merge_observed"),reason:`PR #${a.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:a.url||n,outcome:"blocked",reason:p.stderr||p.stdout||"gh pr merge failed",provenance:m(null,"unconfirmed")}}let f=$c(t,r,c,e.repo);if(f||(f=$c(t,r,c,e.repo)),!f)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:m(null,"unconfirmed")};let y=m(f,"invoked_merge_observed");try{let k=BT(t,r,e.repo);LT(t,r,k,a.headRefName),UT(r,a.headRefName)}catch{}return{prUrl:f?.url||a.url||n,outcome:"merged",provenance:y,mergeCommit:f?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function $c(e,r,t,n){try{let o=yy(e,r,["pr","view",t,...jc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function vy(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return Ry({prUrl:n,cwd:e.cwd,repo:ky(n),exec:e.exec,operation:e.operation,acceptedReview:hn(t)?t:void 0,revalidateAcceptedReview:async()=>{let o=await X(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(r.id))}/landing-review`,e.secret,{leaseToken:r.leaseToken,leaseOwner:r.leaseOwner,attempt:r.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&hn(s.acceptedReview)?s.acceptedReview:null}})}H();async function by(e){let r=await ee(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=e.report.provenance?.finishedAt??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:e.report.provenance?.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 X(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Sy(){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(`
171
+ `)}var FT="dispatch_start_readback_failed:";function wt(e){return`${FT} ${e.trim()}`}function KT(e){return e.branch?.trim()?e.worktreePath?.trim()?e.heartbeatPath?.trim()?e.startedAt?.trim()?null:"missing local worker startedAt":"missing local worker heartbeatPath":"missing local worker worktreePath":"missing local worker branch"}function HT(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:wt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:wt(`AgentOS task status=${r.status} (expected running)`),detail:{taskId:r.taskId,status:r.status,leaseOwner:r.leaseOwner,blocker:r.blocker},snapshot:r};let s=r.leaseOwner?.trim()??"";if(!s||s!==t.trim())return{ok:!1,error:wt(`leaseOwner mismatch (board=${s||"null"}, expected=${t})`),detail:{taskId:r.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:t},snapshot:r};let i=r.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:wt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=KT(o);return a?{ok:!1,error:wt(a),detail:{taskId:o.taskId,worker:o.name},snapshot:r}:r.heartbeatAt?.trim()?o.executorRef?.trim()&&r.executorRef?.trim()&&o.executorRef.trim()!==r.executorRef.trim()?{ok:!1,error:wt(`executorRef mismatch (board=${r.executorRef}, worker=${o.executorRef})`),detail:{taskId:r.taskId,boardExecutorRef:r.executorRef,workerExecutorRef:o.executorRef},snapshot:r}:{ok:!0,snapshot:r}:{ok:!1,error:wt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function wy(e){let r=await si({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return HT({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function xy(e,r,t){r.pid&&Y(r.pid)&&(Me(r.pid,"SIGTERM"),Y(r.pid)&&Me(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return L(e,n),n}B();function _y(e){let r=typeof e.personaSlug=="string"?e.personaSlug.trim().toLowerCase():"";if(r==="dalton"||r==="lorentz")return!0;let t=typeof e.executorRef=="string"?e.executorRef.trim().toLowerCase():"";if(t.startsWith("expert-lane-pr-review:")||t.startsWith("scheduledjob:")&&e.parentTaskId)return!0;let n=typeof e.title=="string"?e.title.toLowerCase():"";return n.includes("expert pr review")||n.startsWith("[dalton] review")||n.startsWith("[lorentz] review")}async function Ey(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,t=await X(r,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!t.ok)return null;let n=t.response;return n&&typeof n=="object"?n:null}var Vl=3600*1e3;function Cy(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Py(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function $T(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,p=t.contextEnvelopeReady===!0,m=typeof t.runtimeEnvelopeMarkdown=="string"?t.runtimeEnvelopeMarkdown:null,f=VT(t.runtimeEnvelopeReceipt),y=t.runtimeEnvelopeReady===!0,k=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,b=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof k?.promptMarkdown=="string"?k.promptMarkdown:null,g=t.workerMcpToolGrant&&typeof t.workerMcpToolGrant=="object"?t.workerMcpToolGrant:null,h=g&&typeof g.token=="string"&&g.token.trim()?g.token.trim():null,w=h&&Array.isArray(g?.capabilities)?g.capabilities.filter(S=>typeof S=="string"&&S.trim().length>0):null,E=h&&typeof g?.exp=="number"&&Number.isFinite(g.exp)?g.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:k,memoryQualityPromptMarkdown:b,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:p,runtimeEnvelopeMarkdown:m,runtimeEnvelopeEvidence:f,runtimeEnvelopeReady:y,workerMcpToken:h,workerMcpCapabilities:w,workerMcpExpiresAt:E}}function jT(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function VT(e){if(!e||typeof e!="object")return null;let r=e;return typeof r.envelopeId!="string"||!r.envelopeId.trim()?null:{envelopeId:r.envelopeId,envelopeSchemaVersion:typeof r.envelopeSchemaVersion=="string"?r.envelopeSchemaVersion:void 0,generatedAt:typeof r.generatedAt=="string"?r.generatedAt:void 0,injectedAt:typeof r.injectedAt=="string"?r.injectedAt:void 0,mode:typeof r.mode=="string"?r.mode:void 0,memoryIncludedCount:typeof r.memoryIncludedCount=="number"?r.memoryIncludedCount:void 0,memoryOmittedCount:typeof r.memoryOmittedCount=="number"?r.memoryOmittedCount:void 0,degraded:typeof r.degraded=="boolean"?r.degraded:void 0,degradedReason:typeof r.degradedReason=="string"?r.degradedReason:r.degradedReason===null?null:void 0,auditFingerprint:typeof r.auditFingerprint=="string"?r.auditFingerprint:void 0,promptMarkdownChars:typeof r.promptMarkdownChars=="number"?r.promptMarkdownChars:void 0}}function GT(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("",Sy());let n=Fc(e);if(n?.outboxId){let o=Bc(n.outboxId);o?t.push("",Uc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
172
+ `)}function YT(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 Ui(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){ro({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},kr=function(){return F.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Ku=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ye,n=Re,o=kr,s=Ku;let i=ey();if(!i.ok||!i.identity){let v=ry(i);if(r)return{ok:!1,error:v,boundary:i};console.error(`run dispatch failed: ${v}`),process.exit(1)}let a=i.identity;for(let v of i.warnings)console.error(`[dispatch] runner-boundary warning: ${v}`);let l=q(String(Rr(String(e.run||""),"--run"))),c=Zk(l,a);if(!c.ok){let v=c.reason??"run does not belong to this runner boundary";if(r)return{ok:!1,error:v,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${v}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(Rr(String(e.agentOsId||""),"--agent-os-id")),d=Q(e.baseUrl?String(e.baseUrl):void 0),p=await ee(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=He({runId:l.id}),k=ho(l.id,y.runnerId),b=Um(),g=b?Km(l.repo):null,h=new WeakMap;if(b&&m&&!g){let v="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(r)return{ok:!1,error:v,runId:l.id};console.error(`run dispatch failed: ${v}`),process.exit(1)}let w=e.diskPath?Gr({diskPath:String(e.diskPath)}):Gr({diskPath:l.repo}),E=await zm({runId:l.id,agentOsId:u,args:e}),S=YT(e),_=S.size>0,K=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,$=_?Math.min(K,S.size):K;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let v=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await X(v,p,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let C=f?$:Math.min($,E.slotsAvailable);if(!f&&C<=0){let v={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:E.reason??"no resource slots",resourceGate:E};if(r)return{ok:!0,...v};console.log(JSON.stringify(v,null,2));return}let re=Bs(l.id),ke=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ye=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Vl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Oc(l.id),...e.lane?{lane:Jm(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(A=>A.trim()).filter(Boolean)}:{}}),hr=$m(),$r=async v=>{let R=b&&g?Fm(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:hr})??{ok:!1,status:0,response:null},W=A.response;if(R&&Array.isArray(W?.result?.started))for(let G of W.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:W?.result}};f||ro({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:hr});let j=await $r(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=fl(j.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:j.dispatch.status,response:j.dispatch.response,authRefreshed:j.dispatch.refreshedAuth===!0,authRefreshFailure:j.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&ro({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:j.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let T=j.result;if(f){let v=Cy(T),R=Py(T),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:T.started.map(W=>({taskId:W.task.id,title:W.task.title,reason:W.reason})),skipped:T.skipped.map(W=>({taskId:W.task.id,skipReason:W.skipReason,reason:W.reason})),diskGate:T.diskGate,resourceGate:T.resourceGate,inspected:T.inspected,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let te=mg(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Mo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&cn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},dc(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...A};return F.push(G),Re("outcome",{lastOutcome:G}),!1}async function Tb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return V(R,"land_pr task missing prUrl");try{let G=await vy({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:A,runId:l.id,workerName:`land-pr-${A}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),qe=await by({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(F.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):V(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function Nb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Mo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&cn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},dc(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return F.push(W),Re("outcome",{lastOutcome:W}),!1}async function Db(v){let R=v.task,A=$T(v),W=String(R.id);if(_&&!S.has(W))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=jT(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(yg(l.id,W))return Nb(R);let qe=Number(R.attempt)||1;if(qe>te.maxTaskAttempts)return V(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let at=R.leaseToken?String(R.leaseToken).trim():"";if(!at)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let lt=x(`t-${R.id}-a${R.attempt}`),yr=ni({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Xm(R)});Bh({taskId:W,leaseToken:at,runId:l.id,workerName:lt,provider:yr.provider??null});let oa=dg({task:R,routing:yr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!oa.ok)return V(R,oa.error??"model_routing_mismatch",{modelRoutingGuard:oa});if(_y(R)){let Ce=await Ey({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let jo=pk(yr.provider);if(!jo.ok)return V(R,`provider_quota_exhausted: ${jo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:jo.provider,retryAt:jo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Vo=Eg({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),Yu=Xh({runId:l.id,workerName:lt,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Ma()});if(!Yu.admitted)return V(R,`admission_refused: ${Yu.reason}`,{nonFatal:!0});let Go=A?.workerMcpToken??null;if(Go&&ao()){let Dt=Vk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Dt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Dt.code}: ${Dt.detail}) \u2014 spawning without tools`),Go=null;else{let sa=await jk(Dt.context);sa.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${sa.error??`HTTP ${sa.httpStatus}`}) \u2014 spawning without tools`),Go=null)}}bg(l.id,String(R.id),{except:lt});let ir=await $k(l,{name:lt,task:GT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Dt=>Dt.trim()).filter(Boolean):[],model:yr.model,provider:yr.provider,routingRule:yr.rule,requestedModel:yr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Vo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Vo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Vo?.targetPrUrl,repairTargetBranch:Vo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Go,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:at,dispatched:!0,executionMode:Us(R)}),Yo=await wy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:at,worker:ir,baseUrl:d,secret:p});if(!Yo.ok)return xy(l.id,ir,Yo.error??"dispatch_start_readback_failed"),tt(l.id,lt),V(R,Yo.error??"dispatch_start_readback_failed",{readback:Yo.detail??null});ir.leaseToken!==at&&(ir.leaseToken=at,ir.leaseOwner=k,L(l.id,ir)),Ci({taskId:W,leaseToken:at}),Yh(l.id,lt);let qu={taskId:R.id,started:!0,worker:ir.name,pid:ir.pid,branch:ir.branch,model:ir.model,provider:yr.provider,routingRule:yr.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??G,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return F.push(qu),Re("worker_started",{lastOutcome:qu}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??W}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return tt(l.id,lt),V(R,Ce.message)}}let na=new Set;for(let v of $h(l.id))na.add(v);async function Hu(v){let R=v.task,A=String(R.id);if(na.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?Hm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=W&&!W.allow?await V(R,`desktop_execution_policy_denied:${W.code}: ${W.reason}`,{desktopPolicyDenied:W.code,...W.code==="operation_not_approved"?{nonFatal:!0}:{}}):Ku(v)?await Tb(v):await Db(v);return G||(na.add(A),Hh(A,l.id)),G}for(let v of T.started)await Hu(v);if(D.push(...T.skipped??[]),_)for(let v of D){let R=String(v.task.id);S.has(R)&&F.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&F.length<C;){if(kr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};F.push(A),Re("circuit_breaker",{lastOutcome:A});break}let v=await $r(1);if(!v.dispatch.ok||!v.result){let A=jm(v.dispatch.response),W=ye();ie=A&&W>0;let G=fl(v.dispatch.response),qe={started:!1,error:G?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...G?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};F.push(qe),Re("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:qe});break}M+=Number(v.result.inspected)||0,D.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(F.length>=C)break;await Hu(A)}}let $o=F.filter(v=>v.started).length,jr=Cy(T),Nt=Py(T),$u=$o===0&&(jr?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if($u&&jr?.summary){let v=jr.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??jr.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=Nt?`; dispatch_skip_drain scanned=${Nt.scanned??0} advanced=${Nt.advanced??0}`:"",G=jr.progressionReport?.summary?`; ${jr.progressionReport.summary}`:"",qe=Nt?.prLifecycleAttempt?.summary?`; ${Nt.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${jr.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let ju={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:$o,capacityIdle:$u,admissionExhaustion:jr,dispatchSkipDrain:Nt,outcomes:F,skipped:D.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:M,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:hr},Vu=v=>!v.started&&v.nonFatal!==!0,Mb=F.some(Vu),Gu=ie&&$o>0?!0:!Mb;if(ro({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:$o,ok:Gu}),r)return{ok:Gu,...ju};console.log(JSON.stringify(ju,null,2)),F.some(Vu)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var qT=1;function kn(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 JT(e){let{maxStarts:r,...t}=e;return t}async function Vc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=JT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ui({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:kn(u)}}let n=Math.min(r,qT),o=Math.max(0,r-n),s=await Ui({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=kn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ui({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=kn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Ay(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 zT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Wo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function XT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Iy(e,r){let t=zT(r),n=Wo(t?.recommendedMaxStarts),o=Wo(t?.actionableReady),s=Wo(t?.queuedTasks),i=Wo(t?.boardAdvancedThisTick)??0,a=Wo(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=XT("KYNVER_DAEMON_MAX_DISPATCH_STARTS");p!==null&&(u=Math.min(u,p));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import jN from"node:path";B();Bn();fe();O();import QT from"node:path";var ZT=new Set(["running","dispatching","pending","queued","needs_attention"]),xt=new Set(["completed","failed","cancelled","done"]);function _t(e){let r=ar(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(QT.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=J(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Up(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Lo(){let e=[];for(let r of Xe()){if(!ZT.has(r.status))continue;let t=_t(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Bn();fe();O();dt();$n();import{existsSync as it,lstatSync as xN,readdirSync as _N,readlinkSync as EN,renameSync as ru,unlinkSync as CN}from"node:fs";import mr from"node:path";Ze();O();import sr from"node:path";var eN=`${sr.sep}runs${sr.sep}runs${sr.sep}`;function Fi(e){return e.includes(eN)}function Gc(e,r){return sr.join(Ae(he(e)),x(r))}function ot(e,r,t){return sr.join(Gc(e,r),"workers",x(t))}function Oy(e,r,t){let n=he(e);return sr.join(n,"runs","runs",x(r),"workers",x(t))}function Yc(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Et(e){return{workerJsonPath:sr.join(e,"worker.json"),stdoutPath:sr.join(e,"stdout.jsonl"),stderrPath:sr.join(e,"stderr.log"),heartbeatPath:sr.join(e,"heartbeat.jsonl"),lastStatusPath:sr.join(e,"last-status.json")}}function Ty(e){let r=Et(ot(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Fi(e.statusPath)?e.statusPath:r}import{existsSync as st,mkdirSync as hN,readdirSync as By,renameSync as kN,statSync as zc}from"node:fs";import se from"node:path";H();On();Vr();import rN from"node:path";function tN(e){return rN.resolve(We(e.trim()))}function qc(e,r,t){let n=e?.trim();return n?{repo:tN(n),source:r,persistedInConfig:t}:null}function nN(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ny(e={}){let r=e.env??process.env,t=e.config??U(),n=qc(t.defaultRepo,"config",!0);if(n)return n;let o=qc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=qc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||nN(es({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();dt();Ze();B();O();H();import{existsSync as oN,readFileSync as sN,readdirSync as iN,statSync as aN,writeFileSync as lN}from"node:fs";import cN from"node:path";var De="<redacted>",Jc=`[^\\s"'\\\\,}\\]]`,uN=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Jc}+`,"gi"),De],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Jc}+`,"gi"),De],[/\bkynver_u_[A-Za-z0-9_-]+/g,De],[/\bkyn_[A-Za-z0-9]{12,}/g,De],[/\bsk-ant-[A-Za-z0-9_-]+/g,De],[/\bsk-[A-Za-z0-9_-]{8,}/g,De],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,De],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,De],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,De],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${De}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Jc}+`,"g"),`$1${De}`]],dN=12,pN=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,mN=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,fN=256*1024*1024;function gN(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=dN))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(De));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(De))}for(let[o,s]of uN)t=t.replace(o,s);return t}function Dy(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&pN.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function My(e,r=0){if(r>3||!oN(e))return[];let t=[];for(let n of iN(e,{withFileTypes:!0})){let o=cN.join(e,n.name);n.isDirectory()?t.push(...My(o,r+1)):n.isFile()&&mN.test(n.name)&&t.push(o)}return t}function Wy(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=My(e)}catch{return t}for(let o of n)try{if(aN(o).size>fN){t.failed.push(o);continue}let s=sN(o,"utf8"),i=gN(s,r);if(i===s){t.clean+=1;continue}lN(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Bo=900*1e3,yN=3600*1e3;function Uy(e,r){let t=se.resolve(e),n=se.resolve(Ae(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function Xc(e){if(!st(e))return[];try{return By(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Qc(e){let r=se.join(e,"workers");if(!st(r))return[];try{return By(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Fy(e){return se.join(e,"archived-workers")}function RN(e,r){let t=se.join(Fy(e),x(r));return st(t)?`${t}-${Date.now()}`:t}function Ly(e,r,t){if(!st(e))return!1;try{let n=r-zc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ky(e,r=Date.now(),t=Bo){if(!st(e))return!1;let n=Et(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Ly(n.stdoutPath,r,t)||Ly(n.heartbeatPath,r,t))}function vN(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-zc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function bN(e,r,t,n){if(Ky(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=vN(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 yn(e,r=Date.now(),t=Bo){for(let n of Qc(e))if(Ky(se.join(e,"workers",n),r,t))return!0;return!1}function SN(){let r=Ny()?.repo??"",t="unknown";if(r)try{let n=Z(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function wN(e,r){let t=se.join(Ae(e),x(r));if(!st(t))return null;let n=Qc(t);if(n.length===0)return null;let o;try{o=zc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=ot(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=yn(t);return{id:r,name:r,...SN(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Zc(e){let r=he(e??Ue()),t=Ae(r),n=[];for(let o of Xc(t)){let s=se.join(t,o,"run.json");if(st(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=wN(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:yn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function eu(e,r={}){let t=he(e??Ue()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??yN,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Dy(process.env,[Pr,()=>Jt()])))();Zc(t);for(let c of Xc(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=I(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...Qc(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=I(b,void 0);if(!g){let E=se.join(Fy(u),x(y));if(st(E)&&(p.workers[x(y)]||p.workers[y])){delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:E});continue}i.push({runId:p.id,worker:y,action:"skipped",reason:"worker.json missing"});continue}let h=bN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=RN(u,y);hN(se.dirname(w),{recursive:!0}),kN(k,w),Wy(w,l()),delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:h.reason,archivePath:w})}f&&Ie(p)}return{workers:i}}function Hy(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Xc(n)){let s=se.join(n,o);yn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function PN(e,r){let t=Gc(e,r),n;try{n=xN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=mr.resolve(mr.dirname(t),EN(t));if(yn(o)||yn(t))return null;let s=`${t}.materialize-${Date.now()}`;return ru(o,s),CN(t),ru(s,t),o}function AN(e){let r=[];for(let t of Yc()){let n=mr.join(e.fromDir,t),o=mr.join(e.toDir,t);!it(n)||it(o)||(ru(n,o),r.push(t))}return r}function $y(e,r){let t=Et(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function IN(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 ON(e){let r=Et(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=it(r.stdoutPath),o=it(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?mt(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=wr(a),c=IN({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:mr.join(le().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}),$y(u,e.canonicalDir),u}function TN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=ot(r,e.id,o),a=mr.join(i,"worker.json");(Fi(s.workerDir)||Fi(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ie(e)),t}function NN(e){let r=[],t=ot(e.harnessRoot,e.run.id,e.workerName),n=Oy(e.harnessRoot,e.run.id,e.workerName),o=Et(t),s=AN({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=Ty({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&it(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=ON({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return L(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=it(t),u=Yc().some(d=>it(mr.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:mr.join(le().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 L(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 $y(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",L(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 DN(e,r){let t=mr.join(N(e.id),"workers");if(!it(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of _N(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function jy(){let{harnessRoot:e}=le(),r=Zc(e),t=[];for(let n of Xe()){let o=PN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),TN(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 DN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:ot(e,n.id,i),statusPath:mr.join(ot(e,n.id,i),"worker.json")}},Ie(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(...NN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}dt();gs();fe();B();Bn();O();import{execFileSync as Vy}from"node:child_process";import Gy from"node:path";function tu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function MN(e){let r=tu(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function WN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function LN(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 BN(e){let r=null;if(typeof e=="string"?r=jt(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=tu(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 UN(e){try{let n=Vy("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Vy("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:tu(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 FN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??wr(r)}function KN(e){let r=new Map,t=N(e.id);for(let n of ar(e)){let o=I(Gy.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of BN(FN(o))){let i=MN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function HN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,WN(r)].filter(Boolean).join(`
173
+ `);return LN(n)}function $N(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function nu(e={}){let r=e.lookupPr??UN,t=[],n=new Map;for(let o of Xe()){let s=KN(o),i=N(o.id);for(let a of ar(o)){let l=Gy.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!$N(c))continue;let u=J(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of HN(c,u.finalResult)){if(d=s.get(m)??null,!d){let f=o.repo||c.worktreePath,y=`${f}#${m}`,k=n.has(y)?n.get(y)??null:r({repoDir:f,prNumber:m});n.has(y)||n.set(y,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let p=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=p,c.reconcileReason="local-only needs_attention superseded by merged PR",L(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 VN=900*1e3;function GN(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Yy(e,r){let t=bi({worker:e,status:r}),n=t?Si(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function YN(e,r){r.stopClass&&(e.stopClass=r.stopClass),r.stopReason&&(e.stopReason=r.stopReason),r.exit&&(e.exitCode=r.exit.exitCode,e.exitSignal=r.exit.signal,e.oomEvidence=r.exit.oomEvidence??null);let t=r.error?.trim();t&&(e.exitStderrTail=t.slice(-1e3))}function qy(){let e=jy();if(GN()){let s=nu(),i=eu();return{workers:[],finalizedRuns:Lo(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Xe())for(let i of ar(s)){let a=jN.join(N(s.id),"workers",x(i),"worker.json"),l=I(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=J(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Yy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",L(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=Yy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,YN(l,c),L(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&&Y(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,p=!Number.isFinite(u)||t-u>VN,m=Number.isFinite(d)&&t-d>Na;if(p&&m){Me(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,l.stopClass="stuck",l.stopReason=`stuck (no progress) \u2014 ${c.attention.reason}`,L(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=nu(),o=eu();return{workers:r,finalizedRuns:Lo(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Yt();B();import rD from"node:path";import{readdirSync as qN,readFileSync as JN}from"node:fs";var zN="dispatch:claim:",XN=900*1e3,QN=10080*60*1e3,ZN=200,Ct={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function eD(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=qN("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(JN(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Jy(e){let r=Ur(),t={mode:r,scanned:0,outcomes:[]};if(r!=="enforce")return t;let n=z();if(!n)return t;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??XN,i=e.findOrphanPid??eD,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-QN).toISOString(),limit:ZN})}catch{return Ct.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(zN.length),d=u.split(":")[0]??"",p=u.slice(d.length+1);if(!(!d||!p))try{let m=Date.parse(c.recordedAt);if(!Number.isFinite(m)||o-m<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let f=_o(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=_o(E.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return S===null||S>=f}))continue;let b={};try{b=c.resultJson?JSON.parse(c.resultJson):{}}catch{b={}}let g=b.runId??null,h=b.workerName??null;if(g&&h&&e.hasLiveWorker({runId:g,workerName:h})){Ci({taskId:d,leaseToken:p}),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"finalized_late"});continue}if(g&&h){let E=e.worktreePathFor({runId:g,workerName:h}),S=E?i(E):null;if(S!==null){Ct.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_orphan",detail:`live pid ${S} references ${E}`});continue}}if(!g){a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let w=await e.releaseClaim({taskId:d,leaseToken:p,runId:g});w.released?(cn({taskId:d,leaseToken:p},"restart_recovery"),h&&(Co(g,h),tt(g,h)),Ct.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"released"})):w.transportError?a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_transport",detail:w.detail}):(cn({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{Ct.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function zy(){return{"dispatchReceipts.recoveredStrandedClaims":Ct.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":Ct.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":Ct.recoveryStoreFailures}}var Xy=!1;async function Qy(e){if(Xy||Ur()!=="enforce")return null;Xy=!0;try{let r=He().runnerId,t=await Jy({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>rD.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Mo({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:ho(s,r),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return t.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${t.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),t}catch{return null}}H();Le();Es();import gD from"node:os";Ua();import{mkdirSync as iD,readFileSync as aD,renameSync as lD,writeFileSync as cD}from"node:fs";import{homedir as uD}from"node:os";import Ki from"node:path";import{existsSync as tD,readFileSync as nD}from"node:fs";import{dirname as ou,join as eR}from"node:path";import{fileURLToPath as Zy}from"node:url";function oD(e){let r=ou(Zy(e));for(let t=0;t<6;t+=1){if(tD(eR(r,"package.json")))return r;let n=ou(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${ou(Zy(e))}`)}function sD(e=import.meta.url){let r=eR(oD(e),"package.json"),t=JSON.parse(nD(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var rR=sD();function tR(){return Ki.join(uD(),".kynver")}function dD(e=tR()){return Ki.join(e,"doctor-native-windows.json")}function nR(e=tR()){return Ki.join(e,"native-windows-state.json")}function pD(e,r){iD(Ki.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;cD(t,`${JSON.stringify(r,null,2)}
174
+ `,{mode:384}),lD(t,e)}function iu(e){try{return JSON.parse(aD(e,"utf8"))}catch{return null}}function mD(e){let r=iu(dD(e));return!r||typeof r.checkedAt!="string"||typeof r.verdict!="string"?null:{checkedAt:r.checkedAt,runtimeVersion:typeof r.runtimeVersion=="string"?r.runtimeVersion:"unknown",verdict:r.verdict,failing:Array.isArray(r.failing)?r.failing.filter(t=>typeof t=="string"):[],warnings:Array.isArray(r.warnings)?r.warnings.filter(t=>typeof t=="string"):[],providers:r.providers&&typeof r.providers=="object"?Object.fromEntries(Object.entries(r.providers).filter(t=>typeof t[1]=="string")):{},orphanedProcesses:typeof r.orphanedProcesses=="number"?r.orphanedProcesses:0}}function oR(e=new Date,r){try{let t=nR(r),n=iu(t)??{};pD(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function fD(e){let r=iu(nR(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var su=null,sR=null;function iR(e){su=e.admission,sR=e.ownerKind}function aR(e={}){let r=e.platform??process.platform,t=e.hostKind??Ba(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:rR,ownerKind:sR,nativeWindows:n?{admission:su?.basis??null,hostCapability:su?.hostCapability??null,lastDoctor:mD(e.root),lastWorkerCompletedAt:fD(e.root)}:null}}function lR(e,r={}){let t=U(),n=(r.boxKind??Sr(t)).trim().toLowerCase()||"forge",o=r.hostLabel??gD.hostname();return{boxId:_s({boxKind:n,hostLabel:o,explicitBoxId:r.boxId,config:t,env:process.env}),boxKind:n,displayName:r.displayName??null,hostLabel:o,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}:{},host:aR()}}B();Ze();ps();fe();H();import hD from"node:path";B();fe();O();async function cR(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(Rr(String(e.run||""),"--run"))),n=String(Rr(String(e.agentOsId||""),"--agent-os-id")),o=Q(e.baseUrl?String(e.baseUrl):void 0),s=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=He({runId:t.id}).runnerId,a=await Nk({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(hD.join(N(t.id),"workers",x(p),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let f=J(m);if(f.alive||f.finalResult||m.completionReportedAt)continue;try{let g=await To({run:t.id,name:p,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(g.ok&&!g.skipped){l.push({worker:p,taskId:m.taskId,pid:m.pid,released:!1,deathReported:!0,stopClass:f.stopClass??null});continue}}catch{}let y=oi({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,b;try{b=await X(k,s,{agentOsId:n,leaseOwner:y,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(g){b={ok:!1,error:g.message}}l.push({worker:p,taskId:m.taskId,pid:m.pid,released:b.ok===!0||b.response?.ok===!0,response:b.response??b})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await X(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(p){u={ok:!1,error:p.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}O();fe();B();O();import kD from"node:path";H();async function uR(e){let r=Q(e.baseUrl),t=await ee(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 X(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 dR(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=I(kD.join(N(t.id),"workers",x(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=J(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 uR({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,L(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}ks();H();Le();Ze();import Ge from"node:path";fs();import $i from"node:path";de();fe();var au=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function pR(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of au)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!pR(n)})}function Pt(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 Uo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?$e(e.changedFiles).length>0:!!(Pt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function Fo(e){return e.status||(e.status=J(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function lu(e,r){if(e.status)return $e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):In(e.worktreePath);return $e(t).length>0}function yD(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function cu(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=yD(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):In(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"}:Zo(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??Pt(s)};return e.status=u,u}return Fo(e)}fe();fe();dt();O();function RD(e,r=Date.now(),t=Bo){let n=me(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Rn(e,r=Date.now(),t=Bo){return Y(e.pid)?!0:RD(e,r,t)}function vD(e,r){return r?r.runTerminalCache.derive(e.run):_t(e.run)}function Kr(e,r=Date.now()){return Rn(e.worker,r)}function uu(e,r){return xt.has(e.run.status)?!1:vD(e,r)!==null}function mR(e,r,t=Date.now()){if(Kr(e,t))return!0;if(xt.has(e.run.status)||uu(e,r))return!1;let n=Fo(e);return xe(n)?!1:!!Kr(e,t)}fs();fe();function fR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Kr(e))return!0;let n=r??Fo(e);return!!(!xe(n)||Uo(n)||$e(n.changedFiles).length>0||$t({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Pt(n.finalResult)}).blocked)}de();O();import{existsSync as hR,mkdirSync as bD,writeFileSync as gR}from"node:fs";import Hi from"node:path";function kR(e,r,t){return Hi.join(e,"salvage",x(r),x(t))}function yR(e){return hR(Hi.join(kR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function RR(e){let r=kR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);bD(r,{recursive:!0});let t=Hi.join(r,"salvage.patch"),n=!1;if(hR(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
175
+ `);a.trim()&&(gR(t,a.endsWith(`
176
176
  `)?a:`${a}
177
- `),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 aR(Wi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
178
- `),o}var iD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function aD(e){e.writeSalvageEvidence&&iD.has(e.skipReason)&&(Fr(e.indexed,e.now)||uR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||dR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function lD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(St.has(r.run.status)||e.liveness&&iu(r,e.liveness)||e.liveness&&we(su(r,e.liveness))&&!Fr(r))?n:t}function cD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:lD(e)}function uD(e,r){if(e.harnessRoot?.trim())return Li.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Li.sep}runs${Li.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function pR(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=cD(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Fr(r,a))return"active_worker";let c=su(r,e.liveness),u=uD(e,r),d=f=>{if(u)try{aD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(iR(r,c)){let f=d("completion_blocked");if(f)return f}if(ou(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(sR(r,e.liveness,a)||!we(c))return"run_still_active";if(To(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if($e(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Kt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Et(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function au(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has(Li.resolve(o))||r&&Fr(r)?"active_worker":r&&ou(r,e.gitStatusCache)?"dirty_worktree":null}function mR(e){return au(e)}var fR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function gR(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)fR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||fR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as RR,readdirSync as vR,statSync as mD}from"node:fs";import bR from"node:path";B();Ze();import hR from"node:path";O();function pD(e,r){return gn(e,r)}function kR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Is(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(hR.join(Jn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=hR.resolve(l.worktreePath);pD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Dy(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function yR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function fD(e,r){try{let t=mD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gD(e,r){let t=bR.join(e,"runs",r,"run.json");return RR(t)?I(t,null):null}function SR(e){try{return vR(e).length===0}catch{return!1}}function wR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(yR(n,r,t,i.liveRunKeys)||!SR(n))return"run_still_active";let a=gD(r,t);return a&&!St.has(a.status)&&!wt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function xR(e){if(!RR(e.worktreesDir))return[];let r=[],t;try{t=vR(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=bR.join(e.worktreesDir,o);SR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:fD(s,e.now)})}return r}de();import{existsSync as cu,rmSync as MR}from"node:fs";import{execFileSync as hD}from"node:child_process";import{existsSync as _R,readdirSync as kD,statSync as yD}from"node:fs";import RD from"node:path";var vD=2500;function bD(e,r=vD){if(!_R(e))return 0;try{let n=hD("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 Kr(e,r=5e4){if(!_R(e))return 0;let t=bD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=kD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=RD.join(i,l),u;try{u=yD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as _D,rmSync as ED}from"node:fs";Ze();import{lstatSync as SD,readdirSync as wD}from"node:fs";function ER(e){try{let r=SD(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 CR(e,r=32){let t=ER(e);if(!t)return!1;if(t.foreign)return!0;try{let n=wD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=ER(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as xD}from"node:child_process";import IR from"node:path";import je from"node:path";function PR(e,r,t,n){let o=je.resolve(e),s=`${je.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=je.relative(t,i);if(a.startsWith("..")||je.isAbsolute(a))return"path_outside_harness";let l=a.split(je.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(je.resolve(r))?"path_outside_harness":null}function Bi(e,r,t){return PR(e,r,t,"node_modules")}function Ui(e,r,t){return PR(e,r,t,".next")}function Fi(e,r,t){let n=je.resolve(e),o=je.relative(t,n);return o.startsWith("..")||je.isAbsolute(o)||o.split(je.sep).length<3||!n.startsWith(je.resolve(r))?"path_outside_harness":null}function AR(e,r,t){let n=je.resolve(e);return Bi(n,r,t)===null||Ui(n,r,t)===null||Fi(n,r,t)===null}function TR(){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 OR(e){let r=xD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function NR(e,r,t){if(!AR(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=OR(["chown","-R",`${n}:${o}`,IR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=OR(["rm","-rf",IR.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 lu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function CD(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function DR(e,r,t={}){if(!_D(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?qt(n):null,i=e.bytes??Kr(e.path)??void 0,a=t.removePath??ED,l=t.hasForeignOwnedEntry??CR;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!CD(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=TR();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${lu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=NR(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(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${lu}`}}}function uu(e){let r=e.harnessRoot;return!r||!Oy(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function du(e,r){let t=uu(e);if(t)return t;let n=DR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function WR(e,r){return du(e,r)}function LR(e,r){return du(e,r)}function BR(e,r){return du(e,r)}function UR(e,r){let t=uu(e);if(t)return t;if(!cu(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??Kr(e.path);return MR(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 FR(e,r){let t=uu(e);if(t)return t;if(!cu(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??Kr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),cu(e.path)&&MR(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 Ki,readdirSync as Hi,statSync as PD}from"node:fs";import mr from"node:path";function pu(e,r){try{let t=PD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function HR(e,r){let t=mr.relative(r,e);return t===""||!t.startsWith("..")&&!mr.isAbsolute(t)}function KR(e,r,t,n){let o=[];for(let s of nu){if(s===".next")continue;let i=mr.join(e,s);if(!Ki(i))continue;let a=mr.resolve(i);t.has(a)||HR(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:pu(a,r.now)}))}return o}function $R(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...KR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ki(e.worktreesDir))return r;for(let n of Hi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=mr.join(e.worktreesDir,n.name);for(let s of Hi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=mr.join(o,s.name);r.push(...KR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function jR(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;Ki(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:pu(a,e.now)})))}if(!t||!Ki(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(mr.resolve(i.worktreePath));for(let i of Hi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=mr.join(e.worktreesDir,i.name),l;try{l=Hi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=mr.resolve(mr.join(a,c.name));o.has(u)||s.has(u)||HR(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:pu(u,e.now)}))}}return n}import{existsSync as YR,readdirSync as VR,statSync as AD}from"node:fs";import hn from"node:path";var ID=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function OD(e,r){try{let t=AD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function TD(e,r){let t=hn.relative(r,e);return t===""||!t.startsWith("..")&&!hn.isAbsolute(t)}function ND(e,r,t,n,o,s){if(!YR(n))return;let i=hn.resolve(n);r.has(i)||TD(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:OD(i,t.now)}))}function GR(e,r,t,n,o){for(let s of ID)ND(e,r,t,hn.join(n,s.dirName),s.kind,o)}function qR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||GR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!YR(e.worktreesDir))return r;for(let n of VR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=hn.join(e.worktreesDir,n.name),s;try{s=VR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=hn.join(o,i.name);GR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as JR,statSync as DD}from"node:fs";import fr from"node:path";function MD(e,r){try{let t=DD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function WD(e){let r=[],t=null;for(let n of e.split(`
179
- `)){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 LD(e,r){let t=fr.relative(fr.resolve(r),fr.resolve(e));return t!==""&&!t.startsWith("..")&&!fr.isAbsolute(t)}var BD=200;function zR(e){if(!e.includeOrphans||!JR(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(fr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(fr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Z(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=WD(a);for(let c of l){if(i>=BD)break;let u=fr.resolve(c.path);if(u===fr.resolve(s)||!LD(u,e.worktreesDir)||t.has(u)||o.has(u)||!JR(u))continue;let p=fr.relative(e.worktreesDir,u).split(fr.sep),m=p[0],f=p[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:f,repo:s,ageMs:MD(u,e.now)})}}return n}B();O();import Do from"node:path";function XR(e,r){let t=Do.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Do.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function QR(e){let r=new Map;for(let t of Is(e))for(let n of Object.keys(t.workers||{})){let o=Do.join(Jn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(Do.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Do.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Mo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Ct(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function fu(e={}){let r=e.execute===!0||e.execute!==!1&&Mo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Mo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Ct("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??Ct("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Ct("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Ct("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Ct("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Mo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Mo("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),p=e.accountBytes!==!1&&!Mo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Ct("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=Ct("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:k}}function tv(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 fu({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})}de();import{existsSync as gu,statSync as FD}from"node:fs";import Pt from"node:path";O();var nv=1800*1e3;function KD(e,r){let t=Pt.relative(r,e);return t===""||!t.startsWith("..")&&!Pt.isAbsolute(t)}function HD(e,r,t){if(!gu(e))return!1;try{let n=r-FD(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function hu(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??nv,n=Pt.resolve(e.harnessRoot,"runs"),o=Pt.resolve(n,e.runId,"workers",e.workerName);if(!KD(o,n))return!1;let s=I(Pt.join(o,"worker.json"),void 0);return s&&gn(s,r,t)?!0:s?!1:HD(Pt.join(o,"heartbeat.jsonl"),r,t)}function ov(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??nv;if(!gu(e.worktreePath))return null;if(e.runId&&e.workerName&&hu(e))return"active_worker";let n=Pt.join(e.worktreePath,".git");if(!gu(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
180
- `).map(c=>c.trim()).filter(c=>c.length>0);if($e(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ze();import{existsSync as $D,readdirSync as sv,statSync as jD}from"node:fs";import VD from"node:path";function iv(e={}){let r=he(e.harnessRoot??Be()),t=qt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!$D(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=sv(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=VD.join(t,u.name);try{let p=jD(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of sv(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let m=Kr(d,p);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}}Ze();import{existsSync as GD}from"node:fs";import{homedir as YD}from"node:os";import av from"node:path";var qD=["/var/tmp/kynver-harness",av.join(YD(),".openclaw","harness")];function ku(e,r,t){if(!t?.trim())return;let n=he(t.trim());e.has(n)||(e.add(n),r.push(n))}function JD(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 lv(e={}){let r=new Set,t=[];ku(r,t,e.harnessRoot??Be());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])ku(r,t,o);if(JD(e))for(let o of qD){let s=av.resolve(o);!r.has(s)&&GD(s)&&ku(r,t,s)}return t}Nn();function zD(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function XD(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function cv(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=XD("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Vr({...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 uv(e,r){if(!r.pressured)return e;let t=e.execute||!zD("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}}Qo();import{unlinkSync as QD}from"node:fs";function $i(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function dv(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function ZD(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function pv(e={}){let r=e.execute===!0||$i("KYNVER_WSL_CRASH_DUMP_EXECUTE")||$i("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||$i("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??dv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Bt({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=ZD(o.dumps,n,t),i=[],a=[],l=0;for(let c of s){if(!r){a.push({path:c.path,reason:"dry_run"});continue}try{QD(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function mv(e){return e?$i("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>dv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Qo();function Ve(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var ji=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ne(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as eM}from"node:child_process";import{existsSync as rM}from"node:fs";import tM from"node:path";var nM=5e3;function oM(e,r){if(!rM(tM.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=eM("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:nM}),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 fv(e){let r=oM(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
181
- `).map(t=>t.trim()).filter(Boolean)}var Vi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=fv(t)??[];return this.cache.set(t,o),o}};var Gi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=wt(r);return this.cache.set(r.id,n),n}};function sM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function gv(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:sM(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 iM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Be(),t=lv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function aM(e){return typeof e=="string"?{reason:e}:e}function kn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Yi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Kr(e.path,t)}}function hv(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 lM(e,r){return e.kind==="remove_next_cache"?LR(e,r):WR(e,r)}function cM(e,r,t){return e.kind==="remove_next_cache"?Ui(e.path,r,t):Bi(e.path,r,t)}function uM(e){let r=new Map;for(let t of e)for(let[n,o]of QR(t))r.set(n,o);return r}function kv(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function yv(e){return e.indexed?!1:hu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function dM(e={}){let r=fu(e),t=cv();r=uv(r,t);let n=iM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=kR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Io().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ve("finalize",`${s.length} stale run(s) marked terminal`),Ve("index","building worktree index");let i=uM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Gi,gitStatusCache:new Vi,gitRevCache:new ji},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ve("root",C);let re=Ge.join(C,"worktrees"),ke=XR(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},gr=r.scanDependencyCaches?qR(Ye):[];Ve("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Hr=0;for(let F of gr){if(p())break;Hr+=1,Hr%50===0&&Ve("dependency",`${Hr}/${gr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=cM(M,C,re);if(ie){kn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=kv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=yv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=au({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){kn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(lM(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of $R(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Fi(M.path,C,re);if(ie){kn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=kv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=yv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=mR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){kn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(BR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...jR(Ye),...zR(Ye)];Ve("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let F of j){if(p())break;te+=1,te%50===0&&Ve("worktrees",`${te}/${j.length} evaluated`);let D=Ge.resolve(F.path);if(T.has(D))continue;T.add(D);let M={...F,path:D},ie=ke.get(Ge.resolve(M.path))??null,ye=ie?null:ov({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=pR({indexed:ie,worktreePath:Ge.resolve(M.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(Re){let{reason:hr,detail:V}=aM(Re);kn(l,M.path,hr,V),c.push({...M,executed:!1,skipped:!0,skipReason:hr});continue}c.push(FR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of xR({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=M.runId??Ge.basename(D),ye=wR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){kn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(UR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,y=0,k=0,b=0,g=0;for(let C of c)C.bytes&&(m+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(y+=C.bytes),C.executed?(b+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(f+=1)):C.skipped&&(g+=1,C.skipReason==="dry_run"&&C.bytes&&(y+=C.bytes));let h=r.accountBytes?iv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Bt(),E=r.execute&&mv(w),S=E?pv({execute:!0}):null,_=w?{observed:!0,execute:E,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,b+=S.removed.length,Ve("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ve("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=gR(c,l),$=gv({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:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:hv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{}});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:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:hv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function Rv(e){let r=tv(e);return dM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function vv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as mM}from"node:fs/promises";import{homedir as fM}from"node:os";import At from"node:path";Cn();var pM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},s9=Object.keys(pM);function bv(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 Sv(e,r){let t=bv(e),n=bv(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}var gM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function yn(e){let r=e?.trim();return r||null}function hM(e){return[...new Set(e.filter(r=>!!r))]}function kM(){let e=fM(),r=yn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??yn(process.env.OPENCLAW_NPM_ROOT)??At.join(e,".openclaw","npm"),t=yn(process.env.KYNVER_NPM_GLOBAL_ROOT)??yn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(yn(process.env.NPM_CONFIG_PREFIX)?At.join(yn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):At.join(e,".npm-global","lib","node_modules"));return hM([At.join(r,"lib","node_modules"),At.join(r,"node_modules"),t.endsWith("node_modules")?t:At.join(t,"lib","node_modules")])}async function yM(e){try{let r=JSON.parse(await mM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function RM(e){let r=kM(),t=new Set,n=[];for(let o of r){let s=At.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function wv(e=new Date().toISOString()){let r={};for(let t of gM){let n=null;for(let o of RM(t)){let s=await yM(o);s&&(!n||Sv(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 vM}from"node:child_process";var bM=1e4,SM=4*1024*1024,xv=(e,r,t)=>{try{let n=vM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??bM,maxBuffer:SM});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 qi(e,r,t){return`${e} ${r} ${t}`}function yu(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 _v(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 wM=8e3,xM=30,_M=100,EM=400,CM=3600*1e3,Ru=0;function bu(){return Date.now()<Ru}function PM(e){let r=`${e.stdout}
182
- ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Ev(e){PM(e)&&(Ru=Math.max(Ru,Date.now()+CM))}function vu(e,r){if(bu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Ev(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function AM(e,r,t,n){if(bu())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Ev(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Su(e){return bu()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function IM(e){return Array.isArray(e)?e.map(r=>Rn(r)).filter(r=>r!==null).slice(0,xM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function OM(e,r,t){let n=vu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:IM(n.statuses)}:null}var Cv={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Su,collect(e,r){let t=_v(e);if(!t)return null;let n=AM(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=Rn(n.author),s=Rn(n.mergeCommit),i=Rn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,wM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Rn(u)).filter(u=>u!==null).slice(0,_M).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>Rn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,EM):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Pv={provider:"github",kind:"commit_status",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);return t?OM(r,t.repo,t.sha):null}},Av={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);if(!t)return null;let n=vu(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=vu(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var xu=[];function wu(e){xu.some(r=>r.provider===e.provider&&r.kind===e.kind)||xu.push(e)}function Iv(e,r){return xu.find(t=>t.provider===e&&t.kind===r)??null}function Ov(){wu(Cv),wu(Pv),wu(Av)}var TM=1,NM=25e3;function Tv(e,r={}){Ov();let t=r.run??xv,n=r.now??(()=>new Date),o=r.maxSubjects??TM,s=Date.now()+(r.deadlineMs??NM),i=new Set,a=e.filter(m=>{let f=qi(m.provider,m.kind,m.subject);return i.has(f)?!1:(i.add(f),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,f)=>a[(l+f)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let m of u){let f=qi(m.provider,m.kind,m.subject),y=n(),k=r.cache?.get(f,y)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=Iv(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${b.provider} ${b.kind}`,h=p.get(g);if(h===void 0&&(h=b.isAvailable(t),p.set(g,h)),!h){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,f,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let w=b.collect(m.subject,t);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(E),r.cache?.set(f,E,n())}return d}B();O();import BM from"node:path";B();O();import Nv from"node:path";var DM="provider-evidence-wanted.json",MM="provider-evidence-cache.json",WM=600*1e3;function Dv(e){return Nv.join(N(e),DM)}function LM(e){return Nv.join(N(e),MM)}function Mv(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 Wv(e){let r=I(Dv(e),null);return Mv(r?.wanted)}function Lv(e,r){ue(Dv(e),{savedAt:new Date().toISOString(),wanted:r})}function Bv(e,r={}){let t=r.ttlMs??WM,n=LM(e),s={...I(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ue(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Uv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Mv(r):null}var UM="provider-evidence-shared-cache.json",FM=6e4,KM=1,HM=1;function _u(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function $M(){return BM.join(le().harnessRoot,UM)}function jM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?KM:HM;return _u(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,_u("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Fv(){return _u("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",FM)}function VM(e){return Math.floor(e.getTime()/6e4)*6e4}function GM(e){return`${e.provider}:${e.kind}`}function Kv(e,r={}){let t=Bv(e,{ttlMs:r.ttlMs??Fv()}),n=r.file??$M(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Fv(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let m=s[u];if(!m)return null;let f=Date.parse(m.observedAt);return!Number.isFinite(f)||d.getTime()-f>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let m=jM(u.provider);if(m===0)return!0;let f=GM(u),y=VM(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();B();import Hv from"node:path";var $v="mesh-cron-lease.json";function jv(e){let r=I(Hv.join(N(e),$v),null);return zh(e,r)??r}function Vv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(Hv.join(N(e),$v),t),Jh(e,t)}function Gv(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()}}function Yv(e){let r=xh(),t=Lr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Lh());let s=Wh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Hy())}return t.flags.planOutbox!=="off"&&Object.assign(o,Hk()),t.flags.admission!=="off"&&(Object.assign(o,Kh()),t.flags.admission==="enforce"&&Object.assign(o,Vh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,rk()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:r.state,schemaVersion:r.schemaVersion,recovered:r.recovered,unavailableClass:r.reason?r.reason.split(":")[0]??null:null,flags:t.flags,flagSources:t.sources,flagWarningCount:t.warnings.length,divergenceCounters:o}}H();import{createHash as qv}from"node:crypto";import{access as YM,mkdir as J9,readFile as Jv,rename as z9,writeFile as X9}from"node:fs/promises";import{constants as qM}from"node:fs";import{homedir as Eu}from"node:os";import Ee from"node:path";var JM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,zM=/^[A-Za-z0-9._:-]{8,128}$/;function XM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Eu(),".kynver","mcp-installations.json")}function QM(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Eu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Eu(),".npm-global")}function ZM(e){let r=Ee.resolve(e);if(Ee.basename(r)!=="node_modules")return r;let t=Ee.dirname(r);return Ee.basename(t)==="lib"?Ee.dirname(t):t}function eW(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function rW(e){try{return await YM(e,qM.R_OK),!0}catch{return!1}}async function tW(e=XM()){let r;try{r=JSON.parse(await Jv(e,"utf8"))}catch{return[]}if(r.version!==1||!Array.isArray(r.installations)||r.installations.length>100)throw new Error("invalid MCP installation inventory");return r.installations.map(t=>{if(!t||!zM.test(t.inventoryKey)||!JM.test(t.packageName)||!["kynver","openclaw"].includes(t.prefix))throw new Error("invalid adopted MCP installation");if(t.packageName.includes("..")||t.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(t.connectionId&&t.connectionId.length>128)throw new Error("invalid connection identity");if(t.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(t.binName))throw new Error("invalid MCP bin name");let n=t.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...t,envAllowlist:[...new Set(n)],lifecycle:t.lifecycle??"runtime_stdio"}})}function nW(e,r,t){if(typeof e.bin=="string")return Ee.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Ee.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Ee.join(t,s):null}function oW(e){return qv("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function sW(e){let r=[];for(let t of e){let n=ZM(QM(t.prefix)),o=(await Promise.all(eW(n,t.packageName).map(async m=>({candidate:m,ok:await rW(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await Jv(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Ee.dirname(o),a=nW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=qv("sha256").update(JSON.stringify({prefix:n,binName:t.binName??null,envAllowlist:[...t.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],p={inventoryKey:t.inventoryKey,connectionId:t.connectionId??null,packageName:t.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};r.push({report:{...p,displayName:t.displayName?.trim()||t.packageName,inventoryFingerprint:oW(p),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:t.envAllowlist??[],lifecycle:c}})}return r}async function zv(){return sW(await tW())}import{createHash as iW,createHmac as aW,timingSafeEqual as lW}from"node:crypto";function Cu(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:iW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function Xv(e,r,t){let n=Cu(r);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==t||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=aW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&lW(i,s)}ra();Rr();import{createHash as cW}from"node:crypto";import{access as Pu,mkdtemp as uW,readFile as tb,rm as dW}from"node:fs/promises";import{constants as Au}from"node:fs";import{tmpdir as pW}from"node:os";import vn from"node:path";import{spawn as mW}from"node:child_process";import{Client as fW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as gW}from"@modelcontextprotocol/sdk/client/stdio.js";var Iu="https://registry.npmjs.org",Qv=512*1024,Ou=2*6e4,hW=2e4;function nb(){return"npm"}function Zv(e,r){return Buffer.byteLength(e)>=Qv?e:(e+r.toString("utf8")).slice(0,Qv)}function kW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&vn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Iu,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function ob(e,r,t=Ou,n){return new Promise((o,s)=>{let i,a;try{[i,a]=pe(e,r)}catch(m){s(m);return}let l=mW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:kW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Zv(c,m)}),l.stderr.on("data",m=>{u=Zv(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&De(l.pid,"SIGKILL")},t);l.once("error",m=>{clearTimeout(p),s(m)}),l.once("close",m=>{clearTimeout(p),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function yW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:cW(t).update(e).digest("base64")===n}async function RW(e,r,t,n){let o=await ob(nb(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Iu}`,"--ignore-scripts"],Ou,vn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||vn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=vn.join(n,i);if(!yW(await tb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function vW(e,r,t){if((await ob(nb(),["install","--global","--prefix",e,r,`--registry=${Iu}`,"--no-audit","--fund=false"],Ou,t)).code!==0)throw new Error("package_install_failed")}async function sb(e){let r=JSON.parse(await tb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function bW(e){let r={};for(let t of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[t];n!==void 0&&(r[t]=n)}return r}async function eb(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Pu(e.local.binPath,Au.X_OK).catch(async()=>Pu(e.local.binPath,Au.R_OK));let r=new gW({command:e.local.binPath,args:[],env:bW(e.local.envAllowlist),stderr:"pipe"}),t=new fW({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([t.connect(r),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),hW)})]);let o=await t.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await t.close().catch(()=>{})}}async function rb(e,r,t,n,o){let s=await uW(vn.join(pW(),"kynver-mcp-update-"));try{let i=await RW(r,t,n,s);if(await o(),await vW(e.local.prefix,i,vn.join(s,"npm-cache")),await sb(e)!==t)throw new Error("installed_version_mismatch")}finally{await dW(s,{recursive:!0,force:!0})}}async function ib(e,r,t,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==r.inventoryKey||e.report.inventoryFingerprint!==r.inventoryFingerprint||e.report.packageName!==r.packageName)throw new Error("local_inventory_mismatch");if(r.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await t("preflight"),await Pu(e.local.prefix,Au.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await sb(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await rb(e,r.packageName,r.targetVersion,r.targetIntegrity,async()=>{await t("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:r.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await t("restarting"),await t("verifying");let a=await eb(e);return{outcome:"succeeded",observedVersion:r.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!r.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await rb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await eb(e);return{outcome:"rollback_succeeded",observedVersion:r.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:r.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}import{randomBytes as Du}from"node:crypto";import{mkdir as Mu,readFile as Wu,rename as AW,rm as Ji,stat as IW,writeFile as db}from"node:fs/promises";import It from"node:path";import{createHmac as SW,timingSafeEqual as wW}from"node:crypto";import{mkdir as xW,readFile as _W,rename as EW,writeFile as CW}from"node:fs/promises";import{homedir as PW}from"node:os";import Tu from"node:path";function Nu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Tu.join(PW(),".kynver","state","mcp-updates")}function ab(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Tu.join(Nu(),`${e}.json`)}function lb(e,r){let t=Cu(r);return t?SW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function cb(e,r){try{let t=JSON.parse(await _W(ab(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=lb(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!wW(i,a)?null:t}catch{return null}}async function ub(e,r){let t=lb(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=ab(e.operationId);await xW(Tu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await CW(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
183
- `,{mode:384}),await EW(o,n)}var OW="host-mutation.lock";function pb(){return It.join(Nu(),OW)}async function mb(){try{let e=JSON.parse(await Wu(It.join(pb(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:fb(e.pid)}}catch{return null}}function fb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function TW(e){try{return await IW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function gb(){return NW("mcp_update")}async function NW(e){let r=pb(),t=`${r}.reclaiming`;await Mu(It.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await TW(t))return null;for(let o=0;o<2;o+=1)try{await Mu(r,{mode:448});let s={pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await db(It.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Ji(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Wu(It.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Ji(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Mu(t,{mode:448}),n=!0,await db(It.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Wu(It.join(r,"owner.json"),"utf8"))}catch{return null}if(fb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Du(8).toString("hex")}`;await AW(r,a),await Ji(a,{recursive:!0,force:!0})}return null}finally{n&&await Ji(t,{recursive:!0,force:!0})}}function zi(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function DW(e){if(!e||typeof e!="object")return null;let r=e.claim;if(!r||typeof r!="object"||r.waitingForIdle!==!1)return null;let t=r.command;return t&&typeof t=="object"?t:null}function hb(e,r){let t=r.claims;return e.inventoryKey===t.inventoryKey&&e.packageName===t.packageName&&e.installedVersion===t.installedVersion&&e.targetVersion===t.targetVersion&&e.targetIntegrity===t.targetIntegrity&&e.rollbackIntegrity===t.rollbackIntegrity&&e.item.report.inventoryKey===t.inventoryKey&&e.item.report.packageName===t.packageName}function MW(e,r){return{inventoryKey:r.claims.inventoryKey,packageName:r.claims.packageName,installedVersion:r.claims.installedVersion,targetVersion:r.claims.targetVersion,targetIntegrity:r.claims.targetIntegrity,rollbackIntegrity:r.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function kb(e){let r=Q(e.baseUrl),t=await zv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await gt(zi(r,e.agentOsId,"inventory"),e.secret,{items:t.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await gb();if(!o){let s=await mb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await gt(zi(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=DW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!Xv(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await cb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!hb(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let g=t.find(h=>h.report.inventoryKey===i.claims.inventoryKey);if(!g||g.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=g,c=a&&hb(a.recovery,i)?a.recovery:MW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await ub({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await gt(zi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:g})).ok)throw new Error("progress_rejected");p=g,await d(g,!1)},f=g=>m(g),y=()=>m(p),k;try{k=await ib(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await gt(zi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return b.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:k.outcome}}finally{await o.release()}}function WW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function LW(e,r){let t=q(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=I(yb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Yr(a))continue;if(uo(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!we(l))continue;let c=Ft({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await _o({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function BW(e,r,t,n,o){let s=Q(n.baseUrl?String(n.baseUrl):void 0),i=await ee(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await wv(),c=Os(r),u=null;try{let E=Wv(r);if(E.length>0){let S=Kv(r);u=Tv(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Ur()!=="off"){let E=jt();Fh({liveWorkers:E}),jh({liveWorkers:E})}else Bh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=yb.join(Pr(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?Yr($):!1}catch{return!1}};await jy({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Yv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=sd({control:Mt(e),supervisor:cd(),inFlightWorkers:jt().length})}catch{m=null}let f=jv(r),y=qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Pc(r),resourceGate:t,boxResourceSnapshot:eR(t,{harnessRunId:r,boxKind:br(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...y?{daemonEventLoop:y}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=Uv(k.response);if(b)try{Lv(r,b)}catch{}let g=Gv(k);if(g)try{Vv(r,g)}catch{}let h=Eh(k);h&&Ch(e,h);let w=td(k);return w&&od(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Rb(e){let r=String(yr(String(e.run||""),"--run")),t=String(yr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Pc(r);let o=await Ds(t,e),s=Ns(o),i=$n({runId:r,configuredMaxWorkersOverride:s}),a=vv()?Rv(r):void 0,l=await BW(t,r,i,e,a),c;if(n)try{let C=Q(e.baseUrl?String(e.baseUrl):void 0),re=await ee(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await kb({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:jt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=uh(r,l),d=await ug(r,e),p=await LW(r,e);p.some(C=>C.ok&&!C.skipped)&&zy();let m=$n({runId:r,configuredMaxWorkersOverride:s}),f=Fy(),y=await nR(r,e),k=Sy(m,l),b=k.maxStarts,g=Mt(t),h=id(g);h&&(b=0);let w=WW()?await rR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=by(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Kc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),ke=mn(re);S+=ke,K=Math.max(0,K-ke),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Kc({...e,run:r,agentOsId:t},K),re=mn(C);S+=re,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}_n();Vt();_n();function vb(e){return Vo(Mt(e))!=="stopped"?null:jt().length}function bb(e){if(!e||typeof e!="object")return!1;let r=e;return r.type==="tick"&&typeof r.id=="number"&&typeof r.agentOsId=="string"&&!!r.args&&typeof r.args=="object"}function UW(e){e&&(Qy({admission:e.admission,ownerKind:e.ownerKind}),ld(e.ownerKind))}async function FW(e,r={}){try{e.instructionBundle&&zu(e.instructionBundle.bundle,e.instructionBundle.source),Yu(e.eventLoopReport);let t=await(r.runTick??Rb)(e.args),n=(r.countInFlightWorkers??vb)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function Sb(e,r,t={}){UW(r);let n=Promise.resolve();e.on("message",o=>{bb(o)&&(n=n.then(async()=>{e.postMessage(await FW(o,t))}))})}wb?Sb(wb,KW):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
177
+ `),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 gR(Hi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
178
+ `),o}var SD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function wD(e){e.writeSalvageEvidence&&SD.has(e.skipReason)&&(Kr(e.indexed,e.now)||yR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||RR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function xD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(xt.has(r.run.status)||e.liveness&&uu(r,e.liveness)||e.liveness&&xe(cu(r,e.liveness))&&!Kr(r))?n:t}function _D(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:xD(e)}function ED(e,r){if(e.harnessRoot?.trim())return $i.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${$i.sep}runs${$i.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function vR(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=_D(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Kr(r,a))return"active_worker";let c=cu(r,e.liveness),u=ED(e,r),d=f=>{if(u)try{wD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(fR(r,c)){let f=d("completion_blocked");if(f)return f}if(lu(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(mR(r,e.liveness,a)||!xe(c))return"run_still_active";if(Uo(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if($e(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if($t({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Pt(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function du(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has($i.resolve(o))||r&&Kr(r)?"active_worker":r&&lu(r,e.gitStatusCache)?"dirty_worktree":null}function bR(e){return du(e)}var SR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function wR(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)SR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||SR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as CR,readdirSync as PR,statSync as AD}from"node:fs";import AR from"node:path";B();Ze();import xR from"node:path";O();function PD(e,r){return Rn(e,r)}function _R(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ls(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(xR.join(Zn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=xR.resolve(l.worktreePath);PD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Hy(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function ER(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function ID(e,r){try{let t=AD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function OD(e,r){let t=AR.join(e,"runs",r,"run.json");return CR(t)?I(t,null):null}function IR(e){try{return PR(e).length===0}catch{return!1}}function OR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(ER(n,r,t,i.liveRunKeys)||!IR(n))return"run_still_active";let a=OD(r,t);return a&&!xt.has(a.status)&&!_t(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function TR(e){if(!CR(e.worktreesDir))return[];let r=[],t;try{t=PR(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=AR.join(e.worktreesDir,o);IR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:ID(s,e.now)})}return r}de();import{existsSync as mu,rmSync as $R}from"node:fs";import{execFileSync as TD}from"node:child_process";import{existsSync as NR,readdirSync as ND,statSync as DD}from"node:fs";import MD from"node:path";var WD=2500;function LD(e,r=WD){if(!NR(e))return 0;try{let n=TD("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 Hr(e,r=5e4){if(!NR(e))return 0;let t=LD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=ND(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=MD.join(i,l),u;try{u=DD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as KD,rmSync as HD}from"node:fs";Ze();import{lstatSync as BD,readdirSync as UD}from"node:fs";function DR(e){try{let r=BD(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 MR(e,r=32){let t=DR(e);if(!t)return!1;if(t.foreign)return!0;try{let n=UD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=DR(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as FD}from"node:child_process";import BR from"node:path";import je from"node:path";function WR(e,r,t,n){let o=je.resolve(e),s=`${je.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=je.relative(t,i);if(a.startsWith("..")||je.isAbsolute(a))return"path_outside_harness";let l=a.split(je.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(je.resolve(r))?"path_outside_harness":null}function ji(e,r,t){return WR(e,r,t,"node_modules")}function Vi(e,r,t){return WR(e,r,t,".next")}function Gi(e,r,t){let n=je.resolve(e),o=je.relative(t,n);return o.startsWith("..")||je.isAbsolute(o)||o.split(je.sep).length<3||!n.startsWith(je.resolve(r))?"path_outside_harness":null}function LR(e,r,t){let n=je.resolve(e);return ji(n,r,t)===null||Vi(n,r,t)===null||Gi(n,r,t)===null}function FR(){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 UR(e){let r=FD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function KR(e,r,t){if(!LR(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=UR(["chown","-R",`${n}:${o}`,BR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=UR(["rm","-rf",BR.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 pu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function $D(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function HR(e,r,t={}){if(!KD(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?zt(n):null,i=e.bytes??Hr(e.path)??void 0,a=t.removePath??HD,l=t.hasForeignOwnedEntry??MR;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!$D(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=FR();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${pu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=KR(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(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${pu}`}}}function fu(e){let r=e.harnessRoot;return!r||!Uy(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function gu(e,r){let t=fu(e);if(t)return t;let n=HR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function jR(e,r){return gu(e,r)}function VR(e,r){return gu(e,r)}function GR(e,r){return gu(e,r)}function YR(e,r){let t=fu(e);if(t)return t;if(!mu(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??Hr(e.path);return $R(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 qR(e,r){let t=fu(e);if(t)return t;if(!mu(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??Hr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),mu(e.path)&&$R(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as Yi,readdirSync as qi,statSync as jD}from"node:fs";import fr from"node:path";function hu(e,r){try{let t=jD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function zR(e,r){let t=fr.relative(r,e);return t===""||!t.startsWith("..")&&!fr.isAbsolute(t)}function JR(e,r,t,n){let o=[];for(let s of au){if(s===".next")continue;let i=fr.join(e,s);if(!Yi(i))continue;let a=fr.resolve(i);t.has(a)||zR(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:hu(a,r.now)}))}return o}function XR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...JR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Yi(e.worktreesDir))return r;for(let n of qi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=fr.join(e.worktreesDir,n.name);for(let s of qi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=fr.join(o,s.name);r.push(...JR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function QR(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Yi(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:hu(a,e.now)})))}if(!t||!Yi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(fr.resolve(i.worktreePath));for(let i of qi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=fr.join(e.worktreesDir,i.name),l;try{l=qi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=fr.resolve(fr.join(a,c.name));o.has(u)||s.has(u)||zR(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:hu(u,e.now)}))}}return n}import{existsSync as rv,readdirSync as ZR,statSync as VD}from"node:fs";import vn from"node:path";var GD=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function YD(e,r){try{let t=VD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function qD(e,r){let t=vn.relative(r,e);return t===""||!t.startsWith("..")&&!vn.isAbsolute(t)}function JD(e,r,t,n,o,s){if(!rv(n))return;let i=vn.resolve(n);r.has(i)||qD(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:YD(i,t.now)}))}function ev(e,r,t,n,o){for(let s of GD)JD(e,r,t,vn.join(n,s.dirName),s.kind,o)}function tv(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||ev(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!rv(e.worktreesDir))return r;for(let n of ZR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=vn.join(e.worktreesDir,n.name),s;try{s=ZR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=vn.join(o,i.name);ev(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as nv,statSync as zD}from"node:fs";import gr from"node:path";function XD(e,r){try{let t=zD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function QD(e){let r=[],t=null;for(let n of e.split(`
179
+ `)){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 ZD(e,r){let t=gr.relative(gr.resolve(r),gr.resolve(e));return t!==""&&!t.startsWith("..")&&!gr.isAbsolute(t)}var eM=200;function ov(e){if(!e.includeOrphans||!nv(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(gr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(gr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Z(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=QD(a);for(let c of l){if(i>=eM)break;let u=gr.resolve(c.path);if(u===gr.resolve(s)||!ZD(u,e.worktreesDir)||t.has(u)||o.has(u)||!nv(u))continue;let p=gr.relative(e.worktreesDir,u).split(gr.sep),m=p[0],f=p[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:f,repo:s,ageMs:XD(u,e.now)})}}return n}B();O();import Ko from"node:path";function sv(e,r){let t=Ko.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ko.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function iv(e){let r=new Map;for(let t of Ls(e))for(let n of Object.keys(t.workers||{})){let o=Ko.join(Zn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(Ko.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ko.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Ho(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function At(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function yu(e={}){let r=e.execute===!0||e.execute!==!1&&Ho("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Ho("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??At("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??At("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??At("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??At("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??At("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Ho("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Ho("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),p=e.accountBytes!==!1&&!Ho("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=At("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=At("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:k}}function uv(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 yu({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})}de();import{existsSync as Ru,statSync as tM}from"node:fs";import It from"node:path";O();var dv=1800*1e3;function nM(e,r){let t=It.relative(r,e);return t===""||!t.startsWith("..")&&!It.isAbsolute(t)}function oM(e,r,t){if(!Ru(e))return!1;try{let n=r-tM(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function vu(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??dv,n=It.resolve(e.harnessRoot,"runs"),o=It.resolve(n,e.runId,"workers",e.workerName);if(!nM(o,n))return!1;let s=I(It.join(o,"worker.json"),void 0);return s&&Rn(s,r,t)?!0:s?!1:oM(It.join(o,"heartbeat.jsonl"),r,t)}function pv(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??dv;if(!Ru(e.worktreePath))return null;if(e.runId&&e.workerName&&vu(e))return"active_worker";let n=It.join(e.worktreePath,".git");if(!Ru(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
180
+ `).map(c=>c.trim()).filter(c=>c.length>0);if($e(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ze();import{existsSync as sM,readdirSync as mv,statSync as iM}from"node:fs";import aM from"node:path";function fv(e={}){let r=he(e.harnessRoot??Ue()),t=zt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!sM(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=mv(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=aM.join(t,u.name);try{let p=iM(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of mv(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let m=Hr(d,p);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}}Ze();import{existsSync as lM}from"node:fs";import{homedir as cM}from"node:os";import gv from"node:path";var uM=["/var/tmp/kynver-harness",gv.join(cM(),".openclaw","harness")];function bu(e,r,t){if(!t?.trim())return;let n=he(t.trim());e.has(n)||(e.add(n),r.push(n))}function dM(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 hv(e={}){let r=new Set,t=[];bu(r,t,e.harnessRoot??Ue());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])bu(r,t,o);if(dM(e))for(let o of uM){let s=gv.resolve(o);!r.has(s)&&lM(s)&&bu(r,t,s)}return t}Ln();function pM(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function mM(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function kv(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=mM("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Gr({...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 yv(e,r){if(!r.pressured)return e;let t=e.execute||!pM("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}}ss();import{unlinkSync as fM}from"node:fs";function Ji(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Rv(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function gM(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function vv(e={}){let r=e.execute===!0||Ji("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Ji("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Ji("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Rv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Ft({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=gM(o.dumps,n,t),i=[],a=[],l=0;for(let c of s){if(!r){a.push({path:c.path,reason:"dry_run"});continue}try{fM(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function bv(e){return e?Ji("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Rv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}ss();function Ve(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var zi=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ne(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as hM}from"node:child_process";import{existsSync as kM}from"node:fs";import yM from"node:path";var RM=5e3;function vM(e,r){if(!kM(yM.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=hM("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:RM}),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 Sv(e){let r=vM(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
181
+ `).map(t=>t.trim()).filter(Boolean)}var Xi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Sv(t)??[];return this.cache.set(t,o),o}};var Qi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=_t(r);return this.cache.set(r.id,n),n}};function bM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function wv(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:bM(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 SM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Ue(),t=hv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function wM(e){return typeof e=="string"?{reason:e}:e}function bn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Zi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Hr(e.path,t)}}function xv(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 xM(e,r){return e.kind==="remove_next_cache"?VR(e,r):jR(e,r)}function _M(e,r,t){return e.kind==="remove_next_cache"?Vi(e.path,r,t):ji(e.path,r,t)}function EM(e){let r=new Map;for(let t of e)for(let[n,o]of iv(t))r.set(n,o);return r}function _v(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function Ev(e){return e.indexed?!1:vu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function CM(e={}){let r=yu(e),t=kv();r=yv(r,t);let n=SM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=_R(n.scanRoots,n.now),s=r.finalizeStaleRuns?Lo().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ve("finalize",`${s.length} stale run(s) marked terminal`),Ve("index","building worktree index");let i=EM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Qi,gitStatusCache:new Xi,gitRevCache:new zi},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ve("root",C);let re=Ge.join(C,"worktrees"),ke=sv(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},hr=r.scanDependencyCaches?tv(Ye):[];Ve("dependency",r.scanDependencyCaches?`${hr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let $r=0;for(let F of hr){if(p())break;$r+=1,$r%50===0&&Ve("dependency",`${$r}/${hr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=_M(M,C,re);if(ie){bn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=_v(M,re),Re=ke.get(Ge.resolve(ye))??null,kr=Ev({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=du({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:kr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){bn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(xM(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of XR(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Gi(M.path,C,re);if(ie){bn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=_v(M,re),Re=ke.get(Ge.resolve(ye))??null,kr=Ev({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=bR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:kr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){bn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(GR(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...QR(Ye),...ov(Ye)];Ve("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let F of j){if(p())break;te+=1,te%50===0&&Ve("worktrees",`${te}/${j.length} evaluated`);let D=Ge.resolve(F.path);if(T.has(D))continue;T.add(D);let M={...F,path:D},ie=ke.get(Ge.resolve(M.path))??null,ye=ie?null:pv({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=vR({indexed:ie,worktreePath:Ge.resolve(M.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(Re){let{reason:kr,detail:V}=wM(Re);bn(l,M.path,kr,V),c.push({...M,executed:!1,skipped:!0,skipReason:kr});continue}c.push(qR(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of TR({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=M.runId??Ge.basename(D),ye=OR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){bn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(YR(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,y=0,k=0,b=0,g=0;for(let C of c)C.bytes&&(m+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(y+=C.bytes),C.executed?(b+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(f+=1)):C.skipped&&(g+=1,C.skipReason==="dry_run"&&C.bytes&&(y+=C.bytes));let h=r.accountBytes?fv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Ft(),E=r.execute&&bv(w),S=E?vv({execute:!0}):null,_=w?{observed:!0,execute:E,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,b+=S.removed.length,Ve("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ve("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=wR(c,l),$=wv({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:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:xv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{}});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:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:xv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function Cv(e){let r=uv(e);return CM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Pv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as AM}from"node:fs/promises";import{homedir as IM}from"node:os";import Ot from"node:path";On();var PM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},I9=Object.keys(PM);function Av(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 Iv(e,r){let t=Av(e),n=Av(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}var OM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function Sn(e){let r=e?.trim();return r||null}function TM(e){return[...new Set(e.filter(r=>!!r))]}function NM(){let e=IM(),r=Sn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Sn(process.env.OPENCLAW_NPM_ROOT)??Ot.join(e,".openclaw","npm"),t=Sn(process.env.KYNVER_NPM_GLOBAL_ROOT)??Sn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Sn(process.env.NPM_CONFIG_PREFIX)?Ot.join(Sn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Ot.join(e,".npm-global","lib","node_modules"));return TM([Ot.join(r,"lib","node_modules"),Ot.join(r,"node_modules"),t.endsWith("node_modules")?t:Ot.join(t,"lib","node_modules")])}async function DM(e){try{let r=JSON.parse(await AM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function MM(e){let r=NM(),t=new Set,n=[];for(let o of r){let s=Ot.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Ov(e=new Date().toISOString()){let r={};for(let t of OM){let n=null;for(let o of MM(t)){let s=await DM(o);s&&(!n||Iv(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 WM}from"node:child_process";var LM=1e4,BM=4*1024*1024,Tv=(e,r,t)=>{try{let n=WM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??LM,maxBuffer:BM});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 ea(e,r,t){return`${e} ${r} ${t}`}function Su(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 Nv(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 UM=8e3,FM=30,KM=100,HM=400,$M=3600*1e3,wu=0;function _u(){return Date.now()<wu}function jM(e){let r=`${e.stdout}
182
+ ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Dv(e){jM(e)&&(wu=Math.max(wu,Date.now()+$M))}function xu(e,r){if(_u())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Dv(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function VM(e,r,t,n){if(_u())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Dv(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Eu(e){return _u()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function wn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function GM(e){return Array.isArray(e)?e.map(r=>wn(r)).filter(r=>r!==null).slice(0,FM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function YM(e,r,t){let n=xu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:GM(n.statuses)}:null}var Mv={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Eu,collect(e,r){let t=Nv(e);if(!t)return null;let n=VM(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=wn(n.author),s=wn(n.mergeCommit),i=wn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,UM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>wn(u)).filter(u=>u!==null).slice(0,KM).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>wn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,HM):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Wv={provider:"github",kind:"commit_status",version:"1",isAvailable:Eu,collect(e,r){let t=Su(e);return t?YM(r,t.repo,t.sha):null}},Lv={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Eu,collect(e,r){let t=Su(e);if(!t)return null;let n=xu(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=xu(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var Pu=[];function Cu(e){Pu.some(r=>r.provider===e.provider&&r.kind===e.kind)||Pu.push(e)}function Bv(e,r){return Pu.find(t=>t.provider===e&&t.kind===r)??null}function Uv(){Cu(Mv),Cu(Wv),Cu(Lv)}var qM=1,JM=25e3;function Fv(e,r={}){Uv();let t=r.run??Tv,n=r.now??(()=>new Date),o=r.maxSubjects??qM,s=Date.now()+(r.deadlineMs??JM),i=new Set,a=e.filter(m=>{let f=ea(m.provider,m.kind,m.subject);return i.has(f)?!1:(i.add(f),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,f)=>a[(l+f)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let m of u){let f=ea(m.provider,m.kind,m.subject),y=n(),k=r.cache?.get(f,y)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=Bv(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${b.provider} ${b.kind}`,h=p.get(g);if(h===void 0&&(h=b.isAvailable(t),p.set(g,h)),!h){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,f,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let w=b.collect(m.subject,t);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(E),r.cache?.set(f,E,n())}return d}B();O();import eW from"node:path";B();O();import Kv from"node:path";var zM="provider-evidence-wanted.json",XM="provider-evidence-cache.json",QM=600*1e3;function Hv(e){return Kv.join(N(e),zM)}function ZM(e){return Kv.join(N(e),XM)}function $v(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 jv(e){let r=I(Hv(e),null);return $v(r?.wanted)}function Vv(e,r){ue(Hv(e),{savedAt:new Date().toISOString(),wanted:r})}function Gv(e,r={}){let t=r.ttlMs??QM,n=ZM(e),s={...I(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ue(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Yv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?$v(r):null}var rW="provider-evidence-shared-cache.json",tW=6e4,nW=1,oW=1;function Au(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function sW(){return eW.join(le().harnessRoot,rW)}function iW(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?nW:oW;return Au(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,Au("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function qv(){return Au("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",tW)}function aW(e){return Math.floor(e.getTime()/6e4)*6e4}function lW(e){return`${e.provider}:${e.kind}`}function Jv(e,r={}){let t=Gv(e,{ttlMs:r.ttlMs??qv()}),n=r.file??sW(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??qv(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let m=s[u];if(!m)return null;let f=Date.parse(m.observedAt);return!Number.isFinite(f)||d.getTime()-f>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let m=iW(u.provider);if(m===0)return!0;let f=lW(u),y=aW(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();B();import zv from"node:path";var Xv="mesh-cron-lease.json";function Qv(e){let r=I(zv.join(N(e),Xv),null);return ok(e,r)??r}function Zv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(zv.join(N(e),Xv),t),nk(e,t)}function eb(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()}}function rb(e){let r=Th(),t=Br(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Vh());let s=jh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,zy())}return t.flags.planOutbox!=="off"&&Object.assign(o,zk()),t.flags.admission!=="off"&&(Object.assign(o,Jh()),t.flags.admission==="enforce"&&Object.assign(o,Zh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,ck()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:r.state,schemaVersion:r.schemaVersion,recovered:r.recovered,unavailableClass:r.reason?r.reason.split(":")[0]??null:null,flags:t.flags,flagSources:t.sources,flagWarningCount:t.warnings.length,divergenceCounters:o}}H();import{createHash as tb}from"node:crypto";import{access as cW,mkdir as vQ,readFile as nb,rename as bQ,writeFile as SQ}from"node:fs/promises";import{constants as uW}from"node:fs";import{homedir as Iu}from"node:os";import Ee from"node:path";var dW=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,pW=/^[A-Za-z0-9._:-]{8,128}$/;function mW(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Iu(),".kynver","mcp-installations.json")}function fW(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Iu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Iu(),".npm-global")}function gW(e){let r=Ee.resolve(e);if(Ee.basename(r)!=="node_modules")return r;let t=Ee.dirname(r);return Ee.basename(t)==="lib"?Ee.dirname(t):t}function hW(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function kW(e){try{return await cW(e,uW.R_OK),!0}catch{return!1}}async function yW(e=mW()){let r;try{r=JSON.parse(await nb(e,"utf8"))}catch{return[]}if(r.version!==1||!Array.isArray(r.installations)||r.installations.length>100)throw new Error("invalid MCP installation inventory");return r.installations.map(t=>{if(!t||!pW.test(t.inventoryKey)||!dW.test(t.packageName)||!["kynver","openclaw"].includes(t.prefix))throw new Error("invalid adopted MCP installation");if(t.packageName.includes("..")||t.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(t.connectionId&&t.connectionId.length>128)throw new Error("invalid connection identity");if(t.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(t.binName))throw new Error("invalid MCP bin name");let n=t.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...t,envAllowlist:[...new Set(n)],lifecycle:t.lifecycle??"runtime_stdio"}})}function RW(e,r,t){if(typeof e.bin=="string")return Ee.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Ee.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Ee.join(t,s):null}function vW(e){return tb("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function bW(e){let r=[];for(let t of e){let n=gW(fW(t.prefix)),o=(await Promise.all(hW(n,t.packageName).map(async m=>({candidate:m,ok:await kW(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await nb(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Ee.dirname(o),a=RW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=tb("sha256").update(JSON.stringify({prefix:n,binName:t.binName??null,envAllowlist:[...t.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],p={inventoryKey:t.inventoryKey,connectionId:t.connectionId??null,packageName:t.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};r.push({report:{...p,displayName:t.displayName?.trim()||t.packageName,inventoryFingerprint:vW(p),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:t.envAllowlist??[],lifecycle:c}})}return r}async function ob(){return bW(await yW())}import{createHash as SW,createHmac as wW,timingSafeEqual as xW}from"node:crypto";function Ou(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:SW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function sb(e,r,t){let n=Ou(r);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==t||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=wW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&xW(i,s)}aa();vr();import{createHash as _W}from"node:crypto";import{access as Tu,mkdtemp as EW,readFile as ub,rm as CW}from"node:fs/promises";import{constants as Nu}from"node:fs";import{tmpdir as PW}from"node:os";import xn from"node:path";import{spawn as AW}from"node:child_process";import{Client as IW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as OW}from"@modelcontextprotocol/sdk/client/stdio.js";var Du="https://registry.npmjs.org",ib=512*1024,Mu=2*6e4,TW=2e4;function db(){return"npm"}function ab(e,r){return Buffer.byteLength(e)>=ib?e:(e+r.toString("utf8")).slice(0,ib)}function NW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&xn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Du,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function pb(e,r,t=Mu,n){return new Promise((o,s)=>{let i,a;try{[i,a]=pe(e,r)}catch(m){s(m);return}let l=AW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:NW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=ab(c,m)}),l.stderr.on("data",m=>{u=ab(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&Me(l.pid,"SIGKILL")},t);l.once("error",m=>{clearTimeout(p),s(m)}),l.once("close",m=>{clearTimeout(p),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function DW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:_W(t).update(e).digest("base64")===n}async function MW(e,r,t,n){let o=await pb(db(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Du}`,"--ignore-scripts"],Mu,xn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||xn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=xn.join(n,i);if(!DW(await ub(a),t))throw new Error("artifact_integrity_mismatch");return a}async function WW(e,r,t){if((await pb(db(),["install","--global","--prefix",e,r,`--registry=${Du}`,"--no-audit","--fund=false"],Mu,t)).code!==0)throw new Error("package_install_failed")}async function mb(e){let r=JSON.parse(await ub(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function LW(e){let r={};for(let t of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[t];n!==void 0&&(r[t]=n)}return r}async function lb(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Tu(e.local.binPath,Nu.X_OK).catch(async()=>Tu(e.local.binPath,Nu.R_OK));let r=new OW({command:e.local.binPath,args:[],env:LW(e.local.envAllowlist),stderr:"pipe"}),t=new IW({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([t.connect(r),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),TW)})]);let o=await t.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await t.close().catch(()=>{})}}async function cb(e,r,t,n,o){let s=await EW(xn.join(PW(),"kynver-mcp-update-"));try{let i=await MW(r,t,n,s);if(await o(),await WW(e.local.prefix,i,xn.join(s,"npm-cache")),await mb(e)!==t)throw new Error("installed_version_mismatch")}finally{await CW(s,{recursive:!0,force:!0})}}async function fb(e,r,t,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==r.inventoryKey||e.report.inventoryFingerprint!==r.inventoryFingerprint||e.report.packageName!==r.packageName)throw new Error("local_inventory_mismatch");if(r.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await t("preflight"),await Tu(e.local.prefix,Nu.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await mb(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await cb(e,r.packageName,r.targetVersion,r.targetIntegrity,async()=>{await t("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:r.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await t("restarting"),await t("verifying");let a=await lb(e);return{outcome:"succeeded",observedVersion:r.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!r.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await cb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await lb(e);return{outcome:"rollback_succeeded",observedVersion:r.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:r.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}import{randomBytes as Bu}from"node:crypto";import{mkdir as Uu,readFile as Fu,rename as VW,rm as ra,stat as GW,writeFile as Rb}from"node:fs/promises";import Tt from"node:path";import{createHmac as BW,timingSafeEqual as UW}from"node:crypto";import{mkdir as FW,readFile as KW,rename as HW,writeFile as $W}from"node:fs/promises";import{homedir as jW}from"node:os";import Wu from"node:path";function Lu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Wu.join(jW(),".kynver","state","mcp-updates")}function gb(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Wu.join(Lu(),`${e}.json`)}function hb(e,r){let t=Ou(r);return t?BW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function kb(e,r){try{let t=JSON.parse(await KW(gb(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=hb(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!UW(i,a)?null:t}catch{return null}}async function yb(e,r){let t=hb(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=gb(e.operationId);await FW(Wu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await $W(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
183
+ `,{mode:384}),await HW(o,n)}var YW="host-mutation.lock";function vb(){return Tt.join(Lu(),YW)}async function bb(){try{let e=JSON.parse(await Fu(Tt.join(vb(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:Sb(e.pid)}}catch{return null}}function Sb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function qW(e){try{return await GW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function wb(){return JW("mcp_update")}async function JW(e){let r=vb(),t=`${r}.reclaiming`;await Uu(Tt.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await qW(t))return null;for(let o=0;o<2;o+=1)try{await Uu(r,{mode:448});let s={pid:process.pid,nonce:Bu(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await Rb(Tt.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await ra(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Fu(Tt.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await ra(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Uu(t,{mode:448}),n=!0,await Rb(Tt.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Bu(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Fu(Tt.join(r,"owner.json"),"utf8"))}catch{return null}if(Sb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Bu(8).toString("hex")}`;await VW(r,a),await ra(a,{recursive:!0,force:!0})}return null}finally{n&&await ra(t,{recursive:!0,force:!0})}}function ta(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function zW(e){if(!e||typeof e!="object")return null;let r=e.claim;if(!r||typeof r!="object"||r.waitingForIdle!==!1)return null;let t=r.command;return t&&typeof t=="object"?t:null}function xb(e,r){let t=r.claims;return e.inventoryKey===t.inventoryKey&&e.packageName===t.packageName&&e.installedVersion===t.installedVersion&&e.targetVersion===t.targetVersion&&e.targetIntegrity===t.targetIntegrity&&e.rollbackIntegrity===t.rollbackIntegrity&&e.item.report.inventoryKey===t.inventoryKey&&e.item.report.packageName===t.packageName}function XW(e,r){return{inventoryKey:r.claims.inventoryKey,packageName:r.claims.packageName,installedVersion:r.claims.installedVersion,targetVersion:r.claims.targetVersion,targetIntegrity:r.claims.targetIntegrity,rollbackIntegrity:r.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function _b(e){let r=Q(e.baseUrl),t=await ob();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await kt(ta(r,e.agentOsId,"inventory"),e.secret,{items:t.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await wb();if(!o){let s=await bb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await kt(ta(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=zW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!sb(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await kb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!xb(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let g=t.find(h=>h.report.inventoryKey===i.claims.inventoryKey);if(!g||g.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=g,c=a&&xb(a.recovery,i)?a.recovery:XW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await yb({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await kt(ta(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:g})).ok)throw new Error("progress_rejected");p=g,await d(g,!1)},f=g=>m(g),y=()=>m(p),k;try{k=await fb(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await kt(ta(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return b.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:k.outcome}}finally{await o.release()}}function QW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function ZW(e,r){let t=q(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=I(Eb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||qr(a))continue;if(yo(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!xe(l))continue;let c=Ht({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await To({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function eL(e,r,t,n,o){let s=Q(n.baseUrl?String(n.baseUrl):void 0),i=await ee(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await Ov(),c=Bs(r),u=null;try{let E=jv(r);if(E.length>0){let S=Jv(r);u=Fv(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Fr()!=="off"){let E=Gt();qh({liveWorkers:E}),Qh({liveWorkers:E})}else Gh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=Eb.join(Ar(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?qr($):!1}catch{return!1}};await Qy({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=rb({hasLiveWorker:d})}catch{p=null}let m=null;try{m=cd({control:Lt(e),supervisor:md(),inFlightWorkers:Gt().length})}catch{m=null}let f=Qv(r),y=Qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Tc(r),resourceGate:t,boxResourceSnapshot:lR(t,{harnessRunId:r,boxKind:Sr(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...y?{daemonEventLoop:y}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=Yv(k.response);if(b)try{Vv(r,b)}catch{}let g=eb(k);if(g)try{Zv(r,g)}catch{}let h=Dh(k);h&&Mh(e,h);let w=id(k);return w&&ld(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Cb(e){let r=String(Rr(String(e.run||""),"--run")),t=String(Rr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Tc(r);let o=await Ks(t,e),s=Fs(o),i=Yn({runId:r,configuredMaxWorkersOverride:s}),a=Pv()?Cv(r):void 0,l=await eL(t,r,i,e,a),c;if(n)try{let C=Q(e.baseUrl?String(e.baseUrl):void 0),re=await ee(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await _b({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:Gt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=yh(r,l),d=await kg(r,e),p=await ZW(r,e);p.some(C=>C.ok&&!C.skipped)&&oR();let m=Yn({runId:r,configuredMaxWorkersOverride:s}),f=qy(),y=await dR(r,e),k=Iy(m,l),b=k.maxStarts,g=Lt(t),h=ud(g);h&&(b=0);let w=QW()?await cR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=Ay(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Vc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),ke=kn(re);S+=ke,K=Math.max(0,K-ke),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Vc({...e,run:r,agentOsId:t},K),re=kn(C);S+=re,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}An();Yt();An();function Pb(e){return Qo(Lt(e))!=="stopped"?null:Gt().length}function Ab(e){if(!e||typeof e!="object")return!1;let r=e;return r.type==="tick"&&typeof r.id=="number"&&typeof r.agentOsId=="string"&&!!r.args&&typeof r.args=="object"}function rL(e){e&&(iR({admission:e.admission,ownerKind:e.ownerKind}),pd(e.ownerKind))}async function tL(e,r={}){try{e.instructionBundle&&ed(e.instructionBundle.bundle,e.instructionBundle.source),Xu(e.eventLoopReport);let t=await(r.runTick??Cb)(e.args),n=(r.countInFlightWorkers??Pb)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function Ib(e,r,t={}){rL(r);let n=Promise.resolve();e.on("message",o=>{Ab(o)&&(n=n.then(async()=>{e.postMessage(await tL(o,t))}))})}Ob?Ib(Ob,nL):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);