@kynver-app/runtime 0.2.135 → 0.2.138

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 Ob}from"node:child_process";function Db(e){return["/PID",String(e),"/T","/F"]}function Mb(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Tb||/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 Wb(e){let r=Ob("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:Nb});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Lb(e){return Number.isInteger(e)&&e>0}function De(e,r="SIGTERM",t={}){if(!Lb(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??Wb;return Mb(s(Db(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 Tb,Nb,ea=P(()=>{"use strict";Tb=128,Nb=15e3});import{existsSync as Bb,mkdirSync as Ub,readFileSync as Qu,readdirSync as qW,renameSync as Fb,rmSync as Kb,statSync as Zu,writeFileSync as Hb}from"node:fs";import{randomBytes as $b}from"node:crypto";import jb from"node:path";function Je(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function kr(e,r){return e||Je(`missing ${r}`),e}function wn(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){Ub(jb.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${$b(4).toString("hex")}.tmp`;try{Hb(t,`${JSON.stringify(r,null,2)}
2
- `),Fb(t,e)}catch(n){try{Kb(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Fo(e){return String(e).replace(/\/+$/,"")}function Ko(e){try{return Zu(e).size}catch{return 0}}function Ho(e){try{return Zu(e).mtime.toISOString()}catch{return null}}function Nt(e,r){return Bb(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 Tb}from"node:child_process";function Mb(e){return["/PID",String(e),"/T","/F"]}function Wb(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Nb||/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 Lb(e){let r=Tb("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:Db});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Bb(e){return Number.isInteger(e)&&e>0}function De(e,r="SIGTERM",t={}){if(!Bb(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??Lb;return Wb(s(Mb(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 Nb,Db,ea=P(()=>{"use strict";Nb=128,Db=15e3});import{existsSync as Ub,mkdirSync as Fb,readFileSync as Qu,readdirSync as JW,renameSync as Kb,rmSync as Hb,statSync as Zu,writeFileSync as $b}from"node:fs";import{randomBytes as jb}from"node:crypto";import Vb 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 wn(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){Fb(Vb.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${jb(4).toString("hex")}.tmp`;try{$b(t,`${JSON.stringify(r,null,2)}
2
+ `),Kb(t,e)}catch(n){try{Hb(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Fo(e){return String(e).replace(/\/+$/,"")}function Ko(e){try{return Zu(e).size}catch{return 0}}function Ho(e){try{return Zu(e).mtime.toISOString()}catch{return null}}function Nt(e,r){return Ub(e)?Qu(e,"utf8").split(`
3
3
  `).slice(-r).join(`
4
- `):""}function $o(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 ra(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=P(()=>{"use strict";ea()});import{existsSync as Vb,readFileSync as Gb}from"node:fs";import{homedir as Yb}from"node:os";import qb from"node:path";function na(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ta(e){return typeof e=="string"&&e.trim()?e:null}function rd(e){let r=na(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=ta(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:ta(r.requestedByLabel),reason:ta(r.reason)}:null}function td(e){let r=na(na(e)?.response);return!r||r.runtimeControl===void 0?null:rd(r.runtimeControl)}function nd(e,r=Yb()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return qb.join(r,".kynver",`runtime-control-${t}.json`)}function od(e,r,t){try{let n=Dt(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 Dt(e,r){try{let t=nd(e,r);if(!Vb(t))return null;let n=JSON.parse(Gb(t,"utf8"));return n.agentOsId!==e?null:rd(n.control)}catch{return null}}function jo(e){return e?.desiredState??"running"}function Jb(e){return e==="keeper"||e==="desktop"}function zb(e,r,t=!1){let n=jo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function sd(e){return e.control?{policyVersion:e.control.policyVersion,state:zb(e.control,e.inFlightWorkers,e.exiting),supervised:Jb(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function id(e){let r=jo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function ld(e){ad=e}function cd(){return ad}var ad,xn=P(()=>{"use strict";O();ad=null});import{homedir as ud}from"node:os";import dd from"node:path";function Xb(e){return e==="~"?ud():e.startsWith("~/")||e.startsWith("~\\")?dd.join(ud(),e.slice(2)):e}function Me(e){return dd.resolve(Xb(e))}var $r=P(()=>{"use strict"});function sS(e){let r=e[oS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function iS(e,r={}){return Zb.has(e)?!0:tS.has(e)||r.operatorAllow?.has(e)||nS.some(t=>e.endsWith(t))?!1:eS.some(t=>e.endsWith(t))}function oa(e){let r=sS(e),t={...e};for(let n of Object.keys(t))iS(n,{operatorAllow:r})&&delete t[n];return t}var Qb,Zb,eS,rS,tS,nS,oS,sa=P(()=>{"use strict";Qb=["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"],Zb=new Set(Qb),eS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],rS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],tS=new Set(rS),nS=["_PUBLIC_KEY"],oS="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=aS(e,r,n);if(t.throwError)throw new Error(o);Je(o)}return n.stdout||""}function aS(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 _n(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 Vo(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 Mt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Mt(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 Mt(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 Mt(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";$r();O();sa()});import{homedir as fd}from"node:os";import ia from"node:path";function cS(e=fd()){return ia.join(e,".kynver",lS)}function hd(e,r=fd()){return ia.resolve(e)===ia.resolve(cS(r))}var lS,gd,aa=P(()=>{"use strict";de();lS="workspace",gd="main"});import{existsSync as ca,readFileSync as yd}from"node:fs";import{homedir as uS}from"node:os";import ze from"node:path";import{fileURLToPath as dS}from"node:url";function mS(e){let r=ze.join(e,"package.json");if(!ca(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 mS(e)==="kynver"}function kd(e){let r=ze.resolve(e);if(!ca(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 fS(e=import.meta.url){let r=ze.dirname(dS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ca(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 la(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 gS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];la(t,n,kd(r),"cwd_git",{requireMonorepo:!1});let o=fS(e?.runtimeModuleUrl??import.meta.url);o&&la(t,n,kd(o),"runtime_checkout");let s=uS();for(let a of pS)la(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 Go(e){return gS(e)[0]??null}var pS,En=P(()=>{"use strict";de();$r();aa();pS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sd,readFileSync as hS}from"node:fs";import it from"node:path";function yS(e){return e.includes("/")||e.includes("\\")}function RS(e){return(e.PATHEXT||kS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function vS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function bS(e,r={}){let t=r.env??process.env,n=r.exists??Sd,o=RS(t),s=it.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(yS(e)||it.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of vS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(it.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function bd(e){return e.replace(/^[\\/]+/,"")}function wS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=SS.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 xS(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=bS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=it.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>hS(m,"utf8")),i=r.exists??Sd,a;try{a=s(n)}catch{throw new Cn(n)}let l=wS(a);if(!l)throw new Cn(n);let c=it.win32.dirname(n),u=it.win32.join(c,l);if(!i(u))throw new Cn(n);let d=it.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=xS(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Cn,kS,vd,SS,yr=P(()=>{"use strict";Cn=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},kS=".COM;.EXE;.BAT;.CMD";vd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,SS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var wd=P(()=>{"use strict";yr()});function Ed(e){let r=Fo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===xd?(t.hostname=`www.${xd}`,Fo(t.toString())):r}catch{return r}}function Pn(e){if(e?.trim())return Ed(Fo(e.trim()))}async function An(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,In=P(()=>{"use strict";O();xd="kynver.com";_d=10});function at(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 Yo(e,r){return e[r]?.trim()||null}function Cd(e){let r=e?.split(":")[0]?.trim();return r?at(r):null}function Rr(e=process.env,r={}){let t=[],n=Cd(r.boxId),o=Cd(Yo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==at(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:at(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Yo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==at(i)&&t.push(`KYNVER_BOX_ID=${Yo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:at(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=Yo(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 vr(e={},r=process.env){return Rr(r,e).boxKind}var We=P(()=>{"use strict"});function ua(e,r){return e==="forge"?4:Math.max(1,r)}function On(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var qo=P(()=>{"use strict"});import{readFileSync as _S}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=_S("/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 ES,readFileSync as CS,statfsSync as PS}from"node:fs";function da(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ES(e))continue;let r=CS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Od(e={}){if(!(e.forceWsl===void 0?da():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.wslHostFreeWarnBytes??AS,o=e.wslHostFreeCriticalBytes??IS,s=e.statfs??PS,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. ${OS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function OS(){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 AS,IS,Wt,pa=P(()=>{"use strict";AS=25*1024*1024*1024,IS=12*1024*1024*1024,Wt="/mnt/c"});import{execFileSync as Td}from"node:child_process";import{existsSync as zo,readFileSync as Nd,readdirSync as TS,statSync as NS}from"node:fs";import ma from"node:path";function Jo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function 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()||Wt;return r&&zo(ma.join(t,"Users",r))?r:null}function BS(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.windowsUser??Dd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function US(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 FS(){try{if(zo("/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 KS(e){return!!(e&&/wsl-capture-crash/i.test(e))}function HS(e,r=Wt){let t=ma.join(r,"Users",e,".wslconfig");if(!zo(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 $S(e){if(!zo(e))return[];let r=TS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=ma.join(e,n.name);try{let s=NS(o),i=US(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 Lt(e={}){if(!(e.forceWsl===void 0?da():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.windowsUser??Dd(),o=e.warnBelowBytes??Jo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",DS),s=e.criticalBelowBytes??Jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",MS),i=e.warnCount??Jo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",WS),a=e.criticalCount??Jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",LS),l=(e.readCorePattern??FS)(),c=KS(l),u=null;n&&(u=(e.readWslConfig??HS)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=BS({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??$S)(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}). `+jS({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 jS(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 DS,MS,WS,LS,Xo=P(()=>{"use strict";pa();DS=5*1024*1024*1024,MS=10*1024*1024*1024,WS=2,LS=4});import{statfsSync as VS}from"node:fs";function jr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??GS,n=e.diskFreeCriticalBytes??YS,o=e.diskMaxUsedPercent??qS,s=e.diskHardMaxUsedPercent??JS,i=VS(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:Lt(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("; ")),zS({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 zS(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 GS,YS,qS,JS,Tn=P(()=>{"use strict";Xo();pa();GS=30*1024*1024*1024,YS=15*1024*1024*1024,qS=80,JS=90});import{existsSync as XS,readdirSync as QS}from"node:fs";import ZS from"node:path";function sr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=ZS.join(N(e.id),"workers");if(!XS(t))return[...r];for(let n of QS(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Nn=P(()=>{"use strict";B();O()});function fa(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=fa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=fa(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=fa(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 ew,readFileSync as rw}from"node:fs";function Bd(e){return e==="complete"}function br(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(!ew(e))return r;let t=Date.now()+tw,n=new Date(t).toISOString(),o=rw(e,"utf8").split(`
6
- `).filter(Boolean);for(let s of o){let i=wn(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 tw,lt=P(()=>{"use strict";Ld();O();tw=6e4});function Fd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Qo(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&&nw.has(r))}function sw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function iw(e){if(!e||e.includes("*"))return null;let r=sw(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 ga(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function aw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function lw(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 cw(e){let r=!1,t=e.map((o,s)=>{let i=aw(o),a=e[s-1];return a&&Ud.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=lw(t);if(n.length===2){let[o,s]=n;if(ga(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=iw(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 Zo(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=Qo(r);if(!t.length)return{command:r,wrapped:!1};let n=Fd(t[0]);if(!n||!ow.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 uw(e,r){let t=e.trim(),n=Qo(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 dw(e){let r=e.trim(),t=Zo(r),n=Qo(t.command);if(!n.length||!Kd(n))return{segment:r,changed:!1};let o=cw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:uw(r,s),changed:!0}:{segment:s,changed:!0}}function ha(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=dw(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=Zo(e).command,t=Qo(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 pw(e){let{pattern:r,target:t}=Vd(e);return r?ga(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 mw(e){let{pattern:r,target:t}=Vd(e);if(!r)return null;if(ga(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 fw(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 gw(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 ka(e){let r=e.meta?.trim()||(e.command?gw(e.command):null)||null;if(r){let t=pw(r),n=fw(t);if(n)return n;let o=mw(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=ha(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 nw,ow,Ud,Gd=P(()=>{"use strict";nw=new Set(["rg","ripgrep","grep"]),ow=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 Dn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function yw(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 Mn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Rw(e){let r=e.metadata;if(!Mn(r))return null;let t=r.vulnerabilities;if(!Mn(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 vw(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 bw(e,r){let t=e.error;if(Mn(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?Dn(o.split(`
7
- `).find(Boolean)??o,160):"npm audit failed"}function Sw(e){let r=`${e.stdout}
8
- ${e.stderr}`.trim(),t=yw(r);if(!t||!Mn(t)){let o=Dn(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(Mn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${bw(t,e.stderr)}`};let n=Rw(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:vw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function ww(e){return hw.test(e)}function xw(e){let r=Zo(e).command;return Yd.test(e)||Yd.test(r)||jd(e)}function _w(e){let r=ka({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&&kw.test(n)){let i=Dn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ha(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=Dn(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(ww(e.command)){let i=r.trim()||n.trim()||t.trim();return Sw({exitCode:e.exitCode,stdout:i,stderr:t})}if(xw(e.command))return _w({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ka({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=Dn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var hw,Yd,kw,Jd=P(()=>{"use strict";Gd();hw=/\bnpm\s+audit\b/i,Yd=/\b(rg|ripgrep)\b/i,kw=/\b(error|invalid|unknown|panic|not found)\b/i});function Wn(e){return typeof e=="string"&&Ew.test(e.trim())}function es(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 Ew,rs=P(()=>{"use strict";Ew=/^(?: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 Cw[e.trim()]}function Xd(e){return e?["--fallback-model",e]:[]}var Le,ct,Cw,Qd,Ln=P(()=>{"use strict";Le="claude-sonnet-5-5",ct="claude-opus-5-5",Cw={[Le]:"claude-sonnet-4-6",[ct]:"claude-opus-4-8"};Qd=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function ya(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Pw(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"&&ya(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"||!ya(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=ya(r.usage)?Pw(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 Ra(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function rp(){return{assistantText:""}}function Aw(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Iw(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=(Ra(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 Ow(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 Aw(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Ow(e))return null;let t=Ra(e.stats)?Iw(e.stats):void 0;if(e.status==="error"){let o=Ra(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 Tw,readFileSync as Nw}from"node:fs";function Dw(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Mw(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 Ww(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",es(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Bt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Lw(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Bw(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 Uw(e,r){let t=Lw(r);if(!t)return;let n=Bt(t.input_tokens)??Bt(t.inputTokens)??Bt(t.prompt_tokens),o=Bt(t.output_tokens)??Bt(t.outputTokens)??Bt(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Bw(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Fw(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 Kw(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function ut(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Tw(e))return r;let t=Nw(e,"utf8").split(`
9
- `).filter(Boolean),n=null,o=rp();for(let s of t){let i=wn(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=Dw(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=Mw(p);m&&(r.currentTool=m)}let l=Fw(i);l&&Kw(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"&&Ww(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"}Uw(r,i)}return r}var Bn=P(()=>{"use strict";Jd();O();rs();Ln();ep();np()});import{accessSync as Hw,constants as $w,existsSync as jw,readFileSync as Vw}from"node:fs";import va from"node:path";function sp(e){return va.join(e,Gw)}function Yw(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 Hw(e,$w.X_OK),!0}catch{return!1}}function qw(e,r=process.env){if(!e)return!1;if(e.includes("/"))return op(e);for(let t of(r.PATH??"").split(va.delimiter))if(t&&op(va.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!Yw(o,n.platform)?[e,r]:qw(e,o)?[n.nodeExecutable??process.execPath,["-e",Jw,sp(t),e,...r]]:[e,r]}function zw(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ts(e){if(!e)return null;let r=sp(e);if(!jw(r))return null;try{let t=JSON.parse(Vw(r,"utf8")),n=t.oomEvidence;return{exitCode:zw(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 Gw,Jw,Sr=P(()=>{"use strict";Gw="exit.json";Jw=String.raw`"use strict";
4
+ `):""}function $o(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 ra(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=P(()=>{"use strict";ea()});import{existsSync as Gb,readFileSync as Yb}from"node:fs";import{homedir as qb}from"node:os";import Jb from"node:path";function na(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ta(e){return typeof e=="string"&&e.trim()?e:null}function rd(e){let r=na(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=ta(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:ta(r.requestedByLabel),reason:ta(r.reason)}:null}function td(e){let r=na(na(e)?.response);return!r||r.runtimeControl===void 0?null:rd(r.runtimeControl)}function nd(e,r=qb()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return Jb.join(r,".kynver",`runtime-control-${t}.json`)}function od(e,r,t){try{let n=Dt(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 Dt(e,r){try{let t=nd(e,r);if(!Gb(t))return null;let n=JSON.parse(Yb(t,"utf8"));return n.agentOsId!==e?null:rd(n.control)}catch{return null}}function jo(e){return e?.desiredState??"running"}function zb(e){return e==="keeper"||e==="desktop"}function Xb(e,r,t=!1){let n=jo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function sd(e){return e.control?{policyVersion:e.control.policyVersion,state:Xb(e.control,e.inFlightWorkers,e.exiting),supervised:zb(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function id(e){let r=jo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function ld(e){ad=e}function cd(){return ad}var ad,xn=P(()=>{"use strict";O();ad=null});import{homedir as ud}from"node:os";import dd from"node:path";function Qb(e){return e==="~"?ud():e.startsWith("~/")||e.startsWith("~\\")?dd.join(ud(),e.slice(2)):e}function Me(e){return dd.resolve(Qb(e))}var jr=P(()=>{"use strict"});function iS(e){let r=e[sS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function aS(e,r={}){return eS.has(e)?!0:nS.has(e)||r.operatorAllow?.has(e)||oS.some(t=>e.endsWith(t))?!1:rS.some(t=>e.endsWith(t))}function oa(e){let r=iS(e),t={...e};for(let n of Object.keys(t))aS(n,{operatorAllow:r})&&delete t[n];return t}var Zb,eS,rS,tS,nS,oS,sS,sa=P(()=>{"use strict";Zb=["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"],eS=new Set(Zb),rS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],tS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],nS=new Set(tS),oS=["_PUBLIC_KEY"],sS="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=lS(e,r,n);if(t.throwError)throw new Error(o);Je(o)}return n.stdout||""}function lS(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 _n(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 Vo(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 Mt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Mt(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 Mt(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 Mt(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();sa()});import{homedir as fd}from"node:os";import ia from"node:path";function uS(e=fd()){return ia.join(e,".kynver",cS)}function hd(e,r=fd()){return ia.resolve(e)===ia.resolve(uS(r))}var cS,gd,aa=P(()=>{"use strict";de();cS="workspace",gd="main"});import{existsSync as ca,readFileSync as yd}from"node:fs";import{homedir as dS}from"node:os";import ze from"node:path";import{fileURLToPath as pS}from"node:url";function fS(e){let r=ze.join(e,"package.json");if(!ca(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 fS(e)==="kynver"}function kd(e){let r=ze.resolve(e);if(!ca(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 gS(e=import.meta.url){let r=ze.dirname(pS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ca(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 la(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 hS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];la(t,n,kd(r),"cwd_git",{requireMonorepo:!1});let o=gS(e?.runtimeModuleUrl??import.meta.url);o&&la(t,n,kd(o),"runtime_checkout");let s=dS();for(let a of mS)la(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 Go(e){return hS(e)[0]??null}var mS,En=P(()=>{"use strict";de();jr();aa();mS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sd,readFileSync as kS}from"node:fs";import it from"node:path";function RS(e){return e.includes("/")||e.includes("\\")}function vS(e){return(e.PATHEXT||yS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function bS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function SS(e,r={}){let t=r.env??process.env,n=r.exists??Sd,o=vS(t),s=it.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(RS(e)||it.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of bS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(it.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function bd(e){return e.replace(/^[\\/]+/,"")}function xS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=wS.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 _S(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=SS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=it.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>kS(m,"utf8")),i=r.exists??Sd,a;try{a=s(n)}catch{throw new Cn(n)}let l=xS(a);if(!l)throw new Cn(n);let c=it.win32.dirname(n),u=it.win32.join(c,l);if(!i(u))throw new Cn(n);let d=it.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=_S(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Cn,yS,vd,wS,Rr=P(()=>{"use strict";Cn=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},yS=".COM;.EXE;.BAT;.CMD";vd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,wS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var wd=P(()=>{"use strict";Rr()});function Ed(e){let r=Fo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===xd?(t.hostname=`www.${xd}`,Fo(t.toString())):r}catch{return r}}function Pn(e){if(e?.trim())return Ed(Fo(e.trim()))}async function An(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,In=P(()=>{"use strict";O();xd="kynver.com";_d=10});function at(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 Yo(e,r){return e[r]?.trim()||null}function Cd(e){let r=e?.split(":")[0]?.trim();return r?at(r):null}function vr(e=process.env,r={}){let t=[],n=Cd(r.boxId),o=Cd(Yo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==at(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:at(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Yo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==at(i)&&t.push(`KYNVER_BOX_ID=${Yo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:at(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=Yo(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 ua(e,r){return e==="forge"?4:Math.max(1,r)}function On(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var qo=P(()=>{"use strict"});import{readFileSync as ES}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=ES("/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 CS,readFileSync as PS,statfsSync as AS}from"node:fs";function da(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!CS(e))continue;let r=PS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Od(e={}){if(!(e.forceWsl===void 0?da():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.wslHostFreeWarnBytes??IS,o=e.wslHostFreeCriticalBytes??OS,s=e.statfs??AS,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. ${TS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function TS(){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 IS,OS,Wt,pa=P(()=>{"use strict";IS=25*1024*1024*1024,OS=12*1024*1024*1024,Wt="/mnt/c"});import{execFileSync as Td}from"node:child_process";import{existsSync as zo,readFileSync as Nd,readdirSync as NS,statSync as DS}from"node:fs";import ma from"node:path";function Jo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function 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()||Wt;return r&&zo(ma.join(t,"Users",r))?r:null}function US(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.windowsUser??Dd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function FS(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 KS(){try{if(zo("/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 HS(e){return!!(e&&/wsl-capture-crash/i.test(e))}function $S(e,r=Wt){let t=ma.join(r,"Users",e,".wslconfig");if(!zo(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 jS(e){if(!zo(e))return[];let r=NS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=ma.join(e,n.name);try{let s=DS(o),i=FS(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 Lt(e={}){if(!(e.forceWsl===void 0?da():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.windowsUser??Dd(),o=e.warnBelowBytes??Jo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",MS),s=e.criticalBelowBytes??Jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",WS),i=e.warnCount??Jo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",LS),a=e.criticalCount??Jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",BS),l=(e.readCorePattern??KS)(),c=HS(l),u=null;n&&(u=(e.readWslConfig??$S)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=US({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??jS)(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}). `+VS({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 VS(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 MS,WS,LS,BS,Xo=P(()=>{"use strict";pa();MS=5*1024*1024*1024,WS=10*1024*1024*1024,LS=2,BS=4});import{statfsSync as GS}from"node:fs";function Vr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??YS,n=e.diskFreeCriticalBytes??qS,o=e.diskMaxUsedPercent??JS,s=e.diskHardMaxUsedPercent??zS,i=GS(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:Lt(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("; ")),XS({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 XS(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 YS,qS,JS,zS,Tn=P(()=>{"use strict";Xo();pa();YS=30*1024*1024*1024,qS=15*1024*1024*1024,JS=80,zS=90});import{existsSync as QS,readdirSync as ZS}from"node:fs";import ew from"node:path";function ir(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=ew.join(N(e.id),"workers");if(!QS(t))return[...r];for(let n of ZS(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Nn=P(()=>{"use strict";B();O()});function fa(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=fa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=fa(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=fa(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 rw,readFileSync as tw}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(!rw(e))return r;let t=Date.now()+nw,n=new Date(t).toISOString(),o=tw(e,"utf8").split(`
6
+ `).filter(Boolean);for(let s of o){let i=wn(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 nw,lt=P(()=>{"use strict";Ld();O();nw=6e4});function Fd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Qo(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&&ow.has(r))}function iw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function aw(e){if(!e||e.includes("*"))return null;let r=iw(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 ga(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function lw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function cw(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 uw(e){let r=!1,t=e.map((o,s)=>{let i=lw(o),a=e[s-1];return a&&Ud.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=cw(t);if(n.length===2){let[o,s]=n;if(ga(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=aw(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 Zo(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=Qo(r);if(!t.length)return{command:r,wrapped:!1};let n=Fd(t[0]);if(!n||!sw.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 dw(e,r){let t=e.trim(),n=Qo(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 pw(e){let r=e.trim(),t=Zo(r),n=Qo(t.command);if(!n.length||!Kd(n))return{segment:r,changed:!1};let o=uw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:dw(r,s),changed:!0}:{segment:s,changed:!0}}function ha(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=pw(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=Zo(e).command,t=Qo(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 mw(e){let{pattern:r,target:t}=Vd(e);return r?ga(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 fw(e){let{pattern:r,target:t}=Vd(e);if(!r)return null;if(ga(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 gw(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 hw(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 ka(e){let r=e.meta?.trim()||(e.command?hw(e.command):null)||null;if(r){let t=mw(r),n=gw(t);if(n)return n;let o=fw(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=ha(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 ow,sw,Ud,Gd=P(()=>{"use strict";ow=new Set(["rg","ripgrep","grep"]),sw=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 Dn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Rw(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 Mn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function vw(e){let r=e.metadata;if(!Mn(r))return null;let t=r.vulnerabilities;if(!Mn(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 bw(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 Sw(e,r){let t=e.error;if(Mn(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?Dn(o.split(`
7
+ `).find(Boolean)??o,160):"npm audit failed"}function ww(e){let r=`${e.stdout}
8
+ ${e.stderr}`.trim(),t=Rw(r);if(!t||!Mn(t)){let o=Dn(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(Mn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Sw(t,e.stderr)}`};let n=vw(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:bw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function xw(e){return kw.test(e)}function _w(e){let r=Zo(e).command;return Yd.test(e)||Yd.test(r)||jd(e)}function Ew(e){let r=ka({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&&yw.test(n)){let i=Dn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ha(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=Dn(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(xw(e.command)){let i=r.trim()||n.trim()||t.trim();return ww({exitCode:e.exitCode,stdout:i,stderr:t})}if(_w(e.command))return Ew({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ka({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=Dn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var kw,Yd,yw,Jd=P(()=>{"use strict";Gd();kw=/\bnpm\s+audit\b/i,Yd=/\b(rg|ripgrep)\b/i,yw=/\b(error|invalid|unknown|panic|not found)\b/i});function Wn(e){return typeof e=="string"&&Cw.test(e.trim())}function es(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 Cw,rs=P(()=>{"use strict";Cw=/^(?: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 Pw[e.trim()]}function Xd(e){return e?["--fallback-model",e]:[]}var Le,ct,Pw,Qd,Ln=P(()=>{"use strict";Le="claude-sonnet-5-5",ct="claude-opus-5-5",Pw={[Le]:"claude-sonnet-4-6",[ct]:"claude-opus-4-8"};Qd=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function ya(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Aw(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"&&ya(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"||!ya(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=ya(r.usage)?Aw(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 Ra(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function rp(){return{assistantText:""}}function Iw(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Ow(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=(Ra(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 Tw(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 Iw(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Tw(e))return null;let t=Ra(e.stats)?Ow(e.stats):void 0;if(e.status==="error"){let o=Ra(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 Nw,readFileSync as Dw}from"node:fs";function Mw(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Ww(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 Lw(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",es(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Bt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Bw(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Uw(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 Fw(e,r){let t=Bw(r);if(!t)return;let n=Bt(t.input_tokens)??Bt(t.inputTokens)??Bt(t.prompt_tokens),o=Bt(t.output_tokens)??Bt(t.outputTokens)??Bt(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Uw(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Kw(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 Hw(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function ut(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Nw(e))return r;let t=Dw(e,"utf8").split(`
9
+ `).filter(Boolean),n=null,o=rp();for(let s of t){let i=wn(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=Mw(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=Ww(p);m&&(r.currentTool=m)}let l=Kw(i);l&&Hw(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"&&Lw(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"}Fw(r,i)}return r}var Bn=P(()=>{"use strict";Jd();O();rs();Ln();ep();np()});import{accessSync as $w,constants as jw,existsSync as Vw,readFileSync as Gw}from"node:fs";import va from"node:path";function sp(e){return va.join(e,Yw)}function qw(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 $w(e,jw.X_OK),!0}catch{return!1}}function Jw(e,r=process.env){if(!e)return!1;if(e.includes("/"))return op(e);for(let t of(r.PATH??"").split(va.delimiter))if(t&&op(va.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!qw(o,n.platform)?[e,r]:Jw(e,o)?[n.nodeExecutable??process.execPath,["-e",zw,sp(t),e,...r]]:[e,r]}function Xw(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ts(e){if(!e)return null;let r=sp(e);if(!Vw(r))return null;try{let t=JSON.parse(Gw(r,"utf8")),n=t.oomEvidence;return{exitCode:Xw(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 Yw,zw,wr=P(()=>{"use strict";Yw="exit.json";zw=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);
@@ -70,40 +70,40 @@ child.on("error", (e) => {
70
70
  if (!child.pid) finish(127, null, String(e && e.message));
71
71
  });
72
72
  child.on("exit", (code, signal) => finish(code, signal));
73
- `});import Xw from"node:path";function ba(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&Zw.has(r)}function ns(e){return!!(e&&Qw.test(e))}function cp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!ba(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||ns(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=[ex(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 ex(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(rx,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(Xw.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(ts(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&ns(Nt(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 Qw,ap,Zw,lp,rx,Sa=P(()=>{"use strict";B();O();Sr();Qw=/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,Zw=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);lp=2048,rx=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 Un(e){let r=(e??"").trim();if(!r)return null;if(Wn(r))return{blocked:!0,reason:`provider authentication failed: ${fp(r)}`};for(let t of tx)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fp(r)}`};return null}var tx,wa=P(()=>{"use strict";rs();Ln();tx=[{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 nx(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 ox(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gp(e.head)}function sx(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 Ut(e){if(e.alive||nx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gp(e.headCommit)??ox(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:sx(s,r,t)}}var os=P(()=>{"use strict"});import{existsSync as ix,readFileSync as ax,statSync as yp}from"node:fs";import ss from"node:path";function dx(e,r=process.env){let t=e?cx:lx,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 px(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function xa(e){try{return yp(e).mtimeMs}catch{return-1}}function mx(e){let r=ss.join(e,".git");try{if(yp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(ax(r,"utf8"));return t?ss.resolve(e,t[1].trim()):null}catch{return null}}function hp(e){let r=mx(e);return[xa(e),r?xa(ss.join(r,"HEAD")):-2,r?xa(ss.join(r,"index")):-2].join(":")}function kp(e,r){return{changedFiles:_n(e),gitAncestry:Vo(e,{base:r.base,baseCommit:r.baseCommit})}}function fx(e,r){for(Vr.delete(e),Vr.set(e,r);Vr.size>ux;){let t=Vr.keys().next().value;if(t===void 0)break;Vr.delete(t)}}function Rp(e,r,t){let n=px(r);if(!e||!e.trim())return Fn.missingWorktree++,{changedFiles:[],gitAncestry:Mt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!ix(e))return Vr.delete(o),Fn.missingWorktree++,{changedFiles:[],gitAncestry:Mt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Vr.delete(o),Fn.liveProbes++,kp(e,r);let s=t.ttlMs??dx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=hp(e),l=Vr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Fn.hits++,l.probe;Fn.misses++;let c=kp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();fx(o,{fingerprint:hp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var lx,cx,ux,Vr,Fn,vp=P(()=>{"use strict";de();lx=10*6e4,cx=60*6e4,ux=2048,Vr=new Map,Fn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Kn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gx(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 hx(e){if(Kn(e.headCommit)||Kn(e.prUrl)||Kn(e.artifactBundlePath)||Kn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Kn(r.head))}function Ft(e){return gx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:hx(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 is=P(()=>{"use strict"});function _a(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 Kt(e){let r=e.trim();if(!r)return null;let t=_a(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=_a(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=_a(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 as=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 kx(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 kx(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 Ht(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function dt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ht(e)}function ls(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=Kt(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=dt(String(s.prUrl??s.pr_url??"")),a=Ht(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ht(s.mergeCommit??s.merge_commit),reason:Ht(s.reason)})}return n}function Pp(e,r){let t=[],n=dt(Ht(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=dt(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(!yx(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?dt(Ht(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?dt(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=>[ls(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>ls(dt(d)??d)).filter(Boolean)),c=Pp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(ls(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=ls(dt(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";as();Ep()});function vx(e){let r=Date.now();if(e.providerTerminalError||es(e.finalResult)||e.finalResult&&e.error?.trim()||Wn(e.error)||Wn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Un(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Tp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Sx(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=Ft(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(bx(e))return{state:"done",reason:"empty abandoned worker record"};let o=Un(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ut({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=ns(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>Rx)return{state:"needs_attention",reason:`no first stream event ${ra(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ea?{state:"stale",reason:`no log/event/heartbeat activity for ${ra(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 bx(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 Sx(e){let r=null;if(typeof e=="string"?r=Kt(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??br(t))}function Dp(e){let r=ut(e.stdoutPath),t=me(e.heartbeatPath);return Np(e,r.finalResult,t)}function J(e,r={}){let t=ut(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=Ko(e.stdoutPath),l=Ko(e.stderrPath),c=Ko(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=ed([t.lastEventAt,n.lastHeartbeatAt,Ho(e.stdoutPath),Ho(e.stderrPath),Ho(e.heartbeatPath)]),m=i?null:ts(e.workerDir),f=s&&!ba(s)?s:null,y=t.error||!i&&!s&&Nt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Nt(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=vx({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 Se(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 Ca(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 Rx,Ea,fe=P(()=>{"use strict";lt();Bn();Sa();Sr();rs();wa();os();vp();is();Op();as();O();Rx=18e4,Ea=6e5});import{readFileSync as wx}from"node:fs";function xx(e){if(!e||process.platform!=="linux")return null;try{return wx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wp(e){if(!e.pid||process.platform!=="linux")return!0;let r=xx(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 Gr(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 cs=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 _x(e=U(),r,t){let n=Lp(e.perWorkerMemBytes,us),o=Lp(e.memReserveBytes,ds),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ps)),i=fs({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??us,n=r.memReserveBytes??ds,o=r.memUtilization??ps,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,ms)}function Ex(){return Ad()}function Cx(e){let r=0;for(let t of sr(e)){let n=I(Up.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!Gr(n)||r++}return r}function Pa(){let e=0;for(let r of Xe())e+=Cx(r);return e}function $t(){let e=[];for(let r of Xe())for(let t of sr(r)){let n=I(Up.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&Gr(n)&&e.push({runId:r.id,workerName:t})}return e}function Hn(e){let r=e.config??U(),t=e.totalMemBytes??Bp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=_x(r,e.configuredMaxWorkersOverride,t),c=vr(r),u=e.freeMemBytes??Ex(),d=e.activeWorkers??Pa(),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=On(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:jr({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 us,ds,ps,ms,jt=P(()=>{"use strict";Id();H();We();qo();gs();Tn();B();Nn();cs();O();us=500*1024*1024,ds=4*1024*1024*1024,ps=.85,ms=64});function $n(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function fs(e){let r=e.config??{},t=e.env??process.env,n=$n(r.perWorkerMemBytes,us),o=$n(r.memReserveBytes,ds),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ps)),i=Fp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:$n(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=$n(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,ms),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&$n(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,ms),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var gs=P(()=>{"use strict";jt()});import{homedir as Px}from"node:os";import Ax from"node:path";var Kp,Aa=P(()=>{"use strict";Kp=Ax.join(Px(),".kynver",".env")});var Hp=P(()=>{"use strict"});var $p=P(()=>{"use strict";Hp()});var jp=P(()=>{"use strict"});var Ia=P(()=>{"use strict";$p();jp();xn()});import{existsSync as Ix,readFileSync as Ox}from"node:fs";function Oa(){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(Ix("/proc/version")){let e=Ox("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ta=P(()=>{"use strict"});var Vp=P(()=>{"use strict";Ta()});var hs=P(()=>{"use strict";Aa();$r();H();Ia();Vp()});import Nx from"node:os";function Na(e,r){let t=(r??Nx.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 Na(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}`:Na(o)}return`${r}:${qp(t)}`}function ks(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jp(r,e.boxKind):Na(e.boxKind,e.hostLabel)}var ys=P(()=>{"use strict";We();We()});var zp=P(()=>{"use strict";Aa();Ia();hs()});function vs(){return Rs}function Qp(e){if(!Rs)return e;if(!Xp)throw new Da;return Xp}function Qe(e,r=process.env){if(Rs)return;let t=r[e]?.trim();return t||void 0}function Wa(){if(Rs)throw new Ma}var Da,Ma,Rs,Xp,jn=P(()=>{"use strict";Da=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ma=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Rs=!1,Xp=null});import{existsSync as wr,mkdirSync as Dx,readdirSync as bs,renameSync as Zp,statSync as Mx}from"node:fs";import xr from"node:path";function rm(e){try{return Mx(e).isDirectory()}catch{return!1}}function Wx(e){if(!wr(e))return!0;for(let r of em){let t=xr.join(e,r);if(wr(t)&&(!rm(t)||bs(t).length>0))return!1}return!0}function Lx(e){let r=xr.join(e,"runs");if(!wr(r)||!rm(r))return!1;for(let t of bs(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=xr.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function Bx(e){let r=xr.join(e,"runs");if(!wr(r))return!1;for(let t of bs(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(xr.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Ux(e){let r=xr.join(e,"ghost");return wr(r)?!wr(xr.join(r,"runs")):Bx(e)}function tm(e){return Lx(e.sharedRoot)?Wx(e.forgeRoot)?Ux(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){Dx(r,{recursive:!0});for(let t of em){let n=xr.join(e,t),o=xr.join(r,t);if(wr(n)){if(wr(o)&&bs(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(wr(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 Fx}from"node:os";import ge from"node:path";function La(e=process.env){return e.HOME?.trim()||Fx()}function Ba(e=process.env){return ge.join(La(e),".kynver","harness")}function Ss(e){let r=ge.resolve(Me(e.trim()));for(;Kx.has(ge.basename(r));)r=ge.dirname(r);return r}function Hx(e,r=process.env){return ge.join(Ba(r),e)}function $x(e=process.env){let r=Ba(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(La(e),sm);return ve(t)}function ws(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Ss(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Ss(n),source:"config"};let o=Hx(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!jx(o))return{harnessRoot:o,source:"box_scoped"};let i=Ba(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"&&$x(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(La(r),sm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function jx(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,Kx,Ua=P(()=>{"use strict";$r();om();sm=ge.join(".openclaw","harness");Kx=new Set(["runs","worktrees"])});import im from"node:os";function xs(e){return e?.trim()?e.trim():null}function Vx(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Gx(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 Vt(e=U(),r=process.env,t={}){let n=Rr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||xs(r.KYNVER_BOX_KIND)),a=t.strict===!0||Gx(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=xs(e.runnerId),c=xs(r.KYNVER_RUNTIME_ID)??xs(r.OPENCLAW_RUNTIME_ID),u=l??c??Vx(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=fs({config:e,env:r,totalMemBytes:im.totalmem()}),m=On(n.boxKind,p.configuredMaxWorkers??ua(n.boxKind,p.autoCap)),f=ws({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 Vn=P(()=>{"use strict";H();We();qo();gs();Ua()});var lm=P(()=>{"use strict";En();We();ys();H();hs();zp();In();jn();Vn()});function ir(e){let r=e.trim().toLowerCase();return Jx[r]??r}var cm,qx,Jx,_s=P(()=>{"use strict";cm=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],qx=cm.join("|"),Jx={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";$r()});var dm=P(()=>{"use strict";um()});import{execFileSync as zx}from"node:child_process";function Ha(e=process.env){let r=e[Xx]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function Qx(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return zx(e,r,n)}function Zx(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Fa(e,r){let t=JSON.stringify(pt),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(Ha(e.env??process.env)==="file")return null;let t=Zx(e.platform??process.platform);return t?new Ka(t,e.exec):null}var pt,Xx,_r,Ka,mm=P(()=>{"use strict";pt="kynver",Xx="KYNVER_CREDENTIAL_STORE";_r=5e3;Ka=class{constructor(r,t=Qx){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",pt,"-a",r,"-w"],{timeoutMs:_r}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",pt,"account",r],{timeoutMs:_r}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("get",r)],{timeoutMs:_r}).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",pt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:_r}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",pt,"account",r],{input:`${t}
74
- `,timeoutMs:_r}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("set",r)],{input:`${t}
75
- `,timeoutMs:_r})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",pt,"-a",r],{timeoutMs:_r}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",pt,"account",r],{timeoutMs:_r}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("delete",r)],{timeoutMs:_r})}catch{}}}});function Gn(){return $a||($a=new ja),$a}var Va,e_,Es,ja,$a,Ga=P(()=>{"use strict";mm();Va="api-key",e_=6e4,Es=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"}},ja=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<e_)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=Ha(this.env);if(!this.keychain){if(n==="keychain")throw new Es(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 Es(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},$a=null});import{existsSync as gm,mkdirSync as t_,readFileSync as hm,writeFileSync as n_}from"node:fs";import{homedir as o_,totalmem as cF}from"node:os";import Ja from"node:path";function s_(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 i_(){if(!gm(fm))return null;try{return JSON.parse(hm(fm,"utf8"))}catch{return null}}function U(){let e=i_();return e?km(s_(e)):{}}function Cs(){if(Wa(),!gm(Ya))return{};try{return JSON.parse(hm(Ya,"utf8"))}catch{return{}}}function qa(e){Wa(),t_(za,{recursive:!0}),n_(Ya,`${JSON.stringify(e,null,2)}
76
- `,{mode:384})}function a_(e,r,t,n={}){let o=Cs();if(Gn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),qa(i);return}qa({...o,...n,[r]:t})}function l_(e,r){let t=Gn().read(e);return t||Cs()[r]}function Xa(){return Qp(c_)}function Er(){return Xa().getApiKey()}function Gt(e){return Xa().getRunnerToken(e)}function Qa(e,r){Xa().persistRunnerToken(e,r)}function Q(e){let r=Yn(e);return r||vm("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Za(e){return Yn(e)}function Yn(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 Pn(r)}function u_(e,r){let t=e||Gt(r)||(r?void 0:Gt(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 d_(e,r,t){let n=u_(e,r);if(n)return{ok:!0,secret:n};let o=Er(),s=Yn(t?.baseUrl);if(o&&r&&s)try{let i=await el(r,{baseUrl:s,apiKey:o});return Qa(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 d_(e,r,t);if(n.ok)return n.secret;vm(n.reason)}async function ym(e,r){let t=Er(),n=Yn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await el(e,{baseUrl:n,apiKey:t});return Qa(e,o),o}catch{return null}}async function Rm(e,r,t){let n=Er(),o=Yn(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 el(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Qa(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 el(e,r){let t=r?.apiKey||Er();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 An(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 za,fm,Ya,CF,PF,c_,H=P(()=>{"use strict";En();$r();aa();wd();In();We();qo();gs();Tn();hs();lm();_s();Vn();dm();jn();Ga();za=Ja.join(o_(),".kynver"),fm=Ja.join(za,"config.json"),Ya=Ja.join(za,"credentials");CF=500*1024*1024,PF=4*1024*1024*1024;c_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:l_(Va,"apiKey")},getRunnerToken(e){let r=Cs();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){a_(Va,"apiKey",e)},persistRunnerToken(e,r){qa({...Cs(),runnerToken:r,runnerTokenAgentOsId:e})}}});import rl from"node:path";function he(e){return Ss(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=Vt(r,process.env);return n.identity?n.identity.harnessRoot:ws({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return rl.join(he(e),"runs")}function Yt(e){return rl.join(he(e),"worktrees")}function bm(){let e=Be();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:Yt(e)}}function Cr(e,r){return rl.join(e,x(r))}var Ze=P(()=>{"use strict";H();Ua();Vn();O()});import{existsSync as Ps,readdirSync as p_,statSync as m_}from"node:fs";import mt from"node:path";function le(){return bm()}function q(e){let{runsDir:r}=le(),t=mt.join(Cr(r,x(e)),"run.json");return Ps(t)||Je(`run '${e}' not found`),I(t)}function Xe(){let{runsDir:e}=le();return Sm(e)}function As(e){return Sm(Ae(e))}function f_(e){try{return m_(e).isDirectory()}catch{return!1}}function Sm(e){if(!Ps(e))return[];let r=[];for(let t of p_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=mt.join(e,t.name);if(!f_(n))continue;let o=I(mt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function qt(e,r){let{runsDir:t}=le(),n=mt.join(Cr(t,x(e)),"run.json"),o=mt.join(Cr(t,x(e)),"workers",x(r),"worker.json");return Ps(o)||(Ps(n)||Je(`run '${e}' not found`),Je(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=le();ue(mt.join(Cr(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(mt.join(Cr(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return qn(r,e)}function qn(e,r){return Cr(Ae(e),x(r))}var B=P(()=>{"use strict";Ze();O()});import{parentPort as bb,workerData as BW}from"node:worker_threads";var vn=null,Vu=-1,Gu=0;function Yu(e){vn=e}function qu(e=Date.now()){return!vn||vn.stallCount===Vu&&e-Gu<9e5?null:(Vu=vn.stallCount,Gu=e,vn)}var Eb="embedded-1",Cb=[{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"}],Pb={"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(`
73
+ `});import Qw from"node:path";function ba(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&ex.has(r)}function ns(e){return!!(e&&Zw.test(e))}function cp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!ba(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||ns(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=[rx(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 rx(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(tx,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(Qw.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(ts(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&ns(Nt(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 Zw,ap,ex,lp,tx,Sa=P(()=>{"use strict";B();O();wr();Zw=/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,ex=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);lp=2048,tx=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 Un(e){let r=(e??"").trim();if(!r)return null;if(Wn(r))return{blocked:!0,reason:`provider authentication failed: ${fp(r)}`};for(let t of nx)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fp(r)}`};return null}var nx,wa=P(()=>{"use strict";rs();Ln();nx=[{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 ox(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 sx(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gp(e.head)}function ix(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 Ut(e){if(e.alive||ox(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gp(e.headCommit)??sx(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:ix(s,r,t)}}var os=P(()=>{"use strict"});import{existsSync as ax,readFileSync as lx,statSync as yp}from"node:fs";import ss from"node:path";function px(e,r=process.env){let t=e?ux:cx,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 mx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function xa(e){try{return yp(e).mtimeMs}catch{return-1}}function fx(e){let r=ss.join(e,".git");try{if(yp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(lx(r,"utf8"));return t?ss.resolve(e,t[1].trim()):null}catch{return null}}function hp(e){let r=fx(e);return[xa(e),r?xa(ss.join(r,"HEAD")):-2,r?xa(ss.join(r,"index")):-2].join(":")}function kp(e,r){return{changedFiles:_n(e),gitAncestry:Vo(e,{base:r.base,baseCommit:r.baseCommit})}}function gx(e,r){for(Gr.delete(e),Gr.set(e,r);Gr.size>dx;){let t=Gr.keys().next().value;if(t===void 0)break;Gr.delete(t)}}function Rp(e,r,t){let n=mx(r);if(!e||!e.trim())return Fn.missingWorktree++,{changedFiles:[],gitAncestry:Mt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!ax(e))return Gr.delete(o),Fn.missingWorktree++,{changedFiles:[],gitAncestry:Mt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Gr.delete(o),Fn.liveProbes++,kp(e,r);let s=t.ttlMs??px(!!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 Fn.hits++,l.probe;Fn.misses++;let c=kp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();gx(o,{fingerprint:hp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var cx,ux,dx,Gr,Fn,vp=P(()=>{"use strict";de();cx=10*6e4,ux=60*6e4,dx=2048,Gr=new Map,Fn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Kn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function hx(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 kx(e){if(Kn(e.headCommit)||Kn(e.prUrl)||Kn(e.artifactBundlePath)||Kn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Kn(r.head))}function Ft(e){return hx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:kx(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 is=P(()=>{"use strict"});function _a(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 Kt(e){let r=e.trim();if(!r)return null;let t=_a(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=_a(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=_a(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 as=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 yx(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 yx(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 Ht(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Rx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function dt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ht(e)}function ls(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=Kt(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=dt(String(s.prUrl??s.pr_url??"")),a=Ht(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ht(s.mergeCommit??s.merge_commit),reason:Ht(s.reason)})}return n}function Pp(e,r){let t=[],n=dt(Ht(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=dt(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(!Rx(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?dt(Ht(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?dt(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=>[ls(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>ls(dt(d)??d)).filter(Boolean)),c=Pp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(ls(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=ls(dt(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";as();Ep()});function bx(e){let r=Date.now();if(e.providerTerminalError||es(e.finalResult)||e.finalResult&&e.error?.trim()||Wn(e.error)||Wn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Un(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Tp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&wx(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=Ft(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(Sx(e))return{state:"done",reason:"empty abandoned worker record"};let o=Un(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ut({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=ns(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>vx)return{state:"needs_attention",reason:`no first stream event ${ra(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ea?{state:"stale",reason:`no log/event/heartbeat activity for ${ra(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 Sx(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 wx(e){let r=null;if(typeof e=="string"?r=Kt(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=ut(e.stdoutPath),t=me(e.heartbeatPath);return Np(e,r.finalResult,t)}function J(e,r={}){let t=ut(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=Ko(e.stdoutPath),l=Ko(e.stderrPath),c=Ko(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=ed([t.lastEventAt,n.lastHeartbeatAt,Ho(e.stdoutPath),Ho(e.stderrPath),Ho(e.heartbeatPath)]),m=i?null:ts(e.workerDir),f=s&&!ba(s)?s:null,y=t.error||!i&&!s&&Nt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Nt(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=bx({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 Ca(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 vx,Ea,fe=P(()=>{"use strict";lt();Bn();Sa();wr();rs();wa();os();vp();is();Op();as();O();vx=18e4,Ea=6e5});import{readFileSync as xx}from"node:fs";function _x(e){if(!e||process.platform!=="linux")return null;try{return xx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wp(e){if(!e.pid||process.platform!=="linux")return!0;let r=_x(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 cs=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 Ex(e=U(),r,t){let n=Lp(e.perWorkerMemBytes,us),o=Lp(e.memReserveBytes,ds),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ps)),i=fs({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??us,n=r.memReserveBytes??ds,o=r.memUtilization??ps,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,ms)}function Cx(){return Ad()}function Px(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 Pa(){let e=0;for(let r of Xe())e+=Px(r);return e}function $t(){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 Hn(e){let r=e.config??U(),t=e.totalMemBytes??Bp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Ex(r,e.configuredMaxWorkersOverride,t),c=br(r),u=e.freeMemBytes??Cx(),d=e.activeWorkers??Pa(),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=On(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 us,ds,ps,ms,jt=P(()=>{"use strict";Id();H();We();qo();gs();Tn();B();Nn();cs();O();us=500*1024*1024,ds=4*1024*1024*1024,ps=.85,ms=64});function $n(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function fs(e){let r=e.config??{},t=e.env??process.env,n=$n(r.perWorkerMemBytes,us),o=$n(r.memReserveBytes,ds),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ps)),i=Fp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:$n(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=$n(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,ms),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&$n(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,ms),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var gs=P(()=>{"use strict";jt()});import{homedir as Ax}from"node:os";import Ix from"node:path";var Kp,Aa=P(()=>{"use strict";Kp=Ix.join(Ax(),".kynver",".env")});var Hp=P(()=>{"use strict"});var $p=P(()=>{"use strict";Hp()});var jp=P(()=>{"use strict"});var Ia=P(()=>{"use strict";$p();jp();xn()});import{existsSync as Ox,readFileSync as Tx}from"node:fs";function Oa(){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(Ox("/proc/version")){let e=Tx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ta=P(()=>{"use strict"});var Vp=P(()=>{"use strict";Ta()});var hs=P(()=>{"use strict";Aa();jr();H();Ia();Vp()});import Dx from"node:os";function Na(e,r){let t=(r??Dx.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 Na(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}`:Na(o)}return`${r}:${qp(t)}`}function ks(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jp(r,e.boxKind):Na(e.boxKind,e.hostLabel)}var ys=P(()=>{"use strict";We();We()});var zp=P(()=>{"use strict";Aa();Ia();hs()});function vs(){return Rs}function Qp(e){if(!Rs)return e;if(!Xp)throw new Da;return Xp}function Qe(e,r=process.env){if(Rs)return;let t=r[e]?.trim();return t||void 0}function Wa(){if(Rs)throw new Ma}var Da,Ma,Rs,Xp,jn=P(()=>{"use strict";Da=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ma=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Rs=!1,Xp=null});import{existsSync as xr,mkdirSync as Mx,readdirSync as bs,renameSync as Zp,statSync as Wx}from"node:fs";import _r from"node:path";function rm(e){try{return Wx(e).isDirectory()}catch{return!1}}function Lx(e){if(!xr(e))return!0;for(let r of em){let t=_r.join(e,r);if(xr(t)&&(!rm(t)||bs(t).length>0))return!1}return!0}function Bx(e){let r=_r.join(e,"runs");if(!xr(r)||!rm(r))return!1;for(let t of bs(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 Ux(e){let r=_r.join(e,"runs");if(!xr(r))return!1;for(let t of bs(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 Fx(e){let r=_r.join(e,"ghost");return xr(r)?!xr(_r.join(r,"runs")):Ux(e)}function tm(e){return Bx(e.sharedRoot)?Lx(e.forgeRoot)?Fx(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){Mx(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)&&bs(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 Kx}from"node:os";import ge from"node:path";function La(e=process.env){return e.HOME?.trim()||Kx()}function Ba(e=process.env){return ge.join(La(e),".kynver","harness")}function Ss(e){let r=ge.resolve(Me(e.trim()));for(;Hx.has(ge.basename(r));)r=ge.dirname(r);return r}function $x(e,r=process.env){return ge.join(Ba(r),e)}function jx(e=process.env){let r=Ba(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(La(e),sm);return ve(t)}function ws(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Ss(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Ss(n),source:"config"};let o=$x(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!Vx(o))return{harnessRoot:o,source:"box_scoped"};let i=Ba(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"&&jx(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(La(r),sm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Vx(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,Hx,Ua=P(()=>{"use strict";jr();om();sm=ge.join(".openclaw","harness");Hx=new Set(["runs","worktrees"])});import im from"node:os";function xs(e){return e?.trim()?e.trim():null}function Gx(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Yx(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 Vt(e=U(),r=process.env,t={}){let n=vr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||xs(r.KYNVER_BOX_KIND)),a=t.strict===!0||Yx(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=xs(e.runnerId),c=xs(r.KYNVER_RUNTIME_ID)??xs(r.OPENCLAW_RUNTIME_ID),u=l??c??Gx(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=fs({config:e,env:r,totalMemBytes:im.totalmem()}),m=On(n.boxKind,p.configuredMaxWorkers??ua(n.boxKind,p.autoCap)),f=ws({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 Vn=P(()=>{"use strict";H();We();qo();gs();Ua()});var lm=P(()=>{"use strict";En();We();ys();H();hs();zp();In();jn();Vn()});function ar(e){let r=e.trim().toLowerCase();return zx[r]??r}var cm,Jx,zx,_s=P(()=>{"use strict";cm=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Jx=cm.join("|"),zx={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 Xx}from"node:child_process";function Ha(e=process.env){let r=e[Qx]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function Zx(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return Xx(e,r,n)}function e_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Fa(e,r){let t=JSON.stringify(pt),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(Ha(e.env??process.env)==="file")return null;let t=e_(e.platform??process.platform);return t?new Ka(t,e.exec):null}var pt,Qx,Er,Ka,mm=P(()=>{"use strict";pt="kynver",Qx="KYNVER_CREDENTIAL_STORE";Er=5e3;Ka=class{constructor(r,t=Zx){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",pt,"-a",r,"-w"],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",pt,"account",r],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("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",pt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",pt,"account",r],{input:`${t}
74
+ `,timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("set",r)],{input:`${t}
75
+ `,timeoutMs:Er})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",pt,"-a",r],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",pt,"account",r],{timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("delete",r)],{timeoutMs:Er})}catch{}}}});function Gn(){return $a||($a=new ja),$a}var Va,r_,Es,ja,$a,Ga=P(()=>{"use strict";mm();Va="api-key",r_=6e4,Es=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"}},ja=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<r_)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=Ha(this.env);if(!this.keychain){if(n==="keychain")throw new Es(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 Es(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},$a=null});import{existsSync as gm,mkdirSync as n_,readFileSync as hm,writeFileSync as o_}from"node:fs";import{homedir as s_,totalmem as uF}from"node:os";import Ja from"node:path";function i_(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 a_(){if(!gm(fm))return null;try{return JSON.parse(hm(fm,"utf8"))}catch{return null}}function U(){let e=a_();return e?km(i_(e)):{}}function Cs(){if(Wa(),!gm(Ya))return{};try{return JSON.parse(hm(Ya,"utf8"))}catch{return{}}}function qa(e){Wa(),n_(za,{recursive:!0}),o_(Ya,`${JSON.stringify(e,null,2)}
76
+ `,{mode:384})}function l_(e,r,t,n={}){let o=Cs();if(Gn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),qa(i);return}qa({...o,...n,[r]:t})}function c_(e,r){let t=Gn().read(e);return t||Cs()[r]}function Xa(){return Qp(u_)}function Cr(){return Xa().getApiKey()}function Gt(e){return Xa().getRunnerToken(e)}function Qa(e,r){Xa().persistRunnerToken(e,r)}function Q(e){let r=Yn(e);return r||vm("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Za(e){return Yn(e)}function Yn(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 Pn(r)}function d_(e,r){let t=e||Gt(r)||(r?void 0:Gt(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 p_(e,r,t){let n=d_(e,r);if(n)return{ok:!0,secret:n};let o=Cr(),s=Yn(t?.baseUrl);if(o&&r&&s)try{let i=await el(r,{baseUrl:s,apiKey:o});return Qa(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 p_(e,r,t);if(n.ok)return n.secret;vm(n.reason)}async function ym(e,r){let t=Cr(),n=Yn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await el(e,{baseUrl:n,apiKey:t});return Qa(e,o),o}catch{return null}}async function Rm(e,r,t){let n=Cr(),o=Yn(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 el(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Qa(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 el(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 An(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 za,fm,Ya,PF,AF,u_,H=P(()=>{"use strict";En();jr();aa();wd();In();We();qo();gs();Tn();hs();lm();_s();Vn();dm();jn();Ga();za=Ja.join(s_(),".kynver"),fm=Ja.join(za,"config.json"),Ya=Ja.join(za,"credentials");PF=500*1024*1024,AF=4*1024*1024*1024;u_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:c_(Va,"apiKey")},getRunnerToken(e){let r=Cs();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){l_(Va,"apiKey",e)},persistRunnerToken(e,r){qa({...Cs(),runnerToken:r,runnerTokenAgentOsId:e})}}});import rl from"node:path";function he(e){return Ss(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=Vt(r,process.env);return n.identity?n.identity.harnessRoot:ws({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return rl.join(he(e),"runs")}function Yt(e){return rl.join(he(e),"worktrees")}function bm(){let e=Be();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:Yt(e)}}function Pr(e,r){return rl.join(e,x(r))}var Ze=P(()=>{"use strict";H();Ua();Vn();O()});import{existsSync as Ps,readdirSync as m_,statSync as f_}from"node:fs";import mt from"node:path";function le(){return bm()}function q(e){let{runsDir:r}=le(),t=mt.join(Pr(r,x(e)),"run.json");return Ps(t)||Je(`run '${e}' not found`),I(t)}function Xe(){let{runsDir:e}=le();return Sm(e)}function As(e){return Sm(Ae(e))}function g_(e){try{return f_(e).isDirectory()}catch{return!1}}function Sm(e){if(!Ps(e))return[];let r=[];for(let t of m_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=mt.join(e,t.name);if(!g_(n))continue;let o=I(mt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function qt(e,r){let{runsDir:t}=le(),n=mt.join(Pr(t,x(e)),"run.json"),o=mt.join(Pr(t,x(e)),"workers",x(r),"worker.json");return Ps(o)||(Ps(n)||Je(`run '${e}' not found`),Je(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=le();ue(mt.join(Pr(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(mt.join(Pr(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return qn(r,e)}function qn(e,r){return Pr(Ae(e),x(r))}var B=P(()=>{"use strict";Ze();O()});import{parentPort as Sb,workerData as UW}from"node:worker_threads";var vn=null,Vu=-1,Gu=0;function Yu(e){vn=e}function qu(e=Date.now()){return!vn||vn.stallCount===Vu&&e-Gu<9e5?null:(Vu=vn.stallCount,Gu=e,vn)}var Cb="embedded-1",Pb=[{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"}],Ab={"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(`
77
77
  `),"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(`
78
78
  `),"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(`
79
79
  `),"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(`
80
- `)},Ab={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Tt={version:Eb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Cb,instructions:Pb,policyThresholds:Ab};var bn=Tt,Ib="embedded";function Ju(){return bn.version}function zu(e,r){bn=e,Ib=r}function Sn(e){let r=bn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Tt.instructions[e];return typeof t=="string"?t:""}function Zi(e,r){let t=bn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Tt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Xu(e){if(!e)return null;let r=e.trim().toLowerCase();return bn.personas.find(t=>t.slug===r)??null}xn();import hb from"node:path";B();cs();O();import g_ from"node:path";function h_(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 Is(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(g_.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!Gr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...h_(o)})}return t}H();function Jn(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}}In();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 ft(e,r,t,n){try{return await _m(async o=>{let s=await An(e,{method:"POST",headers:Jn(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 ft(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 ft(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function tl(e,r,t){try{return await _m(async n=>{let o=await An(e,{method:"GET",headers:Jn(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();jn();import{spawnSync as A_}from"node:child_process";import{randomBytes as I_}from"node:crypto";import{createPublicKey as S_,verify as w_}from"node:crypto";import{createHash as k_,createPublicKey as ZF,verify as eK}from"node:crypto";function ol(e){return JSON.stringify(nl(e))}function nl(e){if(Array.isArray(e))return e.map(nl);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=nl(e[t]);return r}return e}function sl(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=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 tK=Buffer.from("302a300506032b6570032100","hex"),Pm="ca-6297fb8e1773",y_={[Pm]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"};function R_(e){return`ca-${k_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Am(e,r=process.env){let t=sl(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t)return R_(t)!==e?null:t;let n=y_[e];return!n||e===Pm&&!Cm(r)?null:sl(n)}var v_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,b_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Os(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(v_)].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(b_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var x_=120,Im=["write","read_only","land_pr","verify_live"],__=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var E_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Om(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 E_.test(i)&&i.length<=512?i:null}function Tm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Os(r)==="read_only"?"read_only":"write"}function C_(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(",")!==[...__].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)||!Im.includes(t.operationClass))}var P_=Buffer.from("302a300506032b6570032100","hex");function Nm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!C_(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+x_+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Am(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=S_({key:Buffer.concat([P_,Buffer.from(s)]),format:"der",type:"spki"});return w_(null,Buffer.from(ol(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 il=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 O_(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=Tm(e.decision),a=Nm(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 T_=null,N_=null,D_=new il,M_=new Set;function Dm(){return vs()}function Mm(e){return{v:1,repoIdentity:e,requestNonce:I_(16).toString("base64url")}}function Wm(e){let r=A_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Om(r.stdout.trim())}function Lm(e){let r=O_({...e,policy:T_,identity:N_,consumed:D_});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 M_)try{o(n)}catch{}}return r}function Bm(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function zn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Um(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 al(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 W_=["implementation","review","landing"],L_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function B_(e){return W_.includes(e)}function U_(e){return L_.includes(e)}function Fm(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||B_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:U_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Km=Tt.personas.map(Fm),F_=new Map(Km.map(e=>[e.slug,e]));function K_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=F_.get(r)??null,n=Xu(r);if(!n)return t;let o=Fm(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function ll(e){return K_(e)?.defaultRoleLane??null}function Hm(){return Km.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function $m(e){return(e??"").trim().toLowerCase()}function H_(e){switch($m(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 $_(e){let r=$m(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=H_(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 $_(e)??"any"}Tn();H();We();function j_(e=process.env){let r=U();return vr(r,e)!=="forge"}function Ts(e,r=process.env){if(j_(r))return e?.maxConcurrentWorkers??void 0}async function Ns(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 tl(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}}jt();var V_={fetchPreferences:Ns,configuredOverride:Ts,observe:Hn};async function Vm(e,r=V_){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}jt();B();B();function Ds(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function cl(e){return e.toLowerCase()}function G_(e){let r=Ds(e,"roleLane");if(r)return r;let t=cl(Ds(e,"executorRef")),n=cl(Ds(e,"title")),o=cl(Ds(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=ll(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Gm(e){let r=G_(e);return r?{...e,roleLane:r}:e}H();var Y_=/^claude[-_]/i,q_=/^(?:opus|sonnet|haiku)\b/i;function Ym(e){let r=e.trim();return Y_.test(r)||q_.test(r)}function qm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ul(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Jm(e){return e.trim().toLowerCase().startsWith("gemini-")}function J_(e){return qm(e)?"codex":Ym(e)?"claude":Jm(e)?"gemini":(ul(e),"cursor")}function z_(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 X_(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?Ym(n)||qm(n)||ul(n)||Jm(n)?{lane:t,model:n,provider:J_(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?z_(r)??X_(r):null}function zm(e){let r=Ue(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ul(r.model)):!1}_s();_s();var Ar="cursor",Q_=new Set(["claude","opus","anthropic"]),Z_=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Xn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Pr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return Q_.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ms(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Pr(r))return!0;let t=Xn(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(Xn(e,"executorRef"));if(n?.provider&&Pr(n.provider)||n?.model&&Pr(eE(n.model)))return!0;let o=Xn(e,"description");if(Z_.some(i=>i.test(o)))return!0;let s=Xn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function eE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function rE(e,r){return{provider:Ar,model:Ws,rule:`policy:cursor_default${r}`,requestedModel:e}}var tE=["explicit:","executor_ref:","factory:","task:"];function nE(e){return tE.some(r=>e.startsWith(r))}function dl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ue(Xn(e,"executorRef"))?.provider?!0:Ms(e)}function Xm(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Pr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||nE(r.rule)||dl(t)||!Pr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return rE(r.model,o)}function Qm(e,r=Ar){let t=e?.trim();return t?ir(t):r}var Zm={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 Jt(e){return Zm[e]}function ef(){return Object.values(Zm)}import{existsSync as sE}from"node:fs";import{homedir as iE}from"node:os";import Qn from"node:path";yr();import{createHash as rf}from"node:crypto";import{statSync as oE}from"node:fs";import{spawnSync as tf}from"node:child_process";function ar(e){try{let r=oE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return rf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function zt(e){return rf("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=tf(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 Ls(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return tf(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 aE="codex";function lE(){let e=iE();return[process.env.CODEX_HOME?.trim()?Qn.join(Qn.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Qn.join(e,".codex","auth.json"),Qn.join(e,".config","codex","auth.json")].filter(t=>!!t)}function cE(e){return Qn.dirname(e)}function uE(e){let r,t;for(let n of lE()){if(!sE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:cE(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 nf(e=new Date().toISOString()){let r=Fe(aE,["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}=uE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?ar(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 dE}from"node:fs";import{homedir as pE}from"node:os";import pl from"node:path";function mE(){let e=process.env.HERMES_HOME?.trim(),r=e?pl.resolve(e):pl.join(pE(),".hermes");return pl.join(r,"auth.json")}function Bs(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=mE(),o=dE(n),s=Ls(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?ar(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 Xt(e=new Date().toISOString()){let r=nf(e);if(r.ready)return{...r,path:"codex_cli"};let t=Bs(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 of=["low","medium","high"],sf={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function af(e,r){let t=Jt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function fE(e,r){let t=Jt(e.providerId),n=Jt(r.providerId),o=of.indexOf(t.costTier)-of.indexOf(n.costTier);if(o!==0)return o;let s=sf[e.binding.authSource]-sf[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ml(e){let r=ef().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&af(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(fE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return af(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 gE}from"node:fs";import{homedir as hE}from"node:os";import kE from"node:path";var yE="claude";function RE(){let e=hE();return[kE.join(e,".claude",".credentials.json")]}function lf(e=new Date().toISOString()){let r=Fe(yE,["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=RE().find(i=>gE(i)),o=Ls(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?ar(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 jE}from"node:fs";import{homedir as $E}from"node:os";import en from"node:path";Sr();O();import{closeSync as yl,existsSync as mf,mkdirSync as IE,openSync as Rl,statSync as OE,unlinkSync as df}from"node:fs";import{spawn as TE}from"node:child_process";import NE from"node:os";import lr from"node:path";sa();var vE="KYNVER_NO_PROD_DB_CREDENTIALS",bE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=oa(e);if(!r.reviewWorker)return t;let n={...t,[vE]:"1"};for(let o of bE)delete n[o];return n}var SE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function cf(e){return e.replace(SE,"")}var uf=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Us(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function wE(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var xE=new Set(["cursor"]);function _E(e){let r=e.trim().toLowerCase();return xE.has(r)?"auto":null}function fl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=cf(t).trim()||r;return uf.test(o)||!Us(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 Qt(e,r){let t=(e??"").trim();return t?Us(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 gl(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 Zt(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=cf(t).trim()||r;return Us(o)||!wE(o)&&uf.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 hl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=_E(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")`}:Us(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 Zn,readdirSync as EE}from"node:fs";import gt from"node:path";var CE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function PE(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 AE(e){let r=gt.join(e,"versions");if(!Zn(r))return null;let t=null,n=-1;for(let o of EE(r,{withFileTypes:!0})){if(!o.isDirectory()||!CE.test(o.name))continue;let s=PE(o.name);s==null||s<=n||(n=s,t=gt.join(r,o.name))}return t}function Fs(e){let r=e?.trim()||gt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=gt.join(r,"node.exe"),n=gt.join(r,"index.js");if(Zn(t)&&Zn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=AE(r);if(!o)return null;let s=gt.join(o,"node.exe"),i=gt.join(o,"index.js");return!Zn(s)||!Zn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var kl="composer-2.5",DE=15e3,ME=6e4,WE=3e4;function LE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function bl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&mf(lr.join(lr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Fs(lr.dirname(e)):t?{nodeExe:e,indexJs:lr.join(lr.dirname(e),"index.js"),versionDir:lr.dirname(e)}:Fs();if(o)return LE(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 BE(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:lr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function ff(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function vl(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 UE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||lr.join(NE.homedir(),".kynver","locks");return IE(e,{recursive:!0}),lr.join(e,"cursor-agent-start.lock")}function FE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=UE(),r=vl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",ME),t=vl("KYNVER_CURSOR_START_LOCK_STALE_MS",WE),n=Date.now();for(;;)try{let o=Rl(e,"wx");return yl(o),()=>{try{df(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-OE(e).mtimeMs>t){df(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);ff(250)}}function gf(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=Fs(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=lr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(mf(n))return n}return"agent"}function KE(){return gf(process.env)}var hf={name:"cursor",defaultModel:kl,preflightModel(e){return hl(e,kl)},start(e){let r=hl(e.model,kl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Rl(e.stdoutPath,"a"),o=Rl(e.stderrPath,"a"),s=["ignore",n,o],i=KE(),a=bl(i),l=FE(),c;try{let[u,d]=a.shell?[a.executable,pf(e,t,a.prefixArgs)]:Pe(a.executable,pf(e,t,a.prefixArgs),e.workerDir);c=TE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:BE(i,a,e.reviewWorker)})),ff(vl("KYNVER_CURSOR_START_LOCK_HOLD_MS",DE))}finally{l(),yl(n),yl(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 pf(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 HE}from"node:child_process";function Sl(e,r=process.env){try{let t;try{t=bl(e)}catch{t={executable:e,prefixArgs:[]}}let n=HE(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 wl(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(en.join(t,".config","cursor","auth.json")),r.push(en.join(t,".cursor-agent","auth.json")));let n=$E();if(r.push(en.join(n,".config","cursor","auth.json")),r.push(en.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(en.join(o,"cursor-agent","auth.json")),s&&r.push(en.join(s,"cursor","auth.json"))}return r}var VE="agent";function kf(e=new Date().toISOString()){let r=Fe(VE,["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=wl().find(a=>jE(a)),o=Sl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?ar(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 GE,readFileSync as YE}from"node:fs";import{homedir as qE}from"node:os";import xl from"node:path";var JE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function zE(){let e=process.env.HERMES_HOME?.trim(),r=e?xl.resolve(e):xl.join(qE(),".hermes");return xl.join(r,".env")}function XE(e){try{let r=YE(e,"utf8"),t=[];for(let n of JE)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function yf(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=zE(),o=GE(n),s=o?XE(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?ar(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 Rf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Xt(r),n={codex:t,cursor:kf(r),claude:lf(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:yf(r),hermesOpenAiCodex:Bs(r),codexAdapterPath:t.path,readyCount:o}}var QE=[/\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],ZE=[/\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 _l(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function eC(e){let r=_l(e,"executorRef").toLowerCase(),t=_l(e,"title").toLowerCase(),n=_l(e,"description").toLowerCase(),o=`${r}
80
+ `)},Ib={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Tt={version:Cb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Pb,instructions:Ab,policyThresholds:Ib};var bn=Tt,Ob="embedded";function Ju(){return bn.version}function zu(e,r){bn=e,Ob=r}function Sn(e){let r=bn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Tt.instructions[e];return typeof t=="string"?t:""}function Zi(e,r){let t=bn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Tt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Xu(e){if(!e)return null;let r=e.trim().toLowerCase();return bn.personas.find(t=>t.slug===r)??null}xn();import kb from"node:path";B();cs();O();import h_ from"node:path";function k_(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 Is(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(h_.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,...k_(o)})}return t}H();function Jn(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}}In();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 ft(e,r,t,n){try{return await _m(async o=>{let s=await An(e,{method:"POST",headers:Jn(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 ft(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 ft(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function tl(e,r,t){try{return await _m(async n=>{let o=await An(e,{method:"GET",headers:Jn(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();jn();import{spawnSync as I_}from"node:child_process";import{randomBytes as O_}from"node:crypto";import{createPublicKey as w_,verify as x_}from"node:crypto";import{createHash as y_,createPublicKey as eK,verify as rK}from"node:crypto";function ol(e){return JSON.stringify(nl(e))}function nl(e){if(Array.isArray(e))return e.map(nl);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=nl(e[t]);return r}return e}function sl(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=sl(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 nK=Buffer.from("302a300506032b6570032100","hex"),Am="ca-6297fb8e1773",R_={[Am]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"};function v_(e){return`ca-${y_("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=>v_(o)===e)??null;let n=R_[e];return!n||e===Am&&!Pm(r)?null:sl(n)}var b_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,S_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Os(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(b_)].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(S_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var __=120,Om=["write","read_only","land_pr","verify_live"],E_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var C_=/^[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 C_.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":Os(r)==="read_only"?"read_only":"write"}function P_(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(",")!==[...E_].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 A_=Buffer.from("302a300506032b6570032100","hex");function Dm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!P_(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+__+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=w_({key:Buffer.concat([A_,Buffer.from(s)]),format:"der",type:"spki"});return x_(null,Buffer.from(ol(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 il=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 T_(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 N_=null,D_=null,M_=new il,W_=new Set;function Mm(){return vs()}function Wm(e){return{v:1,repoIdentity:e,requestNonce:O_(16).toString("base64url")}}function Lm(e){let r=I_("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=T_({...e,policy:N_,identity:D_,consumed:M_});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 W_)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 zn(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 al(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 L_=["implementation","review","landing"],B_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function U_(e){return L_.includes(e)}function F_(e){return B_.includes(e)}function Km(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||U_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:F_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Hm=Tt.personas.map(Km),K_=new Map(Hm.map(e=>[e.slug,e]));function H_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=K_.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 ll(e){return H_(e)?.defaultRoleLane??null}function $m(){return Hm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function jm(e){return(e??"").trim().toLowerCase()}function $_(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 j_(e){let r=jm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=$_(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 j_(e)??"any"}Tn();H();We();function V_(e=process.env){let r=U();return br(r,e)!=="forge"}function Ts(e,r=process.env){if(V_(r))return e?.maxConcurrentWorkers??void 0}async function Ns(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 tl(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}}jt();var G_={fetchPreferences:Ns,configuredOverride:Ts,observe:Hn};async function Gm(e,r=G_){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}jt();B();B();function Ds(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function cl(e){return e.toLowerCase()}function Y_(e){let r=Ds(e,"roleLane");if(r)return r;let t=cl(Ds(e,"executorRef")),n=cl(Ds(e,"title")),o=cl(Ds(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=ll(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=Y_(e);return r?{...e,roleLane:r}:e}H();var q_=/^claude[-_]/i,J_=/^(?:opus|sonnet|haiku)\b/i;function qm(e){let r=e.trim();return q_.test(r)||J_.test(r)}function Jm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ul(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function zm(e){return e.trim().toLowerCase().startsWith("gemini-")}function z_(e){return Jm(e)?"codex":qm(e)?"claude":zm(e)?"gemini":(ul(e),"cursor")}function X_(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 Q_(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)||ul(n)||zm(n)?{lane:t,model:n,provider:z_(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?X_(r)??Q_(r):null}function Xm(e){let r=Ue(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ul(r.model)):!1}_s();_s();var Ir="cursor",Z_=new Set(["claude","opus","anthropic"]),eE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Xn(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 Z_.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ms(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ar(r))return!0;let t=Xn(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(Xn(e,"executorRef"));if(n?.provider&&Ar(n.provider)||n?.model&&Ar(rE(n.model)))return!0;let o=Xn(e,"description");if(eE.some(i=>i.test(o)))return!0;let s=Xn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function rE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function tE(e,r){return{provider:Ir,model:Ws,rule:`policy:cursor_default${r}`,requestedModel:e}}var nE=["explicit:","executor_ref:","factory:","task:"];function oE(e){return nE.some(r=>e.startsWith(r))}function dl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ue(Xn(e,"executorRef"))?.provider?!0:Ms(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||oE(r.rule)||dl(t)||!Ar(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return tE(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 Jt(e){return ef[e]}function rf(){return Object.values(ef)}import{existsSync as iE}from"node:fs";import{homedir as aE}from"node:os";import Qn from"node:path";Rr();import{createHash as tf}from"node:crypto";import{statSync as sE}from"node:fs";import{spawnSync as nf}from"node:child_process";function lr(e){try{let r=sE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function zt(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 Ls(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 lE="codex";function cE(){let e=aE();return[process.env.CODEX_HOME?.trim()?Qn.join(Qn.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Qn.join(e,".codex","auth.json"),Qn.join(e,".config","codex","auth.json")].filter(t=>!!t)}function uE(e){return Qn.dirname(e)}function dE(e){let r,t;for(let n of cE()){if(!iE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:uE(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(lE,["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}=dE(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 pE}from"node:fs";import{homedir as mE}from"node:os";import pl from"node:path";function fE(){let e=process.env.HERMES_HOME?.trim(),r=e?pl.resolve(e):pl.join(mE(),".hermes");return pl.join(r,"auth.json")}function Bs(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=fE(),o=pE(n),s=Ls(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 Xt(e=new Date().toISOString()){let r=of(e);if(r.ready)return{...r,path:"codex_cli"};let t=Bs(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=Jt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function gE(e,r){let t=Jt(e.providerId),n=Jt(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 ml(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(gE)[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 hE}from"node:fs";import{homedir as kE}from"node:os";import yE from"node:path";var RE="claude";function vE(){let e=kE();return[yE.join(e,".claude",".credentials.json")]}function cf(e=new Date().toISOString()){let r=Fe(RE,["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=vE().find(i=>hE(i)),o=Ls(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 VE}from"node:fs";import{homedir as jE}from"node:os";import en from"node:path";wr();O();import{closeSync as yl,existsSync as ff,mkdirSync as OE,openSync as Rl,statSync as TE,unlinkSync as pf}from"node:fs";import{spawn as NE}from"node:child_process";import DE from"node:os";import cr from"node:path";sa();var bE="KYNVER_NO_PROD_DB_CREDENTIALS",SE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=oa(e);if(!r.reviewWorker)return t;let n={...t,[bE]:"1"};for(let o of SE)delete n[o];return n}var wE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function uf(e){return e.replace(wE,"")}var df=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Us(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function xE(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var _E=new Set(["cursor"]);function EE(e){let r=e.trim().toLowerCase();return _E.has(r)?"auto":null}function fl(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)||!Us(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 Qt(e,r){let t=(e??"").trim();return t?Us(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 gl(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 Zt(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return Us(o)||!xE(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 hl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=EE(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")`}:Us(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 Zn,readdirSync as CE}from"node:fs";import gt from"node:path";var PE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function AE(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 IE(e){let r=gt.join(e,"versions");if(!Zn(r))return null;let t=null,n=-1;for(let o of CE(r,{withFileTypes:!0})){if(!o.isDirectory()||!PE.test(o.name))continue;let s=AE(o.name);s==null||s<=n||(n=s,t=gt.join(r,o.name))}return t}function Fs(e){let r=e?.trim()||gt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=gt.join(r,"node.exe"),n=gt.join(r,"index.js");if(Zn(t)&&Zn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=IE(r);if(!o)return null;let s=gt.join(o,"node.exe"),i=gt.join(o,"index.js");return!Zn(s)||!Zn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var kl="composer-2.5",ME=15e3,WE=6e4,LE=3e4;function BE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function bl(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?Fs(cr.dirname(e)):t?{nodeExe:e,indexJs:cr.join(cr.dirname(e),"index.js"),versionDir:cr.dirname(e)}:Fs();if(o)return BE(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 UE(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 vl(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 FE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||cr.join(DE.homedir(),".kynver","locks");return OE(e,{recursive:!0}),cr.join(e,"cursor-agent-start.lock")}function KE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=FE(),r=vl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",WE),t=vl("KYNVER_CURSOR_START_LOCK_STALE_MS",LE),n=Date.now();for(;;)try{let o=Rl(e,"wx");return yl(o),()=>{try{pf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-TE(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=Fs(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 HE(){return hf(process.env)}var kf={name:"cursor",defaultModel:kl,preflightModel(e){return hl(e,kl)},start(e){let r=hl(e.model,kl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Rl(e.stdoutPath,"a"),o=Rl(e.stderrPath,"a"),s=["ignore",n,o],i=HE(),a=bl(i),l=KE(),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=NE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:UE(i,a,e.reviewWorker)})),gf(vl("KYNVER_CURSOR_START_LOCK_HOLD_MS",ME))}finally{l(),yl(n),yl(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 $E}from"node:child_process";function Sl(e,r=process.env){try{let t;try{t=bl(e)}catch{t={executable:e,prefixArgs:[]}}let n=$E(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 wl(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(en.join(t,".config","cursor","auth.json")),r.push(en.join(t,".cursor-agent","auth.json")));let n=jE();if(r.push(en.join(n,".config","cursor","auth.json")),r.push(en.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(en.join(o,"cursor-agent","auth.json")),s&&r.push(en.join(s,"cursor","auth.json"))}return r}var GE="agent";function yf(e=new Date().toISOString()){let r=Fe(GE,["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=wl().find(a=>VE(a)),o=Sl(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 YE,readFileSync as qE}from"node:fs";import{homedir as JE}from"node:os";import xl from"node:path";var zE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function XE(){let e=process.env.HERMES_HOME?.trim(),r=e?xl.resolve(e):xl.join(JE(),".hermes");return xl.join(r,".env")}function QE(e){try{let r=qE(e,"utf8"),t=[];for(let n of zE)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=XE(),o=YE(n),s=o?QE(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=Xt(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:Bs(r),codexAdapterPath:t.path,readyCount:o}}var ZE=[/\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],eC=[/\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 _l(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function rC(e){let r=_l(e,"executorRef").toLowerCase(),t=_l(e,"title").toLowerCase(),n=_l(e,"description").toLowerCase(),o=`${r}
81
81
  ${t}
82
- ${n}`;return QE.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":ZE.some(s=>s.test(o))?"low":"elevated"}function rC(e){let r=Jt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function tC(e){let r=e.inventory??Rf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function ht(e){let r=rC({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 vf(e){let r=e.task??{},t=eC(r),n=tC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Xt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ar;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=ml({inventory:n,riskClass:t});return ht(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 ht({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 ht({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 ht({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=ml({inventory:n,riskClass:t});if(a)return ht({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 ht({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"}})}Sr();import{closeSync as Ef,openSync as Cf}from"node:fs";import{spawn as pC}from"node:child_process";O();yr();Ln();import{unlinkSync as nC,writeFileSync as oC}from"node:fs";import sC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function El(e){return`${JSON.stringify(e)}
83
- `}function Cl(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 iC="KYNVER_WORKER_MCP_TOOLS",aC="mcp-config.json",oe="kynver",eo=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],bf=eo.map(e=>`mcp__${oe}__${e}`),lC={"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 ro(e){if(!e||e.length===0)return[...eo];let r=new Set;for(let t of e)for(let n of lC[t]??[])r.add(n);return eo.filter(t=>r.has(t))}function Sf(e){return ro(e).map(r=>`mcp__${oe}__${r}`)}var cC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],uC=["openai-compatible","gemini-api"];function dC(e){return cC.includes(e)}function Pl(e){return uC.includes(e)}function wf(e){return dC(e)&&!Pl(e)}function to(e=process.env){let r=e[iC]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function xf(e){return sC.join(e,aC)}function _f(e){let r=xf(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return oC(r,`${JSON.stringify(t,null,2)}
84
- `,{mode:384}),r}function Ks(e){try{return nC(xf(e)),!0}catch{return!1}}Ln();function mC(e,r){let n=Af(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 Pf={name:"claude",defaultModel:Le,preflightModel(e){return fl(e,Le)},start(e){let r=fl(e.model,Le);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;mC(e,t);let n=zd(t,{pinned:e.modelPinned===!0}),[o,s]=pe("claude",Af(e,t,n)),i=Cf(e.stdoutPath,"a"),a=Cf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=pC(c,u,ae({cwd:e.worktreePath,detached:ce(),stdio:l,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Ef(i),Ef(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 Af(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:bf).join(",")}`]:[],"--",e.prompt]}Sr();import{closeSync as Df,existsSync as vC,openSync as Mf}from"node:fs";import{spawn as Il}from"node:child_process";O();yr();Sr();import{closeSync as If,openSync as Of}from"node:fs";import{spawn as fC}from"node:child_process";O();yr();var Hs="gpt-5.6-sol";var Al=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Hs;function gC(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 hC(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 Tf={name:"hermes-codex",defaultModel:Al,preflightModel(e){return Qt(e,Al)},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=Qt(e.model,Al);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,hC(t,e.prompt)),i=Of(e.stdoutPath,"a"),a=Of(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=fC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:gC(e.reviewWorker,e.codexHome)}));if(If(i),If(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 kC="KYNVER_CODEX_WINDOWS_SANDBOX",yC="unelevated";function RC(e=process.env){return e[kC]?.trim().toLowerCase()==="elevated"?"elevated":yC}function Nf(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${RC(r)}"`]}function bC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Hs}var Ir=bC();function Ol(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function SC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function wC(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Nf(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function xC(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Il(l,c,t)}if(!vC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Il(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Il(i,a,t)}var Wf={name:"codex",defaultModel:Ir,preflightModel(e){return Qt(e,Ir)},start(e){if(Xt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Tf.start(e);let t=Qt(e.model,Ir);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Mf(e.stdoutPath,"a"),s=Mf(e.stderrPath,"a"),i=["ignore",o,s],a=Ol(),l=wC(n,e.prompt,e.executionMode),c;try{c=xC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:SC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Df(o),Df(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}}};Sr();import{closeSync as Lf,openSync as Bf}from"node:fs";import IC from"node:path";import{fileURLToPath as OC}from"node:url";import{spawn as TC}from"node:child_process";O();import{existsSync as $s}from"node:fs";import kt from"node:path";import{fileURLToPath as _C}from"node:url";function EC(e,r){let t=kt.resolve(e);for(;;){let n=kt.join(t,r);if($s(n))return n;let o=kt.dirname(t);if(o===t)return null;t=o}}function CC(e){return EC(e,kt.join("node_modules",".bin","tsx"))??"npx"}function Tl(e,r){if(e.endsWith(".ts")){let t=CC(kt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function js(e){if(e.explicitCliPath)return $s(e.explicitCliPath)?Tl(e.explicitCliPath,e.nodeExecutable):null;let r=_C(new URL(".",e.importMetaUrl)),t=kt.join(r,"cli.js");if($s(t))return Tl(t,e.nodeExecutable);let n=kt.join(r,"cli.ts");return $s(n)?Tl(n,e.nodeExecutable):null}var PC="X-Kynver-Job-Token",so={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 AC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function no(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[PC]: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 oo(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Vs(e,r,t){let n=AC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=oo(t.memoryQuery);s&&o.set("memoryQuery",s);let i=oo(t.mode);return i&&o.set("mode",i),no(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)),no(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=oo(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return no(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return no(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return no(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...oo(t.eventKey)?{eventKey:oo(t.eventKey)}:{}}})}}function rn(e){return eo.includes(e)}function Gs(e){return ro(e).filter(rn).map(r=>{let t=so[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var yt="openai-compatible",NC=600*1e3;function Nl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var io=class extends Error{};function DC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new io(`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 io(`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 io(`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):NC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var MC="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 Dl(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:MC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function WC(){let e=OC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=IC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=js({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 LC(e,r,t){let n=e.workerToolGrant,o=n?Gs(n.capabilities):void 0;return{provider:yt,model:t,request:Dl(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Ml(e,r,t){let n=WC(),o=Bf(e.stdoutPath,"a"),s=Bf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=TC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Lf(o),Lf(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 Uf={name:yt,get defaultModel(){return Nl()},preflightModel(e){return gl(e,Nl())},start(e){let r=gl(e.model,Nl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=DC(process.env),o=LC(e,n,t);return Ml(e,o,t)}};Sr();import{closeSync as jf,openSync as Vf}from"node:fs";import{spawn as FC}from"node:child_process";O();yr();import BC from"node:path";var UC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function Ys(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function qs(e){let r=BC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Ff(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Kf(e){let r=e.trim().toLowerCase();return!r||UC.has(r)?[]:["--model",e.trim()]}function Hf(e,r){return[...Kf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function $f(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 cr="gemini";function Oe(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function KC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Gf={name:cr,get defaultModel(){return Oe()},preflightModel(e){return Zt(e,Oe())},start(e){let r=Zt(e.model,Oe());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=Ys(),n=qs(t),o=n==="antigravity"?Ff(r):r.model,s=n==="antigravity"?Hf(e,o):$f(e,o),[i,a]=pe(t,s),l=Vf(e.stdoutPath,"a"),c=Vf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=FC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:KC(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 ur="gemini-api",Yf="https://generativelanguage.googleapis.com/v1beta/openai",HC=600*1e3,ao=class extends Error{};function $C(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function jC(e=process.env){let r=$C(e);if(!r)throw new ao('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()||Yf,n;try{n=new URL(t)}catch{throw new ao(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${Yf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ao(`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):HC;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function VC(e,r,t){let n=e.workerToolGrant,o=n?Gs(n.capabilities):void 0,s=Dl(r,t,e.prompt,o);return{provider:ur,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var qf={name:ur,get defaultModel(){return Oe()},preflightModel(e){return Zt(e,Oe())},start(e){let r=Zt(e.model,Oe());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=jC(process.env),o=VC(e,n,t);return Ml(e,o,t)}};var GC=Le,Ws="composer-2.5";function we(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function YC(e){if(!e)return;let r=we(e,"workerModelOverride")||we(e,"modelOverride");return r||`${we(e,"title")}
85
- ${we(e,"description")}
86
- ${we(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function Jf(e){return e.toLowerCase()}function Xf(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 Ll(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||GC}function Js(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-")?cr:"cursor"}function qC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ws,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:cr,rule:n&&n!==cr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Oe(),provider:ur,rule:n&&n!==ur?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function zf(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 JC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Qf(e,r,t){return JC.has(e)?ct:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?ct:Le}function zC(e){let r=Jf(we(e,"executorRef")),t=we(e,"title").toLowerCase(),n=we(e,"priority")||"normal",o=Jf(we(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Qf(o,r,t);return{provider:"claude",model:i,rule:i===ct?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Ir,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Ue(we(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Ir},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Ue(we(e,"executorRef"));return{provider:yt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Ue(we(e,"executorRef"));return{provider:ur,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Ue(we(e,"executorRef"));return{provider:cr,...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:Ir,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 zf(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(zf(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=Ll();return{model:s,provider:Js(s),rule:"default:global"}}function XC(e){return e?Ue(we(e,"executorRef")):null}function QC(e){switch(ir(e)){case cr:case ur:return Oe();case"claude":return Le;case"codex":return Ir;case"cursor":return Ws;default:return}}var Wl="explicit:cli_provider",Zf="config:worker_provider";function eg(e,r,t){let n=ir(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:QC(n)??e.model,rule:t}}function ZC(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Wl?e:eg(e,t,Wl)}function eP(e,r){if(r.explicitProvider?.trim()||dl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=ir(t);return n===Ar||n===e.provider?e:eg(e,n,Zf)}function zs(e){let r,t=XC(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=qC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||Js(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||Js(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Ms(e.task)){let l=YC(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=Qf(d,p,m),u=c===ct?"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=zC(e.task);r={...l,requestedModel:l.model}}else{let l=Ll();r={model:l,provider:e.explicitProvider?.trim()||Js(l),rule:"default:global",requestedModel:l}}r=ZC(r,e.explicitProvider),r=eP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&ir(e.configuredProvider)!==Ar&&r.rule==="config:worker_provider",i=Xm({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===Wl||i.rule===Zf||Pr(i.provider)&&(e.explicitProviderIsOperatorOverride||Ms(e.task))||i.provider===yt||i.provider===cr||i.provider===ur||i.provider==="codex")return i;let a=vf({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??Ir:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function rg(e,r,t){return e||r||t||Ll()||Le}function rP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function tg(e){return e?.trim()||void 0}function ng(e){let r=rP(e.task),t=Ue(r),n=e.explicitProvider?.trim().toLowerCase(),o=tg(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=tg(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&zm(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&&!Pr(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 og(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function sg(){return{maxTaskAttempts:og(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Zi("harness.maxTaskAttempts",4))),dispatchCooldownMs:og(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Zi("harness.dispatchCooldownMs",5e3)))}}H();import oP from"node:path";B();fe();O();var Bl="kynver-harness:",ig="@runner:";function Ul(e){return e?.trim()?e.trim():null}function tP(e){let r=Ul(e);if(!r?.startsWith(Bl))return null;let t=r.slice(Bl.length),n=t.indexOf(ig);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function lo(e,r){let t=e.trim(),n=r.trim();return`${Bl}${t}${ig}${n}`}function nP(e,r){let t=Ul(r);return t?tP(e)===t:!1}function Xs(e){let r=Ul(e.workerLeaseOwner);return r&&nP(r,e.runId)?r:lo(e.runId,e.runnerId)}H();import ag from"node:os";We();function Or(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Or(t.runnerId)??Or(r.KYNVER_RUNTIME_ID)??Or(r.OPENCLAW_RUNTIME_ID)??Or(r.HOSTNAME)??ag.hostname(),hostname:Or(r.HOSTNAME)??ag.hostname(),profile:Or(r.KYNVER_RUNNER_PROFILE)??Or(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Or(r.KYNVER_HARNESS_REPO)??Or(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Ju()}}H();async function Qs(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 Zs(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 Qs({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 lg(e,r){return I(oP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function cg(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)):Fl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=lg(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=Xs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await Zs({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 ug(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=lg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as DO,mkdirSync as MO}from"node:fs";import un from"node:path";B();O();import sP from"node:path";function dg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function pg(e,r,t,n){return dg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ei(e,r={}){let t=r.isAlive??Y,n=r.kill??De,o=r.sleep??$o;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Kl(e,r,t,n,o={}){pg(e,r,t,n);let s=ei(r.pid,o),i=ei(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function mg(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(sP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ei(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function iP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function fg(e,r,t,n={}){if(!iP(n.env))throw Kl(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`)}Sa();de();B();B();var gg="unknown";function hg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==gg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==gg&&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 aP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,lP="next-action-fix:";function ri(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ri(e)}function cP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(lP)||t.includes("repair")||t.includes("unblock"))}function uP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(aP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ri(String(n.targetPrUrl??n.target_pr_url??"")),s=ri(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?kg(o):null,targetPrBranch:s}}catch{return r}}function yg(e){if(!cP(e))return null;let r=uP(e.description),t=e.prUrl?kg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ri(e.branch)}:null}function Rg(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 vg(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=[...Sn(`worker.prompt.progress.${n}`).split(`
82
+ ${n}`;return ZE.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":eC.some(s=>s.test(o))?"low":"elevated"}function tC(e){let r=Jt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function nC(e){let r=e.inventory??vf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function ht(e){let r=tC({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=rC(r),n=nC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Xt())}),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=ml({inventory:n,riskClass:t});return ht(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 ht({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 ht({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 ht({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=ml({inventory:n,riskClass:t});if(a)return ht({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 ht({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 mC}from"node:child_process";O();Rr();Ln();import{unlinkSync as oC,writeFileSync as sC}from"node:fs";import iC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function El(e){return`${JSON.stringify(e)}
83
+ `}function Cl(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 aC="KYNVER_WORKER_MCP_TOOLS",lC="mcp-config.json",oe="kynver",eo=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Sf=eo.map(e=>`mcp__${oe}__${e}`),cC={"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 ro(e){if(!e||e.length===0)return[...eo];let r=new Set;for(let t of e)for(let n of cC[t]??[])r.add(n);return eo.filter(t=>r.has(t))}function wf(e){return ro(e).map(r=>`mcp__${oe}__${r}`)}var uC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],dC=["openai-compatible","gemini-api"];function pC(e){return uC.includes(e)}function Pl(e){return dC.includes(e)}function xf(e){return pC(e)&&!Pl(e)}function to(e=process.env){let r=e[aC]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function _f(e){return iC.join(e,lC)}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 sC(r,`${JSON.stringify(t,null,2)}
84
+ `,{mode:384}),r}function Ks(e){try{return oC(_f(e)),!0}catch{return!1}}Ln();function fC(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 fl(e,Le)},start(e){let r=fl(e.model,Le);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;fC(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=mC(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 bC,openSync as Wf}from"node:fs";import{spawn as Il}from"node:child_process";O();Rr();wr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as gC}from"node:child_process";O();Rr();var Hs="gpt-5.6-sol";var Al=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Hs;function hC(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 kC(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:Al,preflightModel(e){return Qt(e,Al)},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=Qt(e.model,Al);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,kC(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=gC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:hC(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 yC="KYNVER_CODEX_WINDOWS_SANDBOX",RC="unelevated";function vC(e=process.env){return e[yC]?.trim().toLowerCase()==="elevated"?"elevated":RC}function Df(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${vC(r)}"`]}function SC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Hs}var Or=SC();function Ol(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function wC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function xC(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 _C(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Il(l,c,t)}if(!bC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Il(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Il(i,a,t)}var Lf={name:"codex",defaultModel:Or,preflightModel(e){return Qt(e,Or)},start(e){if(Xt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Nf.start(e);let t=Qt(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=Ol(),l=xC(n,e.prompt,e.executionMode),c;try{c=_C(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:wC(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 OC from"node:path";import{fileURLToPath as TC}from"node:url";import{spawn as NC}from"node:child_process";O();import{existsSync as $s}from"node:fs";import kt from"node:path";import{fileURLToPath as EC}from"node:url";function CC(e,r){let t=kt.resolve(e);for(;;){let n=kt.join(t,r);if($s(n))return n;let o=kt.dirname(t);if(o===t)return null;t=o}}function PC(e){return CC(e,kt.join("node_modules",".bin","tsx"))??"npx"}function Tl(e,r){if(e.endsWith(".ts")){let t=PC(kt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function js(e){if(e.explicitCliPath)return $s(e.explicitCliPath)?Tl(e.explicitCliPath,e.nodeExecutable):null;let r=EC(new URL(".",e.importMetaUrl)),t=kt.join(r,"cli.js");if($s(t))return Tl(t,e.nodeExecutable);let n=kt.join(r,"cli.ts");return $s(n)?Tl(n,e.nodeExecutable):null}var AC="X-Kynver-Job-Token",so={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 IC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function no(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[AC]: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 oo(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Vs(e,r,t){let n=IC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=oo(t.memoryQuery);s&&o.set("memoryQuery",s);let i=oo(t.mode);return i&&o.set("mode",i),no(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)),no(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=oo(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return no(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return no(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return no(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...oo(t.eventKey)?{eventKey:oo(t.eventKey)}:{}}})}}function rn(e){return eo.includes(e)}function Gs(e){return ro(e).filter(rn).map(r=>{let t=so[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var yt="openai-compatible",DC=600*1e3;function Nl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var io=class extends Error{};function MC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new io(`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 io(`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 io(`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):DC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var WC="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 Dl(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:WC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function LC(){let e=TC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=OC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=js({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 BC(e,r,t){let n=e.workerToolGrant,o=n?Gs(n.capabilities):void 0;return{provider:yt,model:t,request:Dl(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Ml(e,r,t){let n=LC(),o=Uf(e.stdoutPath,"a"),s=Uf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=NC(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:yt,get defaultModel(){return Nl()},preflightModel(e){return gl(e,Nl())},start(e){let r=gl(e.model,Nl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=MC(process.env),o=BC(e,n,t);return Ml(e,o,t)}};wr();import{closeSync as Vf,openSync as Gf}from"node:fs";import{spawn as KC}from"node:child_process";O();Rr();import UC from"node:path";var FC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function Ys(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function qs(e){let r=UC.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||FC.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 HC(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 Zt(e,Oe())},start(e){let r=Zt(e.model,Oe());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=Ys(),n=qs(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=KC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:HC(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",$C=600*1e3,ao=class extends Error{};function jC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function VC(e=process.env){let r=jC(e);if(!r)throw new ao('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 ao(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ao(`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):$C;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function GC(e,r,t){let n=e.workerToolGrant,o=n?Gs(n.capabilities):void 0,s=Dl(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 Zt(e,Oe())},start(e){let r=Zt(e.model,Oe());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=VC(process.env),o=GC(e,n,t);return Ml(e,o,t)}};var YC=Le,Ws="composer-2.5";function xe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function qC(e){if(!e)return;let r=xe(e,"workerModelOverride")||xe(e,"modelOverride");return r||`${xe(e,"title")}
85
+ ${xe(e,"description")}
86
+ ${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 Ll(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||YC}function Js(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 JC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ws,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 zC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Zf(e,r,t){return zC.has(e)?ct:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?ct:Le}function XC(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===ct?"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:yt,...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=Ll();return{model:s,provider:Js(s),rule:"default:global"}}function QC(e){return e?Ue(xe(e,"executorRef")):null}function ZC(e){switch(ar(e)){case ur:case dr:return Oe();case"claude":return Le;case"codex":return Or;case"cursor":return Ws;default:return}}var Wl="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:ZC(n)??e.model,rule:t}}function eP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Wl?e:rg(e,t,Wl)}function rP(e,r){if(r.explicitProvider?.trim()||dl(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 zs(e){let r,t=QC(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=JC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||Js(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||Js(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Ms(e.task)){let l=qC(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===ct?"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=XC(e.task);r={...l,requestedModel:l.model}}else{let l=Ll();r={model:l,provider:e.explicitProvider?.trim()||Js(l),rule:"default:global",requestedModel:l}}r=eP(r,e.explicitProvider),r=rP(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===Wl||i.rule===eg||Ar(i.provider)&&(e.explicitProviderIsOperatorOverride||Ms(e.task))||i.provider===yt||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||Ll()||Le}function tP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ng(e){return e?.trim()||void 0}function og(e){let r=tP(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(Zi("harness.maxTaskAttempts",4))),dispatchCooldownMs:sg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Zi("harness.dispatchCooldownMs",5e3)))}}H();import sP from"node:path";B();fe();O();var Bl="kynver-harness:",ag="@runner:";function Ul(e){return e?.trim()?e.trim():null}function nP(e){let r=Ul(e);if(!r?.startsWith(Bl))return null;let t=r.slice(Bl.length),n=t.indexOf(ag);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function lo(e,r){let t=e.trim(),n=r.trim();return`${Bl}${t}${ag}${n}`}function oP(e,r){let t=Ul(r);return t?nP(e)===t:!1}function Xs(e){let r=Ul(e.workerLeaseOwner);return r&&oP(r,e.runId)?r:lo(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 Qs(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 Zs(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 Qs({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(sP.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)):Fl,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=Xs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await Zs({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 MO,mkdirSync as WO}from"node:fs";import un from"node:path";B();O();import iP 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 ei(e,r={}){let t=r.isAlive??Y,n=r.kill??De,o=r.sleep??$o;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Kl(e,r,t,n,o={}){mg(e,r,t,n);let s=ei(r.pid,o),i=ei(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(iP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ei(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function aP(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(!aP(n.env))throw Kl(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`)}Sa();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 lP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,cP="next-action-fix:";function ri(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]}`:ri(e)}function uP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(cP)||t.includes("repair")||t.includes("unblock"))}function dP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(lP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ri(String(n.targetPrUrl??n.target_pr_url??"")),s=ri(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(!uP(e))return null;let r=dP(e.description),t=e.prUrl?yg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ri(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=[...Sn(`worker.prompt.progress.${n}`).split(`
87
87
  `),o],i=Sn(`worker.prompt.merge_gate.${n}`).split(`
88
88
  `),a=Sn(`worker.prompt.plan_artifacts.${n}`).split(`
89
89
  `);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.",...Sn("worker.prompt.core_rules").split(`
90
- `),"",...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?[...Rg({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
91
- `)}O();H();var ti={claude:Pf,codex:Wf,cursor:hf,[cr]:Gf,[ur]:qf,[yt]:Uf},bg=null;function Sg(e){if(bg)return bg;let r=e?.trim();if(r){let o=ti[ir(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(ti).join(", ")}`);return o}let t=Qm(U().workerProvider),n=ti[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(ti).join(", ")}`);return n}O();import{spawn as bO}from"node:child_process";import{existsSync as SO,openSync as wO,closeSync as xk}from"node:fs";import xO from"node:path";B();function wg(e){return!!e.completionReportedAt?.trim()}function ni(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function dP(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Hl(e){return!!(dP(e.completionBlocker)||e.completionOutcome==="rejected")}function co(e){return wg(e)&&!Hl(e)}B();fe();H();import Pi from"node:path";function $l(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function uo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var pP=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),xg=new Set(["done","failed","cancelled"]);function _g(e){let r=$l(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=uo(r.outcome),n=uo(r.detail)??uo(r.error),o=$l(r.task),s=$l(r.closedTask),i=o?uo(o.status):null,a=s?uo(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&xg.has(i)||a!==null&&xg.has(a))||t!==null&&pP.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function Eg(e){return e.taskAdvanced}B();os();var mP="expert-lane-pr-review:",fP="plan-review-task",gP="scheduledjob:",oi=new Set(["lorentz","dalton","rhea","sentinel"]);function hP(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 kP(e,r){return e.startsWith("factory:")?e.includes("lb")||jl(r):!1}function si(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
92
- ${n}`,s=hP(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(mP)||r===fP||r.startsWith("daemon-review:")||s&&oi.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||kP(r,o)||jl(o))||r.startsWith(gP)&&e.parentTaskId&&s&&oi.has(s)||e.planId&&!e.parentTaskId&&s&&oi.has(s)&&jl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&oi.has(s))}var Cg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,yP=new Set(Hm()),RP=/no commits between/i;function Pg(e){return!!(e&&RP.test(e))}function be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ag(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:be(e.head)}function Ig(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 vP(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 bP(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&yP.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&Cg.test(n))}function SP(e,r){if(e.changedFiles.length>0)return!0;let t=be(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=vP(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(be(e.headCommit)||Ag(e.gitAncestry))}function Og(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(si({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&&Cg.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(bP(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 SP(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Tg(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:be(r?.headCommit)??Ag(e.gitAncestry),prUrl:be(r?.prUrl)??null}}import{spawnSync as wP}from"node:child_process";function Dg(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Ng(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Ng(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 Ng(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 xP(e,r,t){try{let n=wP(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 ai={git:(e,r)=>ne(e,r),gh:(e,r)=>xP("gh",e,r)};function _P(e){return e.split(`
93
- `).map(r=>r.trim()).find(Boolean)??""}function Mg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Dg(t.stdout)}function Rt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function ii(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function po(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=Rt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Wg(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 Lg(e){let r=ii(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=EP(t.stdout)??ii(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 EP(e){let t=_P(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function Bg(e){return`t-${x(e)}-a`}function Ug(e,r){let t=Bg(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 mo(e){return e.trim().toLowerCase()}function Fg(e,r){if(!e.length)return null;if(r){let t=mo(r),n=e.find(o=>mo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Kg(e,r){let t=mo(r);return e.filter(n=>mo(n.url)!==t).map(n=>n.url)}function Hg(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 CP(e){let r=new Set,t=[];for(let n of e){let o=mo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function PP(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?[]:Hg(o.stdout).filter(s=>Ug(s,t))}function AP(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=Bg(t);return Hg(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Ug(i,t))}function Vl(e,r,t,n){let o=t.trim();if(!o)return[];let s=PP(e,r,o,n),i=AP(e,r,o,n);return CP([...s,...i])}function IP(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 Gl(e){let r=Kg(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=IP(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 $g(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 OP(e){return e.gh(process.cwd(),["--version"]).status===0}function TP(e,r){return`AgentOS harness: ${e} (${r})`}function NP(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(`
94
- `)}function ql(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function DP(e){return ql(e.prUrlHint)??Ig(e.status.finalResult)??ql(e.worker.taskPrUrl)??null}function MP(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??Rt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=po({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Wg({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=Rt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Yl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Rt(e.snapshot.worktreePath,e.exec)??void 0};let r=po({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Jl(e,r=ai){let t=DP(e),n=Tg(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Og({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?Yl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Yl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!OP(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=Mg(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??Rt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=po({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,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=ql(e.worker.taskId),c=[];if(l){c=Vl(n.worktreePath,i,l,r);let h=Fg(c);if(h){let w=MP({snapshot:n,canonical:h,workerName:e.worker.name,exec:r});return w.ok&&w.prUrl&&Gl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=ii(n.worktreePath,i,n.branch,r);if(u)return Yl({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=po({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,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??Rt(n.worktreePath,r)??void 0;let k=f?$g(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=Lg({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:TP(e.worker.name,e.worker.runId),body:NP(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Pg(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:Vl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Gl({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();lt();wa();B();fe();O();import bA from"node:path";O();import WP from"node:path";var fo=new Map,zl=new Map;function Xl(e){clearInterval(zl.get(e)),zl.delete(e)}function Ql(e,r){if(Xl(e),!fo.has(e))return;let t=setInterval(()=>{(I(WP.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&tn(e)},1e3);t.unref(),zl.set(e,t)}function Zl(e,r){Xl(e);let t=fo.get(e);t&&t.close(),fo.set(e,r)}async function Yr(e){Xl(e);let r=fo.get(e);return r?(fo.delete(e),await r.close(),!0):!1}function tn(e){Yr(e).catch(()=>{})}de();import{appendFileSync as LP,existsSync as Vg,mkdirSync as Gg,readFileSync as BP,rmSync as jg,writeFileSync as UP}from"node:fs";import Tr from"node:path";var Yg=Tr.join(".cursor","mcp.json");function qg(e){return Tr.join(e,Yg)}function FP(e){return Z(e,["ls-files","--error-unmatch",Yg.split(Tr.sep).join("/")],{allowFailure:!0}).trim().length>0}function KP(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Tr.isAbsolute(r)?r:Tr.join(e,r),n=Tr.join(t,"info","exclude"),o=".cursor/mcp.json";try{Gg(Tr.dirname(n),{recursive:!0});let s=Vg(n)?BP(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;LP(n,`${s.endsWith(`
90
+ `),"",...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(`
91
+ `)}O();H();var ti={claude:Af,codex:Lf,cursor:kf,[ur]:Yf,[dr]:Jf,[yt]:Ff},Sg=null;function wg(e){if(Sg)return Sg;let r=e?.trim();if(r){let o=ti[ar(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(ti).join(", ")}`);return o}let t=Zm(U().workerProvider),n=ti[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(ti).join(", ")}`);return n}O();import{spawn as SO}from"node:child_process";import{existsSync as wO,openSync as xO,closeSync as _k}from"node:fs";import _O from"node:path";B();function xg(e){return!!e.completionReportedAt?.trim()}function ni(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function pP(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Hl(e){return!!(pP(e.completionBlocker)||e.completionOutcome==="rejected")}function co(e){return xg(e)&&!Hl(e)}B();fe();H();import Pi from"node:path";function $l(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function uo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var mP=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=$l(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=uo(r.outcome),n=uo(r.detail)??uo(r.error),o=$l(r.task),s=$l(r.closedTask),i=o?uo(o.status):null,a=s?uo(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&_g.has(i)||a!==null&&_g.has(a))||t!==null&&mP.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function Cg(e){return e.taskAdvanced}B();os();var fP="expert-lane-pr-review:",gP="plan-review-task",hP="scheduledjob:",oi=new Set(["lorentz","dalton","rhea","sentinel"]);function kP(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 yP(e,r){return e.startsWith("factory:")?e.includes("lb")||jl(r):!1}function si(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
92
+ ${n}`,s=kP(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(fP)||r===gP||r.startsWith("daemon-review:")||s&&oi.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||yP(r,o)||jl(o))||r.startsWith(hP)&&e.parentTaskId&&s&&oi.has(s)||e.planId&&!e.parentTaskId&&s&&oi.has(s)&&jl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&oi.has(s))}var Pg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,RP=new Set($m()),vP=/no commits between/i;function Ag(e){return!!(e&&vP.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 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 SP(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&RP.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&Pg.test(n))}function wP(e,r){if(e.changedFiles.length>0)return!0;let t=be(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!!(be(e.headCommit)||Ig(e.gitAncestry))}function Tg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(si({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(SP(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 wP(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 xP}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 _P(e,r,t){try{let n=xP(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 ai={git:(e,r)=>ne(e,r),gh:(e,r)=>_P("gh",e,r)};function EP(e){return e.split(`
93
+ `).map(r=>r.trim()).find(Boolean)??""}function Wg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Mg(t.stdout)}function Rt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function ii(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function po(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=Rt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Lg(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 Bg(e){let r=ii(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=CP(t.stdout)??ii(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 CP(e){let t=EP(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function Ug(e){return`t-${x(e)}-a`}function Fg(e,r){let t=Ug(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 mo(e){return e.trim().toLowerCase()}function Kg(e,r){if(!e.length)return null;if(r){let t=mo(r),n=e.find(o=>mo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Hg(e,r){let t=mo(r);return e.filter(n=>mo(n.url)!==t).map(n=>n.url)}function $g(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 PP(e){let r=new Set,t=[];for(let n of e){let o=mo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function AP(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?[]:$g(o.stdout).filter(s=>Fg(s,t))}function IP(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=Ug(t);return $g(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Fg(i,t))}function Vl(e,r,t,n){let o=t.trim();if(!o)return[];let s=AP(e,r,o,n),i=IP(e,r,o,n);return PP([...s,...i])}function OP(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 Gl(e){let r=Hg(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=OP(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 jg(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 TP(e){return e.gh(process.cwd(),["--version"]).status===0}function NP(e,r){return`AgentOS harness: ${e} (${r})`}function DP(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(`
94
+ `)}function ql(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function MP(e){return ql(e.prUrlHint)??Og(e.status.finalResult)??ql(e.worker.taskPrUrl)??null}function WP(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??Rt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=po({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Lg({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=Rt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Yl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Rt(e.snapshot.worktreePath,e.exec)??void 0};let r=po({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Jl(e,r=ai){let t=MP(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?Yl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Yl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!TP(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=Wg(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??Rt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=po({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,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=ql(e.worker.taskId),c=[];if(l){c=Vl(n.worktreePath,i,l,r);let h=Kg(c);if(h){let w=WP({snapshot:n,canonical:h,workerName:e.worker.name,exec:r});return w.ok&&w.prUrl&&Gl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=ii(n.worktreePath,i,n.branch,r);if(u)return Yl({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=po({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,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??Rt(n.worktreePath,r)??void 0;let k=f?jg(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=Bg({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:NP(e.worker.name,e.worker.runId),body:DP(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:Vl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Gl({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();lt();wa();B();fe();O();import SA from"node:path";O();import LP from"node:path";var fo=new Map,zl=new Map;function Xl(e){clearInterval(zl.get(e)),zl.delete(e)}function Ql(e,r){if(Xl(e),!fo.has(e))return;let t=setInterval(()=>{(I(LP.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&tn(e)},1e3);t.unref(),zl.set(e,t)}function Zl(e,r){Xl(e);let t=fo.get(e);t&&t.close(),fo.set(e,r)}async function qr(e){Xl(e);let r=fo.get(e);return r?(fo.delete(e),await r.close(),!0):!1}function tn(e){qr(e).catch(()=>{})}de();import{appendFileSync as BP,existsSync as Gg,mkdirSync as Yg,readFileSync as UP,rmSync as Vg,writeFileSync as FP}from"node:fs";import Nr from"node:path";var qg=Nr.join(".cursor","mcp.json");function Jg(e){return Nr.join(e,qg)}function KP(e){return Z(e,["ls-files","--error-unmatch",qg.split(Nr.sep).join("/")],{allowFailure:!0}).trim().length>0}function HP(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{Yg(Nr.dirname(n),{recursive:!0});let s=Gg(n)?UP(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;BP(n,`${s.endsWith(`
95
95
  `)||!s?"":`
96
96
  `}${o}
97
- `)}catch{}}function Jg(e){if(FP(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=qg(e.worktreePath);Gg(Tr.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 UP(r,`${JSON.stringify(t,null,2)}
98
- `,{mode:384}),KP(e.worktreePath),{ok:!0,configPath:r}}function li(e){let r=qg(e);if(!Vg(r))return!1;try{jg(r,{force:!0});let t=Tr.dirname(r);return jg(t,{recursive:!1}),!0}catch{return!0}}yr();import{copyFileSync as HP,existsSync as ci,mkdirSync as $P,readFileSync as jP,rmSync as VP,symlinkSync as GP,writeFileSync as YP}from"node:fs";import{spawnSync as qP}from"node:child_process";import{homedir as JP}from"node:os";import qr from"node:path";var zP="codex-home";function zg(e){return qr.join(e,zP)}function XP(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return qr.resolve(r);let t=JP();for(let n of[qr.join(t,".codex"),qr.join(t,".config","codex")])if(ci(n))return n;return null}function QP(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(`
99
- `)}function ZP(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function Xg(e){let r=XP(e.env??process.env),t=r?qr.join(r,"config.toml"):null,n=t&&ci(t)?jP(t,"utf8"):"";if(n&&ZP(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=zg(e.workerDir);$P(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
97
+ `)}catch{}}function zg(e){if(KP(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=Jg(e.worktreePath);Yg(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 FP(r,`${JSON.stringify(t,null,2)}
98
+ `,{mode:384}),HP(e.worktreePath),{ok:!0,configPath:r}}function li(e){let r=Jg(e);if(!Gg(r))return!1;try{Vg(r,{force:!0});let t=Nr.dirname(r);return Vg(t,{recursive:!1}),!0}catch{return!0}}Rr();import{copyFileSync as $P,existsSync as ci,mkdirSync as jP,readFileSync as VP,rmSync as GP,symlinkSync as YP,writeFileSync as qP}from"node:fs";import{spawnSync as JP}from"node:child_process";import{homedir as zP}from"node:os";import Jr from"node:path";var XP="codex-home";function Xg(e){return Jr.join(e,XP)}function QP(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return Jr.resolve(r);let t=zP();for(let n of[Jr.join(t,".codex"),Jr.join(t,".config","codex")])if(ci(n))return n;return null}function ZP(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(`
99
+ `)}function eA(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function Qg(e){let r=QP(e.env??process.env),t=r?Jr.join(r,"config.toml"):null,n=t&&ci(t)?VP(t,"utf8"):"";if(n&&eA(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=Xg(e.workerDir);jP(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
100
100
  `)?"":`
101
- `;return YP(qr.join(o,"config.toml"),`${n}${s}${QP(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:eA(r,o)}}function eA(e,r){let t=e?qr.join(e,"auth.json"):null;if(!t||!ci(t))return"none";let n=qr.join(r,"auth.json");try{return GP(t,n,"file"),"symlink"}catch{try{return HP(t,n),"copy"}catch{return"none"}}}function go(e){let r=zg(e);if(!ci(r))return!1;try{return VP(r,{recursive:!0,force:!0}),!0}catch{return!1}}function Qg(e,r,t=1e4){try{let[n,o]=pe(r,["--version"]),s=qP(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 rA,existsSync as ec,mkdirSync as eh,readFileSync as rh,rmSync as Zg,writeFileSync as tA}from"node:fs";import Nr from"node:path";var th=Nr.join(".agents","mcp_config.json");function nh(e){return Nr.join(e,th)}function nA(e){return Z(e,["ls-files","--error-unmatch",th.split(Nr.sep).join("/")],{allowFailure:!0}).trim().length>0}function oA(e){if(!ec(e))return{};try{let r=JSON.parse(rh(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 sA(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=".agents/mcp_config.json";try{eh(Nr.dirname(n),{recursive:!0});let s=ec(n)?rh(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;rA(n,`${s.endsWith(`
101
+ `;return qP(Jr.join(o,"config.toml"),`${n}${s}${ZP(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:rA(r,o)}}function rA(e,r){let t=e?Jr.join(e,"auth.json"):null;if(!t||!ci(t))return"none";let n=Jr.join(r,"auth.json");try{return YP(t,n,"file"),"symlink"}catch{try{return $P(t,n),"copy"}catch{return"none"}}}function go(e){let r=Xg(e);if(!ci(r))return!1;try{return GP(r,{recursive:!0,force:!0}),!0}catch{return!1}}function Zg(e,r,t=1e4){try{let[n,o]=pe(r,["--version"]),s=JP(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 tA,existsSync as ec,mkdirSync as rh,readFileSync as th,rmSync as eh,writeFileSync as nA}from"node:fs";import Dr from"node:path";var nh=Dr.join(".agents","mcp_config.json");function oh(e){return Dr.join(e,nh)}function oA(e){return Z(e,["ls-files","--error-unmatch",nh.split(Dr.sep).join("/")],{allowFailure:!0}).trim().length>0}function sA(e){if(!ec(e))return{};try{let r=JSON.parse(th(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 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=".agents/mcp_config.json";try{rh(Dr.dirname(n),{recursive:!0});let s=ec(n)?th(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;tA(n,`${s.endsWith(`
102
102
  `)||!s?"":`
103
103
  `}${o}
104
- `)}catch{}}function oh(e){if(nA(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=nh(e.worktreePath),t=oA(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`};eh(Nr.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 tA(r,`${JSON.stringify(n,null,2)}
105
- `,{mode:384}),sA(e.worktreePath),{ok:!0,configPath:r}}function ui(e){let r=nh(e);if(!ec(r))return!1;try{return Zg(r,{force:!0}),Zg(Nr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as iA,existsSync as rc,mkdirSync as aA,readFileSync as lA,rmSync as cA,symlinkSync as uA,writeFileSync as dA}from"node:fs";import{homedir as pA}from"node:os";import Dr from"node:path";var mA="gemini-home";function sh(e){return Dr.join(e,mA)}function fA(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||pA()}function gA(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Dr.join(Dr.resolve(r),".gemini"):Dr.join(fA(e),".gemini")}function hA(e){if(!rc(e))return{};try{let r=JSON.parse(lA(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function kA(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function yA(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function RA(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function ih(e){let r=e.env??process.env,t=gA(r),n=hA(Dr.join(t,"settings.json"));if(kA(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=sh(e.workerDir),s=Dr.join(o,".gemini");aA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...yA(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:RA(e.brokerSocketPath)}};return dA(Dr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
106
- `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:vA(t,s)}}function vA(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Dr.join(e,o);if(!rc(s))continue;let i=Dr.join(r,o);try{uA(s,i,"file"),n==="none"&&(n="symlink")}catch{try{iA(s,i),n="copy"}catch{}}}return n}function di(e){let r=sh(e);if(!rc(r))return!1;try{return cA(r,{recursive:!0,force:!0}),!0}catch{return!1}}var SA=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function ah(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function wA(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 Jr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:wA(r);return{finalResult:r??t??"completed",summary:t}}function pi(e,r,t){if(ah(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Jr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(tn(e.workerDir),Ks(e.workerDir),go(e.workerDir),di(e.workerDir)),e.worktreePath&&(li(e.worktreePath),ui(e.worktreePath))}function xA(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 lh(e,r,t={}){let n=xA(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=I(bA.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||ah(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!SA.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Kl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}pi(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}Bn();function mi(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 _A(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 EA(e){let r=Un(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function CA(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 fi(e){let{worker:r,status:t}=e;if(mi(t.finalResult)){let u=me(r.heartbeatPath),d=br(u),p=mi(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Jr(t)}}if(t.alive)return null;let n=ut(r.stdoutPath);if(mi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Jr(u)}}let o=me(r.heartbeatPath),s=br(o);if(mi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Jr(u)}}let i=EA(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Jr(u)}}let a=_A(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Jr(u)}}let l=CA({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Jr(c)}}function gi(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Bn();function hi(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 ch(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 uh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function dh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function mh(e){let r=dh(e);if(!r)return[];let t=dh(r.worktreeHandoff),n=uh(t?.disposableArtifactsRemoved);return n.length?n:uh(r.disposableArtifactsRemoved)}function ph(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function fh(e,r){let t=hi(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>ph(o)));return t.every(o=>{let s=ph(ch(o));return n.has(s)})}function ki(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function PA(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 AA(e){let r=gh(e.disposableArtifactsRemoved),t=mh(e.finalResult);return[...new Set([...r,...t])]}function hh(e){let r=gh(e.changedFiles),t=hi(r),n=AA(e),o=t.length===0||fh(r,n);return ki(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`}:ki(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`}:ki(e.artifactBundlePath)||ki(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}:PA(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 qA,renameSync as JA}from"node:fs";import{mkdirSync as $A}from"node:fs";import jA from"node:path";import{DatabaseSync as VA}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"}},IA=[`CREATE TABLE IF NOT EXISTS local_meta (
104
+ `)}catch{}}function sh(e){if(oA(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=oh(e.worktreePath),t=sA(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`};rh(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 nA(r,`${JSON.stringify(n,null,2)}
105
+ `,{mode:384}),iA(e.worktreePath),{ok:!0,configPath:r}}function ui(e){let r=oh(e);if(!ec(r))return!1;try{return eh(r,{force:!0}),eh(Dr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as aA,existsSync as rc,mkdirSync as lA,readFileSync as cA,rmSync as uA,symlinkSync as dA,writeFileSync as pA}from"node:fs";import{homedir as mA}from"node:os";import Mr from"node:path";var fA="gemini-home";function ih(e){return Mr.join(e,fA)}function gA(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||mA()}function hA(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Mr.join(Mr.resolve(r),".gemini"):Mr.join(gA(e),".gemini")}function kA(e){if(!rc(e))return{};try{let r=JSON.parse(cA(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function yA(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function RA(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function vA(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function ah(e){let r=e.env??process.env,t=hA(r),n=kA(Mr.join(t,"settings.json"));if(yA(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=ih(e.workerDir),s=Mr.join(o,".gemini");lA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...RA(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:vA(e.brokerSocketPath)}};return pA(Mr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
106
+ `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:bA(t,s)}}function bA(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{dA(s,i,"file"),n==="none"&&(n="symlink")}catch{try{aA(s,i),n="copy"}catch{}}}return n}function di(e){let r=ih(e);if(!rc(r))return!1;try{return uA(r,{recursive:!0,force:!0}),!0}catch{return!1}}var wA=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function lh(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function xA(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:xA(r);return{finalResult:r??t??"completed",summary:t}}function pi(e,r,t){if(lh(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&&(tn(e.workerDir),Ks(e.workerDir),go(e.workerDir),di(e.workerDir)),e.worktreePath&&(li(e.worktreePath),ui(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 ch(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(SA.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||lh(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!wA.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Kl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}pi(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}Bn();function mi(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 EA(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 CA(e){let r=Un(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function PA(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 fi(e){let{worker:r,status:t}=e;if(mi(t.finalResult)){let u=me(r.heartbeatPath),d=Sr(u),p=mi(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=ut(r.stdoutPath);if(mi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:zr(u)}}let o=me(r.heartbeatPath),s=Sr(o);if(mi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:zr(u)}}let i=CA(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:zr(u)}}let a=EA(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=PA({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 gi(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Bn();function hi(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 uh(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 dh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function ph(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function fh(e){let r=ph(e);if(!r)return[];let t=ph(r.worktreeHandoff),n=dh(t?.disposableArtifactsRemoved);return n.length?n:dh(r.disposableArtifactsRemoved)}function mh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function gh(e,r){let t=hi(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>mh(o)));return t.every(o=>{let s=mh(uh(o));return n.has(s)})}function ki(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function hh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function AA(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 IA(e){let r=hh(e.disposableArtifactsRemoved),t=fh(e.finalResult);return[...new Set([...r,...t])]}function kh(e){let r=hh(e.changedFiles),t=hi(r),n=IA(e),o=t.length===0||gh(r,n);return ki(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`}:ki(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`}:ki(e.artifactBundlePath)||ki(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}:AA(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 JA,renameSync as zA}from"node:fs";import{mkdirSync as jA}from"node:fs";import VA from"node:path";import{DatabaseSync as GA}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"}},OA=[`CREATE TABLE IF NOT EXISTS local_meta (
107
107
  key TEXT PRIMARY KEY,
108
108
  value TEXT NOT NULL
109
109
  ) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
@@ -129,8 +129,8 @@ ${n}`,s=hP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock
129
129
  payload_json TEXT NOT NULL,
130
130
  created_at TEXT NOT NULL,
131
131
  PRIMARY KEY (scope, seq)
132
- ) STRICT`];function OA(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 kh(e,r){let t=OA(e);if(t!==null&&t>1)throw new tc(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of IA)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 TA,realpathSync as NA,readFileSync as DA}from"node:fs";import yh from"node:path";var MA=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),WA=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function LA(){try{return DA("/proc/self/mounts","utf8")}catch{return null}}function BA(e){let r=yh.resolve(e);for(let t=0;t<64;t+=1){if(TA(r))try{return NA.native(r)}catch{return r}let n=yh.dirname(r);if(n===r)return r;r=n}return r}function UA(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function FA(e){let r=[];for(let t of e.split(`
133
- `)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:UA(n[1]),fsType:n[2]})}return r}function Rh(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function KA(e,r){let t=null,n=Rh(e);for(let o of r){let s=Rh(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function vh(e,r){let n=(r?.resolveRealPath??BA)(e),o=(r?.mountsSource??LA)();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=KA(n,FA(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 WA.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}:MA.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 yi=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},GA="local-run-store.sqlite",YA=5e3,ho=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=vh(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new yi(t.reason);$A(r.directory,{recursive:!0,mode:448});let n=jA.join(r.directory,r.filename??GA),o=new VA(n,{timeout:r.busyTimeoutMs??YA}),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 yi(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),kh(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
132
+ ) STRICT`];function TA(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 yh(e,r){let t=TA(e);if(t!==null&&t>1)throw new tc(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of OA)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 NA,realpathSync as DA,readFileSync as MA}from"node:fs";import Rh from"node:path";var WA=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),LA=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function BA(){try{return MA("/proc/self/mounts","utf8")}catch{return null}}function UA(e){let r=Rh.resolve(e);for(let t=0;t<64;t+=1){if(NA(r))try{return DA.native(r)}catch{return r}let n=Rh.dirname(r);if(n===r)return r;r=n}return r}function FA(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function KA(e){let r=[];for(let t of e.split(`
133
+ `)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:FA(n[1]),fsType:n[2]})}return r}function vh(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function HA(e,r){let t=null,n=vh(e);for(let o of r){let s=vh(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function bh(e,r){let n=(r?.resolveRealPath??UA)(e),o=(r?.mountsSource??BA)();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=HA(n,KA(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 LA.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}:WA.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 yi=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},YA="local-run-store.sqlite",qA=5e3,ho=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=bh(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new yi(t.reason);jA(r.directory,{recursive:!0,mode:448});let n=VA.join(r.directory,r.filename??YA),o=new GA(n,{timeout:r.busyTimeoutMs??qA}),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 yi(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),yh(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
134
134
  (process_key, pid, runtime_version, node_version, started_at, registered_at)
135
135
  VALUES (?, ?, ?, ?, ?, ?)
136
136
  ON CONFLICT(process_key) DO UPDATE SET
@@ -154,26 +154,26 @@ ${n}`,s=hP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock
154
154
  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
155
155
  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)
156
156
  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
157
- 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}`;qA(o)&&JA(o,`${t}${n}`)}return t}function bh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ho.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:ho.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function XA(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function QA(){return ZA.classifyOptions??XA()}var ZA={};var eI=300*1e3,Mr=null,Ri=0;function rI(e){Ri+=1;try{let r=QA(),t=bh({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:Ri},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:Ri},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function tI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=eI}function z(e=Date.now()){let r=Be();return(!Mr||Mr.status.harnessRoot!==r||tI(Mr,e))&&(oI(),Mr=rI(r)),Mr.store}function nI(){return Mr?Mr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Ri}}function Sh(){return z(),nI()}function oI(){try{Mr?.store?.close()}catch{}Mr=null}H();O();import{existsSync as sI,readFileSync as iI}from"node:fs";import{homedir as aI}from"node:os";import lI from"node:path";var cI=3e4,tr=null;function wh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return lI.join(aI(),".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 xh(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 _h(e,r){try{let t=wh(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 Eh(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(tr&&e-tr.loadedAtMs<cI)return tr.flags;try{let r=U().agentOsId?.trim();if(!r)return tr={flags:{},loadedAtMs:e,file:null},tr.flags;let t=wh(r);if(!sI(t))return tr={flags:{},loadedAtMs:e,file:t},tr.flags;let n=JSON.parse(iI(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 uI=[{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 dI(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 Wr(e=process.env){let r={},t={},n=[],o=Eh();for(let s of uI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=dI(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 Lr(e=process.env){return Wr(e).flags.dispatchReceipts}function oc(e){return Lr(e)!=="off"}function sc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function yo(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 Ph(e){yo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function vi(e){yo("spawned",e)}function nn(e,r){yo("released",e,{reasonClass:r})}function Ah(e){yo("completion-sent",e)}function ic(e,r){yo("completion-acked",e,{outcome:r})}function Ih(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 Oh(e){if(Lr()!=="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 pI=600*1e3;function Th(e,r){if(Lr()!=="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 Nh(e,r){if(Lr()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??pI;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 ko(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var mI=900*1e3,Ch=10080*60*1e3,fI=1440*60*1e3,gI=500,hI=300;function Dh(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??mI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Ch).toISOString(),limit:gI}),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>=fI&&a.length+5<=hI&&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=ko(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=ko(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(Lr()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Ch}).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 Mh(){return{"dispatchReceipts.storeFailures":Te.storeFailures,"dispatchReceipts.completionReplaysObserved":Te.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Te.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Te.agedReceiptsPruned}}var on=900*1e3,uc="admission-shadow",lc="worker-slot:",zr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},cc=!1;function Wh(){cc=!1}function Br(e=process.env){return Wr(e).flags.admission}function bi(e,r){return`${lc}${e}:${r}`}function Lh(e,r){if(Br()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(bi(e,r),uc,on)}catch{zr.storeFailures+=1}}function Ro(e,r){if(Br()==="off")return;let t=z();if(t)try{t.releaseAdmission(bi(e,r),uc)}catch{zr.storeFailures+=1}}function Bh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Br()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>bi(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&&(zr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(bi(p.runId,p.workerName),uc,on),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,zr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:lc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return zr.storeFailures+=1,r}}function Uh(){return{"admission.storeFailures":zr.storeFailures,"admission.missingForLive":zr.missingForLive,"admission.deadSlotsReleased":zr.deadSlotsReleased}}var dc="worker-slot-n:",Si=64;function Fh(e){return`${dc}${e}`}function wi(e,r){return`${e}:${r}`}var Xr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function Kh(e){if(Br()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Si,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Xr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=wi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Fh(o),n,on).acquired)return{admitted:!0,slot:o};return Xr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Xr.enforceStoreFailures+=1,{admitted:!0}}}function Qr(e,r){if(Br()==="off")return;let t=z();if(t)try{let n=wi(e,r),o=t.listAdmissionReservations({keyPrefix:dc,limit:Si});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Xr.enforceStoreFailures+=1}}function Hh(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Br()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>wi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:dc,limit:Si}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,on),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=wi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Si;d+=1)if(t.tryReserveAdmission(Fh(d),u,on).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Xr.enforceStoreFailures+=1,r}}function $h(){return{"admission.enforceStoreFailures":Xr.enforceStoreFailures,"admission.refusedSlotsExhausted":Xr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Xr.admissionsRefusedDiskBackstop}}O();O();var kI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,yI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,jh=new Set(["undefined","null"]),Vh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function RI(e){let r=e.trim();if(!kI.test(r))throw new Error(`invalid run id: ${e}`);return r}function vI(e){let r=e.trim();if(!yI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Gh(e){return typeof e=="string"?e.trim():""}function pc(e){let r=Gh(e.run),t=Gh(e.name);return(!r||jh.has(r))&&Je(`missing --run RUN_ID (${Vh})`),(!t||jh.has(t))&&Je(`missing --name WORKER_NAME (${Vh})`),{runId:RI(r),workerName:vI(t)}}import{existsSync as bI,mkdirSync as SI,readFileSync as wI,writeFileSync as xI}from"node:fs";import{homedir as _I}from"node:os";import ek from"node:path";var xe={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function vo(e){return Wr(process.env).flags[e]}var GG=1800*1e3;function mc(e){return`mesh-cron-lease:${e}`}function Yh(e,r){if(vo("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{xe.meshStoreFailures+=1}}function qh(e,r){let t=vo("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&&(xe.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(xe.meshEnforceStaleInversions+=1,null):s}catch{return xe.meshStoreFailures+=1,null}}function xi(e){return`quota-cooldown:${e}`}var Jh="quota-preflight";function zh(e,r){if(vo("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(xi(e),Jh,r)}catch{xe.quotaStoreFailures+=1}}function Xh(e){if(vo("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(xi(e),Jh)}catch{xe.quotaStoreFailures+=1}}function Qh(e,r){let t=vo("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:xi(e),limit:50}).find(i=>i.key===xi(e)),s=!!o;return s!==r&&(xe.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return xe.quotaStoreFailures+=1,null}}function Zh(){return{"keeper.storeFailures":xe.keeperStoreFailures,"meshLease.storeFailures":xe.meshStoreFailures,"meshLease.divergences":xe.meshLeaseDivergences,"meshLease.enforceStaleInversions":xe.meshEnforceStaleInversions,"quota.storeFailures":xe.quotaStoreFailures,"quota.verdictDivergences":xe.quotaVerdictDivergences}}var EI=/\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,CI=30,PI=5,AI=240;function II(e){let r=e?.trim();return!!(r&&EI.test(r))}function OI(){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(AI,Math.max(PI,e)):CI}function rk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||ek.join(_I(),".kynver","provider-quota-cooldowns.json")}function bo(e){return(e??"").trim().toLowerCase()}function gc(){let e=rk();if(!bI(e))return{};try{let r=JSON.parse(wI(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[bo(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function hc(e){let r=rk();try{SI(ek.dirname(r),{recursive:!0}),xI(r,`${JSON.stringify(e,null,2)}
158
- `,"utf8")}catch{}}function TI(e,r,t=Date.now()){let n=bo(e);if(!n)return;let o=gc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},hc(o),zh(n,fc()*6e4)}function NI(e){let r=bo(e);if(!r)return!1;Xh(r);let t=gc();return r in t?(delete t[r],hc(t),!0):!1}function tk(e,r=Date.now()){if(!OI())return{ok:!0};let t=bo(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=Qh(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 DI(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 nk(e){let r=bo(e.provider);if(!r)return"none";let t=DI(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?II(t)?(TI(r,t,e.nowMs??Date.now()),"recorded"):NI(r)?"cleared":"none":"none"}function ok(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 sO}from"node:fs";import iO from"node:path";Ga();import{createECDH as uk,randomBytes as BI}from"node:crypto";import{chmodSync as dk,existsSync as ak,mkdirSync as UI,readFileSync as FI,readdirSync as KI,renameSync as HI,writeFileSync as $I}from"node:fs";import{homedir as jI}from"node:os";import pk from"node:path";import{createCipheriv as tY,createDecipheriv as nY,createECDH as oY,createHash as LI,hkdfSync as sY,randomBytes as iY}from"node:crypto";var MI=/^[A-Z][A-Z0-9_]{1,63}$/;var Zr={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minRedactChars:6},WI=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function sk(e){return typeof e=="string"&&MI.test(e)&&!WI.has(e)&&!e.startsWith("KYNVER_")}function ik(e){return LI("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var lk="secret-store-keys";function sn(){return pk.join(jI(),".kynver","secrets")}function yc(e){UI(e,{recursive:!0,mode:448});try{dk(e,448)}catch{}}function Rc(e,r){let t=`${e}.${process.pid}.tmp`;$I(t,r,{mode:384});try{dk(t,384)}catch{}HI(t,e)}function ck(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 _i(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=uk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:ik(s),vaultKey:n,keyStore:r}}var VI=e=>pk.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 mk(e={}){let r=e.root??sn(),t=e.keychain??Gn(),n=t.available?ck(t.read(lk)):null;if(n)return _i(n,"keychain");let o=VI(r),s=ak(o)?ck(FI(o,"utf8")):null;if(s)return _i(s,"file");if(ak(r)&&KI(r).some(d=>d.endsWith(".vault.json")))throw new kc;let i=uk("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:BI(32).toString("base64")},u=JSON.stringify(c);return t.write(lk,u)?_i(c,"keychain"):(yc(r),Rc(o,`${u}
159
- `),_i(c,"file"))}function GI(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>=Zr.minRedactChars)}function YI(e){if(e.length<4||e.length>=Zr.minRedactChars||/\s/.test(e))return!1;let r=/[A-Za-z]/.test(e),t=/[0-9]/.test(e);return!(!/[^A-Za-z0-9]/.test(e)&&(!r||!t))}function qI(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;YI(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of GI(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),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_])${qI(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 ZI,randomBytes as eO}from"node:crypto";import{existsSync as rO,readFileSync as tO,rmSync as nO}from"node:fs";import oO from"node:path";import{createCipheriv as JI,createDecipheriv as zI,randomBytes as XI,scrypt as RY,timingSafeEqual as vY}from"node:crypto";var QI=32,gk=12,vc=16,bY={N:2**17,r:8,p:1},SY=2**14;var an=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!==QI)throw new an("bad key length");let n=XI(gk),o=JI("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!==gk||o.length<vc)throw new an;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 an?n:new an}}var wY=Buffer.from("kynver-site-login-key-check-v1","utf8");var _e=class extends Error{constructor(t,n){super(t);this.code=n;this.name="SecretStoreError"}code};function wc(e){return`${ZI("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ei=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
160
- `))throw new _e("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
161
- `)},ln=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Ci=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new _e("workspace is required","invalid");this.root=r.root??sn(),this.file=oO.join(this.root,wc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!rO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(tO(this.file,"utf8"))}catch{throw new _e("The saved-secrets file is damaged.","corrupt")}if(r.v!==1||!Array.isArray(r.secrets))throw new _e("The saved-secrets file is damaged.","corrupt");if(r.agentOsId!==this.opts.agentOsId)throw new _e("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)}
162
- `)}list(){return this.read().secrets.map(ln)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?ln(t):null}put(r){if(!sk(r.name))throw new _e("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new _e("The secret is empty.","invalid");if(t>Zr.maxValueBytes)throw new _e("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,Zr.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"),Ei(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:ln(i),replaced:!0};if(o.secrets.length>=Zr.maxSecrets)throw new _e("This computer already holds the most secrets allowed.","full");let a=`sec_${eO(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"),Ei(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:ln(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 _e("No saved secret by that name.","not_found");try{let n=Sc(this.opts.vaultKey,t.value,Ei(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:ln(t),value:n}}catch{throw new _e(`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,Ei(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 _e("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?nO(this.file,{force:!0}):this.write(t),ln(o)}};var aO=64,xc=new Map;function lO(e,r){return`${r}\0${e}`}function cO(e){try{let r=sO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function uO(e,r=sn()){if(!e)return null;let t=iO.join(r,wc(e)),n=cO(t),o=lO(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=mk({root:r}),a=fk(new Ci({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>aO||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 hk(e,r,t=sn()){let n=uO(e,t);return!n||n.empty?r:_c(r,n,0)}async function kk(e,r,t){let n=await fetch(e,{method:"POST",headers:Jn(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 dO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function yk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function So(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function pO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function mO(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 vk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function fO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function cn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function gO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ec(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function hO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function xo(e){let{runId:r,workerName:t}=pc(e),n=qt(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(!Se(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&&co(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Hl(n)&&gO(n),!s.finalResult&&s.alive===!1){let _=fi({worker:n,status:s});_&&gi(n,_)&&(L(n.runId,n),n=qt(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 cn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ec(o)),s=hO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=hh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return cn(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{nk({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 Zs({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=qt(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=ok({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=hk(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(Ih(g),Oh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return ni(n,n.runId,_),pi(n,s,{source:"harness-completion"}),cn(n,void 0),Ro(n.runId,n.name),Qr(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Ah(g)}let h=await kk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await ym(i,{baseUrl:d});_&&_!==m&&(m=_,h=await kk(f,m,b))}if(h.ok){let _=_g(h.parsed);if(!Eg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;cn(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return ni(n,n.runId,Ye),g&&ic(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}cn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};ni(n,n.runId,$),pi(n,s,{source:"harness-completion"}),g&&ic(g,"acknowledged"),Ro(n.runId,n.name),Qr(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=dO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return cn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function bk(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=Ut({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=vk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=yk(n.completionResponse),m=yk(p?.task),f=So(p?.outcome),y=So(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=So(m?.prUrl)??So(p?.prUrl),g=So(n.completionReportedAt),h=pO({finished:Se(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=mO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:Se(o)}),E=fO({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 kO(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&&!vk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function yO(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 wo(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 Rk(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 RO(e){let r=e.filter(Rk),t=e.filter(n=>{if(Rk(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 Sk(e,r,t){let n={runId:e.id,name:e.name,status:Ca(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:wo(r,"status"),attentionCounts:wo(r,"attention"),lifecycleCounts:wo(r,"lifecycleStage")},n.controller=RO(r)),n}function vO(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(Pi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?bk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Sk(r,n,!1);return ue(Pi.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(Pi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?kO(a)?yO(i,a):bk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!vO(i)),s=Sk(r,o,!0);return s.status=Ca(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:wo(n,"status"),allAttentionCounts:wo(n,"attention")},ue(Pi.join(N(r.id),"last-board-compact.json"),s),s}async function wk(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 Oq=360*60*1e3;function _k(e){let r=e.nodeExecutable??process.execPath,t=js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!SO(n))return;let o=xO.join(e.workerDir,"auto-complete.log"),s;try{s=wO(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=bO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&xk(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{xk(s)}catch{}return}}de();function Ek(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();ys();H();import OO from"node:net";import{chmodSync as TO,unlinkSync as NO}from"node:fs";import{createHash as _O}from"node:crypto";import{chmodSync as EO,mkdirSync as CO}from"node:fs";import Ck from"node:os";import PO from"node:path";var AO=100,IO="\\\\.\\pipe\\";function Pk(e,r){return _O("sha256").update(e).digest("hex").slice(0,r)}function Ac(e){let r=e.platform??process.platform,t=Pk(e.agentOsId,12),n=Pk(e.workerKey,16);if(r==="win32")return{socketPath:`${IO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=PO.posix,s=e.homeDir??Ck.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=AO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Ck.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Ic(e){e.socketDir&&(CO(e.socketDir,{recursive:!0,mode:448}),EO(e.socketDir,448))}var _o=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=ro(r.capabilities),this.server=OO.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{TO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(rn).map(r=>so[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{NO(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(`
157
+ 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 XA(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;JA(o)&&zA(o,`${t}${n}`)}return t}function Sh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ho.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=XA(n,r);try{return{store:ho.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function QA(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function ZA(){return eI.classifyOptions??QA()}var eI={};var rI=300*1e3,Wr=null,Ri=0;function tI(e){Ri+=1;try{let r=ZA(),t=Sh({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:Ri},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:Ri},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function nI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=rI}function z(e=Date.now()){let r=Be();return(!Wr||Wr.status.harnessRoot!==r||nI(Wr,e))&&(sI(),Wr=tI(r)),Wr.store}function oI(){return Wr?Wr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Ri}}function wh(){return z(),oI()}function sI(){try{Wr?.store?.close()}catch{}Wr=null}H();O();import{existsSync as iI,readFileSync as aI}from"node:fs";import{homedir as lI}from"node:os";import cI from"node:path";var uI=3e4,tr=null;function xh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return cI.join(lI(),".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 _h(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 Eh(e,r){try{let t=xh(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 Ch(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(tr&&e-tr.loadedAtMs<uI)return tr.flags;try{let r=U().agentOsId?.trim();if(!r)return tr={flags:{},loadedAtMs:e,file:null},tr.flags;let t=xh(r);if(!iI(t))return tr={flags:{},loadedAtMs:e,file:t},tr.flags;let n=JSON.parse(aI(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 dI=[{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 pI(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=Ch();for(let s of dI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=pI(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 yo(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 Ah(e){yo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function vi(e){yo("spawned",e)}function nn(e,r){yo("released",e,{reasonClass:r})}function Ih(e){yo("completion-sent",e)}function ic(e,r){yo("completion-acked",e,{outcome:r})}function Oh(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 Th(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 mI=600*1e3;function Nh(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 Dh(e,r){if(Br()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??mI;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 ko(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var fI=900*1e3,Ph=10080*60*1e3,gI=1440*60*1e3,hI=500,kI=300;function Mh(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??fI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Ph).toISOString(),limit:hI}),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>=gI&&a.length+5<=kI&&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=ko(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=ko(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>=Ph}).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 Wh(){return{"dispatchReceipts.storeFailures":Te.storeFailures,"dispatchReceipts.completionReplaysObserved":Te.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Te.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Te.agedReceiptsPruned}}var on=900*1e3,uc="admission-shadow",lc="worker-slot:",Xr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},cc=!1;function Lh(){cc=!1}function Ur(e=process.env){return Lr(e).flags.admission}function bi(e,r){return`${lc}${e}:${r}`}function Bh(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(bi(e,r),uc,on)}catch{Xr.storeFailures+=1}}function Ro(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.releaseAdmission(bi(e,r),uc)}catch{Xr.storeFailures+=1}}function Uh(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=>bi(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&&(Xr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(bi(p.runId,p.workerName),uc,on),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,Xr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:lc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return Xr.storeFailures+=1,r}}function Fh(){return{"admission.storeFailures":Xr.storeFailures,"admission.missingForLive":Xr.missingForLive,"admission.deadSlotsReleased":Xr.deadSlotsReleased}}var dc="worker-slot-n:",Si=64;function Kh(e){return`${dc}${e}`}function wi(e,r){return`${e}:${r}`}var Qr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function Hh(e){if(Ur()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Si,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Qr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=wi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Kh(o),n,on).acquired)return{admitted:!0,slot:o};return Qr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Qr.enforceStoreFailures+=1,{admitted:!0}}}function Zr(e,r){if(Ur()==="off")return;let t=z();if(t)try{let n=wi(e,r),o=t.listAdmissionReservations({keyPrefix:dc,limit:Si});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Qr.enforceStoreFailures+=1}}function $h(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=>wi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:dc,limit:Si}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,on),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=wi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Si;d+=1)if(t.tryReserveAdmission(Kh(d),u,on).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Qr.enforceStoreFailures+=1,r}}function jh(){return{"admission.enforceStoreFailures":Qr.enforceStoreFailures,"admission.refusedSlotsExhausted":Qr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Qr.admissionsRefusedDiskBackstop}}O();O();var yI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,RI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Vh=new Set(["undefined","null"]),Gh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function vI(e){let r=e.trim();if(!yI.test(r))throw new Error(`invalid run id: ${e}`);return r}function bI(e){let r=e.trim();if(!RI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Yh(e){return typeof e=="string"?e.trim():""}function pc(e){let r=Yh(e.run),t=Yh(e.name);return(!r||Vh.has(r))&&Je(`missing --run RUN_ID (${Gh})`),(!t||Vh.has(t))&&Je(`missing --name WORKER_NAME (${Gh})`),{runId:vI(r),workerName:bI(t)}}import{existsSync as SI,mkdirSync as wI,readFileSync as xI,writeFileSync as _I}from"node:fs";import{homedir as EI}from"node:os";import rk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function vo(e){return Lr(process.env).flags[e]}var YG=1800*1e3;function mc(e){return`mesh-cron-lease:${e}`}function qh(e,r){if(vo("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 Jh(e,r){let t=vo("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 xi(e){return`quota-cooldown:${e}`}var zh="quota-preflight";function Xh(e,r){if(vo("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(xi(e),zh,r)}catch{_e.quotaStoreFailures+=1}}function Qh(e){if(vo("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(xi(e),zh)}catch{_e.quotaStoreFailures+=1}}function Zh(e,r){let t=vo("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:xi(e),limit:50}).find(i=>i.key===xi(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 ek(){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 CI=/\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,PI=30,AI=5,II=240;function OI(e){let r=e?.trim();return!!(r&&CI.test(r))}function TI(){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(II,Math.max(AI,e)):PI}function tk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||rk.join(EI(),".kynver","provider-quota-cooldowns.json")}function bo(e){return(e??"").trim().toLowerCase()}function gc(){let e=tk();if(!SI(e))return{};try{let r=JSON.parse(xI(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[bo(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function hc(e){let r=tk();try{wI(rk.dirname(r),{recursive:!0}),_I(r,`${JSON.stringify(e,null,2)}
158
+ `,"utf8")}catch{}}function NI(e,r,t=Date.now()){let n=bo(e);if(!n)return;let o=gc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},hc(o),Xh(n,fc()*6e4)}function DI(e){let r=bo(e);if(!r)return!1;Qh(r);let t=gc();return r in t?(delete t[r],hc(t),!0):!1}function nk(e,r=Date.now()){if(!TI())return{ok:!0};let t=bo(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=Zh(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 MI(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 ok(e){let r=bo(e.provider);if(!r)return"none";let t=MI(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?OI(t)?(NI(r,t,e.nowMs??Date.now()),"recorded"):DI(r)?"cleared":"none":"none"}function sk(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 iO}from"node:fs";import aO from"node:path";Ga();import{createECDH as dk,randomBytes as UI}from"node:crypto";import{chmodSync as pk,existsSync as lk,mkdirSync as FI,readFileSync as KI,readdirSync as HI,renameSync as $I,writeFileSync as jI}from"node:fs";import{homedir as VI}from"node:os";import mk from"node:path";import{createCipheriv as nY,createDecipheriv as oY,createECDH as sY,createHash as BI,hkdfSync as iY,randomBytes as aY}from"node:crypto";var WI=/^[A-Z][A-Z0-9_]{1,63}$/;var nr={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},LI=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function ik(e){return typeof e=="string"&&WI.test(e)&&!LI.has(e)&&!e.startsWith("KYNVER_")}function ak(e){return BI("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var ck="secret-store-keys";function sn(){return mk.join(VI(),".kynver","secrets")}function yc(e){FI(e,{recursive:!0,mode:448});try{pk(e,448)}catch{}}function Rc(e,r){let t=`${e}.${process.pid}.tmp`;jI(t,r,{mode:384});try{pk(t,384)}catch{}$I(t,e)}function uk(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 _i(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=dk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:ak(s),vaultKey:n,keyStore:r}}var GI=e=>mk.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 fk(e={}){let r=e.root??sn(),t=e.keychain??Gn(),n=t.available?uk(t.read(ck)):null;if(n)return _i(n,"keychain");let o=GI(r),s=lk(o)?uk(KI(o,"utf8")):null;if(s)return _i(s,"file");if(lk(r)&&HI(r).some(d=>d.endsWith(".vault.json")))throw new kc;let i=dk("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:UI(32).toString("base64")},u=JSON.stringify(c);return t.write(ck,u)?_i(c,"keychain"):(yc(r),Rc(o,`${u}
159
+ `),_i(c,"file"))}function YI(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 qI(e){return e.length>=nr.minValueChars&&e.length<nr.minRedactChars}function JI(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function gk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;qI(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of YI(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_])${JI(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 eO,randomBytes as rO}from"node:crypto";import{existsSync as tO,readFileSync as nO,rmSync as oO}from"node:fs";import sO from"node:path";import{createCipheriv as zI,createDecipheriv as XI,randomBytes as QI,scrypt as vY,timingSafeEqual as bY}from"node:crypto";var ZI=32,hk=12,vc=16,SY={N:2**17,r:8,p:1},wY=2**14;var an=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!==ZI)throw new an("bad key length");let n=QI(hk),o=zI("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!==hk||o.length<vc)throw new an;let s=XI("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 an?n:new an}}var xY=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`${eO("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ei=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
160
+ `))throw new Se("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
161
+ `)},ln=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Ci=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new Se("workspace is required","invalid");this.root=r.root??sn(),this.file=sO.join(this.root,wc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!tO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(nO(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)}
162
+ `)}list(){return this.read().secrets.map(ln)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?ln(t):null}put(r){if(!ik(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"),Ei(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:ln(i),replaced:!0};if(o.secrets.length>=nr.maxSecrets)throw new Se("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:bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ei(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:ln(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,Ei(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:ln(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,Ei(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?oO(this.file,{force:!0}):this.write(t),ln(o)}};var lO=64,xc=new Map;function cO(e,r){return`${r}\0${e}`}function uO(e){try{let r=iO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function dO(e,r=sn()){if(!e)return null;let t=aO.join(r,wc(e)),n=uO(t),o=cO(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=fk({root:r}),a=gk(new Ci({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>lO||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 kk(e,r,t=sn()){let n=dO(e,t);return!n||n.empty?r:_c(r,n,0)}async function yk(e,r,t){let n=await fetch(e,{method:"POST",headers:Jn(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 pO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Rk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function So(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function fO(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 bk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function gO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function cn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function hO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ec(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function kO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function xo(e){let{runId:r,workerName:t}=pc(e),n=qt(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&&co(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Hl(n)&&hO(n),!s.finalResult&&s.alive===!1){let _=fi({worker:n,status:s});_&&gi(n,_)&&(L(n.runId,n),n=qt(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 cn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ec(o)),s=kO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=kh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return cn(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{ok({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 Zs({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=qt(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=sk({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=kk(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(Oh(g),Th(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return ni(n,n.runId,_),pi(n,s,{source:"harness-completion"}),cn(n,void 0),Ro(n.runId,n.name),Zr(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Ih(g)}let h=await yk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await ym(i,{baseUrl:d});_&&_!==m&&(m=_,h=await yk(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")}`;cn(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return ni(n,n.runId,Ye),g&&ic(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}cn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};ni(n,n.runId,$),pi(n,s,{source:"harness-completion"}),g&&ic(g,"acknowledged"),Ro(n.runId,n.name),Zr(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=pO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return cn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function Sk(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=Ut({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=bk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Rk(n.completionResponse),m=Rk(p?.task),f=So(p?.outcome),y=So(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=So(m?.prUrl)??So(p?.prUrl),g=So(n.completionReportedAt),h=mO({finished:we(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=fO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:we(o)}),E=gO({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 yO(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&&!bk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function RO(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 wo(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 vk(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 vO(e){let r=e.filter(vk),t=e.filter(n=>{if(vk(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 wk(e,r,t){let n={runId:e.id,name:e.name,status:Ca(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:wo(r,"status"),attentionCounts:wo(r,"attention"),lifecycleCounts:wo(r,"lifecycleStage")},n.controller=vO(r)),n}function bO(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(Pi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?Sk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=wk(r,n,!1);return ue(Pi.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(Pi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?yO(a)?RO(i,a):Sk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!bO(i)),s=wk(r,o,!0);return s.status=Ca(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:wo(n,"status"),allAttentionCounts:wo(n,"attention")},ue(Pi.join(N(r.id),"last-board-compact.json"),s),s}async function xk(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 Tq=360*60*1e3;function Ek(e){let r=e.nodeExecutable??process.execPath,t=js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!wO(n))return;let o=_O.join(e.workerDir,"auto-complete.log"),s;try{s=xO(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=SO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&_k(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{_k(s)}catch{}return}}de();function Ck(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();ys();H();import TO from"node:net";import{chmodSync as NO,unlinkSync as DO}from"node:fs";import{createHash as EO}from"node:crypto";import{chmodSync as CO,mkdirSync as PO}from"node:fs";import Pk from"node:os";import AO from"node:path";var IO=100,OO="\\\\.\\pipe\\";function Ak(e,r){return EO("sha256").update(e).digest("hex").slice(0,r)}function Ac(e){let r=e.platform??process.platform,t=Ak(e.agentOsId,12),n=Ak(e.workerKey,16);if(r==="win32")return{socketPath:`${OO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=AO.posix,s=e.homeDir??Pk.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=IO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Pk.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Ic(e){e.socketDir&&(PO(e.socketDir,{recursive:!0,mode:448}),CO(e.socketDir,448))}var _o=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=ro(r.capabilities),this.server=TO.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{NO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(rn).map(r=>so[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{DO(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(`
163
163
  `);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
164
- `)}})}write(r,t){if(!r.destroyed)try{r.write(El(t))}catch{}}async handleLine(r,t){let n=Cl(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(!rn(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 Vs({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 Tk={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 Tk}var WO=7200*1e3;async function Nk(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||Ar,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:zs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=Sg(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=un.join(N(e.id),"workers",n);MO(l,{recursive:!0});let c=un.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(DO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Ek(e.repo,c,u);else{let T=hg({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=un.join(l,"stdout.jsonl"),m=un.join(l,"stderr.log"),f=un.join(l,"heartbeat.jsonl"),y=vg({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=si({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Pl(s.name)&&to()){let T=Za();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=wf(s.name);if(_&&K&&to()){let T=Za();if(T&&r.agentOsId&&r.taskId){let te=Ac({agentOsId:String(r.agentOsId),workerKey:l}),F=await _o.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+WO,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=Xg({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=Qg(D.codexHome,Ol());M.ok?(E=D.codexHome,h=E):(go(l),await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=Jg({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&qs(Ys())==="antigravity"){let D=oh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=ih({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=_f({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:Xf(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:Sf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Ks(l),li(c),go(l),di(l),ui(c),tn(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=rg(C.model,i,s.defaultModel),ke=U(),Ye=Rr(process.env,ke),fr=He().runnerId,Kr=ks({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:Kr,runtimeId:fr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),Ql(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:un.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=_k({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),fg(e.id,j,te)}}return j}H();jn();function LO(e,r){let t=Gt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function BO(e){let r=Er()?.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 Dk(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=LO(t,e.agentOsId),l=BO(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}`}}}In();function UO(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Pn(t)??null:null}function FO(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function KO(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Mk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=UO(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=FO(t,o),l=KO(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 Lk}from"node:fs";import{homedir as HO,tmpdir as a2}from"node:os";import Ai from"node:path";function Bk(){let e=process.env.KYNVER_STATE_ROOT;return e?Ai.resolve(e):Ai.join(HO(),".kynver","state")}function Ii(){return Ai.join(Bk(),"plan-outbox")}function $O(){return Ai.join(Bk(),"plan-outbox-archive")}function Uk(){let e=Ii(),r=$O();return Lk(e,{recursive:!0}),Lk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var p2=600*1e3,Eo={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Fk(){return{"planOutbox.storeFailures":Eo.storeFailures,"planOutbox.corruptItemsSeen":Eo.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Eo.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Eo.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Eo.halfArchivesCompleted}}import{existsSync as GO,readFileSync as YO,renameSync as h2,readdirSync as k2,rmSync as y2,writeFileSync as R2,unlinkSync as v2}from"node:fs";import Kk from"node:path";function Hk(e){if(!GO(e))return null;try{return JSON.parse(YO(e,"utf8"))}catch{return null}}function Oi(e){let{outboxDir:r}=Uk();return{jsonPath:Kk.join(r,`${e.id}.json`),bodyPath:Kk.join(r,e.bodyPath)}}import ZO from"node:path";function Dc(e){let r=ZO.join(Ii(),`${e}.json`);return Hk(r)}function Mc(e){let r=Oi(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(`
165
- `)}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 $k(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();Vn();function jk(e=process.env){return Vt(U(),e,{requireExplicitBoxKind:!0})}function Vk(e){return[...e.errors,...e.warnings].join("; ")}async function Co(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 dn(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 Gk(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 iy}from"node:child_process";var Yk=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function et(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function qk(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 Jk(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=et(o),i=t.get(s);(!i||qk(o)>=qk(i))&&t.set(s,o)}return[...t.values()]}function eT(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 zk(e){let r=Jk(e),t=[],n=[],o=[];for(let s of r){if(eT(s)){o.push(et(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&&Yk.has(i))){if(i){n.push(`${et(s)}=${i}`);continue}if(!(l&&Yk.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${et(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${et(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${et(s)}=${a}`);continue}t.push(`${et(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function Xk(e){return Jk(e).some(t=>{let n=et(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 rT=new Set(["CLEAN","HAS_HOOKS"]);function Qk(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!rT.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as tT}from"node:child_process";function Zk(){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=tT("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 nT,randomUUID as oT}from"node:crypto";import{closeSync as ey,fsyncSync as ry,mkdirSync as sT,openSync as ty,realpathSync as iT,writeFileSync as aT}from"node:fs";import Bc from"node:path";function oy(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 ny(e,r,t,n){sT(e,{recursive:!0,mode:448});let o=iT(e),s=ty(Bc.join(o,`${r}.${t}.json`),"wx",384);try{aT(s,JSON.stringify({...n,phase:t},null,2)+`
166
- `),ry(s)}finally{ey(s)}for(let i=o;;i=Bc.dirname(i)){let a=ty(i,"r");try{ry(a)}catch(l){if(!lT(l))throw l}finally{ey(a)}if(i===Bc.dirname(i))break}}function lT(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function sy(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:nT("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:oT(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return ny(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return ny(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function Fc(e){return e?.trim()?["--repo",e.trim()]:[]}function ay(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function ly(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 cT=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,uT=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,dT=/^docs[(:]/i,pT=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function mT(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=dT.test(r)||pT.test(t),o=cT.test(t),s=uT.test(t);return n||o||s||e.vercelCheckSuccess===!0}function fT(e){if(!mT({title:e.title,body:e.body,vercelCheckSuccess:Xk(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 gT(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=zk(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=Qk(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function hT(e){gT(e),fT(e)}function kT(e){try{return hT(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function yT(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 RT(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 vT(e,r){if(!r?.trim())return;let t=iy("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}`)&&iy("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function cy(e){let r=e.cwd??process.cwd(),t=e.exec??ai,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(!dn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=Zk();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=ly(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=kT(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)||!oy(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(!dn(u)||!Gk(o,u))return s();let d=sy(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=RT(t,r,e.repo);yT(t,r,k,a.headRefName),vT(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=ly(e,r,["pr","view",t,...Fc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function uy(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return cy({prUrl:n,cwd:e.cwd,repo:ay(n),exec:e.exec,operation:e.operation,acceptedReview:dn(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&&dn(s.acceptedReview)?s.acceptedReview:null}})}H();async function dy(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 py(){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(`
167
- `)}var bT="dispatch_start_readback_failed:";function vt(e){return`${bT} ${e.trim()}`}function ST(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 wT(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:vt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:vt(`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:vt(`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:vt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=ST(o);return a?{ok:!1,error:vt(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:vt(`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:vt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function my(e){let r=await Qs({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return wT({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function fy(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 gy(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 hy(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 Fl=3600*1e3;function ky(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function yy(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function xT(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=ET(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 _T(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function ET(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 CT(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("",py());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(`
168
- `)}function PT(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 Ti(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){zn({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},gr=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=gr,s=Lu;let i=jk();if(!i.ok||!i.identity){let v=Vk(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(kr(String(e.run||""),"--run"))),c=$k(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(kr(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=lo(l.id,y.runnerId),b=Dm(),g=b?Wm(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?jr({diskPath:String(e.diskPath)}):jr({diskPath:l.repo}),E=await Vm({runId:l.id,agentOsId:u,args:e}),S=PT(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=Is(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)):Fl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Cc(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)}:{}}),fr=Bm(),Kr=async v=>{let R=b&&g?Mm(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:fr})??{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||zn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:fr});let j=await Kr(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=al(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&&zn({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=ky(T),R=yy(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=sg(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Co({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&nn({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 Sb(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 uy({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 dy({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 wb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Co({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&nn({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 xb(v){let R=v.task,A=xT(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=_T(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(ug(l.id,W))return wb(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 ot=R.leaseToken?String(R.leaseToken).trim():"";if(!ot)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let st=x(`t-${R.id}-a${R.attempt}`),hr=zs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Gm(R)});Ph({taskId:W,leaseToken:ot,runId:l.id,workerName:st,provider:hr.provider??null});let Xi=ng({task:R,routing:hr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Xi.ok)return V(R,Xi.error??"model_routing_mismatch",{modelRoutingGuard:Xi});if(gy(R)){let Ce=await hy({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 Wo=tk(hr.provider);if(!Wo.ok)return V(R,`provider_quota_exhausted: ${Wo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Wo.provider,retryAt:Wo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Lo=yg({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=Kh({runId:l.id,workerName:st,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Pa()});if(!$u.admitted)return V(R,`admission_refused: ${$u.reason}`,{nonFatal:!0});let Bo=A?.workerMcpToken??null;if(Bo&&to()){let Ot=Mk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Ot.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Ot.code}: ${Ot.detail}) \u2014 spawning without tools`),Bo=null;else{let Qi=await Dk(Ot.context);Qi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Qi.error??`HTTP ${Qi.httpStatus}`}) \u2014 spawning without tools`),Bo=null)}}mg(l.id,String(R.id),{except:st});let or=await Nk(l,{name:st,task:CT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Ot=>Ot.trim()).filter(Boolean):[],model:hr.model,provider:hr.provider,routingRule:hr.rule,requestedModel:hr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Lo?.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:Lo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Lo?.targetPrUrl,repairTargetBranch:Lo?.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:Bo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:ot,dispatched:!0,executionMode:Os(R)}),Uo=await my({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:ot,worker:or,baseUrl:d,secret:p});if(!Uo.ok)return fy(l.id,or,Uo.error??"dispatch_start_readback_failed"),Qr(l.id,st),V(R,Uo.error??"dispatch_start_readback_failed",{readback:Uo.detail??null});or.leaseToken!==ot&&(or.leaseToken=ot,or.leaseOwner=k,L(l.id,or)),vi({taskId:W,leaseToken:ot}),Lh(l.id,st);let ju={taskId:R.id,started:!0,worker:or.name,pid:or.pid,branch:or.branch,model:or.model,provider:hr.provider,routingRule:hr.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 Qr(l.id,st),V(R,Ce.message)}}let zi=new Set;for(let v of Nh(l.id))zi.add(v);async function Bu(v){let R=v.task,A=String(R.id);if(zi.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?Lm({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 Sb(v):await xb(v);return G||(zi.add(A),Th(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(gr()){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 Kr(1);if(!v.dispatch.ok||!v.result){let A=Um(v.dispatch.response),W=ye();ie=A&&W>0;let G=al(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 Mo=F.filter(v=>v.started).length,Hr=ky(T),It=yy(T),Uu=Mo===0&&(Hr?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if(Uu&&Hr?.summary){let v=Hr.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??Hr.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=It?`; dispatch_skip_drain scanned=${It.scanned??0} advanced=${It.advanced??0}`:"",G=Hr.progressionReport?.summary?`; ${Hr.progressionReport.summary}`:"",qe=It?.prLifecycleAttempt?.summary?`; ${It.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Hr.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let Fu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Mo,capacityIdle:Uu,admissionExhaustion:Hr,dispatchSkipDrain:It,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:fr},Ku=v=>!v.started&&v.nonFatal!==!0,_b=F.some(Ku),Hu=ie&&Mo>0?!0:!_b;if(zn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Mo,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 AT=1;function pn(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 IT(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=IT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ti({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:pn(u)}}let n=Math.min(r,AT),o=Math.max(0,r-n),s=await Ti({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=pn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ti({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=pn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Ry(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 OT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Po(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function TT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function vy(e,r){let t=OT(r),n=Po(t?.recommendedMaxStarts),o=Po(t?.actionableReady),s=Po(t?.queuedTasks),i=Po(t?.boardAdvancedThisTick)??0,a=Po(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=TT("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 _N from"node:path";B();Nn();fe();O();import NT from"node:path";var DT=new Set(["running","dispatching","pending","queued","needs_attention"]),bt=new Set(["completed","failed","cancelled","done"]);function St(e){let r=sr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(NT.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 Ao(){let e=[];for(let r of Xe()){if(!DT.has(r.status))continue;let t=St(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();Nn();fe();O();lt();Bn();import{existsSync as nt,lstatSync as sN,readdirSync as iN,readlinkSync as aN,renameSync as Xc,unlinkSync as lN}from"node:fs";import dr from"node:path";Ze();O();import nr from"node:path";var MT=`${nr.sep}runs${nr.sep}runs${nr.sep}`;function Ni(e){return e.includes(MT)}function Hc(e,r){return nr.join(Ae(he(e)),x(r))}function rt(e,r,t){return nr.join(Hc(e,r),"workers",x(t))}function by(e,r,t){let n=he(e);return nr.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 wt(e){return{workerJsonPath:nr.join(e,"worker.json"),stdoutPath:nr.join(e,"stdout.jsonl"),stderrPath:nr.join(e,"stderr.log"),heartbeatPath:nr.join(e,"heartbeat.jsonl"),lastStatusPath:nr.join(e,"last-status.json")}}function Sy(e){let r=wt(rt(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Ni(e.statusPath)?e.statusPath:r}import{existsSync as tt,mkdirSync as XT,readdirSync as Py,renameSync as QT,statSync as Gc}from"node:fs";import se from"node:path";H();En();$r();import WT from"node:path";function LT(e){return WT.resolve(Me(e.trim()))}function jc(e,r,t){let n=e?.trim();return n?{repo:LT(n),source:r,persistedInConfig:t}:null}function BT(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function wy(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||BT(Go({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();lt();Ze();B();O();H();import{existsSync as UT,readFileSync as FT,readdirSync as KT,statSync as HT,writeFileSync as $T}from"node:fs";import jT from"node:path";var Ne="<redacted>",Vc=`[^\\s"'\\\\,}\\]]`,VT=[[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}`]],GT=12,YT=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,qT=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,JT=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>=GT))].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 VT)t=t.replace(o,s);return t}function xy(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&YT.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function _y(e,r=0){if(r>3||!UT(e))return[];let t=[];for(let n of KT(e,{withFileTypes:!0})){let o=jT.join(e,n.name);n.isDirectory()?t.push(..._y(o,r+1)):n.isFile()&&qT.test(n.name)&&t.push(o)}return t}function Ey(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=_y(e)}catch{return t}for(let o of n)try{if(HT(o).size>JT){t.failed.push(o);continue}let s=FT(o,"utf8"),i=zT(s,r);if(i===s){t.clean+=1;continue}$T(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Io=900*1e3,ZT=3600*1e3;function Ay(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(!tt(e))return[];try{return Py(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(!tt(r))return[];try{return Py(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Iy(e){return se.join(e,"archived-workers")}function eN(e,r){let t=se.join(Iy(e),x(r));return tt(t)?`${t}-${Date.now()}`:t}function Cy(e,r,t){if(!tt(e))return!1;try{let n=r-Gc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Oy(e,r=Date.now(),t=Io){if(!tt(e))return!1;let n=wt(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!!(Cy(n.stdoutPath,r,t)||Cy(n.heartbeatPath,r,t))}function rN(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 tN(e,r,t,n){if(Oy(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=rN(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 mn(e,r=Date.now(),t=Io){for(let n of qc(e))if(Oy(se.join(e,"workers",n),r,t))return!0;return!1}function nN(){let r=wy()?.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 oN(e,r){let t=se.join(Ae(e),x(r));if(!tt(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=rt(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=mn(t);return{id:r,name:r,...nN(),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(tt(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=oN(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:mn(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??ZT,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>xy(process.env,[Er,()=>Gt()])))();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(Iy(u),x(y));if(tt(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=tN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=eN(u,y);XT(se.dirname(w),{recursive:!0}),QT(k,w),Ey(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 Ty(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Yc(n)){let s=se.join(n,o);mn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function cN(e,r){let t=Hc(e,r),n;try{n=sN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=dr.resolve(dr.dirname(t),aN(t));if(mn(o)||mn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Xc(o,s),lN(t),Xc(s,t),o}function uN(e){let r=[];for(let t of $c()){let n=dr.join(e.fromDir,t),o=dr.join(e.toDir,t);!nt(n)||nt(o)||(Xc(n,o),r.push(t))}return r}function Ny(e,r){let t=wt(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 dN(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 pN(e){let r=wt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=nt(r.stdoutPath),o=nt(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?ut(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=br(a),c=dN({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:dr.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}),Ny(u,e.canonicalDir),u}function mN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=rt(r,e.id,o),a=dr.join(i,"worker.json");(Ni(s.workerDir)||Ni(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 fN(e){let r=[],t=rt(e.harnessRoot,e.run.id,e.workerName),n=by(e.harnessRoot,e.run.id,e.workerName),o=wt(t),s=uN({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=Sy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&nt(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=pN({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=nt(t),u=$c().some(d=>nt(dr.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:dr.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 Ny(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 gN(e,r){let t=dr.join(N(e.id),"workers");if(!nt(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of iN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Dy(){let{harnessRoot:e}=le(),r=Jc(e),t=[];for(let n of Xe()){let o=cN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),mN(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 gN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:rt(e,n.id,i),statusPath:dr.join(rt(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(...fN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}lt();as();fe();B();Nn();O();import{execFileSync as My}from"node:child_process";import Wy 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 hN(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 kN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function yN(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 RN(e){let r=null;if(typeof e=="string"?r=Kt(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 vN(e){try{let n=My("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=My("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 bN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??br(r)}function SN(e){let r=new Map,t=N(e.id);for(let n of sr(e)){let o=I(Wy.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of RN(bN(o))){let i=hN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function wN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,kN(r)].filter(Boolean).join(`
169
- `);return yN(n)}function xN(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Zc(e={}){let r=e.lookupPr??vN,t=[],n=new Map;for(let o of Xe()){let s=SN(o),i=N(o.id);for(let a of sr(o)){let l=Wy.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!xN(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 wN(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 EN=900*1e3;function CN(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Ly(e,r){let t=fi({worker:e,status:r}),n=t?gi(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 PN(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 By(){let e=Dy();if(CN()){let s=Zc(),i=zc();return{workers:[],finalizedRuns:Ao(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Xe())for(let i of sr(s)){let a=_N.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=Ly(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=Ly(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,PN(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>EN,m=Number.isFinite(d)&&t-d>Ea;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:Ao(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}jt();B();import WN from"node:path";import{readdirSync as AN,readFileSync as IN}from"node:fs";var ON="dispatch:claim:",TN=900*1e3,NN=10080*60*1e3,DN=200,xt={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function MN(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=AN("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(IN(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Uy(e){let r=Lr(),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??TN,i=e.findOrphanPid??MN,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-NN).toISOString(),limit:DN})}catch{return xt.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(ON.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=ko(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=ko(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})){vi({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){xt.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?(nn({taskId:d,leaseToken:p},"restart_recovery"),h&&(Ro(g,h),Qr(g,h)),xt.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}):(nn({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{xt.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function Fy(){return{"dispatchReceipts.recoveredStrandedClaims":xt.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":xt.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":xt.recoveryStoreFailures}}var Ky=!1;async function Hy(e){if(Ky||Lr()!=="enforce")return null;Ky=!0;try{let r=He().runnerId,t=await Uy({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>WN.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Co({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:lo(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();ys();import zN from"node:os";Ta();import{mkdirSync as KN,readFileSync as HN,renameSync as $N,writeFileSync as jN}from"node:fs";import{homedir as VN}from"node:os";import Di from"node:path";import{existsSync as LN,readFileSync as BN}from"node:fs";import{dirname as eu,join as jy}from"node:path";import{fileURLToPath as $y}from"node:url";function UN(e){let r=eu($y(e));for(let t=0;t<6;t+=1){if(LN(jy(r,"package.json")))return r;let n=eu(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${eu($y(e))}`)}function FN(e=import.meta.url){let r=jy(UN(e),"package.json"),t=JSON.parse(BN(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Vy=FN();function Gy(){return Di.join(VN(),".kynver")}function GN(e=Gy()){return Di.join(e,"doctor-native-windows.json")}function Yy(e=Gy()){return Di.join(e,"native-windows-state.json")}function YN(e,r){KN(Di.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;jN(t,`${JSON.stringify(r,null,2)}
170
- `,{mode:384}),$N(t,e)}function tu(e){try{return JSON.parse(HN(e,"utf8"))}catch{return null}}function qN(e){let r=tu(GN(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 qy(e=new Date,r){try{let t=Yy(r),n=tu(t)??{};YN(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function JN(e){let r=tu(Yy(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var ru=null,Jy=null;function zy(e){ru=e.admission,Jy=e.ownerKind}function Xy(e={}){let r=e.platform??process.platform,t=e.hostKind??Oa(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:Vy,ownerKind:Jy,nativeWindows:n?{admission:ru?.basis??null,hostCapability:ru?.hostCapability??null,lastDoctor:qN(e.root),lastWorkerCompletedAt:JN(e.root)}:null}}function Qy(e,r={}){let t=U(),n=(r.boxKind??vr(t)).trim().toLowerCase()||"forge",o=r.hostLabel??zN.hostname();return{boxId:ks({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:Xy()}}B();Ze();os();fe();H();import XN from"node:path";B();fe();O();async function Zy(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(kr(String(e.run||""),"--run"))),n=String(kr(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 wk({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(XN.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 xo({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=Xs({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 QN from"node:path";H();async function eR(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 rR(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(QN.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 eR({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}cs();H();We();Ze();import Ge from"node:path";is();import Wi from"node:path";de();fe();var nu=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function tR(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!tR(n)})}function _t(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 Oo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?$e(e.changedFiles).length>0:!!(_t(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function To(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):_n(e.worktreePath);return $e(t).length>0}function ZN(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=ZN(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):_n(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"}:Vo(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??_t(s)};return e.status=u,u}return To(e)}fe();fe();lt();O();function eD(e,r=Date.now(),t=Io){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 fn(e,r=Date.now(),t=Io){return Y(e.pid)?!0:eD(e,r,t)}function rD(e,r){return r?r.runTerminalCache.derive(e.run):St(e.run)}function Ur(e,r=Date.now()){return fn(e.worker,r)}function iu(e,r){return bt.has(e.run.status)?!1:rD(e,r)!==null}function nR(e,r,t=Date.now()){if(Ur(e,t))return!0;if(bt.has(e.run.status)||iu(e,r))return!1;let n=To(e);return Se(n)?!1:!!Ur(e,t)}is();fe();function oR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Ur(e))return!0;let n=r??To(e);return!!(!Se(n)||Oo(n)||$e(n.changedFiles).length>0||Ft({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:_t(n.finalResult)}).blocked)}de();O();import{existsSync as iR,mkdirSync as tD,writeFileSync as sR}from"node:fs";import Mi from"node:path";function aR(e,r,t){return Mi.join(e,"salvage",x(r),x(t))}function lR(e){return iR(Mi.join(aR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function cR(e){let r=aR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);tD(r,{recursive:!0});let t=Mi.join(r,"salvage.patch"),n=!1;if(iR(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(`
171
- `);a.trim()&&(sR(t,a.endsWith(`
164
+ `)}})}write(r,t){if(!r.destroyed)try{r.write(El(t))}catch{}}async handleLine(r,t){let n=Cl(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(!rn(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 Vs({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 Nk={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 Nk}var LO=7200*1e3;async function Dk(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}:zs({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=un.join(N(e.id),"workers",n);WO(l,{recursive:!0});let c=un.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(MO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Ck(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=un.join(l,"stdout.jsonl"),m=un.join(l,"stderr.log"),f=un.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=si({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Pl(s.name)&&to()){let T=Za();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&&to()){let T=Za();if(T&&r.agentOsId&&r.taskId){let te=Ac({agentOsId:String(r.agentOsId),workerKey:l}),F=await _o.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+LO,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=Qg({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=Zg(D.codexHome,Ol());M.ok?(E=D.codexHome,h=E):(go(l),await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=zg({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&qs(Ys())==="antigravity"){let D=sh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=ah({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await qr(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&&(Ks(l),li(c),go(l),di(l),ui(c),tn(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=ks({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:un.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Ek({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();jn();function BO(e,r){let t=Gt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function UO(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 Mk(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=BO(t,e.agentOsId),l=UO(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}`}}}In();function FO(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Pn(t)??null:null}function KO(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function HO(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Wk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=FO(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=KO(t,o),l=HO(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 Bk}from"node:fs";import{homedir as $O,tmpdir as l2}from"node:os";import Ai from"node:path";function Uk(){let e=process.env.KYNVER_STATE_ROOT;return e?Ai.resolve(e):Ai.join($O(),".kynver","state")}function Ii(){return Ai.join(Uk(),"plan-outbox")}function jO(){return Ai.join(Uk(),"plan-outbox-archive")}function Fk(){let e=Ii(),r=jO();return Bk(e,{recursive:!0}),Bk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var m2=600*1e3,Eo={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Kk(){return{"planOutbox.storeFailures":Eo.storeFailures,"planOutbox.corruptItemsSeen":Eo.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Eo.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Eo.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Eo.halfArchivesCompleted}}import{existsSync as YO,readFileSync as qO,renameSync as k2,readdirSync as y2,rmSync as R2,writeFileSync as v2,unlinkSync as b2}from"node:fs";import Hk from"node:path";function $k(e){if(!YO(e))return null;try{return JSON.parse(qO(e,"utf8"))}catch{return null}}function Oi(e){let{outboxDir:r}=Fk();return{jsonPath:Hk.join(r,`${e.id}.json`),bodyPath:Hk.join(r,e.bodyPath)}}import eT from"node:path";function Dc(e){let r=eT.join(Ii(),`${e}.json`);return $k(r)}function Mc(e){let r=Oi(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(`
165
+ `)}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 jk(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();Vn();function Vk(e=process.env){return Vt(U(),e,{requireExplicitBoxKind:!0})}function Gk(e){return[...e.errors,...e.warnings].join("; ")}async function Co(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 dn(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 Yk(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 ay}from"node:child_process";var qk=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function et(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function Jk(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 zk(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=et(o),i=t.get(s);(!i||Jk(o)>=Jk(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 Xk(e){let r=zk(e),t=[],n=[],o=[];for(let s of r){if(rT(s)){o.push(et(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&&qk.has(i))){if(i){n.push(`${et(s)}=${i}`);continue}if(!(l&&qk.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${et(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${et(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${et(s)}=${a}`);continue}t.push(`${et(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function Qk(e){return zk(e).some(t=>{let n=et(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 tT=new Set(["CLEAN","HAS_HOOKS"]);function Zk(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!tT.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as nT}from"node:child_process";function ey(){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=nT("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 oT,randomUUID as sT}from"node:crypto";import{closeSync as ry,fsyncSync as ty,mkdirSync as iT,openSync as ny,realpathSync as aT,writeFileSync as lT}from"node:fs";import Bc from"node:path";function sy(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 oy(e,r,t,n){iT(e,{recursive:!0,mode:448});let o=aT(e),s=ny(Bc.join(o,`${r}.${t}.json`),"wx",384);try{lT(s,JSON.stringify({...n,phase:t},null,2)+`
166
+ `),ty(s)}finally{ry(s)}for(let i=o;;i=Bc.dirname(i)){let a=ny(i,"r");try{ty(a)}catch(l){if(!cT(l))throw l}finally{ry(a)}if(i===Bc.dirname(i))break}}function cT(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function iy(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:oT("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:sT(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return oy(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return oy(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function Fc(e){return e?.trim()?["--repo",e.trim()]:[]}function ly(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function cy(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 uT=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,dT=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,pT=/^docs[(:]/i,mT=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function fT(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=pT.test(r)||mT.test(t),o=uT.test(t),s=dT.test(t);return n||o||s||e.vercelCheckSuccess===!0}function gT(e){if(!fT({title:e.title,body:e.body,vercelCheckSuccess:Qk(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 hT(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=Xk(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=Zk(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function kT(e){hT(e),gT(e)}function yT(e){try{return kT(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function RT(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 vT(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 bT(e,r){if(!r?.trim())return;let t=ay("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}`)&&ay("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function uy(e){let r=e.cwd??process.cwd(),t=e.exec??ai,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(!dn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=ey();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=cy(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=yT(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)||!sy(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(!dn(u)||!Yk(o,u))return s();let d=iy(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=vT(t,r,e.repo);RT(t,r,k,a.headRefName),bT(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=cy(e,r,["pr","view",t,...Fc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function dy(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return uy({prUrl:n,cwd:e.cwd,repo:ly(n),exec:e.exec,operation:e.operation,acceptedReview:dn(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&&dn(s.acceptedReview)?s.acceptedReview:null}})}H();async function py(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 my(){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(`
167
+ `)}var ST="dispatch_start_readback_failed:";function vt(e){return`${ST} ${e.trim()}`}function wT(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 xT(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:vt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:vt(`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:vt(`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:vt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=wT(o);return a?{ok:!1,error:vt(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:vt(`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:vt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function fy(e){let r=await Qs({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return xT({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function gy(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 hy(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 ky(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 Fl=3600*1e3;function yy(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Ry(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=CT(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 ET(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function CT(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 PT(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("",my());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(`
168
+ `)}function AT(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 Ti(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){zn({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=Vk();if(!i.ok||!i.identity){let v=Gk(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=jk(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=lo(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=AT(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=Is(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)):Fl,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||zn({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=al(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&&zn({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=yy(T),R=Ry(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 Co({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&nn({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 wb(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 dy({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 py({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 xb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Co({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&nn({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 _b(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=ET(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 xb(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 ot=R.leaseToken?String(R.leaseToken).trim():"";if(!ot)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let st=x(`t-${R.id}-a${R.attempt}`),kr=zs({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)});Ah({taskId:W,leaseToken:ot,runId:l.id,workerName:st,provider:kr.provider??null});let Xi=og({task:R,routing:kr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Xi.ok)return V(R,Xi.error??"model_routing_mismatch",{modelRoutingGuard:Xi});if(hy(R)){let Ce=await ky({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 Wo=nk(kr.provider);if(!Wo.ok)return V(R,`provider_quota_exhausted: ${Wo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Wo.provider,retryAt:Wo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Lo=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=Hh({runId:l.id,workerName:st,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Pa()});if(!$u.admitted)return V(R,`admission_refused: ${$u.reason}`,{nonFatal:!0});let Bo=A?.workerMcpToken??null;if(Bo&&to()){let Ot=Wk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Ot.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Ot.code}: ${Ot.detail}) \u2014 spawning without tools`),Bo=null;else{let Qi=await Mk(Ot.context);Qi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Qi.error??`HTTP ${Qi.httpStatus}`}) \u2014 spawning without tools`),Bo=null)}}fg(l.id,String(R.id),{except:st});let sr=await Dk(l,{name:st,task:PT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Ot=>Ot.trim()).filter(Boolean):[],model:kr.model,provider:kr.provider,routingRule:kr.rule,requestedModel:kr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Lo?.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:Lo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Lo?.targetPrUrl,repairTargetBranch:Lo?.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:Bo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:ot,dispatched:!0,executionMode:Os(R)}),Uo=await fy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:ot,worker:sr,baseUrl:d,secret:p});if(!Uo.ok)return gy(l.id,sr,Uo.error??"dispatch_start_readback_failed"),Zr(l.id,st),V(R,Uo.error??"dispatch_start_readback_failed",{readback:Uo.detail??null});sr.leaseToken!==ot&&(sr.leaseToken=ot,sr.leaseOwner=k,L(l.id,sr)),vi({taskId:W,leaseToken:ot}),Bh(l.id,st);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 Zr(l.id,st),V(R,Ce.message)}}let zi=new Set;for(let v of Dh(l.id))zi.add(v);async function Bu(v){let R=v.task,A=String(R.id);if(zi.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 wb(v):await _b(v);return G||(zi.add(A),Nh(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=al(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 Mo=F.filter(v=>v.started).length,$r=yy(T),It=Ry(T),Uu=Mo===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=It?`; dispatch_skip_drain scanned=${It.scanned??0} advanced=${It.advanced??0}`:"",G=$r.progressionReport?.summary?`; ${$r.progressionReport.summary}`:"",qe=It?.prLifecycleAttempt?.summary?`; ${It.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:Mo,capacityIdle:Uu,admissionExhaustion:$r,dispatchSkipDrain:It,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,Eb=F.some(Ku),Hu=ie&&Mo>0?!0:!Eb;if(zn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Mo,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 IT=1;function pn(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 OT(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=OT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ti({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:pn(u)}}let n=Math.min(r,IT),o=Math.max(0,r-n),s=await Ti({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=pn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ti({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=pn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function vy(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 TT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Po(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function NT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function by(e,r){let t=TT(r),n=Po(t?.recommendedMaxStarts),o=Po(t?.actionableReady),s=Po(t?.queuedTasks),i=Po(t?.boardAdvancedThisTick)??0,a=Po(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=NT("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 EN from"node:path";B();Nn();fe();O();import DT from"node:path";var MT=new Set(["running","dispatching","pending","queued","needs_attention"]),bt=new Set(["completed","failed","cancelled","done"]);function St(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(DT.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 Ao(){let e=[];for(let r of Xe()){if(!MT.has(r.status))continue;let t=St(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();Nn();fe();O();lt();Bn();import{existsSync as nt,lstatSync as iN,readdirSync as aN,readlinkSync as lN,renameSync as Xc,unlinkSync as cN}from"node:fs";import pr from"node:path";Ze();O();import or from"node:path";var WT=`${or.sep}runs${or.sep}runs${or.sep}`;function Ni(e){return e.includes(WT)}function Hc(e,r){return or.join(Ae(he(e)),x(r))}function rt(e,r,t){return or.join(Hc(e,r),"workers",x(t))}function Sy(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 wt(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 wy(e){let r=wt(rt(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Ni(e.statusPath)?e.statusPath:r}import{existsSync as tt,mkdirSync as QT,readdirSync as Ay,renameSync as ZT,statSync as Gc}from"node:fs";import se from"node:path";H();En();jr();import LT from"node:path";function BT(e){return LT.resolve(Me(e.trim()))}function jc(e,r,t){let n=e?.trim();return n?{repo:BT(n),source:r,persistedInConfig:t}:null}function UT(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function xy(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||UT(Go({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();lt();Ze();B();O();H();import{existsSync as FT,readFileSync as KT,readdirSync as HT,statSync as $T,writeFileSync as jT}from"node:fs";import VT from"node:path";var Ne="<redacted>",Vc=`[^\\s"'\\\\,}\\]]`,GT=[[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}`]],YT=12,qT=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,JT=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,zT=256*1024*1024;function XT(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=YT))].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 GT)t=t.replace(o,s);return t}function _y(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&qT.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Ey(e,r=0){if(r>3||!FT(e))return[];let t=[];for(let n of HT(e,{withFileTypes:!0})){let o=VT.join(e,n.name);n.isDirectory()?t.push(...Ey(o,r+1)):n.isFile()&&JT.test(n.name)&&t.push(o)}return t}function Cy(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Ey(e)}catch{return t}for(let o of n)try{if($T(o).size>zT){t.failed.push(o);continue}let s=KT(o,"utf8"),i=XT(s,r);if(i===s){t.clean+=1;continue}jT(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Io=900*1e3,eN=3600*1e3;function Iy(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(!tt(e))return[];try{return Ay(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(!tt(r))return[];try{return Ay(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Oy(e){return se.join(e,"archived-workers")}function rN(e,r){let t=se.join(Oy(e),x(r));return tt(t)?`${t}-${Date.now()}`:t}function Py(e,r,t){if(!tt(e))return!1;try{let n=r-Gc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ty(e,r=Date.now(),t=Io){if(!tt(e))return!1;let n=wt(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!!(Py(n.stdoutPath,r,t)||Py(n.heartbeatPath,r,t))}function tN(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 nN(e,r,t,n){if(Ty(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=tN(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 mn(e,r=Date.now(),t=Io){for(let n of qc(e))if(Ty(se.join(e,"workers",n),r,t))return!0;return!1}function oN(){let r=xy()?.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 sN(e,r){let t=se.join(Ae(e),x(r));if(!tt(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=rt(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=mn(t);return{id:r,name:r,...oN(),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(tt(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=sN(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:mn(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??eN,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>_y(process.env,[Cr,()=>Gt()])))();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(Oy(u),x(y));if(tt(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=nN(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);QT(se.dirname(w),{recursive:!0}),ZT(k,w),Cy(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 Ny(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Yc(n)){let s=se.join(n,o);mn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function uN(e,r){let t=Hc(e,r),n;try{n=iN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=pr.resolve(pr.dirname(t),lN(t));if(mn(o)||mn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Xc(o,s),cN(t),Xc(s,t),o}function dN(e){let r=[];for(let t of $c()){let n=pr.join(e.fromDir,t),o=pr.join(e.toDir,t);!nt(n)||nt(o)||(Xc(n,o),r.push(t))}return r}function Dy(e,r){let t=wt(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 pN(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 mN(e){let r=wt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=nt(r.stdoutPath),o=nt(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?ut(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=Sr(a),c=pN({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}),Dy(u,e.canonicalDir),u}function fN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=rt(r,e.id,o),a=pr.join(i,"worker.json");(Ni(s.workerDir)||Ni(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 gN(e){let r=[],t=rt(e.harnessRoot,e.run.id,e.workerName),n=Sy(e.harnessRoot,e.run.id,e.workerName),o=wt(t),s=dN({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=wy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&nt(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=mN({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=nt(t),u=$c().some(d=>nt(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 Dy(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 hN(e,r){let t=pr.join(N(e.id),"workers");if(!nt(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of aN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function My(){let{harnessRoot:e}=le(),r=Jc(e),t=[];for(let n of Xe()){let o=uN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),fN(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 hN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:rt(e,n.id,i),statusPath:pr.join(rt(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(...gN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}lt();as();fe();B();Nn();O();import{execFileSync as Wy}from"node:child_process";import Ly 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 kN(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 yN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function RN(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 vN(e){let r=null;if(typeof e=="string"?r=Kt(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 bN(e){try{let n=Wy("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=Wy("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 SN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??Sr(r)}function wN(e){let r=new Map,t=N(e.id);for(let n of ir(e)){let o=I(Ly.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of vN(SN(o))){let i=kN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function xN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,yN(r)].filter(Boolean).join(`
169
+ `);return RN(n)}function _N(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Zc(e={}){let r=e.lookupPr??bN,t=[],n=new Map;for(let o of Xe()){let s=wN(o),i=N(o.id);for(let a of ir(o)){let l=Ly.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 xN(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 CN=900*1e3;function PN(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function By(e,r){let t=fi({worker:e,status:r}),n=t?gi(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 AN(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 Uy(){let e=My();if(PN()){let s=Zc(),i=zc();return{workers:[],finalizedRuns:Ao(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Xe())for(let i of ir(s)){let a=EN.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=By(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=By(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,AN(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>CN,m=Number.isFinite(d)&&t-d>Ea;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:Ao(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}jt();B();import LN from"node:path";import{readdirSync as IN,readFileSync as ON}from"node:fs";var TN="dispatch:claim:",NN=900*1e3,DN=10080*60*1e3,MN=200,xt={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function WN(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=IN("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(ON(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Fy(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??NN,i=e.findOrphanPid??WN,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-DN).toISOString(),limit:MN})}catch{return xt.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(TN.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=ko(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=ko(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})){vi({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){xt.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?(nn({taskId:d,leaseToken:p},"restart_recovery"),h&&(Ro(g,h),Zr(g,h)),xt.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}):(nn({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{xt.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function Ky(){return{"dispatchReceipts.recoveredStrandedClaims":xt.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":xt.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":xt.recoveryStoreFailures}}var Hy=!1;async function $y(e){if(Hy||Br()!=="enforce")return null;Hy=!0;try{let r=He().runnerId,t=await Fy({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>LN.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Co({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:lo(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();ys();import XN from"node:os";Ta();import{mkdirSync as HN,readFileSync as $N,renameSync as jN,writeFileSync as VN}from"node:fs";import{homedir as GN}from"node:os";import Di from"node:path";import{existsSync as BN,readFileSync as UN}from"node:fs";import{dirname as eu,join as Vy}from"node:path";import{fileURLToPath as jy}from"node:url";function FN(e){let r=eu(jy(e));for(let t=0;t<6;t+=1){if(BN(Vy(r,"package.json")))return r;let n=eu(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${eu(jy(e))}`)}function KN(e=import.meta.url){let r=Vy(FN(e),"package.json"),t=JSON.parse(UN(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Gy=KN();function Yy(){return Di.join(GN(),".kynver")}function YN(e=Yy()){return Di.join(e,"doctor-native-windows.json")}function qy(e=Yy()){return Di.join(e,"native-windows-state.json")}function qN(e,r){HN(Di.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;VN(t,`${JSON.stringify(r,null,2)}
170
+ `,{mode:384}),jN(t,e)}function tu(e){try{return JSON.parse($N(e,"utf8"))}catch{return null}}function JN(e){let r=tu(YN(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 Jy(e=new Date,r){try{let t=qy(r),n=tu(t)??{};qN(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function zN(e){let r=tu(qy(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var ru=null,zy=null;function Xy(e){ru=e.admission,zy=e.ownerKind}function Qy(e={}){let r=e.platform??process.platform,t=e.hostKind??Oa(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:Gy,ownerKind:zy,nativeWindows:n?{admission:ru?.basis??null,hostCapability:ru?.hostCapability??null,lastDoctor:JN(e.root),lastWorkerCompletedAt:zN(e.root)}:null}}function Zy(e,r={}){let t=U(),n=(r.boxKind??br(t)).trim().toLowerCase()||"forge",o=r.hostLabel??XN.hostname();return{boxId:ks({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:Qy()}}B();Ze();os();fe();H();import QN from"node:path";B();fe();O();async function eR(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 xk({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(QN.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 xo({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=Xs({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 ZN from"node:path";H();async function rR(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 tR(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(ZN.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 rR({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}cs();H();We();Ze();import Ge from"node:path";is();import Wi from"node:path";de();fe();var nu=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function nR(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!nR(n)})}function _t(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 Oo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?$e(e.changedFiles).length>0:!!(_t(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function To(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):_n(e.worktreePath);return $e(t).length>0}function eD(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=eD(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):_n(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"}:Vo(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??_t(s)};return e.status=u,u}return To(e)}fe();fe();lt();O();function rD(e,r=Date.now(),t=Io){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 fn(e,r=Date.now(),t=Io){return Y(e.pid)?!0:rD(e,r,t)}function tD(e,r){return r?r.runTerminalCache.derive(e.run):St(e.run)}function Fr(e,r=Date.now()){return fn(e.worker,r)}function iu(e,r){return bt.has(e.run.status)?!1:tD(e,r)!==null}function oR(e,r,t=Date.now()){if(Fr(e,t))return!0;if(bt.has(e.run.status)||iu(e,r))return!1;let n=To(e);return we(n)?!1:!!Fr(e,t)}is();fe();function sR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Fr(e))return!0;let n=r??To(e);return!!(!we(n)||Oo(n)||$e(n.changedFiles).length>0||Ft({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:_t(n.finalResult)}).blocked)}de();O();import{existsSync as aR,mkdirSync as nD,writeFileSync as iR}from"node:fs";import Mi from"node:path";function lR(e,r,t){return Mi.join(e,"salvage",x(r),x(t))}function cR(e){return aR(Mi.join(lR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function uR(e){let r=lR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);nD(r,{recursive:!0});let t=Mi.join(r,"salvage.patch"),n=!1;if(aR(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(`
171
+ `);a.trim()&&(iR(t,a.endsWith(`
172
172
  `)?a:`${a}
173
- `),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 sR(Mi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
174
- `),o}var nD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function oD(e){e.writeSalvageEvidence&&nD.has(e.skipReason)&&(Ur(e.indexed,e.now)||lR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||cR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function sD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(bt.has(r.run.status)||e.liveness&&iu(r,e.liveness)||e.liveness&&Se(su(r,e.liveness))&&!Ur(r))?n:t}function iD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:sD(e)}function aD(e,r){if(e.harnessRoot?.trim())return Wi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Wi.sep}runs${Wi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function uR(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=iD(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Ur(r,a))return"active_worker";let c=su(r,e.liveness),u=aD(e,r),d=f=>{if(u)try{oD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(oR(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(nR(r,e.liveness,a)||!Se(c))return"run_still_active";if(Oo(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(Ft({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:_t(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(Wi.resolve(o))||r&&Ur(r)?"active_worker":r&&ou(r,e.gitStatusCache)?"dirty_worktree":null}function dR(e){return au(e)}var pR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function mR(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)pR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||pR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as kR,readdirSync as yR,statSync as uD}from"node:fs";import RR from"node:path";B();Ze();import fR from"node:path";O();function cD(e,r){return fn(e,r)}function gR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of As(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(fR.join(qn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=fR.resolve(l.worktreePath);cD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Ty(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function hR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function dD(e,r){try{let t=uD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pD(e,r){let t=RR.join(e,"runs",r,"run.json");return kR(t)?I(t,null):null}function vR(e){try{return yR(e).length===0}catch{return!1}}function bR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(hR(n,r,t,i.liveRunKeys)||!vR(n))return"run_still_active";let a=pD(r,t);return a&&!bt.has(a.status)&&!St(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function SR(e){if(!kR(e.worktreesDir))return[];let r=[],t;try{t=yR(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=RR.join(e.worktreesDir,o);vR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:dD(s,e.now)})}return r}de();import{existsSync as cu,rmSync as NR}from"node:fs";import{execFileSync as mD}from"node:child_process";import{existsSync as wR,readdirSync as fD,statSync as gD}from"node:fs";import hD from"node:path";var kD=2500;function yD(e,r=kD){if(!wR(e))return 0;try{let n=mD("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 Fr(e,r=5e4){if(!wR(e))return 0;let t=yD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=fD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=hD.join(i,l),u;try{u=gD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as SD,rmSync as wD}from"node:fs";Ze();import{lstatSync as RD,readdirSync as vD}from"node:fs";function xR(e){try{let r=RD(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 _R(e,r=32){let t=xR(e);if(!t)return!1;if(t.foreign)return!0;try{let n=vD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=xR(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as bD}from"node:child_process";import PR from"node:path";import je from"node:path";function ER(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 Li(e,r,t){return ER(e,r,t,"node_modules")}function Bi(e,r,t){return ER(e,r,t,".next")}function Ui(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 CR(e,r,t){let n=je.resolve(e);return Li(n,r,t)===null||Bi(n,r,t)===null||Ui(n,r,t)===null}function IR(){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 AR(e){let r=bD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function OR(e,r,t){if(!CR(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=AR(["chown","-R",`${n}:${o}`,PR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=AR(["rm","-rf",PR.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 xD(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function TR(e,r,t={}){if(!SD(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?Yt(n):null,i=e.bytes??Fr(e.path)??void 0,a=t.removePath??wD,l=t.hasForeignOwnedEntry??_R;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!xD(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=IR();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=OR(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||!Ay(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=TR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function DR(e,r){return du(e,r)}function MR(e,r){return du(e,r)}function WR(e,r){return du(e,r)}function LR(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??Fr(e.path);return NR(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 BR(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??Fr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),cu(e.path)&&NR(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 Fi,readdirSync as Ki,statSync as _D}from"node:fs";import pr from"node:path";function pu(e,r){try{let t=_D(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function FR(e,r){let t=pr.relative(r,e);return t===""||!t.startsWith("..")&&!pr.isAbsolute(t)}function UR(e,r,t,n){let o=[];for(let s of nu){if(s===".next")continue;let i=pr.join(e,s);if(!Fi(i))continue;let a=pr.resolve(i);t.has(a)||FR(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 KR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...UR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Fi(e.worktreesDir))return r;for(let n of Ki(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=pr.join(e.worktreesDir,n.name);for(let s of Ki(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=pr.join(o,s.name);r.push(...UR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function HR(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;Fi(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||!Fi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(pr.resolve(i.worktreePath));for(let i of Ki(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=pr.join(e.worktreesDir,i.name),l;try{l=Ki(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=pr.resolve(pr.join(a,c.name));o.has(u)||s.has(u)||FR(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 VR,readdirSync as $R,statSync as ED}from"node:fs";import gn from"node:path";var CD=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function PD(e,r){try{let t=ED(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function AD(e,r){let t=gn.relative(r,e);return t===""||!t.startsWith("..")&&!gn.isAbsolute(t)}function ID(e,r,t,n,o,s){if(!VR(n))return;let i=gn.resolve(n);r.has(i)||AD(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:PD(i,t.now)}))}function jR(e,r,t,n,o){for(let s of CD)ID(e,r,t,gn.join(n,s.dirName),s.kind,o)}function GR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||jR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!VR(e.worktreesDir))return r;for(let n of $R(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=gn.join(e.worktreesDir,n.name),s;try{s=$R(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=gn.join(o,i.name);jR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as YR,statSync as OD}from"node:fs";import mr from"node:path";function TD(e,r){try{let t=OD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ND(e){let r=[],t=null;for(let n of e.split(`
175
- `)){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 DD(e,r){let t=mr.relative(mr.resolve(r),mr.resolve(e));return t!==""&&!t.startsWith("..")&&!mr.isAbsolute(t)}var MD=200;function qR(e){if(!e.includeOrphans||!YR(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(mr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(mr.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=ND(a);for(let c of l){if(i>=MD)break;let u=mr.resolve(c.path);if(u===mr.resolve(s)||!DD(u,e.worktreesDir)||t.has(u)||o.has(u)||!YR(u))continue;let p=mr.relative(e.worktreesDir,u).split(mr.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:TD(u,e.now)})}}return n}B();O();import No from"node:path";function JR(e,r){let t=No.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?No.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function zR(e){let r=new Map;for(let t of As(e))for(let n of Object.keys(t.workers||{})){let o=No.join(qn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(No.resolve(s.worktreePath),{harnessRoot:e,worktreePath:No.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Do(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Et(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&&Do("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Do("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Et("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??Et("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Et("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Et("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Et("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Do("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Do("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&&!Do("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Et("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=Et("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 ev(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 LD}from"node:fs";import Ct from"node:path";O();var rv=1800*1e3;function BD(e,r){let t=Ct.relative(r,e);return t===""||!t.startsWith("..")&&!Ct.isAbsolute(t)}function UD(e,r,t){if(!gu(e))return!1;try{let n=r-LD(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??rv,n=Ct.resolve(e.harnessRoot,"runs"),o=Ct.resolve(n,e.runId,"workers",e.workerName);if(!BD(o,n))return!1;let s=I(Ct.join(o,"worker.json"),void 0);return s&&fn(s,r,t)?!0:s?!1:UD(Ct.join(o,"heartbeat.jsonl"),r,t)}function tv(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??rv;if(!gu(e.worktreePath))return null;if(e.runId&&e.workerName&&hu(e))return"active_worker";let n=Ct.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(`
176
- `).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 FD,readdirSync as nv,statSync as KD}from"node:fs";import HD from"node:path";function ov(e={}){let r=he(e.harnessRoot??Be()),t=Yt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!FD(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=nv(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=HD.join(t,u.name);try{let p=KD(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of nv(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=Fr(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 $D}from"node:fs";import{homedir as jD}from"node:os";import sv from"node:path";var VD=["/var/tmp/kynver-harness",sv.join(jD(),".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 GD(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 iv(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(GD(e))for(let o of VD){let s=sv.resolve(o);!r.has(s)&&$D(s)&&ku(r,t,s)}return t}Tn();function YD(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function qD(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function av(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=qD("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=jr({...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 lv(e,r){if(!r.pressured)return e;let t=e.execute||!YD("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}}Xo();import{unlinkSync as JD}from"node:fs";function Hi(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function cv(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 uv(e={}){let r=e.execute===!0||Hi("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Hi("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Hi("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??cv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Lt({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{JD(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 dv(e){return e?Hi("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>cv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Xo();function Ve(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var $i=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=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 XD}from"node:child_process";import{existsSync as QD}from"node:fs";import ZD from"node:path";var eM=5e3;function rM(e,r){if(!QD(ZD.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=XD("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:eM}),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 pv(e){let r=rM(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
177
- `).map(t=>t.trim()).filter(Boolean)}var ji=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=pv(t)??[];return this.cache.set(t,o),o}};var Vi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=St(r);return this.cache.set(r.id,n),n}};function tM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function mv(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:tM(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 nM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Be(),t=iv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function oM(e){return typeof e=="string"?{reason:e}:e}function hn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Gi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Fr(e.path,t)}}function fv(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 sM(e,r){return e.kind==="remove_next_cache"?MR(e,r):DR(e,r)}function iM(e,r,t){return e.kind==="remove_next_cache"?Bi(e.path,r,t):Li(e.path,r,t)}function aM(e){let r=new Map;for(let t of e)for(let[n,o]of zR(t))r.set(n,o);return r}function gv(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function hv(e){return e.indexed?!1:hu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function lM(e={}){let r=fu(e),t=av();r=lv(r,t);let n=nM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=gR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Ao().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=aM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Vi,gitStatusCache:new ji,gitRevCache:new $i},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=JR(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},fr=r.scanDependencyCaches?GR(Ye):[];Ve("dependency",r.scanDependencyCaches?`${fr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Kr=0;for(let F of fr){if(p())break;Kr+=1,Kr%50===0&&Ve("dependency",`${Kr}/${fr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=iM(M,C,re);if(ie){hn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=gv(M,re),Re=ke.get(Ge.resolve(ye))??null,gr=hv({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:gr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){hn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(sM(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of KR(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Ui(M.path,C,re);if(ie){hn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=gv(M,re),Re=ke.get(Ge.resolve(ye))??null,gr=hv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=dR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:gr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){hn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(WR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...HR(Ye),...qR(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:tv({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=uR({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:gr,detail:V}=oM(Re);hn(l,M.path,gr,V),c.push({...M,executed:!1,skipped:!0,skipReason:gr});continue}c.push(BR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of SR({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=bR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){hn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(LR(Gi(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?ov({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Lt(),E=r.execute&&dv(w),S=E?uv({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=mR(c,l),$=mv({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:fv(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:fv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function kv(e){let r=ev(e);return lM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function yv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as uM}from"node:fs/promises";import{homedir as dM}from"node:os";import Pt from"node:path";En();var cM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},tQ=Object.keys(cM);function Rv(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 vv(e,r){let t=Rv(e),n=Rv(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 pM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function kn(e){let r=e?.trim();return r||null}function mM(e){return[...new Set(e.filter(r=>!!r))]}function fM(){let e=dM(),r=kn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??kn(process.env.OPENCLAW_NPM_ROOT)??Pt.join(e,".openclaw","npm"),t=kn(process.env.KYNVER_NPM_GLOBAL_ROOT)??kn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(kn(process.env.NPM_CONFIG_PREFIX)?Pt.join(kn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Pt.join(e,".npm-global","lib","node_modules"));return mM([Pt.join(r,"lib","node_modules"),Pt.join(r,"node_modules"),t.endsWith("node_modules")?t:Pt.join(t,"lib","node_modules")])}async function gM(e){try{let r=JSON.parse(await uM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function hM(e){let r=fM(),t=new Set,n=[];for(let o of r){let s=Pt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function bv(e=new Date().toISOString()){let r={};for(let t of pM){let n=null;for(let o of hM(t)){let s=await gM(o);s&&(!n||vv(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 kM}from"node:child_process";var yM=1e4,RM=4*1024*1024,Sv=(e,r,t)=>{try{let n=kM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??yM,maxBuffer:RM});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 Yi(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 wv(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 vM=8e3,bM=30,SM=100,wM=400,xM=3600*1e3,Ru=0;function bu(){return Date.now()<Ru}function _M(e){let r=`${e.stdout}
178
- ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function xv(e){_M(e)&&(Ru=Math.max(Ru,Date.now()+xM))}function vu(e,r){if(bu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return xv(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function EM(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 xv(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 yn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function CM(e){return Array.isArray(e)?e.map(r=>yn(r)).filter(r=>r!==null).slice(0,bM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function PM(e,r,t){let n=vu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:CM(n.statuses)}:null}var _v={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Su,collect(e,r){let t=wv(e);if(!t)return null;let n=EM(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=yn(n.author),s=yn(n.mergeCommit),i=yn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,vM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>yn(u)).filter(u=>u!==null).slice(0,SM).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=>yn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,wM):[];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}}},Ev={provider:"github",kind:"commit_status",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);return t?PM(r,t.repo,t.sha):null}},Cv={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 Pv(e,r){return xu.find(t=>t.provider===e&&t.kind===r)??null}function Av(){wu(_v),wu(Ev),wu(Cv)}var AM=1,IM=25e3;function Iv(e,r={}){Av();let t=r.run??Sv,n=r.now??(()=>new Date),o=r.maxSubjects??AM,s=Date.now()+(r.deadlineMs??IM),i=new Set,a=e.filter(m=>{let f=Yi(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=Yi(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=Pv(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 MM from"node:path";B();O();import Ov from"node:path";var OM="provider-evidence-wanted.json",TM="provider-evidence-cache.json",NM=600*1e3;function Tv(e){return Ov.join(N(e),OM)}function DM(e){return Ov.join(N(e),TM)}function Nv(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 Dv(e){let r=I(Tv(e),null);return Nv(r?.wanted)}function Mv(e,r){ue(Tv(e),{savedAt:new Date().toISOString(),wanted:r})}function Wv(e,r={}){let t=r.ttlMs??NM,n=DM(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 Lv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Nv(r):null}var WM="provider-evidence-shared-cache.json",LM=6e4,BM=1,UM=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 FM(){return MM.join(le().harnessRoot,WM)}function KM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?BM:UM;return _u(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,_u("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Bv(){return _u("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",LM)}function HM(e){return Math.floor(e.getTime()/6e4)*6e4}function $M(e){return`${e.provider}:${e.kind}`}function Uv(e,r={}){let t=Wv(e,{ttlMs:r.ttlMs??Bv()}),n=r.file??FM(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Bv(),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=KM(u.provider);if(m===0)return!0;let f=$M(u),y=HM(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 Fv from"node:path";var Kv="mesh-cron-lease.json";function Hv(e){let r=I(Fv.join(N(e),Kv),null);return qh(e,r)??r}function $v(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(Fv.join(N(e),Kv),t),Yh(e,t)}function jv(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 Vv(e){let r=Sh(),t=Wr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Mh());let s=Dh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Fy())}return t.flags.planOutbox!=="off"&&Object.assign(o,Fk()),t.flags.admission!=="off"&&(Object.assign(o,Uh()),t.flags.admission==="enforce"&&Object.assign(o,$h())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,Zh()),{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 Gv}from"node:crypto";import{access as jM,mkdir as GQ,readFile as Yv,rename as YQ,writeFile as qQ}from"node:fs/promises";import{constants as VM}from"node:fs";import{homedir as Eu}from"node:os";import Ee from"node:path";var GM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,YM=/^[A-Za-z0-9._:-]{8,128}$/;function qM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Eu(),".kynver","mcp-installations.json")}function JM(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 XM(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function QM(e){try{return await jM(e,VM.R_OK),!0}catch{return!1}}async function ZM(e=qM()){let r;try{r=JSON.parse(await Yv(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||!YM.test(t.inventoryKey)||!GM.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 eW(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 rW(e){return Gv("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 tW(e){let r=[];for(let t of e){let n=zM(JM(t.prefix)),o=(await Promise.all(XM(n,t.packageName).map(async m=>({candidate:m,ok:await QM(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await Yv(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=eW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=Gv("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:rW(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 qv(){return tW(await ZM())}import{createHash as nW,createHmac as oW,timingSafeEqual as sW}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:nW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function Jv(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=oW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&sW(i,s)}ea();yr();import{createHash as iW}from"node:crypto";import{access as Pu,mkdtemp as aW,readFile as eb,rm as lW}from"node:fs/promises";import{constants as Au}from"node:fs";import{tmpdir as cW}from"node:os";import Rn from"node:path";import{spawn as uW}from"node:child_process";import{Client as dW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as pW}from"@modelcontextprotocol/sdk/client/stdio.js";var Iu="https://registry.npmjs.org",zv=512*1024,Ou=2*6e4,mW=2e4;function rb(){return"npm"}function Xv(e,r){return Buffer.byteLength(e)>=zv?e:(e+r.toString("utf8")).slice(0,zv)}function fW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&Rn.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 tb(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=uW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:fW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Xv(c,m)}),l.stderr.on("data",m=>{u=Xv(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 gW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:iW(t).update(e).digest("base64")===n}async function hW(e,r,t,n){let o=await tb(rb(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Iu}`,"--ignore-scripts"],Ou,Rn.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"||Rn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Rn.join(n,i);if(!gW(await eb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function kW(e,r,t){if((await tb(rb(),["install","--global","--prefix",e,r,`--registry=${Iu}`,"--no-audit","--fund=false"],Ou,t)).code!==0)throw new Error("package_install_failed")}async function nb(e){let r=JSON.parse(await eb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function yW(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 Qv(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 pW({command:e.local.binPath,args:[],env:yW(e.local.envAllowlist),stderr:"pipe"}),t=new dW({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")),mW)})]);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 Zv(e,r,t,n,o){let s=await aW(Rn.join(cW(),"kynver-mcp-update-"));try{let i=await hW(r,t,n,s);if(await o(),await kW(e.local.prefix,i,Rn.join(s,"npm-cache")),await nb(e)!==t)throw new Error("installed_version_mismatch")}finally{await lW(s,{recursive:!0,force:!0})}}async function ob(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 nb(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 Zv(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 Qv(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 Zv(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await Qv(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 EW,rm as qi,stat as CW,writeFile as cb}from"node:fs/promises";import At from"node:path";import{createHmac as RW,timingSafeEqual as vW}from"node:crypto";import{mkdir as bW,readFile as SW,rename as wW,writeFile as xW}from"node:fs/promises";import{homedir as _W}from"node:os";import Tu from"node:path";function Nu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Tu.join(_W(),".kynver","state","mcp-updates")}function sb(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Tu.join(Nu(),`${e}.json`)}function ib(e,r){let t=Cu(r);return t?RW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function ab(e,r){try{let t=JSON.parse(await SW(sb(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=ib(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!vW(i,a)?null:t}catch{return null}}async function lb(e,r){let t=ib(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=sb(e.operationId);await bW(Tu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await xW(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
179
- `,{mode:384}),await wW(o,n)}var PW="host-mutation.lock";function ub(){return At.join(Nu(),PW)}async function db(){try{let e=JSON.parse(await Wu(At.join(ub(),"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:pb(e.pid)}}catch{return null}}function pb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function AW(e){try{return await CW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function mb(){return IW("mcp_update")}async function IW(e){let r=ub(),t=`${r}.reclaiming`;await Mu(At.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await AW(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 cb(At.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await qi(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Wu(At.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await qi(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 cb(At.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(At.join(r,"owner.json"),"utf8"))}catch{return null}if(pb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Du(8).toString("hex")}`;await EW(r,a),await qi(a,{recursive:!0,force:!0})}return null}finally{n&&await qi(t,{recursive:!0,force:!0})}}function Ji(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function OW(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 fb(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 TW(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 gb(e){let r=Q(e.baseUrl),t=await qv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await ft(Ji(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 mb();if(!o){let s=await db();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await ft(Ji(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=OW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!Jv(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await ab(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||!fb(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&&fb(a.recovery,i)?a.recovery:TW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await lb({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 ft(Ji(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 ob(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 ft(Ji(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 NW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function DW(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(hb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Gr(a))continue;if(co(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!Se(l))continue;let c=Ut({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await xo({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 MW(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 bv(),c=Is(r),u=null;try{let E=Dv(r);if(E.length>0){let S=Uv(r);u=Iv(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Br()!=="off"){let E=$t();Bh({liveWorkers:E}),Hh({liveWorkers:E})}else Wh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=hb.join(Cr(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?Gr($):!1}catch{return!1}};await Hy({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Vv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=sd({control:Dt(e),supervisor:cd(),inFlightWorkers:$t().length})}catch{m=null}let f=Hv(r),y=qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Pc(r),resourceGate:t,boxResourceSnapshot:Qy(t,{harnessRunId:r,boxKind:vr(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=Lv(k.response);if(b)try{Mv(r,b)}catch{}let g=jv(k);if(g)try{$v(r,g)}catch{}let h=xh(k);h&&_h(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 kb(e){let r=String(kr(String(e.run||""),"--run")),t=String(kr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Pc(r);let o=await Ns(t,e),s=Ts(o),i=Hn({runId:r,configuredMaxWorkersOverride:s}),a=yv()?kv(r):void 0,l=await MW(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 gb({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:$t().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=lh(r,l),d=await cg(r,e),p=await DW(r,e);p.some(C=>C.ok&&!C.skipped)&&qy();let m=Hn({runId:r,configuredMaxWorkersOverride:s}),f=By(),y=await rR(r,e),k=vy(m,l),b=k.maxStarts,g=Dt(t),h=id(g);h&&(b=0);let w=NW()?await Zy({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=Ry(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=pn(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=pn(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}}xn();jt();xn();function yb(e){return jo(Dt(e))!=="stopped"?null:$t().length}function Rb(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 WW(e){e&&(zy({admission:e.admission,ownerKind:e.ownerKind}),ld(e.ownerKind))}async function LW(e,r={}){try{e.instructionBundle&&zu(e.instructionBundle.bundle,e.instructionBundle.source),Yu(e.eventLoopReport);let t=await(r.runTick??kb)(e.args),n=(r.countInFlightWorkers??yb)(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 vb(e,r,t={}){WW(r);let n=Promise.resolve();e.on("message",o=>{Rb(o)&&(n=n.then(async()=>{e.postMessage(await LW(o,t))}))})}bb?vb(bb,BW):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
173
+ `),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 iR(Mi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
174
+ `),o}var oD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function sD(e){e.writeSalvageEvidence&&oD.has(e.skipReason)&&(Fr(e.indexed,e.now)||cR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||uR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function iD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(bt.has(r.run.status)||e.liveness&&iu(r,e.liveness)||e.liveness&&we(su(r,e.liveness))&&!Fr(r))?n:t}function aD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:iD(e)}function lD(e,r){if(e.harnessRoot?.trim())return Wi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Wi.sep}runs${Wi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function dR(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=aD(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=lD(e,r),d=f=>{if(u)try{sD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(sR(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(oR(r,e.liveness,a)||!we(c))return"run_still_active";if(Oo(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(Ft({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:_t(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(Wi.resolve(o))||r&&Fr(r)?"active_worker":r&&ou(r,e.gitStatusCache)?"dirty_worktree":null}function pR(e){return au(e)}var mR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function fR(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)mR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||mR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as yR,readdirSync as RR,statSync as dD}from"node:fs";import vR from"node:path";B();Ze();import gR from"node:path";O();function uD(e,r){return fn(e,r)}function hR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of As(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(gR.join(qn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=gR.resolve(l.worktreePath);uD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Ny(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function kR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function pD(e,r){try{let t=dD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function mD(e,r){let t=vR.join(e,"runs",r,"run.json");return yR(t)?I(t,null):null}function bR(e){try{return RR(e).length===0}catch{return!1}}function SR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(kR(n,r,t,i.liveRunKeys)||!bR(n))return"run_still_active";let a=mD(r,t);return a&&!bt.has(a.status)&&!St(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function wR(e){if(!yR(e.worktreesDir))return[];let r=[],t;try{t=RR(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=vR.join(e.worktreesDir,o);bR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:pD(s,e.now)})}return r}de();import{existsSync as cu,rmSync as DR}from"node:fs";import{execFileSync as fD}from"node:child_process";import{existsSync as xR,readdirSync as gD,statSync as hD}from"node:fs";import kD from"node:path";var yD=2500;function RD(e,r=yD){if(!xR(e))return 0;try{let n=fD("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(!xR(e))return 0;let t=RD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=gD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=kD.join(i,l),u;try{u=hD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as wD,rmSync as xD}from"node:fs";Ze();import{lstatSync as vD,readdirSync as bD}from"node:fs";function _R(e){try{let r=vD(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 ER(e,r=32){let t=_R(e);if(!t)return!1;if(t.foreign)return!0;try{let n=bD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=_R(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as SD}from"node:child_process";import AR from"node:path";import je from"node:path";function CR(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 Li(e,r,t){return CR(e,r,t,"node_modules")}function Bi(e,r,t){return CR(e,r,t,".next")}function Ui(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 PR(e,r,t){let n=je.resolve(e);return Li(n,r,t)===null||Bi(n,r,t)===null||Ui(n,r,t)===null}function OR(){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 IR(e){let r=SD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function TR(e,r,t){if(!PR(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=IR(["chown","-R",`${n}:${o}`,AR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=IR(["rm","-rf",AR.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 _D(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function NR(e,r,t={}){if(!wD(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?Yt(n):null,i=e.bytes??Kr(e.path)??void 0,a=t.removePath??xD,l=t.hasForeignOwnedEntry??ER;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=OR();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=TR(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||!Iy(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=NR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function MR(e,r){return du(e,r)}function WR(e,r){return du(e,r)}function LR(e,r){return du(e,r)}function BR(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 DR(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 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"};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)&&DR(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 Fi,readdirSync as Ki,statSync as ED}from"node:fs";import mr from"node:path";function pu(e,r){try{let t=ED(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function KR(e,r){let t=mr.relative(r,e);return t===""||!t.startsWith("..")&&!mr.isAbsolute(t)}function FR(e,r,t,n){let o=[];for(let s of nu){if(s===".next")continue;let i=mr.join(e,s);if(!Fi(i))continue;let a=mr.resolve(i);t.has(a)||KR(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 HR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...FR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Fi(e.worktreesDir))return r;for(let n of Ki(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=mr.join(e.worktreesDir,n.name);for(let s of Ki(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=mr.join(o,s.name);r.push(...FR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function $R(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;Fi(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||!Fi(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 Ki(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=Ki(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)||KR(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 GR,readdirSync as jR,statSync as CD}from"node:fs";import gn from"node:path";var PD=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function AD(e,r){try{let t=CD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ID(e,r){let t=gn.relative(r,e);return t===""||!t.startsWith("..")&&!gn.isAbsolute(t)}function OD(e,r,t,n,o,s){if(!GR(n))return;let i=gn.resolve(n);r.has(i)||ID(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:AD(i,t.now)}))}function VR(e,r,t,n,o){for(let s of PD)OD(e,r,t,gn.join(n,s.dirName),s.kind,o)}function YR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||VR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!GR(e.worktreesDir))return r;for(let n of jR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=gn.join(e.worktreesDir,n.name),s;try{s=jR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=gn.join(o,i.name);VR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as qR,statSync as TD}from"node:fs";import fr from"node:path";function ND(e,r){try{let t=TD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function DD(e){let r=[],t=null;for(let n of e.split(`
175
+ `)){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 MD(e,r){let t=fr.relative(fr.resolve(r),fr.resolve(e));return t!==""&&!t.startsWith("..")&&!fr.isAbsolute(t)}var WD=200;function JR(e){if(!e.includeOrphans||!qR(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=DD(a);for(let c of l){if(i>=WD)break;let u=fr.resolve(c.path);if(u===fr.resolve(s)||!MD(u,e.worktreesDir)||t.has(u)||o.has(u)||!qR(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:ND(u,e.now)})}}return n}B();O();import No from"node:path";function zR(e,r){let t=No.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?No.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function XR(e){let r=new Map;for(let t of As(e))for(let n of Object.keys(t.workers||{})){let o=No.join(qn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(No.resolve(s.worktreePath),{harnessRoot:e,worktreePath:No.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Do(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Et(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&&Do("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Do("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Et("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??Et("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Et("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Et("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Et("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Do("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Do("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&&!Do("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Et("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=Et("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 rv(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 BD}from"node:fs";import Ct from"node:path";O();var tv=1800*1e3;function UD(e,r){let t=Ct.relative(r,e);return t===""||!t.startsWith("..")&&!Ct.isAbsolute(t)}function FD(e,r,t){if(!gu(e))return!1;try{let n=r-BD(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??tv,n=Ct.resolve(e.harnessRoot,"runs"),o=Ct.resolve(n,e.runId,"workers",e.workerName);if(!UD(o,n))return!1;let s=I(Ct.join(o,"worker.json"),void 0);return s&&fn(s,r,t)?!0:s?!1:FD(Ct.join(o,"heartbeat.jsonl"),r,t)}function nv(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??tv;if(!gu(e.worktreePath))return null;if(e.runId&&e.workerName&&hu(e))return"active_worker";let n=Ct.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(`
176
+ `).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 KD,readdirSync as ov,statSync as HD}from"node:fs";import $D from"node:path";function sv(e={}){let r=he(e.harnessRoot??Be()),t=Yt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!KD(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=ov(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=$D.join(t,u.name);try{let p=HD(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of ov(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 jD}from"node:fs";import{homedir as VD}from"node:os";import iv from"node:path";var GD=["/var/tmp/kynver-harness",iv.join(VD(),".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 YD(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 av(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(YD(e))for(let o of GD){let s=iv.resolve(o);!r.has(s)&&jD(s)&&ku(r,t,s)}return t}Tn();function qD(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function JD(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function lv(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=JD("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 cv(e,r){if(!r.pressured)return e;let t=e.execute||!qD("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}}Xo();import{unlinkSync as zD}from"node:fs";function Hi(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function uv(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function XD(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function dv(e={}){let r=e.execute===!0||Hi("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Hi("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Hi("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??uv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Lt({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=XD(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{zD(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 pv(e){return e?Hi("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>uv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Xo();function Ve(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var $i=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=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 QD}from"node:child_process";import{existsSync as ZD}from"node:fs";import eM from"node:path";var rM=5e3;function tM(e,r){if(!ZD(eM.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=QD("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 mv(e){let r=tM(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
177
+ `).map(t=>t.trim()).filter(Boolean)}var ji=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=mv(t)??[];return this.cache.set(t,o),o}};var Vi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=St(r);return this.cache.set(r.id,n),n}};function nM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function fv(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:nM(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 oM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Be(),t=av({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function sM(e){return typeof e=="string"?{reason:e}:e}function hn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Gi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Kr(e.path,t)}}function gv(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 iM(e,r){return e.kind==="remove_next_cache"?WR(e,r):MR(e,r)}function aM(e,r,t){return e.kind==="remove_next_cache"?Bi(e.path,r,t):Li(e.path,r,t)}function lM(e){let r=new Map;for(let t of e)for(let[n,o]of XR(t))r.set(n,o);return r}function hv(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function kv(e){return e.indexed?!1:hu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function cM(e={}){let r=fu(e),t=lv();r=cv(r,t);let n=oM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=hR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Ao().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=lM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Vi,gitStatusCache:new ji,gitRevCache:new $i},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=zR(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?YR(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=aM(M,C,re);if(ie){hn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=hv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=kv({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){hn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(iM(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of HR(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Ui(M.path,C,re);if(ie){hn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=hv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=kv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=pR({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){hn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(LR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...$R(Ye),...JR(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:nv({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=dR({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}=sM(Re);hn(l,M.path,hr,V),c.push({...M,executed:!1,skipped:!0,skipReason:hr});continue}c.push(UR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of wR({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=SR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){hn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(BR(Gi(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?sv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Lt(),E=r.execute&&pv(w),S=E?dv({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=fR(c,l),$=fv({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:gv(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:gv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function yv(e){let r=rv(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 Rv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as dM}from"node:fs/promises";import{homedir as pM}from"node:os";import Pt from"node:path";En();var uM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},nQ=Object.keys(uM);function vv(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 bv(e,r){let t=vv(e),n=vv(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 mM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function kn(e){let r=e?.trim();return r||null}function fM(e){return[...new Set(e.filter(r=>!!r))]}function gM(){let e=pM(),r=kn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??kn(process.env.OPENCLAW_NPM_ROOT)??Pt.join(e,".openclaw","npm"),t=kn(process.env.KYNVER_NPM_GLOBAL_ROOT)??kn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(kn(process.env.NPM_CONFIG_PREFIX)?Pt.join(kn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Pt.join(e,".npm-global","lib","node_modules"));return fM([Pt.join(r,"lib","node_modules"),Pt.join(r,"node_modules"),t.endsWith("node_modules")?t:Pt.join(t,"lib","node_modules")])}async function hM(e){try{let r=JSON.parse(await dM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function kM(e){let r=gM(),t=new Set,n=[];for(let o of r){let s=Pt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Sv(e=new Date().toISOString()){let r={};for(let t of mM){let n=null;for(let o of kM(t)){let s=await hM(o);s&&(!n||bv(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 yM}from"node:child_process";var RM=1e4,vM=4*1024*1024,wv=(e,r,t)=>{try{let n=yM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??RM,maxBuffer:vM});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 Yi(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 xv(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 bM=8e3,SM=30,wM=100,xM=400,_M=3600*1e3,Ru=0;function bu(){return Date.now()<Ru}function EM(e){let r=`${e.stdout}
178
+ ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function _v(e){EM(e)&&(Ru=Math.max(Ru,Date.now()+_M))}function vu(e,r){if(bu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return _v(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function CM(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 _v(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 yn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function PM(e){return Array.isArray(e)?e.map(r=>yn(r)).filter(r=>r!==null).slice(0,SM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function AM(e,r,t){let n=vu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:PM(n.statuses)}:null}var Ev={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Su,collect(e,r){let t=xv(e);if(!t)return null;let n=CM(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=yn(n.author),s=yn(n.mergeCommit),i=yn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,bM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>yn(u)).filter(u=>u!==null).slice(0,wM).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=>yn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,xM):[];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}}},Cv={provider:"github",kind:"commit_status",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);return t?AM(r,t.repo,t.sha):null}},Pv={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 Av(e,r){return xu.find(t=>t.provider===e&&t.kind===r)??null}function Iv(){wu(Ev),wu(Cv),wu(Pv)}var IM=1,OM=25e3;function Ov(e,r={}){Iv();let t=r.run??wv,n=r.now??(()=>new Date),o=r.maxSubjects??IM,s=Date.now()+(r.deadlineMs??OM),i=new Set,a=e.filter(m=>{let f=Yi(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=Yi(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=Av(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 WM from"node:path";B();O();import Tv from"node:path";var TM="provider-evidence-wanted.json",NM="provider-evidence-cache.json",DM=600*1e3;function Nv(e){return Tv.join(N(e),TM)}function MM(e){return Tv.join(N(e),NM)}function Dv(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 Mv(e){let r=I(Nv(e),null);return Dv(r?.wanted)}function Wv(e,r){ue(Nv(e),{savedAt:new Date().toISOString(),wanted:r})}function Lv(e,r={}){let t=r.ttlMs??DM,n=MM(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 Bv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Dv(r):null}var LM="provider-evidence-shared-cache.json",BM=6e4,UM=1,FM=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 KM(){return WM.join(le().harnessRoot,LM)}function HM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?UM:FM;return _u(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,_u("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Uv(){return _u("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",BM)}function $M(e){return Math.floor(e.getTime()/6e4)*6e4}function jM(e){return`${e.provider}:${e.kind}`}function Fv(e,r={}){let t=Lv(e,{ttlMs:r.ttlMs??Uv()}),n=r.file??KM(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Uv(),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=HM(u.provider);if(m===0)return!0;let f=jM(u),y=$M(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 Kv from"node:path";var Hv="mesh-cron-lease.json";function $v(e){let r=I(Kv.join(N(e),Hv),null);return Jh(e,r)??r}function jv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(Kv.join(N(e),Hv),t),qh(e,t)}function Vv(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 Gv(e){let r=wh(),t=Lr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Wh());let s=Mh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Ky())}return t.flags.planOutbox!=="off"&&Object.assign(o,Kk()),t.flags.admission!=="off"&&(Object.assign(o,Fh()),t.flags.admission==="enforce"&&Object.assign(o,jh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,ek()),{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 Yv}from"node:crypto";import{access as VM,mkdir as YQ,readFile as qv,rename as qQ,writeFile as JQ}from"node:fs/promises";import{constants as GM}from"node:fs";import{homedir as Eu}from"node:os";import Ee from"node:path";var YM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,qM=/^[A-Za-z0-9._:-]{8,128}$/;function JM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Eu(),".kynver","mcp-installations.json")}function zM(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 XM(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 QM(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function ZM(e){try{return await VM(e,GM.R_OK),!0}catch{return!1}}async function eW(e=JM()){let r;try{r=JSON.parse(await qv(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||!qM.test(t.inventoryKey)||!YM.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 tW(e){return Yv("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 nW(e){let r=[];for(let t of e){let n=XM(zM(t.prefix)),o=(await Promise.all(QM(n,t.packageName).map(async m=>({candidate:m,ok:await ZM(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await qv(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=Yv("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:tW(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 Jv(){return nW(await eW())}import{createHash as oW,createHmac as sW,timingSafeEqual as iW}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:oW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function zv(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=sW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&iW(i,s)}ea();Rr();import{createHash as aW}from"node:crypto";import{access as Pu,mkdtemp as lW,readFile as rb,rm as cW}from"node:fs/promises";import{constants as Au}from"node:fs";import{tmpdir as uW}from"node:os";import Rn from"node:path";import{spawn as dW}from"node:child_process";import{Client as pW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as mW}from"@modelcontextprotocol/sdk/client/stdio.js";var Iu="https://registry.npmjs.org",Xv=512*1024,Ou=2*6e4,fW=2e4;function tb(){return"npm"}function Qv(e,r){return Buffer.byteLength(e)>=Xv?e:(e+r.toString("utf8")).slice(0,Xv)}function gW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&Rn.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 nb(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=dW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:gW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Qv(c,m)}),l.stderr.on("data",m=>{u=Qv(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 hW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:aW(t).update(e).digest("base64")===n}async function kW(e,r,t,n){let o=await nb(tb(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Iu}`,"--ignore-scripts"],Ou,Rn.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"||Rn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Rn.join(n,i);if(!hW(await rb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function yW(e,r,t){if((await nb(tb(),["install","--global","--prefix",e,r,`--registry=${Iu}`,"--no-audit","--fund=false"],Ou,t)).code!==0)throw new Error("package_install_failed")}async function ob(e){let r=JSON.parse(await rb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function RW(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 Zv(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 mW({command:e.local.binPath,args:[],env:RW(e.local.envAllowlist),stderr:"pipe"}),t=new pW({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")),fW)})]);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 eb(e,r,t,n,o){let s=await lW(Rn.join(uW(),"kynver-mcp-update-"));try{let i=await kW(r,t,n,s);if(await o(),await yW(e.local.prefix,i,Rn.join(s,"npm-cache")),await ob(e)!==t)throw new Error("installed_version_mismatch")}finally{await cW(s,{recursive:!0,force:!0})}}async function sb(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 ob(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 eb(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 Zv(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 eb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await Zv(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 CW,rm as qi,stat as PW,writeFile as ub}from"node:fs/promises";import At from"node:path";import{createHmac as vW,timingSafeEqual as bW}from"node:crypto";import{mkdir as SW,readFile as wW,rename as xW,writeFile as _W}from"node:fs/promises";import{homedir as EW}from"node:os";import Tu from"node:path";function Nu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Tu.join(EW(),".kynver","state","mcp-updates")}function ib(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Tu.join(Nu(),`${e}.json`)}function ab(e,r){let t=Cu(r);return t?vW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function lb(e,r){try{let t=JSON.parse(await wW(ib(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=ab(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!bW(i,a)?null:t}catch{return null}}async function cb(e,r){let t=ab(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=ib(e.operationId);await SW(Tu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await _W(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
179
+ `,{mode:384}),await xW(o,n)}var AW="host-mutation.lock";function db(){return At.join(Nu(),AW)}async function pb(){try{let e=JSON.parse(await Wu(At.join(db(),"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:mb(e.pid)}}catch{return null}}function mb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function IW(e){try{return await PW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function fb(){return OW("mcp_update")}async function OW(e){let r=db(),t=`${r}.reclaiming`;await Mu(At.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await IW(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 ub(At.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await qi(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Wu(At.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await qi(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 ub(At.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(At.join(r,"owner.json"),"utf8"))}catch{return null}if(mb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Du(8).toString("hex")}`;await CW(r,a),await qi(a,{recursive:!0,force:!0})}return null}finally{n&&await qi(t,{recursive:!0,force:!0})}}function Ji(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function TW(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 gb(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 NW(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 hb(e){let r=Q(e.baseUrl),t=await Jv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await ft(Ji(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 fb();if(!o){let s=await pb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await ft(Ji(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=TW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!zv(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await lb(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||!gb(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&&gb(a.recovery,i)?a.recovery:NW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await cb({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 ft(Ji(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 sb(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 ft(Ji(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 DW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function MW(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(kb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Yr(a))continue;if(co(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=Ut({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await xo({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 WW(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 Sv(),c=Is(r),u=null;try{let E=Mv(r);if(E.length>0){let S=Fv(r);u=Ov(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Ur()!=="off"){let E=$t();Uh({liveWorkers:E}),$h({liveWorkers:E})}else Lh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=kb.join(Pr(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?Yr($):!1}catch{return!1}};await $y({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Gv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=sd({control:Dt(e),supervisor:cd(),inFlightWorkers:$t().length})}catch{m=null}let f=$v(r),y=qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Pc(r),resourceGate:t,boxResourceSnapshot:Zy(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=Bv(k.response);if(b)try{Wv(r,b)}catch{}let g=Vv(k);if(g)try{jv(r,g)}catch{}let h=_h(k);h&&Eh(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 yb(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 Ns(t,e),s=Ts(o),i=Hn({runId:r,configuredMaxWorkersOverride:s}),a=Rv()?yv(r):void 0,l=await WW(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 hb({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:$t().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=ch(r,l),d=await ug(r,e),p=await MW(r,e);p.some(C=>C.ok&&!C.skipped)&&Jy();let m=Hn({runId:r,configuredMaxWorkersOverride:s}),f=Uy(),y=await tR(r,e),k=by(m,l),b=k.maxStarts,g=Dt(t),h=id(g);h&&(b=0);let w=DW()?await eR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=vy(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=pn(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=pn(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}}xn();jt();xn();function Rb(e){return jo(Dt(e))!=="stopped"?null:$t().length}function vb(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 LW(e){e&&(Xy({admission:e.admission,ownerKind:e.ownerKind}),ld(e.ownerKind))}async function BW(e,r={}){try{e.instructionBundle&&zu(e.instructionBundle.bundle,e.instructionBundle.source),Yu(e.eventLoopReport);let t=await(r.runTick??yb)(e.args),n=(r.countInFlightWorkers??Rb)(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 bb(e,r,t={}){LW(r);let n=Promise.resolve();e.on("message",o=>{vb(o)&&(n=n.then(async()=>{e.postMessage(await BW(o,t))}))})}Sb?bb(Sb,UW):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);