@kynver-app/runtime 0.2.118 → 0.2.127

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.
@@ -0,0 +1,175 @@
1
+ var I=(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 $v}from"node:child_process";function Gv(e){return["/PID",String(e),"/T","/F"]}function Yv(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===jv||/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 qv(e){let r=$v("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:Vv});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Jv(e){return Number.isInteger(e)&&e>0}function Ne(e,r="SIGTERM",t={}){if(!Jv(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??qv;return Yv(s(Gv(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 jv,Vv,Hi=I(()=>{"use strict";jv=128,Vv=15e3});import{existsSync as zv,mkdirSync as Xv,readFileSync as Iu,readdirSync as ED,renameSync as Qv,rmSync as Zv,statSync as Ou,writeFileSync as eb}from"node:fs";import{randomBytes as rb}from"node:crypto";import tb from"node:path";function Ge(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function gr(e,r){return e||Ge(`missing ${r}`),e}function hn(e){try{return JSON.parse(e)}catch{return null}}function A(e,r){try{return JSON.parse(Iu(e,"utf8"))}catch(t){if(arguments.length>1)return r;Ge(`failed to read ${e}: ${t.message}`)}}function ue(e,r){Xv(tb.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${rb(4).toString("hex")}.tmp`;try{eb(t,`${JSON.stringify(r,null,2)}
2
+ `),Qv(t,e)}catch(n){try{Zv(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function To(e){return String(e).replace(/\/+$/,"")}function No(e){try{return Ou(e).size}catch{return 0}}function Mo(e){try{return Ou(e).mtime.toISOString()}catch{return null}}function At(e,r){return zv(e)?Iu(e,"utf8").split(`
3
+ `).slice(-r).join(`
4
+ `):""}function Do(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 Tu(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 $i(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=I(()=>{"use strict";Hi()});import{existsSync as nb,readFileSync as ob}from"node:fs";import{homedir as sb}from"node:os";import ib from"node:path";function Vi(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ji(e){return typeof e=="string"&&e.trim()?e:null}function Nu(e){let r=Vi(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=ji(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:ji(r.requestedByLabel),reason:ji(r.reason)}:null}function Mu(e){let r=Vi(Vi(e)?.response);return!r||r.runtimeControl===void 0?null:Nu(r.runtimeControl)}function Du(e,r=sb()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return ib.join(r,".kynver",`runtime-control-${t}.json`)}function Wu(e,r,t){try{let n=It(e,t);if(n&&n.policyVersion>r.policyVersion)return;ue(Du(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function It(e,r){try{let t=Du(e,r);if(!nb(t))return null;let n=JSON.parse(ob(t,"utf8"));return n.agentOsId!==e?null:Nu(n.control)}catch{return null}}function Wo(e){return e?.desiredState??"running"}function ab(e){return e==="keeper"||e==="desktop"}function lb(e,r,t=!1){let n=Wo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function Lu(e){return e.control?{policyVersion:e.control.policyVersion,state:lb(e.control,e.inFlightWorkers,e.exiting),supervised:ab(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function Uu(e){let r=Wo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function Fu(e){Bu=e}function Ku(){return Bu}var Bu,kn=I(()=>{"use strict";O();Bu=null});import{homedir as Hu}from"node:os";import $u from"node:path";function cb(e){return e==="~"?Hu():e.startsWith("~/")||e.startsWith("~\\")?$u.join(Hu(),e.slice(2)):e}function Ye(e){return $u.resolve(cb(e))}var Fr=I(()=>{"use strict"});function kb(e){let r=e[hb];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function yb(e,r={}){return db.has(e)?!0:fb.has(e)||r.operatorAllow?.has(e)||gb.some(t=>e.endsWith(t))?!1:pb.some(t=>e.endsWith(t))}function Gi(e){let r=kb(e),t={...e};for(let n of Object.keys(t))yb(n,{operatorAllow:r})&&delete t[n];return t}var ub,db,pb,mb,fb,gb,hb,Yi=I(()=>{"use strict";ub=["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"],db=new Set(ub),pb=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],mb=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],fb=new Set(mb),gb=["_PUBLIC_KEY"],hb="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as Vu}from"node:child_process";function Z(e,r,t={}){let n=Vu("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=Rb(e,r,n);if(t.throwError)throw new Error(o);Ge(o)}return n.stdout||""}function Rb(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 yn(e){return Z(e,["status","--short"],{allowFailure:!0}).split(`
5
+ `).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=Vu("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 ju(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 Lo(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 Ot(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Ot(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 Ot(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=ju(e,i,a),c=ju(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 Ot(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=I(()=>{"use strict";Fr();O();Yi()});var qi=I(()=>{"use strict";de()});import{existsSync as zi,readFileSync as Yu}from"node:fs";import{homedir as vb}from"node:os";import qe from"node:path";import{fileURLToPath as bb}from"node:url";function wb(e){let r=qe.join(e,"package.json");if(!zi(r))return null;try{let t=JSON.parse(Yu(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function qu(e){return wb(e)==="kynver"}function Gu(e){let r=qe.resolve(e);if(!zi(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?qe.resolve(n):null}function xb(e=import.meta.url){let r=qe.dirname(bb(e));for(let t=0;t<8;t+=1){let n=qe.join(r,"package.json");if(zi(n))try{if(JSON.parse(Yu(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=qe.dirname(r);if(o===r)break;r=o}return null}function Ji(e,r,t,n,o){if(!t)return;let s=qe.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!qu(s)||(e.add(s),r.push({repo:s,source:n}))}function _b(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Ji(t,n,Gu(r),"cwd_git",{requireMonorepo:!1});let o=xb(e?.runtimeModuleUrl??import.meta.url);o&&Ji(t,n,Gu(o),"runtime_checkout");let s=vb();for(let a of Sb)Ji(t,n,Ye(qe.join(s,a)),"well_known_path");let i=qe.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!qu(a.repo))return!0;let l=qe.resolve(a.repo);return i===l||i.startsWith(`${l}${qe.sep}`)})}function Uo(e){return _b(e)[0]??null}var Sb,Rn=I(()=>{"use strict";de();Fr();qi();Sb=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function Xu(e){let r=To(e);try{let t=new URL(r);return t.hostname.toLowerCase()===Ju?(t.hostname=`www.${Ju}`,To(t.toString())):r}catch{return r}}function vn(e){if(e?.trim())return Xu(To(e.trim()))}async function bn(e,r,t=fetch){let n=Xu(e),o=new Headers(r?.headers),s=0;for(;s<=zu;){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 ${zu} redirects for ${e}`)}var Ju,zu,Sn=I(()=>{"use strict";O();Ju="kynver.com";zu=10});function nt(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 Bo(e,r){return e[r]?.trim()||null}function Qu(e){let r=e?.split(":")[0]?.trim();return r?nt(r):null}function hr(e=process.env,r={}){let t=[],n=Qu(r.boxId),o=Qu(Bo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==nt(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:nt(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Bo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==nt(i)&&t.push(`KYNVER_BOX_ID=${Bo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:nt(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=Bo(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 kr(e={},r=process.env){return hr(r,e).boxKind}var Me=I(()=>{"use strict"});function Xi(e,r){return e==="forge"?4:Math.max(1,r)}function wn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var Fo=I(()=>{"use strict"});import{readFileSync as Eb}from"node:fs";import Zu from"node:os";function ed(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Zu.freemem()}if(process.platform==="linux")try{let t=Eb("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Zu.freemem()}var rd=I(()=>{"use strict"});import{existsSync as Cb,readFileSync as Pb,statfsSync as Ab}from"node:fs";function Qi(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Cb(e))continue;let r=Pb(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function td(e={}){if(!(e.forceWsl===void 0?Qi():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Tt,n=e.wslHostFreeWarnBytes??Ib,o=e.wslHostFreeCriticalBytes??Ob,s=e.statfs??Ab,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. ${Tb()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function Tb(){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 Ib,Ob,Tt,Zi=I(()=>{"use strict";Ib=25*1024*1024*1024,Ob=12*1024*1024*1024,Tt="/mnt/c"});import{execFileSync as nd}from"node:child_process";import{existsSync as Ho,readFileSync as od,readdirSync as Nb,statSync as Mb}from"node:fs";import ea from"node:path";function Ko(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function sd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=nd("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()||Tt;return r&&Ho(ea.join(t,"Users",r))?r:null}function Bb(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()||Tt,n=e.windowsUser??sd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Fb(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 Kb(){try{if(Ho("/proc/sys/kernel/core_pattern"))return od("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return nd("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Hb(e){return!!(e&&/wsl-capture-crash/i.test(e))}function $b(e,r=Tt){let t=ea.join(r,"Users",e,".wslconfig");if(!Ho(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=od(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 jb(e){if(!Ho(e))return[];let r=Nb(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=ea.join(e,n.name);try{let s=Mb(o),i=Fb(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 Nt(e={}){if(!(e.forceWsl===void 0?Qi():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Tt,n=e.windowsUser??sd(),o=e.warnBelowBytes??Ko("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Db),s=e.criticalBelowBytes??Ko("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",Wb),i=e.warnCount??Ko("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Lb),a=e.criticalCount??Ko("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Ub),l=(e.readCorePattern??Kb)(),c=Hb(l),u=null;n&&(u=(e.readWslConfig??$b)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=Bb({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??jb)(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}). `+Vb({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 Vb(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 Db,Wb,Lb,Ub,$o=I(()=>{"use strict";Zi();Db=5*1024*1024*1024,Wb=10*1024*1024*1024,Lb=2,Ub=4});import{statfsSync as Gb}from"node:fs";function Kr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Yb,n=e.diskFreeCriticalBytes??qb,o=e.diskMaxUsedPercent??Jb,s=e.diskHardMaxUsedPercent??zb,i=Gb(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:td(e.wslHost),b=e.skipWslCrashDumpCheck?null:Nt(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("; ")),Xb({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 Xb(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 Yb,qb,Jb,zb,xn=I(()=>{"use strict";$o();Zi();Yb=30*1024*1024*1024,qb=15*1024*1024*1024,Jb=80,zb=90});import{existsSync as Qb,readdirSync as Zb}from"node:fs";import eS from"node:path";function nr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=eS.join(N(e.id),"workers");if(!Qb(t))return[...r];for(let n of Zb(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var _n=I(()=>{"use strict";U();O()});function ra(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 id(e){let r=e.trim();if(!r)return null;let t=ra(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ra(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ra(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function ad(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?id(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=id(t);return n||t}var ld=I(()=>{"use strict"});import{existsSync as rS,readFileSync as tS}from"node:fs";function cd(e){return e==="complete"}function yr(e){return cd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function pe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!rS(e))return r;let t=Date.now()+nS,n=new Date(t).toISOString(),o=tS(e,"utf8").split(`
6
+ `).filter(Boolean);for(let s of o){let i=hn(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)),cd(r.lastHeartbeatPhase)&&(r.terminalFinalResult=ad(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 nS,ot=I(()=>{"use strict";ld();O();nS=6e4});function dd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function jo(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 pd(e){let r=dd(e[0]);return!!(r&&oS.has(r))}function iS(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function aS(e){if(!e||e.includes("*"))return null;let r=iS(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function md(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ta(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function lS(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function cS(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 uS(e){let r=!1,t=e.map((o,s)=>{let i=lS(o),a=e[s-1];return a&&ud.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=cS(t);if(n.length===2){let[o,s]=n;if(ta(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=aS(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 fd(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 Vo(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=jo(r);if(!t.length)return{command:r,wrapped:!1};let n=dd(t[0]);if(!n||!sS.has(n))return{command:r,wrapped:!1};let o=fd(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 dS(e,r){let t=e.trim(),n=jo(t),o=fd(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function pS(e){let r=e.trim(),t=Vo(r),n=jo(t.command);if(!n.length||!pd(n))return{segment:r,changed:!1};let o=uS(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:dS(r,s),changed:!0}:{segment:s,changed:!0}}function na(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=pS(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function gd(e){let r=Vo(e).command,t=jo(r.trim());return t.length&&pd(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function hd(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 mS(e){let{pattern:r,target:t}=hd(e);return r?ta(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:md(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function fS(e){let{pattern:r,target:t}=hd(e);if(!r)return null;if(ta(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&md(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function gS(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 hS(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function oa(e){let r=e.meta?.trim()||(e.command?hS(e.command):null)||null;if(r){let t=mS(r),n=gS(t);if(n)return n;let o=fS(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=na(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var oS,sS,ud,kd=I(()=>{"use strict";oS=new Set(["rg","ripgrep","grep"]),sS=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 En(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function RS(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 Cn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function vS(e){let r=e.metadata;if(!Cn(r))return null;let t=r.vulnerabilities;if(!Cn(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 bS(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 SS(e,r){let t=e.error;if(Cn(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?En(o.split(`
7
+ `).find(Boolean)??o,160):"npm audit failed"}function wS(e){let r=`${e.stdout}
8
+ ${e.stderr}`.trim(),t=RS(r);if(!t||!Cn(t)){let o=En(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(Cn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${SS(t,e.stderr)}`};let n=vS(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:bS(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function xS(e){return kS.test(e)}function _S(e){let r=Vo(e).command;return yd.test(e)||yd.test(r)||gd(e)}function ES(e){let r=oa({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&yS.test(n)){let i=En(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=na(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=En(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 Rd(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(xS(e.command)){let i=r.trim()||n.trim()||t.trim();return wS({exitCode:e.exitCode,stdout:i,stderr:t})}if(_S(e.command))return ES({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=oa({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=En(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var kS,yd,yS,vd=I(()=>{"use strict";kd();kS=/\bnpm\s+audit\b/i,yd=/\b(rg|ripgrep)\b/i,yS=/\b(error|invalid|unknown|panic|not found)\b/i});function Pn(e){return typeof e=="string"&&CS.test(e.trim())}function Go(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 CS,Yo=I(()=>{"use strict";CS=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function sa(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function PS(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 bd(e){if(e.event==="step_update"&&sa(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"||!sa(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=sa(r.usage)?PS(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 Sd=I(()=>{"use strict"});function ia(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function wd(){return{assistantText:""}}function AS(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function IS(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=(ia(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 OS(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function xd(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return AS(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!OS(e))return null;let t=ia(e.stats)?IS(e.stats):void 0;if(e.status==="error"){let o=ia(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 _d=I(()=>{"use strict"});import{existsSync as TS,readFileSync as NS}from"node:fs";function MS(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function DS(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 WS(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",Go(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Mt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function LS(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function US(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 BS(e,r){let t=LS(r);if(!t)return;let n=Mt(t.input_tokens)??Mt(t.inputTokens)??Mt(t.prompt_tokens),o=Mt(t.output_tokens)??Mt(t.outputTokens)??Mt(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=US(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function FS(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 KS(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function st(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!TS(e))return r;let t=NS(e,"utf8").split(`
9
+ `).filter(Boolean),n=null,o=wd();for(let s of t){let i=hn(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=MS(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=DS(p);m&&(r.currentTool=m)}let l=FS(i);l&&KS(r,Rd({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=bd(i),u=c?null:xd(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"&&WS(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"}BS(r,i)}return r}var An=I(()=>{"use strict";vd();O();Yo();Sd();_d()});import{accessSync as HS,constants as $S,existsSync as jS,readFileSync as VS}from"node:fs";import aa from"node:path";function Cd(e){return aa.join(e,GS)}function YS(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 Ed(e){try{return HS(e,$S.X_OK),!0}catch{return!1}}function qS(e,r=process.env){if(!e)return!1;if(e.includes("/"))return Ed(e);for(let t of(r.PATH??"").split(aa.delimiter))if(t&&Ed(aa.join(t,e)))return!0;return!1}function Ce(e,r,t,n={}){let o=n.env??process.env;return!t||!YS(o,n.platform)?[e,r]:qS(e,o)?[n.nodeExecutable??process.execPath,["-e",JS,Cd(t),e,...r]]:[e,r]}function zS(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function qo(e){if(!e)return null;let r=Cd(e);if(!jS(r))return null;try{let t=JSON.parse(VS(r,"utf8")),n=t.oomEvidence;return{exitCode:zS(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 Pd(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 GS,JS,Rr=I(()=>{"use strict";GS="exit.json";JS=String.raw`"use strict";
10
+ const cp = require("child_process"), fs = require("fs");
11
+ const argv = process.argv.slice(1);
12
+ const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
13
+ const startedMs = Date.now();
14
+ function cgroupOomKills() {
15
+ try {
16
+ const line = fs.readFileSync("/proc/self/cgroup", "utf8").split("\n").find((l) => l.startsWith("0::"));
17
+ if (!line) return null;
18
+ const file = "/sys/fs/cgroup" + line.slice(3).trim().replace(/\/$/, "") + "/memory.events";
19
+ const m = /(?:^|\n)oom_kill (\d+)/.exec(fs.readFileSync(file, "utf8"));
20
+ return m ? Number(m[1]) : null;
21
+ } catch { return null; }
22
+ }
23
+ function kernelLog() {
24
+ const override = process.env.KYNVER_EXIT_CAPTURE_KERNEL_LOG_FILE;
25
+ if (override) { try { return fs.readFileSync(override, "utf8"); } catch { return ""; } }
26
+ const run = (bin, a) => {
27
+ try {
28
+ const r = cp.spawnSync(bin, a, { encoding: "utf8", timeout: 3000, maxBuffer: 8 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
29
+ return r.status === 0 ? String(r.stdout || "") : "";
30
+ } catch { return ""; }
31
+ };
32
+ return run("journalctl", ["-k", "-q", "--no-pager", "--since", "@" + Math.floor(startedMs / 1000)]) || run("dmesg", []);
33
+ }
34
+ const oomBefore = cgroupOomKills();
35
+ let child, finished = false;
36
+ function write(rec) {
37
+ try { fs.writeFileSync(exitFile, JSON.stringify(rec, null, 2) + "\n"); } catch {}
38
+ }
39
+ function finish(code, signal, spawnError) {
40
+ if (finished) return;
41
+ finished = true;
42
+ const rec = { exitCode: code, signal: signal || null, startedAt: new Date(startedMs).toISOString(), endedAt: new Date().toISOString(), childPid: child && child.pid };
43
+ if (spawnError) rec.spawnError = spawnError;
44
+ if (signal === "SIGKILL" || code === 137 || (code !== 0 && code !== null)) {
45
+ const oomAfter = cgroupOomKills();
46
+ if (oomBefore !== null && oomAfter !== null && oomAfter > oomBefore) {
47
+ rec.oomEvidence = { source: "cgroup", detail: "memory.events oom_kill " + oomBefore + " -> " + oomAfter };
48
+ } else if (signal === "SIGKILL" || code === 137) {
49
+ const pid = child && child.pid;
50
+ const hit = kernelLog().split("\n").find((l) => pid && new RegExp("(?:Killed process|oom-kill:.*pid=|Memory cgroup out of memory: Killed process) ?" + pid + "\\b").test(l));
51
+ if (hit) rec.oomEvidence = { source: "kernel_log", detail: hit.trim().slice(0, 300) };
52
+ }
53
+ }
54
+ write(rec);
55
+ if (signal) {
56
+ const n = (require("os").constants.signals || {})[signal];
57
+ process.exit(128 + (n || 9));
58
+ }
59
+ process.exit(code === null ? 1 : code);
60
+ }
61
+ try {
62
+ child = cp.spawn(cmd, args, { stdio: "inherit" });
63
+ } catch (e) {
64
+ process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
65
+ finish(127, null, String(e && e.message));
66
+ }
67
+ for (const s of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(s, () => { try { child.kill(s); } catch {} });
68
+ child.on("error", (e) => {
69
+ process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
70
+ if (!child.pid) finish(127, null, String(e && e.message));
71
+ });
72
+ child.on("exit", (code, signal) => finish(code, signal));
73
+ `});import XS from"node:path";function la(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&ZS.has(r)}function Jo(e){return!!(e&&QS.test(e))}function Od(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!la(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||Jo(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":Ad.test(r)||Ad.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 Td(e){let r=[ew(e.stopClass)],t=Pd(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 ew(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 Nd(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,Id/2):Id/2;return Math.min(rw,n*2**e)}function Md(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=A(XS.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(qo(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&Jo(At(i.stderrPath,20))&&(n+=1)}}return n}function Dd(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 QS,Ad,ZS,Id,rw,ca=I(()=>{"use strict";U();O();Rr();QS=/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,Ad=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,ZS=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);Id=2048,rw=8192});function Wd(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function In(e){let r=(e??"").trim();if(!r)return null;if(Pn(r))return{blocked:!0,reason:`provider authentication failed: ${Wd(r)}`};for(let t of tw)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Wd(r)}`};return null}var tw,ua=I(()=>{"use strict";Yo();tw=[{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:/\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 Ld(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function nw(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 ow(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Ld(e.head)}function sw(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 Dt(e){if(e.alive||nw(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Ld(e.headCommit)??ow(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:sw(s,r,t)}}var zo=I(()=>{"use strict"});import{existsSync as iw,readFileSync as aw,statSync as Fd}from"node:fs";import Xo from"node:path";function dw(e,r=process.env){let t=e?cw:lw,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 pw(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function da(e){try{return Fd(e).mtimeMs}catch{return-1}}function mw(e){let r=Xo.join(e,".git");try{if(Fd(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(aw(r,"utf8"));return t?Xo.resolve(e,t[1].trim()):null}catch{return null}}function Ud(e){let r=mw(e);return[da(e),r?da(Xo.join(r,"HEAD")):-2,r?da(Xo.join(r,"index")):-2].join(":")}function Bd(e,r){return{changedFiles:yn(e),gitAncestry:Lo(e,{base:r.base,baseCommit:r.baseCommit})}}function fw(e,r){for(Hr.delete(e),Hr.set(e,r);Hr.size>uw;){let t=Hr.keys().next().value;if(t===void 0)break;Hr.delete(t)}}function Kd(e,r,t){let n=pw(r);if(!e||!e.trim())return On.missingWorktree++,{changedFiles:[],gitAncestry:Ot(n,"missing worktree path")};let o=`${e}\0${n}`;if(!iw(e))return Hr.delete(o),On.missingWorktree++,{changedFiles:[],gitAncestry:Ot(n,`worktree no longer exists: ${e}`)};if(t.alive)return Hr.delete(o),On.liveProbes++,Bd(e,r);let s=t.ttlMs??dw(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=Ud(e),l=Hr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return On.hits++,l.probe;On.misses++;let c=Bd(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();fw(o,{fingerprint:Ud(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var lw,cw,uw,Hr,On,Hd=I(()=>{"use strict";de();lw=10*6e4,cw=60*6e4,uw=2048,Hr=new Map,On={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Tn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gw(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 hw(e){if(Tn(e.headCommit)||Tn(e.prUrl)||Tn(e.artifactBundlePath)||Tn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Tn(r.head))}function Wt(e){return gw(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:hw(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 $d(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Qo=I(()=>{"use strict"});function pa(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 jd(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Lt(e){let r=e.trim();if(!r)return null;let t=pa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=pa(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=pa(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=jd(l);for(let u of n){let d=jd(u);d>c&&(l=u,c=d)}return l}var Zo=I(()=>{"use strict"});function Vd(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 Gd(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function kw(e){return new Set(e.map(r=>Gd(Vd(r)??r)).filter(Boolean))}function Yd(e,r,t){let n=Vd(e)??e;if(!n)return"unrelated";let o=Gd(n);return kw(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var qd=I(()=>{"use strict"});function Ut(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yw(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function it(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ut(e)}function es(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Jd(e){let r=null;if(typeof e=="string"){let o=Lt(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=it(String(s.prUrl??s.pr_url??"")),a=Ut(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ut(s.mergeCommit??s.merge_commit),reason:Ut(s.reason)})}return n}function zd(e,r){let t=[],n=it(Ut(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=it(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Xd(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(!yw(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?it(Ut(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?it(r.targetPrUrls[0]):null):null;if(s){let d=zd(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=Jd(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=Jd(n),a=new Map(i.map(d=>[es(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>es(it(d)??d)).filter(Boolean)),c=zd(t,n);if(r.landingOnly)for(let d of c){let p=a.get(es(d)),m=Yd(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=es(it(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 Qd(e){if(e.blocked)return e.detail??e.reason}var Zd=I(()=>{"use strict";Zo();qd()});function vw(e){let r=Date.now();if(e.providerTerminalError||Go(e.finalResult)||e.finalResult&&e.error?.trim()||Pn(e.error)||Pn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:In(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!ep(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Sw(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=Wt(o);if(s.blocked){let i=$d(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Xd({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Qd(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(bw(e))return{state:"done",reason:"empty abandoned worker record"};let o=In(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Dt({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=Jo(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>Rw)return{state:"needs_attention",reason:`no first stream event ${$i(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ma?{state:"stale",reason:`no log/event/heartbeat activity for ${$i(n)}s`}:{state:"ok",reason:"recent activity"}}function ep(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function bw(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 Sw(e){let r=null;if(typeof e=="string"?r=Lt(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 rp(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??yr(t))}function tp(e){let r=st(e.stdoutPath),t=pe(e.heartbeatPath);return rp(e,r.finalResult,t)}function J(e,r={}){let t=st(e.stdoutPath),n=pe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=rp(e,t.finalResult,n),i=o?!1:Y(e.pid),a=No(e.stdoutPath),l=No(e.stderrPath),c=No(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Kd(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=Tu([t.lastEventAt,n.lastHeartbeatAt,Mo(e.stdoutPath),Mo(e.stderrPath),Mo(e.heartbeatPath)]),m=i?null:qo(e.workerDir),f=s&&!la(s)?s:null,y=t.error||!i&&!s&&At(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&At(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=ep(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=vw({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,_=Od({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)??Td({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 np(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function fa(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 Rw,ma,me=I(()=>{"use strict";ot();An();ca();Rr();Yo();ua();zo();Hd();Qo();Zd();Zo();O();Rw=18e4,ma=6e5});import{readFileSync as ww}from"node:fs";function xw(e){if(!e||process.platform!=="linux")return null;try{return ww(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function op(e){if(!e.pid||process.platform!=="linux")return!0;let r=xw(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 $r(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!op(e)?!1:!tp(e)}var rs=I(()=>{"use strict";me();O()});import ip from"node:os";import ap from"node:path";function sp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _w(e=F(),r,t){let n=sp(e.perWorkerMemBytes,ts),o=sp(e.memReserveBytes,ns),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):os)),i=is({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??ip.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function lp(e,r={}){let t=r.perWorkerMemBytes??ts,n=r.memReserveBytes??ns,o=r.memUtilization??os,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,ss)}function Ew(){return ed()}function Cw(e){let r=0;for(let t of nr(e)){let n=A(ap.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!$r(n)||r++}return r}function ga(){let e=0;for(let r of Je())e+=Cw(r);return e}function Bt(){let e=[];for(let r of Je())for(let t of nr(r)){let n=A(ap.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&$r(n)&&e.push({runId:r.id,workerName:t})}return e}function Nn(e){let r=e.config??F(),t=e.totalMemBytes??ip.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=_w(r,e.configuredMaxWorkersOverride,t),c=kr(r),u=e.freeMemBytes??Ew(),d=e.activeWorkers??ga(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=wn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Kr({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 ts,ns,os,ss,Ft=I(()=>{"use strict";rd();H();Me();Fo();as();xn();U();_n();rs();O();ts=500*1024*1024,ns=4*1024*1024*1024,os=.85,ss=64});function Mn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function is(e){let r=e.config??{},t=e.env??process.env,n=Mn(r.perWorkerMemBytes,ts),o=Mn(r.memReserveBytes,ns),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):os)),i=lp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Mn(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Mn(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,ss),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Mn(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,ss),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var as=I(()=>{"use strict";Ft()});import{homedir as Pw}from"node:os";import Aw from"node:path";var cp,ha=I(()=>{"use strict";cp=Aw.join(Pw(),".kynver",".env")});var up=I(()=>{"use strict"});var dp=I(()=>{"use strict";up()});var pp=I(()=>{"use strict"});var ka=I(()=>{"use strict";dp();pp();kn()});import{existsSync as Iw,readFileSync as Ow}from"node:fs";function ya(){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(Iw("/proc/version")){let e=Ow("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ra=I(()=>{"use strict"});var mp=I(()=>{"use strict";Ra()});var ls=I(()=>{"use strict";ha();Fr();H();ka();mp()});import Nw from"node:os";function va(e,r){let t=(r??Nw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function hp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function kp(e,r){let t=e.trim();if(!t)return va(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=hp(t.slice(n+1));return s?`${o}:${s}`:va(o)}return`${r}:${hp(t)}`}function cs(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?kp(r,e.boxKind):va(e.boxKind,e.hostLabel)}var us=I(()=>{"use strict";Me();Me()});var yp=I(()=>{"use strict";ha();ka();ls()});function ps(){return ds}function vp(e){if(!ds)return e;if(!Rp)throw new ba;return Rp}function ze(e,r=process.env){if(ds)return;let t=r[e]?.trim();return t||void 0}function wa(){if(ds)throw new Sa}var ba,Sa,ds,Rp,Dn=I(()=>{"use strict";ba=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Sa=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},ds=!1,Rp=null});import{existsSync as vr,mkdirSync as Mw,readdirSync as ms,renameSync as bp,statSync as Dw}from"node:fs";import br from"node:path";function wp(e){try{return Dw(e).isDirectory()}catch{return!1}}function Ww(e){if(!vr(e))return!0;for(let r of Sp){let t=br.join(e,r);if(vr(t)&&(!wp(t)||ms(t).length>0))return!1}return!0}function Lw(e){let r=br.join(e,"runs");if(!vr(r)||!wp(r))return!1;for(let t of ms(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=br.join(r,t.name,"run.json");if(A(n,void 0)?.id)return!0}return!1}function Uw(e){let r=br.join(e,"runs");if(!vr(r))return!1;for(let t of ms(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(A(br.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Bw(e){let r=br.join(e,"ghost");return vr(r)?!vr(br.join(r,"runs")):Uw(e)}function xp(e){return Lw(e.sharedRoot)?Ww(e.forgeRoot)?Bw(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 _p(e,r){Mw(r,{recursive:!0});for(let t of Sp){let n=br.join(e,t),o=br.join(r,t);if(vr(n)){if(vr(o)&&ms(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(vr(o)){bp(n,o);continue}bp(n,o)}}}var Sp,Ep=I(()=>{"use strict";O();Sp=["runs","worktrees"]});import{existsSync as Re}from"node:fs";import{homedir as Fw}from"node:os";import fe from"node:path";function xa(e=process.env){return e.HOME?.trim()||Fw()}function _a(e=process.env){return fe.join(xa(e),".kynver","harness")}function fs(e){let r=fe.resolve(Ye(e.trim()));for(;Kw.has(fe.basename(r));)r=fe.dirname(r);return r}function Hw(e,r=process.env){return fe.join(_a(r),e)}function $w(e=process.env){let r=_a(e);if(Re(fe.join(r,"runs")))return!0;if(Re(r)&&!Re(fe.join(r,"ghost"))&&!Re(fe.join(r,"forge")))return Re(r);let t=fe.join(xa(e),Cp);return Re(t)}function gs(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:fs(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:fs(n),source:"config"};let o=Hw(e.boxKind,r);if(Re(fe.join(o,"runs"))||Re(o)&&!jw(o))return{harnessRoot:o,source:"box_scoped"};let i=_a(r);if(e.boxKind==="forge"){let a=xp({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&&_p(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&$w(r)){if(Re(fe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Re(i)&&!Re(fe.join(i,"ghost"))&&!Re(fe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=fe.join(xa(r),Cp);if(Re(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function jw(e){if(!Re(e))return!0;for(let r of["runs","worktrees"]){let t=fe.join(e,r);if(Re(t))return!1}return!0}var Cp,Kw,Ea=I(()=>{"use strict";Fr();Ep();Cp=fe.join(".openclaw","harness");Kw=new Set(["runs","worktrees"])});import Pp from"node:os";function hs(e){return e?.trim()?e.trim():null}function Vw(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Gw(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 Kt(e=F(),r=process.env,t={}){let n=hr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||hs(r.KYNVER_BOX_KIND)),a=t.strict===!0||Gw(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=hs(e.runnerId),c=hs(r.KYNVER_RUNTIME_ID)??hs(r.OPENCLAW_RUNTIME_ID),u=l??c??Vw(n.boxKind,Pp.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=is({config:e,env:r,totalMemBytes:Pp.totalmem()}),m=wn(n.boxKind,p.configuredMaxWorkers??Xi(n.boxKind,p.autoCap)),f=gs({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 Wn=I(()=>{"use strict";H();Me();Fo();as();Ea()});var Ip=I(()=>{"use strict";Rn();Me();us();H();ls();yp();Sn();Dn();Wn()});function or(e){let r=e.trim().toLowerCase();return Jw[r]??r}var Op,qw,Jw,ks=I(()=>{"use strict";Op=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],qw=Op.join("|"),Jw={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 Tp=I(()=>{"use strict";Fr()});var Np=I(()=>{"use strict";Tp()});import{execFileSync as zw}from"node:child_process";function Aa(e=process.env){let r=e[Xw]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function Qw(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return zw(e,r,n)}function Zw(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Ca(e,r){let t=JSON.stringify(at),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 Mp(e={}){if(Aa(e.env??process.env)==="file")return null;let t=Zw(e.platform??process.platform);return t?new Pa(t,e.exec):null}var at,Xw,Sr,Pa,Dp=I(()=>{"use strict";at="kynver",Xw="KYNVER_CREDENTIAL_STORE";Sr=5e3;Pa=class{constructor(r,t=Qw){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",at,"-a",r,"-w"],{timeoutMs:Sr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",at,"account",r],{timeoutMs:Sr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ca("get",r)],{timeoutMs:Sr}).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",at,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Sr}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",at,"account",r],{input:`${t}
74
+ `,timeoutMs:Sr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ca("set",r)],{input:`${t}
75
+ `,timeoutMs:Sr})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",at,"-a",r],{timeoutMs:Sr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",at,"account",r],{timeoutMs:Sr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ca("delete",r)],{timeoutMs:Sr})}catch{}}}});function Na(){return Ia||(Ia=new Oa),Ia}var Ta,ex,ys,Oa,Ia,Wp=I(()=>{"use strict";Dp();Ta="api-key",ex=6e4,ys=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"}},Oa=class{cache=new Map;keychain;env;now;constructor(r={}){this.env=r.env??process.env,this.keychain=r.keychain===void 0?Mp({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<ex)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=Aa(this.env);if(!this.keychain){if(n==="keychain")throw new ys(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 ys(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},Ia=null});import{existsSync as Up,mkdirSync as tx,readFileSync as Bp,writeFileSync as nx}from"node:fs";import{homedir as ox,totalmem as CU}from"node:os";import Wa from"node:path";function sx(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Ye(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Ye(e.defaultRepo.trim())}:{}}}function F(){if(!Up(Lp))return{};try{return sx(JSON.parse(Bp(Lp,"utf8")))}catch{return{}}}function Rs(){if(wa(),!Up(Ma))return{};try{return JSON.parse(Bp(Ma,"utf8"))}catch{return{}}}function Da(e){wa(),tx(La,{recursive:!0}),nx(Ma,`${JSON.stringify(e,null,2)}
76
+ `,{mode:384})}function ix(e,r,t,n={}){let o=Rs();if(Na().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),Da(i);return}Da({...o,...n,[r]:t})}function ax(e,r){let t=Na().read(e);return t||Rs()[r]}function Ua(){return vp(lx)}function wr(){return Ua().getApiKey()}function Ht(e){return Ua().getRunnerToken(e)}function Ba(e,r){Ua().persistRunnerToken(e,r)}function Q(e){let r=Ln(e);return r||Hp("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Fa(e){return Ln(e)}function Ln(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||F().apiBaseUrl;return vn(r)}function cx(e,r){let t=e||Ht(r)||(r?void 0:Ht(F().agentOsId));if(t)return String(t);let n=ze("KYNVER_RUNTIME_SECRET")||ze("KYNVER_CRON_SECRET")||ze("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 ux(e,r,t){let n=cx(e,r);if(n)return{ok:!0,secret:n};let o=wr(),s=Ln(t?.baseUrl);if(o&&r&&s)try{let i=await Ka(r,{baseUrl:s,apiKey:o});return Ba(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 ux(e,r,t);if(n.ok)return n.secret;Hp(n.reason)}async function Fp(e,r){let t=wr(),n=Ln(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Ka(e,{baseUrl:n,apiKey:t});return Ba(e,o),o}catch{return null}}async function Kp(e,r,t){let n=wr(),o=Ln(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 Ka(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Ba(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 Ka(e,r){let t=r?.apiKey||wr();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 bn(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 Hp(e){console.error(e),process.exit(1)}var La,Lp,Ma,$U,jU,lx,H=I(()=>{"use strict";Rn();Fr();Sn();Me();Fo();as();xn();ls();Ip();ks();Wn();Np();Dn();Wp();La=Wa.join(ox(),".kynver"),Lp=Wa.join(La,"config.json"),Ma=Wa.join(La,"credentials");$U=500*1024*1024,jU=4*1024*1024*1024;lx={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:ax(Ta,"apiKey")},getRunnerToken(e){let r=Rs();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){ix(Ta,"apiKey",e)},persistRunnerToken(e,r){Da({...Rs(),runnerToken:r,runnerTokenAgentOsId:e})}}});import Ha from"node:path";function ge(e){return fs(e)}function De(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ge(e);let r=F(),t=r.harnessRoot?.trim();if(t)return ge(t);let n=Kt(r,process.env);return n.identity?n.identity.harnessRoot:gs({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Pe(e){return Ha.join(ge(e),"runs")}function $t(e){return Ha.join(ge(e),"worktrees")}function $p(){let e=De();return{harnessRoot:e,runsDir:Pe(e),worktreesDir:$t(e)}}function xr(e,r){return Ha.join(e,x(r))}var Xe=I(()=>{"use strict";H();Ea();Wn();O()});import{existsSync as vs,readdirSync as dx,statSync as px}from"node:fs";import lt from"node:path";function le(){return $p()}function q(e){let{runsDir:r}=le(),t=lt.join(xr(r,x(e)),"run.json");return vs(t)||Ge(`run '${e}' not found`),A(t)}function Je(){let{runsDir:e}=le();return jp(e)}function bs(e){return jp(Pe(e))}function mx(e){try{return px(e).isDirectory()}catch{return!1}}function jp(e){if(!vs(e))return[];let r=[];for(let t of dx(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=lt.join(e,t.name);if(!mx(n))continue;let o=A(lt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function jt(e,r){let{runsDir:t}=le(),n=lt.join(xr(t,x(e)),"run.json"),o=lt.join(xr(t,x(e)),"workers",x(r),"worker.json");return vs(o)||(vs(n)||Ge(`run '${e}' not found`),Ge(`worker '${r}' not found in run '${e}'`)),A(o)}function Ae(e){let{runsDir:r}=le();ue(lt.join(xr(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(lt.join(xr(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return Un(r,e)}function Un(e,r){return xr(Pe(e),x(r))}var U=I(()=>{"use strict";Xe();O()});import{parentPort as Nv,workerData as hD}from"node:worker_threads";var mn=null,wu=-1,xu=0;function _u(e){mn=e}function Eu(e=Date.now()){return!mn||mn.stallCount===wu&&e-xu<9e5?null:(wu=mn.stallCount,xu=e,mn)}var Uv="embedded-1",Bv=[{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"}],Fv={"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
+ `),"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
+ `),"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
+ `),"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
+ `)},Kv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Pt={version:Uv,generatedAt:"1970-01-01T00:00:00.000Z",personas:Bv,instructions:Fv,policyThresholds:Kv};var fn=Pt,Hv="embedded";function Cu(){return fn.version}function Pu(e,r){fn=e,Hv=r}function gn(e){let r=fn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Pt.instructions[e];return typeof t=="string"?t:""}function Ki(e,r){let t=fn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Pt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Au(e){if(!e)return null;let r=e.trim().toLowerCase();return fn.personas.find(t=>t.slug===r)??null}kn();import Pv from"node:path";U();rs();O();import fx from"node:path";function gx(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 Ss(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=A(fx.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!$r(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...gx(o)})}return t}H();function Bn(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}}Sn();H();function Gp(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 Vp(e){return new Error(`callback timeout after ${e}ms`)}async function Yp(e,r){let t=Gp(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(Vp(t))},t)})])}catch(i){throw s?Vp(t):i}finally{o&&clearTimeout(o)}}function qp(e,r){let t=Gp(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function ct(e,r,t,n){try{return await Yp(async o=>{let s=await bn(e,{method:"POST",headers:Bn(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 qp(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await ct(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Kp(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await ct(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function $a(e,r,t){try{return await Yp(async n=>{let o=await bn(e,{method:"GET",headers:Bn(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 qp(n,t?.timeoutMs)}}H();Dn();import{spawnSync as Px}from"node:child_process";import{randomBytes as Ax}from"node:crypto";import{createPublicKey as bx,verify as Sx}from"node:crypto";import{createHash as hx,createPublicKey as gB,verify as hB}from"node:crypto";function Va(e){return JSON.stringify(ja(e))}function ja(e){if(Array.isArray(e))return e.map(ja);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ja(e[t]);return r}return e}function Ga(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 Jp(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 yB=Buffer.from("302a300506032b6570032100","hex"),zp="ca-6297fb8e1773",kx={[zp]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"};function yx(e){return`ca-${hx("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Xp(e,r=process.env){let t=Ga(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t)return yx(t)!==e?null:t;let n=kx[e];return!n||e===zp&&!Jp(r)?null:Ga(n)}var Rx=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,vx=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function ws(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(Rx)].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(vx))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var wx=120,Qp=["write","read_only","land_pr","verify_live"],xx=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var _x=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Zp(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 _x.test(i)&&i.length<=512?i:null}function em(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":ws(r)==="read_only"?"read_only":"write"}function Ex(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(",")!==[...xx].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)||!Qp.includes(t.operationClass))}var Cx=Buffer.from("302a300506032b6570032100","hex");function rm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!Ex(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+wx+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Xp(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=bx({key:Buffer.concat([Cx,Buffer.from(s)]),format:"der",type:"spki"});return Sx(null,Buffer.from(Va(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 Ya=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 Ix(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=em(e.decision),a=rm(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 Ox=null,Tx=null,Nx=new Ya,Mx=new Set;function tm(){return ps()}function nm(e){return{v:1,repoIdentity:e,requestNonce:Ax(16).toString("base64url")}}function om(e){let r=Px("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Zp(r.stdout.trim())}function sm(e){let r=Ix({...e,policy:Ox,identity:Tx,consumed:Nx});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 Mx)try{o(n)}catch{}}return r}function im(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function Fn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function am(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 qa(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 Dx=["implementation","review","landing"],Wx=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function Lx(e){return Dx.includes(e)}function Ux(e){return Wx.includes(e)}function lm(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||Lx(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:Ux(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var cm=Pt.personas.map(lm),Bx=new Map(cm.map(e=>[e.slug,e]));function Fx(e){if(!e)return null;let r=e.trim().toLowerCase(),t=Bx.get(r)??null,n=Au(r);if(!n)return t;let o=lm(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function Ja(e){return Fx(e)?.defaultRoleLane??null}function um(){return cm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function dm(e){return(e??"").trim().toLowerCase()}function Kx(e){switch(dm(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 Hx(e){let r=dm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=Kx(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function pm(e){return Hx(e)??"any"}xn();H();Me();function $x(e=process.env){let r=F();return kr(r,e)!=="forge"}function xs(e,r=process.env){if($x(r))return e?.maxConcurrentWorkers??void 0}async function _s(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 $a(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}}Ft();var jx={fetchPreferences:_s,configuredOverride:xs,observe:Nn};async function mm(e,r=jx){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Ft();U();U();function Es(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function za(e){return e.toLowerCase()}function Vx(e){let r=Es(e,"roleLane");if(r)return r;let t=za(Es(e,"executorRef")),n=za(Es(e,"title")),o=za(Es(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=Ja(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function fm(e){let r=Vx(e);return r?{...e,roleLane:r}:e}H();var Gx=/^claude[-_]/i,Yx=/^(?:opus|sonnet|haiku)\b/i;function gm(e){let r=e.trim();return Gx.test(r)||Yx.test(r)}function hm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Xa(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function km(e){return e.trim().toLowerCase().startsWith("gemini-")}function qx(e){return hm(e)?"codex":gm(e)?"claude":km(e)?"gemini":(Xa(e),"cursor")}function Jx(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 zx(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?gm(n)||hm(n)||Xa(n)||km(n)?{lane:t,model:n,provider:qx(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function We(e){let r=typeof e=="string"?e.trim():"";return r?Jx(r)??zx(r):null}function ym(e){let r=We(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Xa(r.model)):!1}ks();ks();var Er="cursor",Xx=new Set(["claude","opus","anthropic"]),Qx=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Kn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function _r(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return Xx.has(r)?!0:r.includes("claude")||r.includes("opus")}function Cs(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&_r(r))return!0;let t=Kn(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=We(Kn(e,"executorRef"));if(n?.provider&&_r(n.provider)||n?.model&&_r(Zx(n.model)))return!0;let o=Kn(e,"description");if(Qx.some(i=>i.test(o)))return!0;let s=Kn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function Zx(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function e_(e,r){return{provider:Er,model:Ps,rule:`policy:cursor_default${r}`,requestedModel:e}}var r_=["explicit:","executor_ref:","factory:","task:"];function t_(e){return r_.some(r=>e.startsWith(r))}function Qa(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||We(Kn(e,"executorRef"))?.provider?!0:Cs(e)}function Rm(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&_r(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||t_(r.rule)||Qa(t)||!_r(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return e_(r.model,o)}function vm(e,r=Er){let t=e?.trim();return t?or(t):r}var bm={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 Vt(e){return bm[e]}function Sm(){return Object.values(bm)}import{existsSync as m_}from"node:fs";import{homedir as f_}from"node:os";import $n from"node:path";import{createHash as Em}from"node:crypto";import{statSync as p_}from"node:fs";import{spawnSync as Cm}from"node:child_process";import{existsSync as _m,readFileSync as n_}from"node:fs";import ut from"node:path";var Hn=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},o_=".COM;.EXE;.BAT;.CMD";function s_(e){return e.includes("/")||e.includes("\\")}function i_(e){return(e.PATHEXT||o_).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function a_(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function l_(e,r={}){let t=r.env??process.env,n=r.exists??_m,o=i_(t),s=ut.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(s_(e)||ut.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of a_(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(ut.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}var wm=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,c_=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function xm(e){return e.replace(/^[\\/]+/,"")}function u_(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=c_.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=wm.exec(n);if(o)return xm(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?wm.exec(i):null;if(a)return xm(a[1])}return null}function d_(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=l_(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=ut.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>n_(m,"utf8")),i=r.exists??_m,a;try{a=s(n)}catch{throw new Hn(n)}let l=u_(a);if(!l)throw new Hn(n);let c=ut.win32.dirname(n),u=ut.win32.join(c,l);if(!i(u))throw new Hn(n);let d=ut.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function ve(e,r,t={}){let n=d_(e,t);return[n.executable,[...n.prefixArgs,...r]]}function sr(e){try{let r=p_(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Em("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Gt(e){return Em("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Le(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Qe(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=ve(e,r),i=Cm(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 As(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=ve(e,r);return Cm(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 g_="codex";function h_(){let e=f_();return[process.env.CODEX_HOME?.trim()?$n.join($n.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,$n.join(e,".codex","auth.json"),$n.join(e,".config","codex","auth.json")].filter(t=>!!t)}function k_(e){return $n.dirname(e)}function y_(e){let r,t;for(let n of h_()){if(!m_(n))continue;r??=n;let o=Qe(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:k_(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??Qe(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Pm(e=new Date().toISOString()){let r=Le(g_,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Gt("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}=y_(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?sr(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 R_}from"node:fs";import{homedir as v_}from"node:os";import Za from"node:path";function b_(){let e=process.env.HERMES_HOME?.trim(),r=e?Za.resolve(e):Za.join(v_(),".hermes");return Za.join(r,"auth.json")}function Is(e=new Date().toISOString()){let r=Le("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Qe(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=b_(),o=R_(n),s=As(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?sr(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 Yt(e=new Date().toISOString()){let r=Pm(e);if(r.ready)return{...r,path:"codex_cli"};let t=Is(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var Am=["low","medium","high"],Im={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Om(e,r){let t=Vt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function S_(e,r){let t=Vt(e.providerId),n=Vt(r.providerId),o=Am.indexOf(t.costTier)-Am.indexOf(n.costTier);if(o!==0)return o;let s=Im[e.binding.authSource]-Im[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function el(e){let r=Sm().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Om(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(S_)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Om(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 w_}from"node:fs";import{homedir as x_}from"node:os";import __ from"node:path";var E_="claude";function C_(){let e=x_();return[__.join(e,".claude",".credentials.json")]}function Tm(e=new Date().toISOString()){let r=Le(E_,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Gt("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=Qe(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=C_().find(i=>w_(i)),o=As(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?sr(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 Q_}from"node:fs";import{homedir as X_}from"node:os";import zt from"node:path";Rr();O();import{closeSync as sl,existsSync as Lm,mkdirSync as U_,openSync as il,statSync as B_,unlinkSync as Dm}from"node:fs";import{spawn as F_}from"node:child_process";import K_ from"node:os";import ir from"node:path";Yi();var P_="KYNVER_NO_PROD_DB_CREDENTIALS",A_=["KYNVER_ENV_FILE"];function Ue(e,r={}){let t=Gi(e);if(!r.reviewWorker)return t;let n={...t,[P_]:"1"};for(let o of A_)delete n[o];return n}var I_=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Nm(e){return e.replace(I_,"")}var Mm=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Os(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function O_(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var T_=new Set(["cursor"]);function N_(e){let r=e.trim().toLowerCase();return T_.has(r)?"auto":null}function rl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Nm(t).trim()||r;return Mm.test(o)||!Os(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?Os(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 tl(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 Jt(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Nm(t).trim()||r;return Os(o)||!O_(o)&&Mm.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 nl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=N_(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")`}:Os(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 jn,readdirSync as M_}from"node:fs";import dt from"node:path";var D_=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function W_(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 L_(e){let r=dt.join(e,"versions");if(!jn(r))return null;let t=null,n=-1;for(let o of M_(r,{withFileTypes:!0})){if(!o.isDirectory()||!D_.test(o.name))continue;let s=W_(o.name);s==null||s<=n||(n=s,t=dt.join(r,o.name))}return t}function Ts(e){let r=e?.trim()||dt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=dt.join(r,"node.exe"),n=dt.join(r,"index.js");if(jn(t)&&jn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=L_(r);if(!o)return null;let s=dt.join(o,"node.exe"),i=dt.join(o,"index.js");return!jn(s)||!jn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var ol="composer-2.5",H_=15e3,$_=6e4,j_=3e4;function V_(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function ll(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Lm(ir.join(ir.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ts(ir.dirname(e)):t?{nodeExe:e,indexJs:ir.join(ir.dirname(e),"index.js"),versionDir:ir.dirname(e)}:Ts();if(o)return V_(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 G_(e,r,t){return Ue({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:ir.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function Um(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function al(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 Y_(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||ir.join(K_.homedir(),".kynver","locks");return U_(e,{recursive:!0}),ir.join(e,"cursor-agent-start.lock")}function q_(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=Y_(),r=al("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",$_),t=al("KYNVER_CURSOR_START_LOCK_STALE_MS",j_),n=Date.now();for(;;)try{let o=il(e,"wx");return sl(o),()=>{try{Dm(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-B_(e).mtimeMs>t){Dm(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Um(250)}}function Bm(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=Ts(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=ir.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(Lm(n))return n}return"agent"}function J_(){return Bm(process.env)}var Fm={name:"cursor",defaultModel:ol,preflightModel(e){return nl(e,ol)},start(e){let r=nl(e.model,ol);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=il(e.stdoutPath,"a"),o=il(e.stderrPath,"a"),s=["ignore",n,o],i=J_(),a=ll(i),l=q_(),c;try{let[u,d]=a.shell?[a.executable,Wm(e,t,a.prefixArgs)]:Ce(a.executable,Wm(e,t,a.prefixArgs),e.workerDir);c=F_(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:G_(i,a,e.reviewWorker)})),Um(al("KYNVER_CURSOR_START_LOCK_HOLD_MS",H_))}finally{l(),sl(n),sl(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 Wm(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 z_}from"node:child_process";function cl(e,r=process.env){try{let t;try{t=ll(e)}catch{t={executable:e,prefixArgs:[]}}let n=z_(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 ul(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(zt.join(t,".config","cursor","auth.json")),r.push(zt.join(t,".cursor-agent","auth.json")));let n=X_();if(r.push(zt.join(n,".config","cursor","auth.json")),r.push(zt.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(zt.join(o,"cursor-agent","auth.json")),s&&r.push(zt.join(s,"cursor","auth.json"))}return r}var Z_="agent";function Km(e=new Date().toISOString()){let r=Le(Z_,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Gt("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=Qe(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ul().find(a=>Q_(a)),o=cl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?sr(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 eE,readFileSync as rE}from"node:fs";import{homedir as tE}from"node:os";import dl from"node:path";var nE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function oE(){let e=process.env.HERMES_HOME?.trim(),r=e?dl.resolve(e):dl.join(tE(),".hermes");return dl.join(r,".env")}function sE(e){try{let r=rE(e,"utf8"),t=[];for(let n of nE)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Hm(e=new Date().toISOString()){let r=Le("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Qe(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=oE(),o=eE(n),s=o?sE(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?sr(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 $m(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Yt(r),n={codex:t,cursor:Km(r),claude:Tm(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:Hm(r),hermesOpenAiCodex:Is(r),codexAdapterPath:t.path,readyCount:o}}var iE=[/\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],aE=[/\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 pl(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function lE(e){let r=pl(e,"executorRef").toLowerCase(),t=pl(e,"title").toLowerCase(),n=pl(e,"description").toLowerCase(),o=`${r}
81
+ ${t}
82
+ ${n}`;return iE.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":aE.some(s=>s.test(o))?"low":"elevated"}function cE(e){let r=Vt(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 uE(e){let r=e.inventory??$m();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function pt(e){let r=cE({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 jm(e){let r=e.task??{},t=lE(r),n=uE({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Yt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Er;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=el({inventory:n,riskClass:t});return pt(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 pt({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 pt({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 pt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=el({inventory:n,riskClass:t});if(a)return pt({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 pt({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"}})}Rr();import{closeSync as zm,openSync as Xm}from"node:fs";import{spawn as vE}from"node:child_process";O();import{unlinkSync as dE,writeFileSync as pE}from"node:fs";import mE from"node:path";var Ze="KYNVER_WORKER_BROKER_SOCKET";function ml(e){return`${JSON.stringify(e)}
83
+ `}function fl(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 fE="KYNVER_WORKER_MCP_TOOLS",gE="mcp-config.json",oe="kynver",Vn=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Vm=Vn.map(e=>`mcp__${oe}__${e}`),hE={"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 Gn(e){if(!e||e.length===0)return[...Vn];let r=new Set;for(let t of e)for(let n of hE[t]??[])r.add(n);return Vn.filter(t=>r.has(t))}function Gm(e){return Gn(e).map(r=>`mcp__${oe}__${r}`)}var kE=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],yE=["openai-compatible","gemini-api"];function RE(e){return kE.includes(e)}function gl(e){return yE.includes(e)}function Ym(e){return RE(e)&&!gl(e)}function Yn(e=process.env){let r=e[fE]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function qm(e){return mE.join(e,gE)}function Jm(e){let r=qm(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Ze]:e.brokerSocketPath}}}};return pE(r,`${JSON.stringify(t,null,2)}
84
+ `,{mode:384}),r}function Ns(e){try{return dE(qm(e)),!0}catch{return!1}}var jr="claude-sonnet-4-6",qn="claude-opus-4-8";function bE(e,r){let n=Zm(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 Qm={name:"claude",defaultModel:jr,preflightModel(e){return rl(e,jr)},start(e){let r=rl(e.model,jr);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;bE(e,t);let[n,o]=ve("claude",Zm(e,t)),s=Xm(e.stdoutPath,"a"),i=Xm(e.stderrPath,"a"),a=["ignore",s,i],[l,c]=Ce(n,o,e.workerDir),u=vE(l,c,ae({cwd:e.worktreePath,detached:ce(),stdio:a,env:Ue(process.env,{reviewWorker:e.reviewWorker})}));if(zm(s),zm(i),!u.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return u.unref(),{pid:u.pid,model:t}}};function Zm(e,r){return["--model",r,"-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:Vm).join(",")}`]:[],"--",e.prompt]}Rr();import{closeSync as of,existsSync as PE,openSync as sf}from"node:fs";import{spawn as kl}from"node:child_process";O();Rr();import{closeSync as ef,openSync as rf}from"node:fs";import{spawn as SE}from"node:child_process";O();var hl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";function wE(e,r){return Ue({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function xE(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:hl,preflightModel(e){return qt(e,hl)},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,hl);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Le("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=ve(n,xE(t,e.prompt)),i=rf(e.stdoutPath,"a"),a=rf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Ce(o,s,e.workerDir),d=SE(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:wE(e.reviewWorker,e.codexHome)}));if(ef(i),ef(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 _E="KYNVER_CODEX_WINDOWS_SANDBOX",EE="unelevated";function CE(e=process.env){return e[_E]?.trim().toLowerCase()==="elevated"?"elevated":EE}function nf(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${CE(r)}"`]}function AE(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}var Cr=AE();function yl(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function IE(e,r){return Ue({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function OE(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 TE(e,r,t,n){if(process.platform==="win32"){let[l,c]=ve(e,r);return kl(l,c,t)}if(!PE("/usr/bin/script")){let[l,c]=Ce(e,r,n);return kl(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Ce("script",["-qfc",s,"/dev/null"],n);return kl(i,a,t)}var af={name:"codex",defaultModel:Cr,preflightModel(e){return qt(e,Cr)},start(e){if(Yt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return tf.start(e);let t=qt(e.model,Cr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=sf(e.stdoutPath,"a"),s=sf(e.stderrPath,"a"),i=["ignore",o,s],a=yl(),l=OE(n,e.prompt,e.executionMode),c;try{c=TE(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:IE(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{of(o),of(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}}};Rr();import{closeSync as lf,openSync as cf}from"node:fs";import UE from"node:path";import{fileURLToPath as BE}from"node:url";import{spawn as FE}from"node:child_process";O();import{existsSync as Ms}from"node:fs";import mt from"node:path";import{fileURLToPath as NE}from"node:url";function ME(e,r){let t=mt.resolve(e);for(;;){let n=mt.join(t,r);if(Ms(n))return n;let o=mt.dirname(t);if(o===t)return null;t=o}}function DE(e){return ME(e,mt.join("node_modules",".bin","tsx"))??"npx"}function Rl(e,r){if(e.endsWith(".ts")){let t=DE(mt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Ds(e){if(e.explicitCliPath)return Ms(e.explicitCliPath)?Rl(e.explicitCliPath,e.nodeExecutable):null;let r=NE(new URL(".",e.importMetaUrl)),t=mt.join(r,"cli.js");if(Ms(t))return Rl(t,e.nodeExecutable);let n=mt.join(r,"cli.ts");return Ms(n)?Rl(n,e.nodeExecutable):null}var WE="X-Kynver-Job-Token",Xn={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 LE(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function Jn(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[WE]: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 zn(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Ws(e,r,t){let n=LE(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=zn(t.memoryQuery);s&&o.set("memoryQuery",s);let i=zn(t.mode);return i&&o.set("mode",i),Jn(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)),Jn(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=zn(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return Jn(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return Jn(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return Jn(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...zn(t.eventKey)?{eventKey:zn(t.eventKey)}:{}}})}}function Xt(e){return Vn.includes(e)}function Ls(e){return Gn(e).filter(Xt).map(r=>{let t=Xn[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var ft="openai-compatible",KE=600*1e3;function vl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var Qn=class extends Error{};function HE(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new Qn(`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 Qn(`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 Qn(`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):KE;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var $E="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 bl(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:$E},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function jE(){let e=BE(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=UE.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Ds({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 VE(e,r,t){let n=e.workerToolGrant,o=n?Ls(n.capabilities):void 0;return{provider:ft,model:t,request:bl(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Sl(e,r,t){let n=jE(),o=cf(e.stdoutPath,"a"),s=cf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Ce(n.command,n.argsPrefix,e.workerDir),c=FE(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ue(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:ft,get defaultModel(){return vl()},preflightModel(e){return tl(e,vl())},start(e){let r=tl(e.model,vl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=HE(process.env),o=VE(e,n,t);return Sl(e,o,t)}};Rr();import{closeSync as gf,openSync as hf}from"node:fs";import{spawn as qE}from"node:child_process";O();import GE from"node:path";var YE=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function Us(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function Bs(e){let r=GE.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function df(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function pf(e){let r=e.trim().toLowerCase();return!r||YE.has(r)?[]:["--model",e.trim()]}function mf(e,r){return[...pf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function ff(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 ar="gemini";function Ie(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function JE(e,r){return Ue({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var kf={name:ar,get defaultModel(){return Ie()},preflightModel(e){return Jt(e,Ie())},start(e){let r=Jt(e.model,Ie());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=Us(),n=Bs(t),o=n==="antigravity"?df(r):r.model,s=n==="antigravity"?mf(e,o):ff(e,o),[i,a]=ve(t,s),l=hf(e.stdoutPath,"a"),c=hf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Ce(i,a,e.workerDir),m=qE(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:JE(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(gf(l),gf(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 lr="gemini-api",yf="https://generativelanguage.googleapis.com/v1beta/openai",zE=600*1e3,Zn=class extends Error{};function XE(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function QE(e=process.env){let r=XE(e);if(!r)throw new Zn('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 Zn(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${yf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new Zn(`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):zE;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function ZE(e,r,t){let n=e.workerToolGrant,o=n?Ls(n.capabilities):void 0,s=bl(r,t,e.prompt,o);return{provider:lr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Rf={name:lr,get defaultModel(){return Ie()},preflightModel(e){return Jt(e,Ie())},start(e){let r=Jt(e.model,Ie());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=QE(process.env),o=ZE(e,n,t);return Sl(e,o,t)}};var eC="claude-sonnet-4-6",Ps="composer-2.5";function we(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function rC(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 vf(e){return e.toLowerCase()}function xl(e=F()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||eC}function Fs(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-")?ar:"cursor"}function tC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ps,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:jr,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Ie(),provider:ar,rule:n&&n!==ar?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Ie(),provider:lr,rule:n&&n!==lr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function bf(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 nC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Sf(e,r,t){return nC.has(e)?qn:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?qn:jr}function oC(e){let r=vf(we(e,"executorRef")),t=we(e,"title").toLowerCase(),n=we(e,"priority")||"normal",o=vf(we(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Sf(o,r,t);return{provider:"claude",model:i,rule:i===qn?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Cr,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=We(we(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Cr},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=We(we(e,"executorRef"));return{provider:ft,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=We(we(e,"executorRef"));return{provider:lr,...i?.model?{model:i.model}:{model:Ie()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=We(we(e,"executorRef"));return{provider:ar,...i?.model?{model:i.model}:{model:Ie()},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:Cr,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 bf(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(bf(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=xl();return{model:s,provider:Fs(s),rule:"default:global"}}function sC(e){return e?We(we(e,"executorRef")):null}function iC(e){switch(or(e)){case ar:case lr:return Ie();case"claude":return jr;case"codex":return Cr;case"cursor":return Ps;default:return}}var wl="explicit:cli_provider",wf="config:worker_provider";function xf(e,r,t){let n=or(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:iC(n)??e.model,rule:t}}function aC(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==wl?e:xf(e,t,wl)}function lC(e,r){if(r.explicitProvider?.trim()||Qa(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=or(t);return n===Er||n===e.provider?e:xf(e,n,wf)}function Ks(e){let r,t=sC(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=tC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||Fs(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||Fs(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Cs(e.task)){let l=rC(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=Sf(d,p,m),u=c===qn?"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=oC(e.task);r={...l,requestedModel:l.model}}else{let l=xl();r={model:l,provider:e.explicitProvider?.trim()||Fs(l),rule:"default:global",requestedModel:l}}r=aC(r,e.explicitProvider),r=lC(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&or(e.configuredProvider)!==Er&&r.rule==="config:worker_provider",i=Rm({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===wf||_r(i.provider)&&(e.explicitProviderIsOperatorOverride||Cs(e.task))||i.provider===ft||i.provider===ar||i.provider===lr||i.provider==="codex")return i;let a=jm({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??Cr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function _f(e,r,t){return e||r||t||xl()||jr}function cC(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Ef(e){return e?.trim()||void 0}function Cf(e){let r=cC(e.task),t=We(r),n=e.explicitProvider?.trim().toLowerCase(),o=Ef(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=Ef(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&ym(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&&!_r(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 Pf(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Af(){return{maxTaskAttempts:Pf(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ki("harness.maxTaskAttempts",4))),dispatchCooldownMs:Pf(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ki("harness.dispatchCooldownMs",5e3)))}}H();import pC from"node:path";U();me();O();var _l="kynver-harness:",If="@runner:";function El(e){return e?.trim()?e.trim():null}function uC(e){let r=El(e);if(!r?.startsWith(_l))return null;let t=r.slice(_l.length),n=t.indexOf(If);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function eo(e,r){let t=e.trim(),n=r.trim();return`${_l}${t}${If}${n}`}function dC(e,r){let t=El(r);return t?uC(e)===t:!1}function Hs(e){let r=El(e.workerLeaseOwner);return r&&dC(r,e.runId)?r:eo(e.runId,e.runnerId)}H();import Of from"node:os";Me();function Pr(e){return e?.trim()?e.trim():null}function Be(e={}){let r=e.env??process.env,t=F();return{runnerId:Pr(t.runnerId)??Pr(r.KYNVER_RUNTIME_ID)??Pr(r.OPENCLAW_RUNTIME_ID)??Pr(r.HOSTNAME)??Of.hostname(),hostname:Pr(r.HOSTNAME)??Of.hostname(),profile:Pr(r.KYNVER_RUNNER_PROFILE)??Pr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Pr(r.KYNVER_HARNESS_REPO)??Pr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Cu()}}H();async function $s(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}U();async function js(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 $s({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 Tf(e,r){return A(pC.join(N(e),"workers",x(r),"worker.json"),void 0)}async function Nf(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)):Cl,a=Be({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=Tf(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=Hs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await js({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 Mf(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=Tf(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as pI,mkdirSync as mI}from"node:fs";import tn from"node:path";U();O();import mC from"node:path";function Df(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function Wf(e,r,t,n){return Df(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function Vs(e,r={}){let t=r.isAlive??Y,n=r.kill??Ne,o=r.sleep??Do;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Pl(e,r,t,n,o={}){Wf(e,r,t,n);let s=Vs(r.pid,o),i=Vs(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function Lf(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=A(mC.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(Vs(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function fC(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function Uf(e,r,t,n={}){if(!fC(n.env))throw Pl(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`)}ca();de();U();U();var Bf="unknown";function Ff(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==Bf&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==Bf&&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 gC=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,hC="next-action-fix:";function Gs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Kf(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Gs(e)}function kC(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(hC)||t.includes("repair")||t.includes("unblock"))}function yC(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(gC);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Gs(String(n.targetPrUrl??n.target_pr_url??"")),s=Gs(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Kf(o):null,targetPrBranch:s}}catch{return r}}function Hf(e){if(!kC(e))return null;let r=yC(e.description),t=e.prUrl?Kf(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Gs(e.branch)}:null}function $f(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 jf(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...gn(`worker.prompt.progress.${n}`).split(`
87
+ `),o],i=gn(`worker.prompt.merge_gate.${n}`).split(`
88
+ `),a=gn(`worker.prompt.plan_artifacts.${n}`).split(`
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.",...gn("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?[...$f({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
91
+ `)}O();H();var Ys={claude:Qm,codex:af,cursor:Fm,[ar]:kf,[lr]:Rf,[ft]:uf},Vf=null;function Gf(e){if(Vf)return Vf;let r=e?.trim();if(r){let o=Ys[or(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Ys).join(", ")}`);return o}let t=vm(F().workerProvider),n=Ys[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Ys).join(", ")}`);return n}O();import{spawn as ZA}from"node:child_process";import{existsSync as eI,openSync as rI,closeSync as Wh}from"node:fs";import tI from"node:path";U();function Yf(e){return!!e.completionReportedAt?.trim()}function qs(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function RC(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Al(e){return!!(RC(e.completionBlocker)||e.completionOutcome==="rejected")}function ro(e){return Yf(e)&&!Al(e)}U();me();H();import hi from"node:path";function Il(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function to(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var vC=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),qf=new Set(["done","failed","cancelled"]);function Jf(e){let r=Il(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=to(r.outcome),n=to(r.detail)??to(r.error),o=Il(r.task),s=Il(r.closedTask),i=o?to(o.status):null,a=s?to(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&qf.has(i)||a!==null&&qf.has(a))||t!==null&&vC.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function zf(e){return e.taskAdvanced}U();zo();var bC="expert-lane-pr-review:",SC="plan-review-task",wC="scheduledjob:",Js=new Set(["lorentz","dalton","rhea","sentinel"]);function xC(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Ol(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function _C(e,r){return e.startsWith("factory:")?e.includes("lb")||Ol(r):!1}function zs(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
92
+ ${n}`,s=xC(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(bC)||r===SC||r.startsWith("daemon-review:")||s&&Js.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||_C(r,o)||Ol(o))||r.startsWith(wC)&&e.parentTaskId&&s&&Js.has(s)||e.planId&&!e.parentTaskId&&s&&Js.has(s)&&Ol(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&Js.has(s))}var Xf=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,EC=new Set(um()),CC=/no commits between/i;function Qf(e){return!!(e&&CC.test(e))}function be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Zf(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:be(e.head)}function eg(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 PC(e,r,t){let n=r.trim();if(!n)return null;let o=t.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function AC(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&EC.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&Xf.test(n))}function IC(e,r){if(e.changedFiles.length>0)return!0;let t=be(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=PC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(be(e.headCommit)||Zf(e.gitAncestry))}function rg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(zs({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&&Xf.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(AC(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 IC(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)??Zf(e.gitAncestry),prUrl:be(r?.prUrl)??null}}import{spawnSync as OC}from"node:child_process";function og(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 TC(e,r,t){try{let n=OC(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 Qs={git:(e,r)=>ne(e,r),gh:(e,r)=>TC("gh",e,r)};function NC(e){return e.split(`
93
+ `).map(r=>r.trim()).find(Boolean)??""}function sg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:og(t.stdout)}function gt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Xs(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 no(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=gt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function ig(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 ag(e){let r=Xs(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=MC(t.stdout)??Xs(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 MC(e){let t=NC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function lg(e){return`t-${x(e)}-a`}function cg(e,r){let t=lg(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 oo(e){return e.trim().toLowerCase()}function ug(e,r){if(!e.length)return null;if(r){let t=oo(r),n=e.find(o=>oo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function dg(e,r){let t=oo(r);return e.filter(n=>oo(n.url)!==t).map(n=>n.url)}function pg(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 DC(e){let r=new Set,t=[];for(let n of e){let o=oo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function WC(e,r,t,n){let o=n.gh(e,["search","prs",t,"--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:pg(o.stdout).filter(s=>cg(s,t))}function LC(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=lg(t);return pg(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||cg(i,t))}function Tl(e,r,t,n){let o=t.trim();if(!o)return[];let s=WC(e,r,o,n),i=LC(e,r,o,n);return DC([...s,...i])}function UC(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 Nl(e){let r=dg(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=UC(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 mg(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 BC(e){return e.gh(process.cwd(),["--version"]).status===0}function FC(e,r){return`AgentOS harness: ${e} (${r})`}function KC(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 Dl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function HC(e){return Dl(e.prUrlHint)??eg(e.status.finalResult)??Dl(e.worker.taskPrUrl)??null}function $C(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??gt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=no({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=ig({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=gt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Ml(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??gt(e.snapshot.worktreePath,e.exec)??void 0};let r=no({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 Wl(e,r=Qs){let t=HC(e),n=tg(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!rg({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?Ml({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Ml({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!BC(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=sg(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??gt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=no({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=Dl(e.worker.taskId),c=[];if(l){c=Tl(n.worktreePath,i,l,r);let h=ug(c);if(h){let w=$C({snapshot:n,canonical:h,workerName:e.worker.name,exec:r});return w.ok&&w.prUrl&&Nl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=Xs(n.worktreePath,i,n.branch,r);if(u)return Ml({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=no({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??gt(n.worktreePath,r)??void 0;let k=f?mg(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=ag({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:FC(e.worker.name,e.worker.runId),body:KC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Qf(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:Tl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Nl({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}}me();ot();ua();U();me();O();import AP from"node:path";O();import jC from"node:path";var so=new Map,Ll=new Map;function Ul(e){clearInterval(Ll.get(e)),Ll.delete(e)}function Bl(e,r){if(Ul(e),!so.has(e))return;let t=setInterval(()=>{(A(jC.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&Qt(e)},1e3);t.unref(),Ll.set(e,t)}function Fl(e,r){Ul(e);let t=so.get(e);t&&t.close(),so.set(e,r)}async function Vr(e){Ul(e);let r=so.get(e);return r?(so.delete(e),await r.close(),!0):!1}function Qt(e){Vr(e).catch(()=>{})}de();import{appendFileSync as VC,existsSync as gg,mkdirSync as hg,readFileSync as GC,rmSync as fg,writeFileSync as YC}from"node:fs";import Ar from"node:path";var kg=Ar.join(".cursor","mcp.json");function yg(e){return Ar.join(e,kg)}function qC(e){return Z(e,["ls-files","--error-unmatch",kg.split(Ar.sep).join("/")],{allowFailure:!0}).trim().length>0}function JC(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Ar.isAbsolute(r)?r:Ar.join(e,r),n=Ar.join(t,"info","exclude"),o=".cursor/mcp.json";try{hg(Ar.dirname(n),{recursive:!0});let s=gg(n)?GC(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;VC(n,`${s.endsWith(`
95
+ `)||!s?"":`
96
+ `}${o}
97
+ `)}catch{}}function Rg(e){if(qC(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=yg(e.worktreePath);hg(Ar.dirname(r),{recursive:!0});let t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Ze]:e.brokerSocketPath}}}};return YC(r,`${JSON.stringify(t,null,2)}
98
+ `,{mode:384}),JC(e.worktreePath),{ok:!0,configPath:r}}function Zs(e){let r=yg(e);if(!gg(r))return!1;try{fg(r,{force:!0});let t=Ar.dirname(r);return fg(t,{recursive:!1}),!0}catch{return!0}}import{copyFileSync as zC,existsSync as ei,mkdirSync as XC,readFileSync as QC,rmSync as ZC,symlinkSync as eP,writeFileSync as rP}from"node:fs";import{spawnSync as tP}from"node:child_process";import{homedir as nP}from"node:os";import Gr from"node:path";var oP="codex-home";function vg(e){return Gr.join(e,oP)}function sP(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return Gr.resolve(r);let t=nP();for(let n of[Gr.join(t,".codex"),Gr.join(t,".config","codex")])if(ei(n))return n;return null}function iP(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]`,`${Ze} = ${JSON.stringify(e)}`,""].join(`
99
+ `)}function aP(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function bg(e){let r=sP(e.env??process.env),t=r?Gr.join(r,"config.toml"):null,n=t&&ei(t)?QC(t,"utf8"):"";if(n&&aP(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=vg(e.workerDir);XC(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
100
+ `)?"":`
101
+ `;return rP(Gr.join(o,"config.toml"),`${n}${s}${iP(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:lP(r,o)}}function lP(e,r){let t=e?Gr.join(e,"auth.json"):null;if(!t||!ei(t))return"none";let n=Gr.join(r,"auth.json");try{return eP(t,n,"file"),"symlink"}catch{try{return zC(t,n),"copy"}catch{return"none"}}}function io(e){let r=vg(e);if(!ei(r))return!1;try{return ZC(r,{recursive:!0,force:!0}),!0}catch{return!1}}function Sg(e,r,t=1e4){try{let[n,o]=ve(r,["--version"]),s=tP(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 cP,existsSync as Kl,mkdirSync as xg,readFileSync as _g,rmSync as wg,writeFileSync as uP}from"node:fs";import Ir from"node:path";var Eg=Ir.join(".agents","mcp_config.json");function Cg(e){return Ir.join(e,Eg)}function dP(e){return Z(e,["ls-files","--error-unmatch",Eg.split(Ir.sep).join("/")],{allowFailure:!0}).trim().length>0}function pP(e){if(!Kl(e))return{};try{let r=JSON.parse(_g(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 mP(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Ir.isAbsolute(r)?r:Ir.join(e,r),n=Ir.join(t,"info","exclude"),o=".agents/mcp_config.json";try{xg(Ir.dirname(n),{recursive:!0});let s=Kl(n)?_g(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;cP(n,`${s.endsWith(`
102
+ `)||!s?"":`
103
+ `}${o}
104
+ `)}catch{}}function Pg(e){if(dP(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=Cg(e.worktreePath),t=pP(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`};xg(Ir.dirname(r),{recursive:!0});let n={mcpServers:{...t,[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Ze]:e.brokerSocketPath}}}};return uP(r,`${JSON.stringify(n,null,2)}
105
+ `,{mode:384}),mP(e.worktreePath),{ok:!0,configPath:r}}function ri(e){let r=Cg(e);if(!Kl(r))return!1;try{return wg(r,{force:!0}),wg(Ir.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as fP,existsSync as Hl,mkdirSync as gP,readFileSync as hP,rmSync as kP,symlinkSync as yP,writeFileSync as RP}from"node:fs";import{homedir as vP}from"node:os";import Or from"node:path";var bP="gemini-home";function Ag(e){return Or.join(e,bP)}function SP(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||vP()}function wP(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Or.join(Or.resolve(r),".gemini"):Or.join(SP(e),".gemini")}function xP(e){if(!Hl(e))return{};try{let r=JSON.parse(hP(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function _P(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function EP(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function CP(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Ze]:e},trust:!0}}function Ig(e){let r=e.env??process.env,t=wP(r),n=xP(Or.join(t,"settings.json"));if(_P(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=Ag(e.workerDir),s=Or.join(o,".gemini");gP(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...EP(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:CP(e.brokerSocketPath)}};return RP(Or.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
106
+ `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:PP(t,s)}}function PP(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Or.join(e,o);if(!Hl(s))continue;let i=Or.join(r,o);try{yP(s,i,"file"),n==="none"&&(n="symlink")}catch{try{fP(s,i),n="copy"}catch{}}}return n}function ti(e){let r=Ag(e);if(!Hl(r))return!1;try{return kP(r,{recursive:!0,force:!0}),!0}catch{return!1}}var IP=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Og(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function OP(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Yr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:OP(r);return{finalResult:r??t??"completed",summary:t}}function ni(e,r,t){if(Og(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Yr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(Qt(e.workerDir),Ns(e.workerDir),io(e.workerDir),ti(e.workerDir)),e.worktreePath&&(Zs(e.worktreePath),ri(e.worktreePath))}function TP(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 Tg(e,r,t={}){let n=TP(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=A(AP.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||Og(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!IP.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Pl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}ni(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}An();function oi(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 NP(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 MP(e){let r=In(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function DP(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 si(e){let{worker:r,status:t}=e;if(oi(t.finalResult)){let u=pe(r.heartbeatPath),d=yr(u),p=oi(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Yr(t)}}if(t.alive)return null;let n=st(r.stdoutPath);if(oi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Yr(u)}}let o=pe(r.heartbeatPath),s=yr(o);if(oi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Yr(u)}}let i=MP(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Yr(u)}}let a=NP(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Yr(u)}}let l=DP({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Yr(c)}}function ii(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}An();function ai(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 Ng(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 Mg(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Dg(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Lg(e){let r=Dg(e);if(!r)return[];let t=Dg(r.worktreeHandoff),n=Mg(t?.disposableArtifactsRemoved);return n.length?n:Mg(r.disposableArtifactsRemoved)}function Wg(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Ug(e,r){let t=ai(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Wg(o)));return t.every(o=>{let s=Wg(Ng(o));return n.has(s)})}function li(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Bg(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function WP(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 LP(e){let r=Bg(e.disposableArtifactsRemoved),t=Lg(e.finalResult);return[...new Set([...r,...t])]}function Fg(e){let r=Bg(e.changedFiles),t=ai(r),n=LP(e),o=t.length===0||Ug(r,n);return li(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`}:li(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`}:li(e.artifactBundlePath)||li(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}:WP(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`}}Xe();import{existsSync as tA,renameSync as nA}from"node:fs";import{mkdirSync as XP}from"node:fs";import QP from"node:path";import{DatabaseSync as ZP}from"node:sqlite";var $l=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"}},UP=[`CREATE TABLE IF NOT EXISTS local_meta (
107
+ key TEXT PRIMARY KEY,
108
+ value TEXT NOT NULL
109
+ ) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
110
+ process_key TEXT PRIMARY KEY,
111
+ pid INTEGER NOT NULL,
112
+ runtime_version TEXT NOT NULL,
113
+ node_version TEXT NOT NULL,
114
+ started_at TEXT NOT NULL,
115
+ registered_at TEXT NOT NULL
116
+ ) STRICT`,`CREATE TABLE IF NOT EXISTS admission_reservations (
117
+ reservation_key TEXT PRIMARY KEY,
118
+ owner TEXT NOT NULL,
119
+ expires_at TEXT NOT NULL,
120
+ created_at TEXT NOT NULL
121
+ ) STRICT`,`CREATE TABLE IF NOT EXISTS operation_receipts (
122
+ idempotency_key TEXT PRIMARY KEY,
123
+ operation TEXT NOT NULL,
124
+ result_json TEXT,
125
+ recorded_at TEXT NOT NULL
126
+ ) STRICT`,`CREATE TABLE IF NOT EXISTS recovery_checkpoints (
127
+ scope TEXT NOT NULL,
128
+ seq INTEGER NOT NULL,
129
+ payload_json TEXT NOT NULL,
130
+ created_at TEXT NOT NULL,
131
+ PRIMARY KEY (scope, seq)
132
+ ) STRICT`];function BP(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 Kg(e,r){let t=BP(e);if(t!==null&&t>1)throw new $l(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of UP)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 FP,realpathSync as KP,readFileSync as HP}from"node:fs";import Hg from"node:path";var $P=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),jP=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function VP(){try{return HP("/proc/self/mounts","utf8")}catch{return null}}function GP(e){let r=Hg.resolve(e);for(let t=0;t<64;t+=1){if(FP(r))try{return KP.native(r)}catch{return r}let n=Hg.dirname(r);if(n===r)return r;r=n}return r}function YP(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function qP(e){let r=[];for(let t of e.split(`
133
+ `)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:YP(n[1]),fsType:n[2]})}return r}function $g(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function JP(e,r){let t=null,n=$g(e);for(let o of r){let s=$g(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function jg(e,r){let n=(r?.resolveRealPath??GP)(e),o=(r?.mountsSource??VP)();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=JP(n,qP(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 jP.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}:$P.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 ci=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},eA="local-run-store.sqlite",rA=5e3,ao=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=jg(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new ci(t.reason);XP(r.directory,{recursive:!0,mode:448});let n=QP.join(r.directory,r.filename??eA),o=new ZP(n,{timeout:r.busyTimeoutMs??rA}),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 ci(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Kg(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
+ (process_key, pid, runtime_version, node_version, started_at, registered_at)
135
+ VALUES (?, ?, ?, ?, ?, ?)
136
+ ON CONFLICT(process_key) DO UPDATE SET
137
+ pid = excluded.pid,
138
+ runtime_version = excluded.runtime_version,
139
+ node_version = excluded.node_version,
140
+ started_at = excluded.started_at,
141
+ registered_at = excluded.registered_at`).run(r.processKey,r.pid,r.runtimeVersion,r.nodeVersion,r.startedAt,t)}),{...r,registeredAt:t}}getProcessIdentity(r){let t=this.db.prepare(`SELECT process_key, pid, runtime_version, node_version, started_at, registered_at
142
+ FROM process_identity WHERE process_key = ?`).get(r);return t?{processKey:t.process_key,pid:t.pid,runtimeVersion:t.runtime_version,nodeVersion:t.node_version,startedAt:t.started_at,registeredAt:t.registered_at}:null}tryReserveAdmission(r,t,n,o){let s=o??this.now(),i=new Date(s.getTime()+n).toISOString();return this.inImmediateTransaction(()=>{let a=this.db.prepare("SELECT reservation_key, owner, expires_at FROM admission_reservations WHERE reservation_key = ?").get(r);return a&&a.expires_at>s.toISOString()&&a.owner!==t?{acquired:!1,current:{key:r,owner:a.owner,expiresAt:a.expires_at}}:(this.db.prepare(`INSERT INTO admission_reservations (reservation_key, owner, expires_at, created_at)
143
+ VALUES (?, ?, ?, ?)
144
+ ON CONFLICT(reservation_key) DO UPDATE SET
145
+ owner = excluded.owner,
146
+ expires_at = excluded.expires_at`).run(r,t,i,s.toISOString()),{acquired:!0,current:{key:r,owner:t,expiresAt:i}})})}releaseAdmission(r,t){return this.inImmediateTransaction(()=>{let n=this.db.prepare("DELETE FROM admission_reservations WHERE reservation_key = ? AND owner = ?").run(r,t);return Number(n.changes)>0})}listAdmissionReservations(r){let t=Math.floor(r?.limit??200),n=Number.isFinite(t)?Math.max(1,Math.min(1e3,t)):200,o=[],s=[];if(r?.keyPrefix){let l=r.keyPrefix.replace(/[\\%_]/g,c=>`\\${c}`);o.push("reservation_key LIKE ? ESCAPE '\\'"),s.push(`${l}%`)}r?.includeExpired||(o.push("expires_at > ?"),s.push((r?.now??this.now()).toISOString()));let i=o.length?`WHERE ${o.join(" AND ")}`:"";return this.db.prepare(`SELECT reservation_key, owner, expires_at
147
+ FROM admission_reservations ${i}
148
+ ORDER BY expires_at ASC, reservation_key ASC
149
+ LIMIT ?`).all(...s,n).map(l=>({key:l.reservation_key,owner:l.owner,expiresAt:l.expires_at}))}recordOperationReceipt(r){return this.inImmediateTransaction(()=>{let t=this.db.prepare(`INSERT INTO operation_receipts (idempotency_key, operation, result_json, recorded_at)
150
+ VALUES (?, ?, ?, ?)
151
+ ON CONFLICT(idempotency_key) DO NOTHING`).run(r.idempotencyKey,r.operation,r.resultJson??null,this.now().toISOString());return{deduplicated:Number(t.changes)===0}})}listOperationReceipts(r){let t=Math.floor(r?.limit??200),n=Number.isFinite(t)?Math.max(1,Math.min(1e3,t)):200,o=[],s=[];if(r?.operation&&(o.push("operation = ?"),s.push(r.operation)),r?.keyPrefix){let l=r.keyPrefix.replace(/[\\%_]/g,c=>`\\${c}`);o.push("idempotency_key LIKE ? ESCAPE '\\'"),s.push(`${l}%`)}r?.recordedAfter&&(o.push("recorded_at > ?"),s.push(r.recordedAfter));let i=o.length?`WHERE ${o.join(" AND ")}`:"";return this.db.prepare(`SELECT idempotency_key, operation, result_json, recorded_at
152
+ FROM operation_receipts ${i}
153
+ ORDER BY recorded_at ASC, idempotency_key ASC
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
+ 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
+ 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 oA(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;tA(o)&&nA(o,`${t}${n}`)}return t}function Vg(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ao.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=oA(n,r);try{return{store:ao.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function sA(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function iA(){return aA.classifyOptions??sA()}var aA={};var lA=300*1e3,Tr=null,ui=0;function cA(e){ui+=1;try{let r=iA(),t=Vg({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:ui},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:ui},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function uA(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=lA}function z(e=Date.now()){let r=De();return(!Tr||Tr.status.harnessRoot!==r||uA(Tr,e))&&(pA(),Tr=cA(r)),Tr.store}function dA(){return Tr?Tr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:ui}}function Gg(){return z(),dA()}function pA(){try{Tr?.store?.close()}catch{}Tr=null}H();O();import{existsSync as mA,readFileSync as fA}from"node:fs";import{homedir as gA}from"node:os";import hA from"node:path";var kA=3e4,er=null;function Yg(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return hA.join(gA(),".kynver",`local-run-store-flags-${r}.json`)}function jl(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 qg(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:jl(t)}function Jg(e,r){try{let t=Yg(e),n={contractVersion:1,agentOsId:e,flags:jl(r),deliveredAt:new Date().toISOString()};ue(t,n),er={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function zg(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(er&&e-er.loadedAtMs<kA)return er.flags;try{let r=F().agentOsId?.trim();if(!r)return er={flags:{},loadedAtMs:e,file:null},er.flags;let t=Yg(r);if(!mA(t))return er={flags:{},loadedAtMs:e,file:t},er.flags;let n=JSON.parse(fA(t,"utf8")),o=n?.contractVersion===1?jl(n.flags):{};return er={flags:o,loadedAtMs:e,file:t},o}catch{return er={flags:{},loadedAtMs:e,file:null},er.flags}}var yA=[{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 RA(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 Nr(e=process.env){let r={},t={},n=[],o=zg();for(let s of yA){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=RA(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 Oe={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Mr(e=process.env){return Nr(e).flags.dispatchReceipts}function Vl(e){return Mr(e)!=="off"}function Gl(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function co(e,r,t){if(!Vl())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:Gl(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Oe.storeFailures+=1}}function Qg(e){co("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function di(e){co("spawned",e)}function Zt(e,r){co("released",e,{reasonClass:r})}function Zg(e){co("completion-sent",e)}function Yl(e,r){co("completion-acked",e,{outcome:r})}function eh(e){if(!Vl())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(Gl("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 Oe.completionReplaysObserved+=1,!0}}catch{Oe.storeFailures+=1}return!1}function ql(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function rh(e){if(Mr()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(Gl("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"?(Oe.completionReplaysShortCircuited+=1,!0):!1}catch{return Oe.storeFailures+=1,!1}}var vA=600*1e3;function th(e,r){if(Mr()!=="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{Oe.storeFailures+=1}}function nh(e,r){if(Mr()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??vA;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 Oe.storeFailures+=1,[]}}function lo(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var bA=900*1e3,Xg=10080*60*1e3,SA=1440*60*1e3,wA=500,xA=300;function oh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Vl())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??bA;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Xg).toISOString(),limit:wA}),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>=SA&&a.length+5<=xA&&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=lo(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=lo(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(Mr()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Xg}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Oe.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Oe.storeFailures+=1,r}}function sh(){return{"dispatchReceipts.storeFailures":Oe.storeFailures,"dispatchReceipts.completionReplaysObserved":Oe.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Oe.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Oe.agedReceiptsPruned}}var en=900*1e3,Xl="admission-shadow",Jl="worker-slot:",qr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},zl=!1;function ih(){zl=!1}function Dr(e=process.env){return Nr(e).flags.admission}function pi(e,r){return`${Jl}${e}:${r}`}function ah(e,r){if(Dr()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(pi(e,r),Xl,en)}catch{qr.storeFailures+=1}}function uo(e,r){if(Dr()==="off")return;let t=z();if(t)try{t.releaseAdmission(pi(e,r),Xl)}catch{qr.storeFailures+=1}}function lh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Dr()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>pi(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:Jl,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=!zl;zl=!0,!l&&i>0&&(qr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(pi(p.runId,p.workerName),Xl,en),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,qr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:Jl,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return qr.storeFailures+=1,r}}function ch(){return{"admission.storeFailures":qr.storeFailures,"admission.missingForLive":qr.missingForLive,"admission.deadSlotsReleased":qr.deadSlotsReleased}}var Ql="worker-slot-n:",mi=64;function uh(e){return`${Ql}${e}`}function fi(e,r){return`${e}:${r}`}var Jr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function dh(e){if(Dr()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(mi,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Jr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=fi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(uh(o),n,en).acquired)return{admitted:!0,slot:o};return Jr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Jr.enforceStoreFailures+=1,{admitted:!0}}}function zr(e,r){if(Dr()==="off")return;let t=z();if(t)try{let n=fi(e,r),o=t.listAdmissionReservations({keyPrefix:Ql,limit:mi});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Jr.enforceStoreFailures+=1}}function ph(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Dr()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>fi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:Ql,limit:mi}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,en),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=fi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<mi;d+=1)if(t.tryReserveAdmission(uh(d),u,en).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Jr.enforceStoreFailures+=1,r}}function mh(){return{"admission.enforceStoreFailures":Jr.enforceStoreFailures,"admission.refusedSlotsExhausted":Jr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Jr.admissionsRefusedDiskBackstop}}O();O();var _A=/^[a-z0-9][a-z0-9._-]{0,127}$/i,EA=/^[a-z0-9][a-z0-9._-]{0,63}$/i,fh=new Set(["undefined","null"]),gh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function CA(e){let r=e.trim();if(!_A.test(r))throw new Error(`invalid run id: ${e}`);return r}function PA(e){let r=e.trim();if(!EA.test(r))throw new Error(`invalid worker name: ${e}`);return r}function hh(e){return typeof e=="string"?e.trim():""}function Zl(e){let r=hh(e.run),t=hh(e.name);return(!r||fh.has(r))&&Ge(`missing --run RUN_ID (${gh})`),(!t||fh.has(t))&&Ge(`missing --name WORKER_NAME (${gh})`),{runId:CA(r),workerName:PA(t)}}import{existsSync as AA,mkdirSync as IA,readFileSync as OA,writeFileSync as TA}from"node:fs";import{homedir as NA}from"node:os";import xh from"node:path";var xe={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function po(e){return Nr(process.env).flags[e]}var iG=1800*1e3;function ec(e){return`mesh-cron-lease:${e}`}function kh(e,r){if(po("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(ec(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:ec(e),payloadJson:JSON.stringify(r)})}catch{xe.meshStoreFailures+=1}}function yh(e,r){let t=po("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(ec(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 gi(e){return`quota-cooldown:${e}`}var Rh="quota-preflight";function vh(e,r){if(po("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(gi(e),Rh,r)}catch{xe.quotaStoreFailures+=1}}function bh(e){if(po("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(gi(e),Rh)}catch{xe.quotaStoreFailures+=1}}function Sh(e,r){let t=po("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:gi(e),limit:50}).find(i=>i.key===gi(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 wh(){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 MA=/\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,DA=30,WA=5,LA=240;function UA(e){let r=e?.trim();return!!(r&&MA.test(r))}function BA(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function rc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(LA,Math.max(WA,e)):DA}function _h(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||xh.join(NA(),".kynver","provider-quota-cooldowns.json")}function mo(e){return(e??"").trim().toLowerCase()}function tc(){let e=_h();if(!AA(e))return{};try{let r=JSON.parse(OA(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[mo(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function nc(e){let r=_h();try{IA(xh.dirname(r),{recursive:!0}),TA(r,`${JSON.stringify(e,null,2)}
158
+ `,"utf8")}catch{}}function FA(e,r,t=Date.now()){let n=mo(e);if(!n)return;let o=tc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},nc(o),vh(n,rc()*6e4)}function KA(e){let r=mo(e);if(!r)return!1;bh(r);let t=tc();return r in t?(delete t[r],nc(t),!0):!1}function Eh(e,r=Date.now()){if(!BA())return{ok:!0};let t=mo(e);if(!t)return{ok:!0};let n=tc(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+rc()*6e4>r),i=Sh(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+rc()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],nc(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 HA(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Ch(e){let r=mo(e.provider);if(!r)return"none";let t=HA(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?UA(t)?(FA(r,t,e.nowMs??Date.now()),"recorded"):KA(r)?"cleared":"none":"none"}function Ph(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}}async function Ah(e,r,t){let n=await fetch(e,{method:"POST",headers:Bn(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 $A(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Ih(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function fo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function jA(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function VA(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 Th(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function GA(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function rn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function YA(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function oc(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function qA(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function ho(e){let{runId:r,workerName:t}=Zl(e),n=jt(r,t),o=q(n.runId),s=J(n,oc(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&&ro(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Al(n)&&YA(n),!s.finalResult&&s.alive===!1){let _=si({worker:n,status:s});_&&ii(n,_)&&(L(n.runId,n),n=jt(r,t),s=J(n,oc(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Wl({worker:n,run:o,status:s});if(!_.ok)return rn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,oc(o)),s=qA(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=Fg({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return rn(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{Ch({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 js({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=jt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=Ph({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b={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(eh(g),rh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return qs(n,n.runId,_),ni(n,s,{source:"harness-completion"}),rn(n,void 0),uo(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}}:{}}}Zg(g)}let h=await Ah(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await Fp(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Ah(f,m,b))}if(h.ok){let _=Jf(h.parsed);if(!zf(_)){let he=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;rn(n,he);let je={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return qs(n,n.runId,je),g&&Yl(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:he,completionBlocked:!0}}rn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};qs(n,n.runId,$),ni(n,s,{source:"harness-completion"}),g&&Yl(g,"acknowledged"),uo(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=$A(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return rn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function Nh(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=Dt({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=Th(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Ih(n.completionResponse),m=Ih(p?.task),f=fo(p?.outcome),y=fo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=fo(m?.prUrl)??fo(p?.prUrl),g=fo(n.completionReportedAt),h=jA({finished:Se(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=VA({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:Se(o)}),E=GA({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 JA(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&&!Th(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function zA(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 go(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 Oh(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 XA(e){let r=e.filter(Oh),t=e.filter(n=>{if(Oh(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 Mh(e,r,t){let n={runId:e.id,name:e.name,status:fa(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:go(r,"status"),attentionCounts:go(r,"attention"),lifecycleCounts:go(r,"lifecycleStage")},n.controller=XA(r)),n}function QA(e){return e.status==="done"&&e.attention==="done"}function sc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=A(hi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?Nh({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Mh(r,n,!1);return ue(hi.join(N(r.id),"last-board.json"),o),o}function ic(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=A(hi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?JA(a)?zA(i,a):Nh({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!QA(i)),s=Mh(r,o,!0);return s.status=fa(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:go(n,"status"),allAttentionCounts:go(n,"attention")},ue(hi.join(N(r.id),"last-board-compact.json"),s),s}async function Dh(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=sc(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();U();O();var i1=360*60*1e3;function Lh(e){let r=e.nodeExecutable??process.execPath,t=Ds({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!eI(n))return;let o=tI.join(e.workerDir,"auto-complete.log"),s;try{s=rI(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=ZA(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&Wh(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Wh(s)}catch{}return}}de();function Uh(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)}}Me();us();H();import cI from"node:net";import{chmodSync as uI,unlinkSync as dI}from"node:fs";import{createHash as nI}from"node:crypto";import{chmodSync as oI,mkdirSync as sI}from"node:fs";import Bh from"node:os";import iI from"node:path";var aI=100,lI="\\\\.\\pipe\\";function Fh(e,r){return nI("sha256").update(e).digest("hex").slice(0,r)}function ac(e){let r=e.platform??process.platform,t=Fh(e.agentOsId,12),n=Fh(e.workerKey,16);if(r==="win32")return{socketPath:`${lI}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=iI.posix,s=e.homeDir??Bh.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=aI)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Bh.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function lc(e){e.socketDir&&(sI(e.socketDir,{recursive:!0,mode:448}),oI(e.socketDir,448))}var ko=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=Gn(r.capabilities),this.server=cI.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(lc(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{uI(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(Xt).map(r=>Xn[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{dI(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(`
159
+ `);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
160
+ `)}})}write(r,t){if(!r.destroyed)try{r.write(ml(t))}catch{}}async handleLine(r,t){let n=fl(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(!Xt(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 Ws({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 jh={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 cc(){return jh}var fI=7200*1e3;async function Vh(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||Er,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Ks({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:F().workerProvider}),s=Gf(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=tn.join(N(e.id),"workers",n);mI(l,{recursive:!0});let c=tn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(pI(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Uh(e.repo,c,u);else{let T=Ff({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,Ae(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=tn.join(l,"stdout.jsonl"),m=tn.join(l,"stderr.log"),f=tn.join(l,"heartbeat.jsonl"),y=jf({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=zs({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&gl(s.name)&&Yn()){let T=Fa();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=Ym(s.name);if(_&&K&&Yn()){let T=Fa();if(T&&r.agentOsId&&r.taskId){let te=ac({agentOsId:String(r.agentOsId),workerKey:l}),B=await ko.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+fI,workerPid:process.pid,identity:cc(),onRefusal:M=>console.error(`[supervisor] ${n}: worker tools refused a call (${M})`)});if(Fl(l,B),s.name==="codex"){let M=bg({workerDir:l,brokerSocketPath:te.socketPath});if(M.ok){let D=Sg(M.codexHome,yl());D.ok?(E=M.codexHome,h=E):(io(l),await Vr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${D.detail}); spawning with the normal environment`))}else await Vr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${M.detail}`)}else if(s.name==="cursor"){let M=Rg({worktreePath:c,brokerSocketPath:te.socketPath});M.ok?h=M.configPath:(await Vr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${M.detail}`))}else if(s.name==="gemini"&&Bs(Us())==="antigravity"){let M=Pg({worktreePath:c,brokerSocketPath:te.socketPath});M.ok?h=M.configPath:(await Vr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${M.detail}`))}else if(s.name==="gemini"){let M=Ig({workerDir:l,brokerSocketPath:te.socketPath});M.ok?(S=M.geminiCliHome,h=S):(await Vr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${M.detail}`))}else h=Jm({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${B.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?Nd(Md(e.id,String(r.taskId),n)):null,C;try{C=Dd($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,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:Gm(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Ns(l),Zs(c),io(l),ti(l),ri(c),Qt(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=_f(C.model,i,s.defaultModel),he=F(),je=hr(process.env,he),pr=Be().runnerId,Ur=cs({boxKind:je.boxKind,config:he,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:je.boxKind,boxId:Ur,runtimeId:pr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),Bl(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:tn.join(l,"worker.json")}},e.status="running",Ae(e),j.agentOsId&&j.taskId){let T;try{T=Lh({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let B=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=B,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),Uf(e.id,j,te)}}return j}H();Dn();function gI(e,r){let t=Ht(r)?.trim();return t||ze("KYNVER_RUNNER_TOKEN",e)||ze("OPENCLAW_RUNNER_TOKEN",e)||null}function hI(e){let r=wr()?.trim();return r||ze("KYNVER_API_KEY",e)||ze("KYNVER_RUNTIME_SECRET",e)||ze("KYNVER_CRON_SECRET",e)||ze("OPENCLAW_CRON_SECRET",e)||null}async function Gh(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=gI(t,e.agentOsId),l=hI(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}`}}}Sn();function kI(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?vn(t)??null:null}function yI(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function RI(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Yh(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=kI(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=yI(t,o),l=RI(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 Jh}from"node:fs";import{homedir as vI,tmpdir as WY}from"node:os";import ki from"node:path";function zh(){let e=process.env.KYNVER_STATE_ROOT;return e?ki.resolve(e):ki.join(vI(),".kynver","state")}function yi(){return ki.join(zh(),"plan-outbox")}function bI(){return ki.join(zh(),"plan-outbox-archive")}function Xh(){let e=yi(),r=bI();return Jh(e,{recursive:!0}),Jh(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var KY=600*1e3,yo={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Qh(){return{"planOutbox.storeFailures":yo.storeFailures,"planOutbox.corruptItemsSeen":yo.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":yo.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":yo.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":yo.halfArchivesCompleted}}import{existsSync as xI,readFileSync as _I,renameSync as VY,readdirSync as GY,rmSync as YY,writeFileSync as qY,unlinkSync as JY}from"node:fs";import Zh from"node:path";function ek(e){if(!xI(e))return null;try{return JSON.parse(_I(e,"utf8"))}catch{return null}}function Ri(e){let{outboxDir:r}=Xh();return{jsonPath:Zh.join(r,`${e.id}.json`),bodyPath:Zh.join(r,e.bodyPath)}}import OI from"node:path";function pc(e){let r=OI.join(yi(),`${e}.json`);return ek(r)}function mc(e){let r=Ri(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(`
161
+ `)}function fc(e){let r=e.metadata&&typeof e.metadata=="object"?e.metadata:null,t=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(r&&typeof r.planPersistenceOutboxId=="string"?r.planPersistenceOutboxId:void 0);return t?{outboxId:t,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:r&&typeof r.planPersistenceOutboxPath=="string"?r.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:r&&typeof r.planPersistenceBodyPath=="string"?r.planPersistenceBodyPath:void 0}:null}U();function gc(e){return e?.trim()?e.trim():null}function rk(e,r){let t=gc(e.boxKind),n=gc(e.runnerId),o=gc(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,Ae(e),{ok:!0,stamped:!0}):{ok:!0}}H();Wn();function tk(e=process.env){return Kt(F(),e,{requireExplicitBoxKind:!0})}function nk(e){return[...e.errors,...e.warnings].join("; ")}async function Ro(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 nn(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 ok(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 yk}from"node:child_process";var sk=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function Xr(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function ik(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 ak(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=Xr(o),i=t.get(s);(!i||ik(o)>=ik(i))&&t.set(s,o)}return[...t.values()]}function TI(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 lk(e){let r=ak(e),t=[],n=[],o=[];for(let s of r){if(TI(s)){o.push(Xr(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&&sk.has(i))){if(i){n.push(`${Xr(s)}=${i}`);continue}if(!(l&&sk.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${Xr(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${Xr(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${Xr(s)}=${a}`);continue}t.push(`${Xr(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function ck(e){return ak(e).some(t=>{let n=Xr(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 NI=new Set(["CLEAN","HAS_HOOKS"]);function uk(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!NI.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as MI}from"node:child_process";function dk(){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=MI("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 DI,randomUUID as WI}from"node:crypto";import{closeSync as pk,fsyncSync as mk,mkdirSync as LI,openSync as fk,realpathSync as UI,writeFileSync as BI}from"node:fs";import hc from"node:path";function hk(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 gk(e,r,t,n){LI(e,{recursive:!0,mode:448});let o=UI(e),s=fk(hc.join(o,`${r}.${t}.json`),"wx",384);try{BI(s,JSON.stringify({...n,phase:t},null,2)+`
162
+ `),mk(s)}finally{pk(s)}for(let i=o;;i=hc.dirname(i)){let a=fk(i,"r");try{mk(a)}catch(l){if(!FI(l))throw l}finally{pk(a)}if(i===hc.dirname(i))break}}function FI(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function kk(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:DI("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:WI(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return gk(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return gk(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function yc(e){return e?.trim()?["--repo",e.trim()]:[]}function Rk(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function vk(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 KI=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,HI=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,$I=/^docs[(:]/i,jI=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function VI(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=$I.test(r)||jI.test(t),o=KI.test(t),s=HI.test(t);return n||o||s||e.vercelCheckSuccess===!0}function GI(e){if(!VI({title:e.title,body:e.body,vercelCheckSuccess:ck(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 YI(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=lk(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=uk(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function qI(e){YI(e),GI(e)}function JI(e){try{return qI(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function zI(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 XI(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 QI(e,r){if(!r?.trim())return;let t=yk("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}`)&&yk("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function bk(e){let r=e.cwd??process.cwd(),t=e.exec??Qs,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(!nn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=dk();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=vk(t,r,["pr","view",n,...yc(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=JI(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)||!hk(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(!nn(u)||!ok(o,u))return s();let d=kk(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...yc(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=kc(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=kc(t,r,c,e.repo);if(f||(f=kc(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=XI(t,r,e.repo);zI(t,r,k,a.headRefName),QI(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 kc(e,r,t,n){try{let o=vk(e,r,["pr","view",t,...yc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function Sk(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return bk({prUrl:n,cwd:e.cwd,repo:Rk(n),exec:e.exec,operation:e.operation,acceptedReview:nn(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&&nn(s.acceptedReview)?s.acceptedReview:null}})}H();async function wk(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 xk(){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(`
163
+ `)}var ZI="dispatch_start_readback_failed:";function ht(e){return`${ZI} ${e.trim()}`}function eO(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 rO(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:ht("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:ht(`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:ht(`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:ht(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=eO(o);return a?{ok:!1,error:ht(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:ht(`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:ht("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function _k(e){let r=await $s({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return rO({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();U();function Ek(e,r,t){r.pid&&Y(r.pid)&&(Ne(r.pid,"SIGTERM"),Y(r.pid)&&Ne(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return L(e,n),n}U();function Ck(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 Pk(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 Cl=3600*1e3;function Ak(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Ik(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function tO(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=oO(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 nO(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function oO(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 sO(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("",xk());let n=fc(e);if(n?.outboxId){let o=pc(n.outboxId);o?t.push("",mc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
164
+ `)}function iO(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 vi(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ke=function(){return B.filter(v=>v.started).length},ye=function(v,R){Fn({runId:l.id,agentOsId:u,phase:v,startedCount:ke(),outcomeCount:B.length,cappedStarts:C,...R})},mr=function(){return B.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},gu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ke,n=ye,o=mr,s=gu;let i=tk();if(!i.ok||!i.identity){let v=nk(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(gr(String(e.run||""),"--run"))),c=rk(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(gr(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=Be({runId:l.id}),k=eo(l.id,y.runnerId),b=tm(),g=b?om(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?Kr({diskPath:String(e.diskPath)}):Kr({diskPath:l.repo}),E=await mm({runId:l.id,agentOsId:u,args:e}),S=iO(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=Ss(l.id),he=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,je=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Cl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:sc(l.id),...e.lane?{lane:pm(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(P=>P.trim()).filter(Boolean)}:{}}),pr=im(),Ur=async v=>{let R=b&&g?nm(g):void 0,P=await X(he,p,je(v,R),{agentOsId:u,baseUrl:d,timeoutMs:pr})??{ok:!1,status:0,response:null},W=P.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:P,result:W?.result}};f||Fn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:pr});let j=await Ur(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=qa(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&&Fn({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=Ak(T),R=Ik(T),P={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,...P};console.log(JSON.stringify(P,null,2));return}let te=Af(),B=[],M=[],D=Number(T.inspected)||0,ie=!1;async function V(v,R,P){let W=await Ro({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&Zt({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ql(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...P};return B.push(G),ye("outcome",{lastOutcome:G}),!1}async function Mv(v){let R=v.task,P=String(R.id);if(_&&!S.has(P))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 Sk({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:P,runId:l.id,workerName:`land-pr-${P}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),Ve=await wk({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return Ve.ok?(B.push({taskId:P,started:!0,landPr:!0,outcome:G.outcome,completionStatus:Ve.status}),!0):V(R,`land_pr completion POST failed (HTTP ${Ve.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function Dv(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",P=await Ro({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&Zt({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ql(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:P.released,releaseResponse:P.releaseResponse};return B.push(W),ye("outcome",{lastOutcome:W}),!1}async function Wv(v){let R=v.task,P=tO(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=nO(R.personaSlug);if(G&&(!P?.personaInjectionReady||!P.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!P?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(Mf(l.id,W))return Dv(R);let Ve=Number(R.attempt)||1;if(Ve>te.maxTaskAttempts)return V(R,`task attempt ${Ve} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let rt=R.leaseToken?String(R.leaseToken).trim():"";if(!rt)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let tt=x(`t-${R.id}-a${R.attempt}`),fr=Ks({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:F().workerProvider,task:fm(R)});Qg({taskId:W,leaseToken:rt,runId:l.id,workerName:tt,provider:fr.provider??null});let Bi=Cf({task:R,routing:fr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Bi.ok)return V(R,Bi.error??"model_routing_mismatch",{modelRoutingGuard:Bi});if(Ck(R)){let Ee=await Pk({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ee&&Ee.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ee.reason??Ee.outcome??"stale PR head"}`,{headReconcile:Ee});if(Ee?.activeReviewTaskId&&Ee.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ee.activeReviewTaskId}`,{headReconcile:Ee})}let Po=Eh(fr.provider);if(!Po.ok)return V(R,`provider_quota_exhausted: ${Po.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Po.provider,retryAt:Po.retryAtIso}});try{let Ee=R.planId?String(R.planId):void 0,Ao=Hf({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}),bu=dh({runId:l.id,workerName:tt,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:ga()});if(!bu.admitted)return V(R,`admission_refused: ${bu.reason}`,{nonFatal:!0});let Io=P?.workerMcpToken??null;if(Io&&Yn()){let Ct=Yh({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Ct.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Ct.code}: ${Ct.detail}) \u2014 spawning without tools`),Io=null;else{let Fi=await Gh(Ct.context);Fi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Fi.error??`HTTP ${Fi.httpStatus}`}) \u2014 spawning without tools`),Io=null)}}Lf(l.id,String(R.id),{except:tt});let tr=await Vh(l,{name:tt,task:sO(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Ct=>Ct.trim()).filter(Boolean):[],model:fr.model,provider:fr.provider,routingRule:fr.rule,requestedModel:fr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ee,branch:Ao?.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:Ao?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Ao?.targetPrUrl,repairTargetBranch:Ao?.targetPrBranch??void 0,instructionPolicyMarkdown:P?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:P?.instructionPolicyFingerprint??null,instructionPolicyEvidence:P?.instructionPolicyEvidence??null,memoryQualityCapture:P?.memoryQualityCapture??null,memoryQualityPromptMarkdown:P?.memoryQualityPromptMarkdown??null,personaMarkdown:P?.personaMarkdown??null,personaSlug:P?.personaSlug??G,personaEvidence:P?.personaEvidence??null,contextEnvelopeMarkdown:P?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:P?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:P?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:P?.runtimeEnvelopeEvidence??null,workerMcpToken:Io,workerMcpCapabilities:P?.workerMcpCapabilities??null,workerMcpExpiresAt:P?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:rt,dispatched:!0,executionMode:ws(R)}),Oo=await _k({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:rt,worker:tr,baseUrl:d,secret:p});if(!Oo.ok)return Ek(l.id,tr,Oo.error??"dispatch_start_readback_failed"),zr(l.id,tt),V(R,Oo.error??"dispatch_start_readback_failed",{readback:Oo.detail??null});tr.leaseToken!==rt&&(tr.leaseToken=rt,tr.leaseOwner=k,L(l.id,tr)),di({taskId:W,leaseToken:rt}),ah(l.id,tt);let Su={taskId:R.id,started:!0,worker:tr.name,pid:tr.pid,branch:tr.branch,model:tr.model,provider:fr.provider,routingRule:fr.rule,instructionPolicyFingerprint:P?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(P?.instructionPolicyEvidence?.ruleSlugs)?P.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:P?.personaSlug??G,personaOperatingRuleCount:P?.personaEvidence?.operatingRuleCount??null};return B.push(Su),ye("worker_started",{lastOutcome:Su}),P?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${P.instructionPolicyFingerprint}`),P?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${P.personaSlug}`),P?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${P.contextEnvelopeEvidence?.anchorTaskId??W}`),P?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${P.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ee){return zr(l.id,tt),V(R,Ee.message)}}let Ui=new Set;for(let v of nh(l.id))Ui.add(v);async function hu(v){let R=v.task,P=String(R.id);if(Ui.has(P))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?sm({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}:{}}):gu(v)?await Mv(v):await Wv(v);return G||(Ui.add(P),th(P,l.id)),G}for(let v of T.started)await hu(v);if(M.push(...T.skipped??[]),_)for(let v of M){let R=String(v.task.id);S.has(R)&&B.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&B.length<C;){if(mr()){let P={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};B.push(P),ye("circuit_breaker",{lastOutcome:P});break}let v=await Ur(1);if(!v.dispatch.ok||!v.result){let P=am(v.dispatch.response),W=ke();ie=P&&W>0;let G=qa(v.dispatch.response),Ve={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}:{}};B.push(Ve),ye("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:Ve});break}D+=Number(v.result.inspected)||0,M.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let P of R){if(B.length>=C)break;await hu(P)}}let Co=B.filter(v=>v.started).length,Br=Ak(T),Et=Ik(T),ku=Co===0&&(Br?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if(ku&&Br?.summary){let v=Br.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??Br.overAttemptIdleRecovery,P=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=Et?`; dispatch_skip_drain scanned=${Et.scanned??0} advanced=${Et.advanced??0}`:"",G=Br.progressionReport?.summary?`; ${Br.progressionReport.summary}`:"",Ve=Et?.prLifecycleAttempt?.summary?`; ${Et.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Br.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${P}${W}${G}${Ve}`)}let yu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Co,capacityIdle:ku,admissionExhaustion:Br,dispatchSkipDrain:Et,outcomes:B,skipped:M.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:D,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:pr},Ru=v=>!v.started&&v.nonFatal!==!0,Lv=B.some(Ru),vu=ie&&Co>0?!0:!Lv;if(Fn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Co,ok:vu}),r)return{ok:vu,...yu};console.log(JSON.stringify(yu,null,2)),B.some(Ru)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var aO=1;function on(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 lO(e){let{maxStarts:r,...t}=e;return t}async function Rc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=lO(e);if(t.targetTaskId||t.targetTaskIds){let u=await vi({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:on(u)}}let n=Math.min(r,aO),o=Math.max(0,r-n),s=await vi({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=on(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await vi({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=on(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Ok(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 cO(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function vo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function uO(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Tk(e,r){let t=cO(r),n=vo(t?.recommendedMaxStarts),o=vo(t?.actionableReady),s=vo(t?.queuedTasks),i=vo(t?.boardAdvancedThisTick)??0,a=vo(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=uO("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 nT from"node:path";U();_n();me();O();import dO from"node:path";var pO=new Set(["running","dispatching","pending","queued","needs_attention"]),kt=new Set(["completed","failed","cancelled","done"]);function yt(e){let r=nr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=A(dO.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),np(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function bo(){let e=[];for(let r of Je()){if(!pO.has(r.status))continue;let t=yt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ae(r),e.push({runId:r.id,from:n,to:t})}return e}U();_n();me();O();ot();An();import{existsSync as et,lstatSync as LO,readdirSync as UO,readlinkSync as BO,renameSync as Ac,unlinkSync as FO}from"node:fs";import cr from"node:path";Xe();O();import rr from"node:path";var mO=`${rr.sep}runs${rr.sep}runs${rr.sep}`;function bi(e){return e.includes(mO)}function vc(e,r){return rr.join(Pe(ge(e)),x(r))}function Qr(e,r,t){return rr.join(vc(e,r),"workers",x(t))}function Nk(e,r,t){let n=ge(e);return rr.join(n,"runs","runs",x(r),"workers",x(t))}function bc(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Rt(e){return{workerJsonPath:rr.join(e,"worker.json"),stdoutPath:rr.join(e,"stdout.jsonl"),stderrPath:rr.join(e,"stderr.log"),heartbeatPath:rr.join(e,"heartbeat.jsonl"),lastStatusPath:rr.join(e,"last-status.json")}}function Mk(e){let r=Rt(Qr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!bi(e.statusPath)?e.statusPath:r}import{existsSync as Zr,mkdirSync as AO,readdirSync as Fk,renameSync as IO,statSync as xc}from"node:fs";import se from"node:path";H();Rn();Fr();qi();import fO from"node:path";function gO(e){return fO.resolve(Ye(e.trim()))}function Sc(e,r,t){let n=e?.trim();return n?{repo:gO(n),source:r,persistedInConfig:t}:null}function hO(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Dk(e={}){let r=e.env??process.env,t=e.config??F(),n=Sc(t.defaultRepo,"config",!0);if(n)return n;let o=Sc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Sc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||hO(Uo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();ot();Xe();U();O();H();import{existsSync as kO,readFileSync as yO,readdirSync as RO,statSync as vO,writeFileSync as bO}from"node:fs";import SO from"node:path";var Te="<redacted>",wc=`[^\\s"'\\\\,}\\]]`,wO=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${wc}+`,"gi"),Te],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${wc}+`,"gi"),Te],[/\bkynver_u_[A-Za-z0-9_-]+/g,Te],[/\bkyn_[A-Za-z0-9]{12,}/g,Te],[/\bsk-ant-[A-Za-z0-9_-]+/g,Te],[/\bsk-[A-Za-z0-9_-]{8,}/g,Te],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,Te],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,Te],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,Te],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${Te}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${wc}+`,"g"),`$1${Te}`]],xO=12,_O=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,EO=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,CO=256*1024*1024;function PO(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=xO))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(Te));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(Te))}for(let[o,s]of wO)t=t.replace(o,s);return t}function Wk(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&_O.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Lk(e,r=0){if(r>3||!kO(e))return[];let t=[];for(let n of RO(e,{withFileTypes:!0})){let o=SO.join(e,n.name);n.isDirectory()?t.push(...Lk(o,r+1)):n.isFile()&&EO.test(n.name)&&t.push(o)}return t}function Uk(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Lk(e)}catch{return t}for(let o of n)try{if(vO(o).size>CO){t.failed.push(o);continue}let s=yO(o,"utf8"),i=PO(s,r);if(i===s){t.clean+=1;continue}bO(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var So=900*1e3,OO=3600*1e3;function Kk(e,r){let t=se.resolve(e),n=se.resolve(Pe(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function _c(e){if(!Zr(e))return[];try{return Fk(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Ec(e){let r=se.join(e,"workers");if(!Zr(r))return[];try{return Fk(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Hk(e){return se.join(e,"archived-workers")}function TO(e,r){let t=se.join(Hk(e),x(r));return Zr(t)?`${t}-${Date.now()}`:t}function Bk(e,r,t){if(!Zr(e))return!1;try{let n=r-xc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function $k(e,r=Date.now(),t=So){if(!Zr(e))return!1;let n=Rt(e),o=A(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=pe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Bk(n.stdoutPath,r,t)||Bk(n.heartbeatPath,r,t))}function NO(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-xc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function MO(e,r,t,n){if($k(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=NO(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 sn(e,r=Date.now(),t=So){for(let n of Ec(e))if($k(se.join(e,"workers",n),r,t))return!0;return!1}function DO(){let r=Dk()?.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 WO(e,r){let t=se.join(Pe(e),x(r));if(!Zr(t))return null;let n=Ec(t);if(n.length===0)return null;let o;try{o=xc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Qr(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=sn(t);return{id:r,name:r,...DO(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Cc(e){let r=ge(e??De()),t=Pe(r),n=[];for(let o of _c(t)){let s=se.join(t,o,"run.json");if(Zr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=WO(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ae(i),n.push({runId:o,action:"repaired_run_json",reason:sn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Pc(e,r={}){let t=ge(e??De()),n=Pe(t),o=r.now??Date.now(),s=r.archiveAgeMs??OO,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Wk(process.env,[wr,()=>Ht()])))();Cc(t);for(let c of _c(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=A(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...Ec(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=A(b,void 0);if(!g){let E=se.join(Hk(u),x(y));if(Zr(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=MO(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=TO(u,y);AO(se.dirname(w),{recursive:!0}),IO(k,w),Uk(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&&Ae(p)}return{workers:i}}function jk(e,r=Date.now()){let t=new Set,n=Pe(e);for(let o of _c(n)){let s=se.join(n,o);sn(s,r)&&t.add(`${e}\0${o}`)}return t}U();O();function KO(e,r){let t=vc(e,r),n;try{n=LO(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=cr.resolve(cr.dirname(t),BO(t));if(sn(o)||sn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Ac(o,s),FO(t),Ac(s,t),o}function HO(e){let r=[];for(let t of bc()){let n=cr.join(e.fromDir,t),o=cr.join(e.toDir,t);!et(n)||et(o)||(Ac(n,o),r.push(t))}return r}function Vk(e,r){let t=Rt(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function $O(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 jO(e){let r=Rt(e.canonicalDir),t=A(r.lastStatusPath,void 0),n=et(r.stdoutPath),o=et(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?st(r.stdoutPath):{finalResult:null},a=o?pe(r.heartbeatPath):pe(""),l=yr(a),c=$O({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:cr.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}),Vk(u,e.canonicalDir),u}function VO(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Qr(r,e.id,o),a=cr.join(i,"worker.json");(bi(s.workerDir)||bi(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ae(e)),t}function GO(e){let r=[],t=Qr(e.harnessRoot,e.run.id,e.workerName),n=Nk(e.harnessRoot,e.run.id,e.workerName),o=Rt(t),s=HO({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=Mk({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=A(i,void 0);if(!a&&et(o.workerJsonPath)&&(a=A(o.workerJsonPath,void 0)),!a){let l=jO({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=et(t),u=bc().some(d=>et(cr.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:cr.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 Vk(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 YO(e,r){let t=cr.join(N(e.id),"workers");if(!et(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of UO(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Gk(){let{harnessRoot:e}=le(),r=Cc(e),t=[];for(let n of Je()){let o=KO(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),VO(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 YO(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Qr(e,n.id,i),statusPath:cr.join(Qr(e,n.id,i),"worker.json")}},Ae(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...GO({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}ot();Zo();me();U();_n();O();import{execFileSync as Yk}from"node:child_process";import qk from"node:path";function Ic(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function qO(e){let r=Ic(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function JO(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function zO(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 XO(e){let r=null;if(typeof e=="string"?r=Lt(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=Ic(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 QO(e){try{let n=Yk("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=Yk("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:Ic(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 ZO(e){let r=pe(e.heartbeatPath);return e.completionSnapshot?.finalResult??yr(r)}function eT(e){let r=new Map,t=N(e.id);for(let n of nr(e)){let o=A(qk.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of XO(ZO(o))){let i=qO(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function rT(e,r){let t=pe(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,JO(r)].filter(Boolean).join(`
165
+ `);return zO(n)}function tT(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Oc(e={}){let r=e.lookupPr??QO,t=[],n=new Map;for(let o of Je()){let s=eT(o),i=N(o.id);for(let a of nr(o)){let l=qk.join(i,"workers",x(a),"worker.json"),c=A(l,void 0);if(!c||!tT(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 rT(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 oT=900*1e3;function sT(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Jk(e,r){let t=si({worker:e,status:r}),n=t?ii(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 iT(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 zk(){let e=Gk();if(sT()){let s=Oc(),i=Pc();return{workers:[],finalizedRuns:bo(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Je())for(let i of nr(s)){let a=nT.join(N(s.id),"workers",x(i),"worker.json"),l=A(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=Jk(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=Jk(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,iT(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>oT,m=Number.isFinite(d)&&t-d>ma;if(p&&m){Ne(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=Oc(),o=Pc();return{workers:r,finalizedRuns:bo(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Ft();U();import fT from"node:path";import{readdirSync as aT,readFileSync as lT}from"node:fs";var cT="dispatch:claim:",uT=900*1e3,dT=10080*60*1e3,pT=200,vt={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function mT(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=aT("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(lT(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Xk(e){let r=Mr(),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??uT,i=e.findOrphanPid??mT,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-dT).toISOString(),limit:pT})}catch{return vt.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(cT.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=lo(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=lo(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})){di({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){vt.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?(Zt({taskId:d,leaseToken:p},"restart_recovery"),h&&(uo(g,h),zr(g,h)),vt.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}):(Zt({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{vt.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function Qk(){return{"dispatchReceipts.recoveredStrandedClaims":vt.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":vt.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":vt.recoveryStoreFailures}}var Zk=!1;async function ey(e){if(Zk||Mr()!=="enforce")return null;Zk=!0;try{let r=Be().runnerId,t=await Xk({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>fT.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Ro({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:eo(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();Me();us();import PT from"node:os";Ra();import{mkdirSync as RT,readFileSync as vT,renameSync as bT,writeFileSync as ST}from"node:fs";import{homedir as wT}from"node:os";import Si from"node:path";import{existsSync as gT,readFileSync as hT}from"node:fs";import{dirname as Tc,join as ty}from"node:path";import{fileURLToPath as ry}from"node:url";function kT(e){let r=Tc(ry(e));for(let t=0;t<6;t+=1){if(gT(ty(r,"package.json")))return r;let n=Tc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Tc(ry(e))}`)}function yT(e=import.meta.url){let r=ty(kT(e),"package.json"),t=JSON.parse(hT(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var ny=yT();function oy(){return Si.join(wT(),".kynver")}function xT(e=oy()){return Si.join(e,"doctor-native-windows.json")}function sy(e=oy()){return Si.join(e,"native-windows-state.json")}function _T(e,r){RT(Si.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;ST(t,`${JSON.stringify(r,null,2)}
166
+ `,{mode:384}),bT(t,e)}function Mc(e){try{return JSON.parse(vT(e,"utf8"))}catch{return null}}function ET(e){let r=Mc(xT(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 iy(e=new Date,r){try{let t=sy(r),n=Mc(t)??{};_T(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function CT(e){let r=Mc(sy(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var Nc=null,ay=null;function ly(e){Nc=e.admission,ay=e.ownerKind}function cy(e={}){let r=e.platform??process.platform,t=e.hostKind??ya(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:ny,ownerKind:ay,nativeWindows:n?{admission:Nc?.basis??null,hostCapability:Nc?.hostCapability??null,lastDoctor:ET(e.root),lastWorkerCompletedAt:CT(e.root)}:null}}function uy(e,r={}){let t=F(),n=(r.boxKind??kr(t)).trim().toLowerCase()||"forge",o=r.hostLabel??PT.hostname();return{boxId:cs({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:cy()}}U();Xe();zo();me();H();import AT from"node:path";U();me();O();async function dy(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(gr(String(e.run||""),"--run"))),n=String(gr(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=Be({runId:t.id}).runnerId,a=await Dh({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=A(AT.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 ho({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=Hs({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();me();U();O();import IT from"node:path";H();async function py(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 my(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=A(IT.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 py({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}rs();H();Me();Xe();import $e from"node:path";Qo();import xi from"node:path";de();me();var Dc=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function fy(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Dc)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Fe(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!fy(n)})}function bt(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 wo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Fe(e.changedFiles).length>0:!!(bt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function xo(e){return e.status||(e.status=J(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Wc(e,r){if(e.status)return Fe(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):yn(e.worktreePath);return Fe(t).length>0}function OT(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Lc(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=OT(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):yn(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"}:Lo(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??bt(s)};return e.status=u,u}return xo(e)}me();me();ot();O();function TT(e,r=Date.now(),t=So){let n=pe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function an(e,r=Date.now(),t=So){return Y(e.pid)?!0:TT(e,r,t)}function NT(e,r){return r?r.runTerminalCache.derive(e.run):yt(e.run)}function Wr(e,r=Date.now()){return an(e.worker,r)}function Uc(e,r){return kt.has(e.run.status)?!1:NT(e,r)!==null}function gy(e,r,t=Date.now()){if(Wr(e,t))return!0;if(kt.has(e.run.status)||Uc(e,r))return!1;let n=xo(e);return Se(n)?!1:!!Wr(e,t)}Qo();me();function hy(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Wr(e))return!0;let n=r??xo(e);return!!(!Se(n)||wo(n)||Fe(n.changedFiles).length>0||Wt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:bt(n.finalResult)}).blocked)}de();O();import{existsSync as yy,mkdirSync as MT,writeFileSync as ky}from"node:fs";import wi from"node:path";function Ry(e,r,t){return wi.join(e,"salvage",x(r),x(t))}function vy(e){return yy(wi.join(Ry(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function by(e){let r=Ry(e.harnessRoot,e.indexed.runId,e.indexed.workerName);MT(r,{recursive:!0});let t=wi.join(r,"salvage.patch"),n=!1;if(yy(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(`
167
+ `);a.trim()&&(ky(t,a.endsWith(`
168
+ `)?a:`${a}
169
+ `),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 ky(wi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
170
+ `),o}var DT=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function WT(e){e.writeSalvageEvidence&&DT.has(e.skipReason)&&(Wr(e.indexed,e.now)||vy({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||by({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function LT(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(kt.has(r.run.status)||e.liveness&&Uc(r,e.liveness)||e.liveness&&Se(Lc(r,e.liveness))&&!Wr(r))?n:t}function UT(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:LT(e)}function BT(e,r){if(e.harnessRoot?.trim())return xi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${xi.sep}runs${xi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Sy(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=UT(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Wr(r,a))return"active_worker";let c=Lc(r,e.liveness),u=BT(e,r),d=f=>{if(u)try{WT({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(hy(r,c)){let f=d("completion_blocked");if(f)return f}if(Wc(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(gy(r,e.liveness,a)||!Se(c))return"run_still_active";if(wo(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if(Fe(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Wt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:bt(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 Bc(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(xi.resolve(o))||r&&Wr(r)?"active_worker":r&&Wc(r,e.gitStatusCache)?"dirty_worktree":null}function wy(e){return Bc(e)}var xy=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function _y(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)xy.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||xy.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Ay,readdirSync as Iy,statSync as HT}from"node:fs";import Oy from"node:path";U();Xe();import Ey from"node:path";O();function KT(e,r){return an(e,r)}function Cy(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of bs(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=A(Ey.join(Un(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Ey.resolve(l.worktreePath);KT(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of jk(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Py(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function $T(e,r){try{let t=HT(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function jT(e,r){let t=Oy.join(e,"runs",r,"run.json");return Ay(t)?A(t,null):null}function Ty(e){try{return Iy(e).length===0}catch{return!1}}function Ny(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Py(n,r,t,i.liveRunKeys)||!Ty(n))return"run_still_active";let a=jT(r,t);return a&&!kt.has(a.status)&&!yt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function My(e){if(!Ay(e.worktreesDir))return[];let r=[],t;try{t=Iy(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=Oy.join(e.worktreesDir,o);Ty(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:$T(s,e.now)})}return r}de();import{existsSync as Kc,rmSync as Vy}from"node:fs";import{execFileSync as VT}from"node:child_process";import{existsSync as Dy,readdirSync as GT,statSync as YT}from"node:fs";import qT from"node:path";var JT=2500;function zT(e,r=JT){if(!Dy(e))return 0;try{let n=VT("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 Lr(e,r=5e4){if(!Dy(e))return 0;let t=zT(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=GT(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=qT.join(i,l),u;try{u=YT(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as eN,rmSync as rN}from"node:fs";Xe();import{lstatSync as XT,readdirSync as QT}from"node:fs";function Wy(e){try{let r=XT(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 Ly(e,r=32){let t=Wy(e);if(!t)return!1;if(t.foreign)return!0;try{let n=QT(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Wy(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as ZT}from"node:child_process";import Fy from"node:path";import Ke from"node:path";function Uy(e,r,t,n){let o=Ke.resolve(e),s=`${Ke.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ke.relative(t,i);if(a.startsWith("..")||Ke.isAbsolute(a))return"path_outside_harness";let l=a.split(Ke.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ke.resolve(r))?"path_outside_harness":null}function _i(e,r,t){return Uy(e,r,t,"node_modules")}function Ei(e,r,t){return Uy(e,r,t,".next")}function Ci(e,r,t){let n=Ke.resolve(e),o=Ke.relative(t,n);return o.startsWith("..")||Ke.isAbsolute(o)||o.split(Ke.sep).length<3||!n.startsWith(Ke.resolve(r))?"path_outside_harness":null}function By(e,r,t){let n=Ke.resolve(e);return _i(n,r,t)===null||Ei(n,r,t)===null||Ci(n,r,t)===null}function Hy(){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 Ky(e){let r=ZT("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function $y(e,r,t){if(!By(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=Ky(["chown","-R",`${n}:${o}`,Fy.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Ky(["rm","-rf",Fy.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 Fc="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 tN(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function jy(e,r,t={}){if(!eN(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?$t(n):null,i=e.bytes??Lr(e.path)??void 0,a=t.removePath??rN,l=t.hasForeignOwnedEntry??Ly;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!tN(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Hy();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Fc}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=$y(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}; ${Fc}`}}}function Hc(e){let r=e.harnessRoot;return!r||!Kk(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function $c(e,r){let t=Hc(e);if(t)return t;let n=jy(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Gy(e,r){return $c(e,r)}function Yy(e,r){return $c(e,r)}function qy(e,r){return $c(e,r)}function Jy(e,r){let t=Hc(e);if(t)return t;if(!Kc(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??Lr(e.path);return Vy(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 zy(e,r){let t=Hc(e);if(t)return t;if(!Kc(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??Lr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Kc(e.path)&&Vy(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 Pi,readdirSync as Ai,statSync as nN}from"node:fs";import ur from"node:path";function jc(e,r){try{let t=nN(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Qy(e,r){let t=ur.relative(r,e);return t===""||!t.startsWith("..")&&!ur.isAbsolute(t)}function Xy(e,r,t,n){let o=[];for(let s of Dc){if(s===".next")continue;let i=ur.join(e,s);if(!Pi(i))continue;let a=ur.resolve(i);t.has(a)||Qy(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:jc(a,r.now)}))}return o}function Zy(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Xy(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Pi(e.worktreesDir))return r;for(let n of Ai(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=ur.join(e.worktreesDir,n.name);for(let s of Ai(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=ur.join(o,s.name);r.push(...Xy(i,e,t,{runId:n.name,worker:s.name}))}}return r}function eR(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;Pi(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:jc(a,e.now)})))}if(!t||!Pi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(ur.resolve(i.worktreePath));for(let i of Ai(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=ur.join(e.worktreesDir,i.name),l;try{l=Ai(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=ur.resolve(ur.join(a,c.name));o.has(u)||s.has(u)||Qy(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:jc(u,e.now)}))}}return n}import{existsSync as nR,readdirSync as rR,statSync as oN}from"node:fs";import ln from"node:path";var sN=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function iN(e,r){try{let t=oN(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function aN(e,r){let t=ln.relative(r,e);return t===""||!t.startsWith("..")&&!ln.isAbsolute(t)}function lN(e,r,t,n,o,s){if(!nR(n))return;let i=ln.resolve(n);r.has(i)||aN(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:iN(i,t.now)}))}function tR(e,r,t,n,o){for(let s of sN)lN(e,r,t,ln.join(n,s.dirName),s.kind,o)}function oR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||tR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!nR(e.worktreesDir))return r;for(let n of rR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=ln.join(e.worktreesDir,n.name),s;try{s=rR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=ln.join(o,i.name);tR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as sR,statSync as cN}from"node:fs";import dr from"node:path";function uN(e,r){try{let t=cN(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function dN(e){let r=[],t=null;for(let n of e.split(`
171
+ `)){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 pN(e,r){let t=dr.relative(dr.resolve(r),dr.resolve(e));return t!==""&&!t.startsWith("..")&&!dr.isAbsolute(t)}var mN=200;function iR(e){if(!e.includeOrphans||!sR(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(dr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(dr.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=dN(a);for(let c of l){if(i>=mN)break;let u=dr.resolve(c.path);if(u===dr.resolve(s)||!pN(u,e.worktreesDir)||t.has(u)||o.has(u)||!sR(u))continue;let p=dr.relative(e.worktreesDir,u).split(dr.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:uN(u,e.now)})}}return n}U();O();import _o from"node:path";function aR(e,r){let t=_o.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?_o.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function lR(e){let r=new Map;for(let t of bs(e))for(let n of Object.keys(t.workers||{})){let o=_o.join(Un(e,t.id),"workers",x(n),"worker.json"),s=A(o,void 0);s?.worktreePath&&r.set(_o.resolve(s.worktreePath),{harnessRoot:e,worktreePath:_o.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Eo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function St(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Gc(e={}){let r=e.execute===!0||e.execute!==!1&&Eo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Eo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??St("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??St("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??St("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??St("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??St("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Eo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Eo("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&&!Eo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=St("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=St("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 pR(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 Gc({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 Yc,statSync as gN}from"node:fs";import wt from"node:path";O();var mR=1800*1e3;function hN(e,r){let t=wt.relative(r,e);return t===""||!t.startsWith("..")&&!wt.isAbsolute(t)}function kN(e,r,t){if(!Yc(e))return!1;try{let n=r-gN(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function qc(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??mR,n=wt.resolve(e.harnessRoot,"runs"),o=wt.resolve(n,e.runId,"workers",e.workerName);if(!hN(o,n))return!1;let s=A(wt.join(o,"worker.json"),void 0);return s&&an(s,r,t)?!0:s?!1:kN(wt.join(o,"heartbeat.jsonl"),r,t)}function fR(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??mR;if(!Yc(e.worktreePath))return null;if(e.runId&&e.workerName&&qc(e))return"active_worker";let n=wt.join(e.worktreePath,".git");if(!Yc(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
172
+ `).map(c=>c.trim()).filter(c=>c.length>0);if(Fe(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Xe();import{existsSync as yN,readdirSync as gR,statSync as RN}from"node:fs";import vN from"node:path";function hR(e={}){let r=ge(e.harnessRoot??De()),t=$t(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!yN(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=gR(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=vN.join(t,u.name);try{let p=RN(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of gR(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=Lr(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}}Xe();import{existsSync as bN}from"node:fs";import{homedir as SN}from"node:os";import kR from"node:path";var wN=["/var/tmp/kynver-harness",kR.join(SN(),".openclaw","harness")];function Jc(e,r,t){if(!t?.trim())return;let n=ge(t.trim());e.has(n)||(e.add(n),r.push(n))}function xN(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 yR(e={}){let r=new Set,t=[];Jc(r,t,e.harnessRoot??De());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Jc(r,t,o);if(xN(e))for(let o of wN){let s=kR.resolve(o);!r.has(s)&&bN(s)&&Jc(r,t,s)}return t}xn();function _N(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function EN(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function RR(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=EN("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Kr({...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 vR(e,r){if(!r.pressured)return e;let t=e.execute||!_N("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}}$o();import{unlinkSync as CN}from"node:fs";function Ii(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function bR(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function PN(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function SR(e={}){let r=e.execute===!0||Ii("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Ii("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Ii("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??bR("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Nt({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=PN(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{CN(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 wR(e){return e?Ii("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>bR("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}$o();function He(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var Oi=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 AN}from"node:child_process";import{existsSync as IN}from"node:fs";import ON from"node:path";var TN=5e3;function NN(e,r){if(!IN(ON.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=AN("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:TN}),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 xR(e){let r=NN(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
173
+ `).map(t=>t.trim()).filter(Boolean)}var Ti=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=xR(t)??[];return this.cache.set(t,o),o}};var Ni=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=yt(r);return this.cache.set(r.id,n),n}};function MN(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function _R(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:MN(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 DN(e={}){let r=e.harnessRoot?ge(e.harnessRoot):De(),t=yR({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function WN(e){return typeof e=="string"?{reason:e}:e}function cn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Mi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Lr(e.path,t)}}function ER(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 LN(e,r){return e.kind==="remove_next_cache"?Yy(e,r):Gy(e,r)}function UN(e,r,t){return e.kind==="remove_next_cache"?Ei(e.path,r,t):_i(e.path,r,t)}function BN(e){let r=new Map;for(let t of e)for(let[n,o]of lR(t))r.set(n,o);return r}function CR(e,r){return e.runId&&e.worker?$e.join(r,e.runId,e.worker):$e.resolve(e.path,"..")}function PR(e){return e.indexed?!1:qc({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function FN(e={}){let r=Gc(e),t=RR();r=vR(r,t);let n=DN(e);He("scan",`${n.scanRoots.length} harness root(s)`);let o=Cy(n.scanRoots,n.now),s=r.finalizeStaleRuns?bo().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&He("finalize",`${s.length} stale run(s) marked terminal`),He("index","building worktree index");let i=BN(n.scanRoots);He("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Ni,gitStatusCache:new Ti,gitRevCache:new Oi},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;He("root",C);let re=$e.join(C,"worktrees"),he=aR(i,C),je={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:he,now:n.now},pr=r.scanDependencyCaches?oR(je):[];He("dependency",r.scanDependencyCaches?`${pr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Ur=0;for(let B of pr){if(p())break;Ur+=1,Ur%50===0&&He("dependency",`${Ur}/${pr.length} evaluated`);let M=$e.resolve(B.path);if(u.has(M))continue;u.add(M);let D={...B,path:M},ie=UN(D,C,re);if(ie){cn(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}let ke=CR(D,re),ye=he.get($e.resolve(ke))??null,mr=PR({candidate:D,indexed:ye,harnessRoot:C,now:n.now}),V=Bc({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:mr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){cn(l,D.path,V),c.push({...D,executed:!1,skipped:!0,skipReason:V});continue}c.push(LN(Mi(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let B of Zy(je)){if(p())break;let M=$e.resolve(B.path);if(u.has(M))continue;u.add(M);let D={...B,path:M},ie=Ci(D.path,C,re);if(ie){cn(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}let ke=CR(D,re),ye=he.get($e.resolve(ke))??null,mr=PR({candidate:D,indexed:ye,harnessRoot:C,now:n.now}),V=wy({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:mr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){cn(l,D.path,V),c.push({...D,executed:!1,skipped:!0,skipReason:V});continue}c.push(qy(Mi(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...eR(je),...iR(je)];He("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let B of j){if(p())break;te+=1,te%50===0&&He("worktrees",`${te}/${j.length} evaluated`);let M=$e.resolve(B.path);if(T.has(M))continue;T.add(M);let D={...B,path:M},ie=he.get($e.resolve(D.path))??null,ke=ie?null:fR({worktreePath:D.path,harnessRoot:C,runId:D.runId,workerName:D.worker,now:n.now}),ye=Sy({indexed:ie,worktreePath:$e.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:ke,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(ye){let{reason:mr,detail:V}=WN(ye);cn(l,D.path,mr,V),c.push({...D,executed:!1,skipped:!0,skipReason:mr});continue}c.push(zy(Mi(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let B of My({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let M=$e.resolve(B.path);if(u.has(M))continue;u.add(M);let D={...B,path:M},ie=D.runId??$e.basename(M),ke=Ny({harnessRoot:C,runId:ie,runPath:M,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ke){cn(l,D.path,ke),c.push({...D,executed:!1,skipped:!0,skipReason:ke});continue}c.push(Jy(Mi(D,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?hR({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Nt(),E=r.execute&&wR(w),S=E?SR({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,He("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),He("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=_y(c,l),$=_R({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:ER(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:ER(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function AR(e){let r=pR(e);return FN({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function IR(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as HN}from"node:fs/promises";import{homedir as $N}from"node:os";import xt from"node:path";Rn();var KN={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},N4=Object.keys(KN);function OR(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 TR(e,r){let t=OR(e),n=OR(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 jN=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function un(e){let r=e?.trim();return r||null}function VN(e){return[...new Set(e.filter(r=>!!r))]}function GN(){let e=$N(),r=un(process.env.KYNVER_OPENCLAW_NPM_ROOT)??un(process.env.OPENCLAW_NPM_ROOT)??xt.join(e,".openclaw","npm"),t=un(process.env.KYNVER_NPM_GLOBAL_ROOT)??un(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(un(process.env.NPM_CONFIG_PREFIX)?xt.join(un(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):xt.join(e,".npm-global","lib","node_modules"));return VN([xt.join(r,"lib","node_modules"),xt.join(r,"node_modules"),t.endsWith("node_modules")?t:xt.join(t,"lib","node_modules")])}async function YN(e){try{let r=JSON.parse(await HN(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function qN(e){let r=GN(),t=new Set,n=[];for(let o of r){let s=xt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function NR(e=new Date().toISOString()){let r={};for(let t of jN){let n=null;for(let o of qN(t)){let s=await YN(o);s&&(!n||TR(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 JN}from"node:child_process";var zN=1e4,XN=4*1024*1024,MR=(e,r,t)=>{try{let n=JN(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??zN,maxBuffer:XN});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 Di(e,r,t){return`${e} ${r} ${t}`}function zc(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 DR(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 QN=8e3,ZN=30,eM=100,rM=400,tM=3600*1e3,Xc=0;function Zc(){return Date.now()<Xc}function nM(e){let r=`${e.stdout}
174
+ ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function WR(e){nM(e)&&(Xc=Math.max(Xc,Date.now()+tM))}function Qc(e,r){if(Zc())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return WR(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function oM(e,r,t,n){if(Zc())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return WR(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function eu(e){return Zc()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function dn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function sM(e){return Array.isArray(e)?e.map(r=>dn(r)).filter(r=>r!==null).slice(0,ZN).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function iM(e,r,t){let n=Qc(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:sM(n.statuses)}:null}var LR={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:eu,collect(e,r){let t=DR(e);if(!t)return null;let n=oM(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=dn(n.author),s=dn(n.mergeCommit),i=dn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,QN):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>dn(u)).filter(u=>u!==null).slice(0,eM).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=>dn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,rM):[];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}}},UR={provider:"github",kind:"commit_status",version:"1",isAvailable:eu,collect(e,r){let t=zc(e);return t?iM(r,t.repo,t.sha):null}},BR={provider:"github",kind:"branch_reachability",version:"1",isAvailable:eu,collect(e,r){let t=zc(e);if(!t)return null;let n=Qc(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=Qc(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 tu=[];function ru(e){tu.some(r=>r.provider===e.provider&&r.kind===e.kind)||tu.push(e)}function FR(e,r){return tu.find(t=>t.provider===e&&t.kind===r)??null}function KR(){ru(LR),ru(UR),ru(BR)}var aM=1,lM=25e3;function HR(e,r={}){KR();let t=r.run??MR,n=r.now??(()=>new Date),o=r.maxSubjects??aM,s=Date.now()+(r.deadlineMs??lM),i=new Set,a=e.filter(m=>{let f=Di(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=Di(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=FR(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}U();O();import mM from"node:path";U();O();import $R from"node:path";var cM="provider-evidence-wanted.json",uM="provider-evidence-cache.json",dM=600*1e3;function jR(e){return $R.join(N(e),cM)}function pM(e){return $R.join(N(e),uM)}function VR(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 GR(e){let r=A(jR(e),null);return VR(r?.wanted)}function YR(e,r){ue(jR(e),{savedAt:new Date().toISOString(),wanted:r})}function qR(e,r={}){let t=r.ttlMs??dM,n=pM(e),s={...A(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 JR(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?VR(r):null}var fM="provider-evidence-shared-cache.json",gM=6e4,hM=1,kM=1;function nu(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 yM(){return mM.join(le().harnessRoot,fM)}function RM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?hM:kM;return nu(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,nu("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function zR(){return nu("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",gM)}function vM(e){return Math.floor(e.getTime()/6e4)*6e4}function bM(e){return`${e.provider}:${e.kind}`}function XR(e,r={}){let t=qR(e,{ttlMs:r.ttlMs??zR()}),n=r.file??yM(),o=A(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??zR(),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=RM(u.provider);if(m===0)return!0;let f=bM(u),y=vM(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();U();import QR from"node:path";var ZR="mesh-cron-lease.json";function ev(e){let r=A(QR.join(N(e),ZR),null);return yh(e,r)??r}function rv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(QR.join(N(e),ZR),t),kh(e,t)}function tv(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 nv(e){let r=Gg(),t=Nr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,sh());let s=oh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Qk())}return t.flags.planOutbox!=="off"&&Object.assign(o,Qh()),t.flags.admission!=="off"&&(Object.assign(o,ch()),t.flags.admission==="enforce"&&Object.assign(o,mh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,wh()),{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 ov}from"node:crypto";import{access as SM,mkdir as w3,readFile as sv,rename as x3,writeFile as _3}from"node:fs/promises";import{constants as wM}from"node:fs";import{homedir as ou}from"node:os";import _e from"node:path";var xM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,_M=/^[A-Za-z0-9._:-]{8,128}$/;function EM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||_e.join(ou(),".kynver","mcp-installations.json")}function CM(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||_e.join(ou(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||_e.join(ou(),".npm-global")}function PM(e){let r=_e.resolve(e);if(_e.basename(r)!=="node_modules")return r;let t=_e.dirname(r);return _e.basename(t)==="lib"?_e.dirname(t):t}function AM(e,r){return[_e.join(e,"lib","node_modules",r,"package.json"),_e.join(e,"node_modules",r,"package.json")]}async function IM(e){try{return await SM(e,wM.R_OK),!0}catch{return!1}}async function OM(e=EM()){let r;try{r=JSON.parse(await sv(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||!_M.test(t.inventoryKey)||!xM.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 TM(e,r,t){if(typeof e.bin=="string")return _e.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"&&!_e.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?_e.join(t,s):null}function NM(e){return ov("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 MM(e){let r=[];for(let t of e){let n=PM(CM(t.prefix)),o=(await Promise.all(AM(n,t.packageName).map(async m=>({candidate:m,ok:await IM(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await sv(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=_e.dirname(o),a=TM(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=ov("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:NM(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 iv(){return MM(await OM())}import{createHash as DM,createHmac as WM,timingSafeEqual as LM}from"node:crypto";function su(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:DM("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function av(e,r,t){let n=su(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=WM("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&LM(i,s)}Hi();import{createHash as UM}from"node:crypto";import{access as iu,mkdtemp as BM,readFile as pv,rm as FM}from"node:fs/promises";import{constants as au}from"node:fs";import{tmpdir as KM}from"node:os";import pn from"node:path";import{spawn as HM}from"node:child_process";import{Client as $M}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as jM}from"@modelcontextprotocol/sdk/client/stdio.js";var lu="https://registry.npmjs.org",lv=512*1024,cu=2*6e4,VM=2e4;function mv(){return"npm"}function cv(e,r){return Buffer.byteLength(e)>=lv?e:(e+r.toString("utf8")).slice(0,lv)}function GM(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&pn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:lu,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 fv(e,r,t=cu,n){return new Promise((o,s)=>{let i,a;try{[i,a]=ve(e,r)}catch(m){s(m);return}let l=HM(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:GM(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=cv(c,m)}),l.stderr.on("data",m=>{u=cv(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&Ne(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 YM(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:UM(t).update(e).digest("base64")===n}async function qM(e,r,t,n){let o=await fv(mv(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${lu}`,"--ignore-scripts"],cu,pn.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"||pn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=pn.join(n,i);if(!YM(await pv(a),t))throw new Error("artifact_integrity_mismatch");return a}async function JM(e,r,t){if((await fv(mv(),["install","--global","--prefix",e,r,`--registry=${lu}`,"--no-audit","--fund=false"],cu,t)).code!==0)throw new Error("package_install_failed")}async function gv(e){let r=JSON.parse(await pv(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function zM(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 uv(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await iu(e.local.binPath,au.X_OK).catch(async()=>iu(e.local.binPath,au.R_OK));let r=new jM({command:e.local.binPath,args:[],env:zM(e.local.envAllowlist),stderr:"pipe"}),t=new $M({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")),VM)})]);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 dv(e,r,t,n,o){let s=await BM(pn.join(KM(),"kynver-mcp-update-"));try{let i=await qM(r,t,n,s);if(await o(),await JM(e.local.prefix,i,pn.join(s,"npm-cache")),await gv(e)!==t)throw new Error("installed_version_mismatch")}finally{await FM(s,{recursive:!0,force:!0})}}async function hv(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 iu(e.local.prefix,au.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await gv(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 dv(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 uv(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 dv(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await uv(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 pu}from"node:crypto";import{mkdir as mu,readFile as fu,rename as oD,rm as Wi,stat as sD,writeFile as bv}from"node:fs/promises";import _t from"node:path";import{createHmac as XM,timingSafeEqual as QM}from"node:crypto";import{mkdir as ZM,readFile as eD,rename as rD,writeFile as tD}from"node:fs/promises";import{homedir as nD}from"node:os";import uu from"node:path";function du(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||uu.join(nD(),".kynver","state","mcp-updates")}function kv(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return uu.join(du(),`${e}.json`)}function yv(e,r){let t=su(r);return t?XM("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function Rv(e,r){try{let t=JSON.parse(await eD(kv(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=yv(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!QM(i,a)?null:t}catch{return null}}async function vv(e,r){let t=yv(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=kv(e.operationId);await ZM(uu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await tD(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
175
+ `,{mode:384}),await rD(o,n)}var iD="host-mutation.lock";function Sv(){return _t.join(du(),iD)}async function wv(){try{let e=JSON.parse(await fu(_t.join(Sv(),"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:xv(e.pid)}}catch{return null}}function xv(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function aD(e){try{return await sD(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function _v(){return lD("mcp_update")}async function lD(e){let r=Sv(),t=`${r}.reclaiming`;await mu(_t.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await aD(t))return null;for(let o=0;o<2;o+=1)try{await mu(r,{mode:448});let s={pid:process.pid,nonce:pu(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await bv(_t.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Wi(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await fu(_t.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Wi(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 bv(_t.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:pu(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await fu(_t.join(r,"owner.json"),"utf8"))}catch{return null}if(xv(i.pid))return null;let a=`${r}.stale-${process.pid}-${pu(8).toString("hex")}`;await oD(r,a),await Wi(a,{recursive:!0,force:!0})}return null}finally{n&&await Wi(t,{recursive:!0,force:!0})}}function Li(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function cD(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 Ev(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 uD(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 Cv(e){let r=Q(e.baseUrl),t=await iv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await ct(Li(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 _v();if(!o){let s=await wv();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await ct(Li(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=cD(s.response);if(!i)return{ok:!0,stage:"idle"};if(!av(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await Rv(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||!Ev(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&&Ev(a.recovery,i)?a.recovery:uD(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await vv({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 ct(Li(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 hv(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 ct(Li(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 dD(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function pD(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=A(Pv.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||$r(a))continue;if(ro(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=Dt({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await ho({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 mD(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 NR(),c=Ss(r),u=null;try{let E=GR(r);if(E.length>0){let S=XR(r);u=HR(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Dr()!=="off"){let E=Bt();lh({liveWorkers:E}),ph({liveWorkers:E})}else ih()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=Pv.join(xr(_,x(E)),"workers",x(S),"worker.json"),$=A(K,null);return $?$r($):!1}catch{return!1}};await ey({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=nv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=Lu({control:It(e),supervisor:Ku(),inFlightWorkers:Bt().length})}catch{m=null}let f=ev(r),y=Eu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:ic(r),resourceGate:t,boxResourceSnapshot:uy(t,{harnessRunId:r,boxKind:kr(F())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Be({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=JR(k.response);if(b)try{YR(r,b)}catch{}let g=tv(k);if(g)try{rv(r,g)}catch{}let h=qg(k);h&&Jg(e,h);let w=Mu(k);return w&&Wu(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 Av(e){let r=String(gr(String(e.run||""),"--run")),t=String(gr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";ic(r);let o=await _s(t,e),s=xs(o),i=Nn({runId:r,configuredMaxWorkersOverride:s}),a=IR()?AR(r):void 0,l=await mD(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 Cv({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:Bt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=Tg(r,l),d=await Nf(r,e),p=await pD(r,e);p.some(C=>C.ok&&!C.skipped)&&iy();let m=Nn({runId:r,configuredMaxWorkersOverride:s}),f=zk(),y=await my(r,e),k=Tk(m,l),b=k.maxStarts,g=It(t),h=Uu(g);h&&(b=0);let w=dD()?await dy({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=Ok(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Rc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),he=on(re);S+=he,K=Math.max(0,K-he),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Rc({...e,run:r,agentOsId:t},K),re=on(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}}kn();Ft();kn();function Iv(e){return Wo(It(e))!=="stopped"?null:Bt().length}function Ov(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 fD(e){e&&(ly({admission:e.admission,ownerKind:e.ownerKind}),Fu(e.ownerKind))}async function gD(e,r={}){try{e.instructionBundle&&Pu(e.instructionBundle.bundle,e.instructionBundle.source),_u(e.eventLoopReport);let t=await(r.runTick??Av)(e.args),n=(r.countInFlightWorkers??Iv)(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 Tv(e,r,t={}){fD(r);let n=Promise.resolve();e.on("message",o=>{Ov(o)&&(n=n.then(async()=>{e.postMessage(await gD(o,t))}))})}Nv?Tv(Nv,hD):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);