@kynver-app/runtime 0.2.147 → 0.2.150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/cli.js +237 -225
- package/dist/daemon-tick-thread.js +59 -57
- package/dist/desktop-entry.js +171 -166
- package/dist/index.js +260 -248
- package/dist/local-run-store/index.js +11 -10
- package/dist/server/cleanup.js +1 -1
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +4 -4
- package/dist/server/model-routing.js +4 -4
- package/dist/server/monitor.js +1 -1
- package/dist/server/orchestration.js +2 -2
- package/dist/server/venice.js +1 -0
- package/dist/server/worker-policy.js +3 -3
- package/package.json +7 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
var P=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{spawnSync as
|
|
2
|
-
`),
|
|
1
|
+
var P=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{spawnSync as Kb}from"node:child_process";function jb(e){return["/PID",String(e),"/T","/F"]}function Vb(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Hb||/not found/i.test(e.stderr)?{method:"taskkill",outcome:"not_found"}:{method:"taskkill",outcome:"failed",detail:`taskkill exit ${e.status??"null"}: ${e.stderr.trim().slice(0,300)}`}}function Gb(e){let r=Kb("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:$b});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Yb(e){return Number.isInteger(e)&&e>0}function Me(e,r="SIGTERM",t={}){if(!Yb(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??Gb;return Vb(s(jb(e)))}let o=t.kill??((s,i)=>{process.kill(s,i)});try{return o(-e,r),{method:"group",outcome:"signalled"}}catch{}try{return o(e,r),{method:"pid",outcome:"signalled"}}catch(s){let i=s.code;return i==="ESRCH"?{method:"pid",outcome:"not_found"}:{method:"pid",outcome:"failed",detail:i??s.message}}}function ce(e=process.platform){return e!=="win32"}var Hb,$b,aa=P(()=>{"use strict";Hb=128,$b=15e3});import{existsSync as qb,mkdirSync as Jb,readFileSync as td,readdirSync as vL,renameSync as zb,rmSync as Xb,statSync as nd,writeFileSync as Qb}from"node:fs";import{randomBytes as Zb}from"node:crypto";import eS from"node:path";function Je(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function Rr(e,r){return e||Je(`missing ${r}`),e}function Cn(e){try{return JSON.parse(e)}catch{return null}}function I(e,r){try{return JSON.parse(td(e,"utf8"))}catch(t){if(arguments.length>1)return r;Je(`failed to read ${e}: ${t.message}`)}}function ue(e,r){Jb(eS.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${Zb(4).toString("hex")}.tmp`;try{Qb(t,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`),zb(t,e)}catch(n){try{Xb(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Yo(e){return String(e).replace(/\/+$/,"")}function qo(e){try{return nd(e).size}catch{return 0}}function Jo(e){try{return nd(e).mtime.toISOString()}catch{return null}}function Mt(e,r){return qb(e)?td(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=md("git",r,ae({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function pd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Go(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return Wt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Wt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Wt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=pd(e,i,a),c=pd(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Wt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=P(()=>{"use strict";jr();O();ia()});import{homedir as fd}from"node:os";import aa from"node:path";function dS(e=fd()){return aa.join(e,".kynver",uS)}function hd(e,r=fd()){return aa.resolve(e)===aa.resolve(dS(r))}var uS,gd,la=P(()=>{"use strict";de();uS="workspace",gd="main"});import{existsSync as ua,readFileSync as yd}from"node:fs";import{homedir as pS}from"node:os";import ze from"node:path";import{fileURLToPath as mS}from"node:url";function gS(e){let r=ze.join(e,"package.json");if(!ua(r))return null;try{let t=JSON.parse(yd(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Rd(e){return gS(e)==="kynver"}function kd(e){let r=ze.resolve(e);if(!ua(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?ze.resolve(n):null}function hS(e=import.meta.url){let r=ze.dirname(mS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ua(n))try{if(JSON.parse(yd(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=ze.dirname(r);if(o===r)break;r=o}return null}function ca(e,r,t,n,o){if(!t)return;let s=ze.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Rd(s)||(e.add(s),r.push({repo:s,source:n}))}function kS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ca(t,n,kd(r),"cwd_git",{requireMonorepo:!1});let o=hS(e?.runtimeModuleUrl??import.meta.url);o&&ca(t,n,kd(o),"runtime_checkout");let s=pS();for(let a of fS)ca(t,n,Me(ze.join(s,a)),"well_known_path");let i=ze.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Rd(a.repo))return!0;let l=ze.resolve(a.repo);return i===l||i.startsWith(`${l}${ze.sep}`)})}function Yo(e){return kS(e)[0]??null}var fS,Cn=P(()=>{"use strict";de();jr();la();fS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sd,readFileSync as yS}from"node:fs";import at from"node:path";function vS(e){return e.includes("/")||e.includes("\\")}function bS(e){return(e.PATHEXT||RS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function SS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function wS(e,r={}){let t=r.env??process.env,n=r.exists??Sd,o=bS(t),s=at.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(vS(e)||at.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of SS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(at.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function bd(e){return e.replace(/^[\\/]+/,"")}function _S(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=xS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=vd.exec(n);if(o)return bd(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?vd.exec(i):null;if(a)return bd(a[1])}return null}function ES(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=wS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=at.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>yS(m,"utf8")),i=r.exists??Sd,a;try{a=s(n)}catch{throw new Pn(n)}let l=_S(a);if(!l)throw new Pn(n);let c=at.win32.dirname(n),u=at.win32.join(c,l);if(!i(u))throw new Pn(n);let d=at.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function pe(e,r,t={}){let n=ES(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Pn,RS,vd,xS,Rr=P(()=>{"use strict";Pn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},RS=".COM;.EXE;.BAT;.CMD";vd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,xS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var wd=P(()=>{"use strict";Rr()});function Ed(e){let r=Ko(e);try{let t=new URL(r);return t.hostname.toLowerCase()===xd?(t.hostname=`www.${xd}`,Ko(t.toString())):r}catch{return r}}function An(e){if(e?.trim())return Ed(Ko(e.trim()))}async function In(e,r,t=fetch){let n=Ed(e),o=new Headers(r?.headers),s=0;for(;s<=_d;){let i=await t(n,{...r,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(r?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${_d} redirects for ${e}`)}var xd,_d,On=P(()=>{"use strict";O();xd="kynver.com";_d=10});function lt(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function qo(e,r){return e[r]?.trim()||null}function Cd(e){let r=e?.split(":")[0]?.trim();return r?lt(r):null}function vr(e=process.env,r={}){let t=[],n=Cd(r.boxId),o=Cd(qo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==lt(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:lt(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=qo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==lt(i)&&t.push(`KYNVER_BOX_ID=${qo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:lt(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=qo(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function br(e={},r=process.env){return vr(r,e).boxKind}var We=P(()=>{"use strict"});function da(e,r){return e==="forge"?4:Math.max(1,r)}function Tn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var Jo=P(()=>{"use strict"});import{readFileSync as CS}from"node:fs";import Pd from"node:os";function Ad(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Pd.freemem()}if(process.platform==="linux")try{let t=CS("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Pd.freemem()}var Id=P(()=>{"use strict"});import{existsSync as PS,readFileSync as AS,statfsSync as IS}from"node:fs";function pa(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!PS(e))continue;let r=AS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Od(e={}){if(!(e.forceWsl===void 0?pa():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.wslHostFreeWarnBytes??OS,o=e.wslHostFreeCriticalBytes??TS,s=e.statfs??IS,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${NS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function NS(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var OS,TS,Lt,ma=P(()=>{"use strict";OS=25*1024*1024*1024,TS=12*1024*1024*1024,Lt="/mnt/c"});import{execFileSync as Td}from"node:child_process";import{existsSync as Xo,readFileSync as Nd,readdirSync as DS,statSync as MS}from"node:fs";import fa from"node:path";function zo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Dd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Td("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt;return r&&Xo(fa.join(t,"Users",r))?r:null}function FS(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.windowsUser??Dd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function KS(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function HS(){try{if(Xo("/proc/sys/kernel/core_pattern"))return Nd("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Td("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function $S(e){return!!(e&&/wsl-capture-crash/i.test(e))}function jS(e,r=Lt){let t=fa.join(r,"Users",e,".wslconfig");if(!Xo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Nd(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function VS(e){if(!Xo(e))return[];let r=DS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=fa.join(e,n.name);try{let s=MS(o),i=KS(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Bt(e={}){if(!(e.forceWsl===void 0?pa():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.windowsUser??Dd(),o=e.warnBelowBytes??zo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",WS),s=e.criticalBelowBytes??zo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",LS),i=e.warnCount??zo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",BS),a=e.criticalCount??zo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",US),l=(e.readCorePattern??HS)(),c=$S(l),u=null;n&&(u=(e.readWslConfig??jS)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=FS({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??VS)(m)}catch($){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${m}: ${$.message}`,probeError:$.message}}let y=f.reduce(($,C)=>$+C.bytes,0),k=f.length,b=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=y>=s,h=y>=o,w=k>=a,E=k>=i,_=!(g||w||h||E),K=null;if(!_){let $=g||w?"critical":"warning",C=(y/1024**3).toFixed(1),re=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${re}). `+GS({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:_,path:m,windowsUser:n,dumpCount:k,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:K,probeError:null}}function GS(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var WS,LS,BS,US,Qo=P(()=>{"use strict";ma();WS=5*1024*1024*1024,LS=10*1024*1024*1024,BS=2,US=4});import{statfsSync as YS}from"node:fs";function Vr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??qS,n=e.diskFreeCriticalBytes??JS,o=e.diskMaxUsedPercent??zS,s=e.diskHardMaxUsedPercent??XS,i=YS(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,p=a<t*2,m=p&&c>o,f=p&&c>s,y=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:Od(e.wslHost),b=e.skipWslCrashDumpCheck?null:Bt(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),QS({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function QS(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var qS,JS,zS,XS,Nn=P(()=>{"use strict";Qo();ma();qS=30*1024*1024*1024,JS=15*1024*1024*1024,zS=80,XS=90});import{existsSync as ZS,readdirSync as ew}from"node:fs";import rw from"node:path";function ir(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=rw.join(N(e.id),"workers");if(!ZS(t))return[...r];for(let n of ew(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Dn=P(()=>{"use strict";B();O()});function ga(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Md(e){let r=e.trim();if(!r)return null;let t=ga(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ga(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ga(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Wd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Md(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Md(t);return n||t}var Ld=P(()=>{"use strict"});import{existsSync as tw,readFileSync as nw}from"node:fs";function Bd(e){return e==="complete"}function Sr(e){return Bd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!tw(e))return r;let t=Date.now()+ow,n=new Date(t).toISOString(),o=nw(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
9
|
-
`).filter(Boolean),n=null,o=
|
|
4
|
+
`):""}function zo(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function od(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function la(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=P(()=>{"use strict";aa()});import{existsSync as rS,readFileSync as tS}from"node:fs";import{homedir as nS}from"node:os";import oS from"node:path";function ua(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ca(e){return typeof e=="string"&&e.trim()?e:null}function sd(e){let r=ua(e);if(!r)return null;let t=r.desiredState;if(t!=="running"&&t!=="paused"&&t!=="stopped")return null;let n=r.policyVersion;if(typeof n!="number"||!Number.isInteger(n)||n<0)return null;let o=ca(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:ca(r.requestedByLabel),reason:ca(r.reason)}:null}function id(e){let r=ua(ua(e)?.response);return!r||r.runtimeControl===void 0?null:sd(r.runtimeControl)}function ad(e,r=nS()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return oS.join(r,".kynver",`runtime-control-${t}.json`)}function ld(e,r,t){try{let n=Wt(e,t);if(n&&n.policyVersion>r.policyVersion)return;ue(ad(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function Wt(e,r){try{let t=ad(e,r);if(!rS(t))return null;let n=JSON.parse(tS(t,"utf8"));return n.agentOsId!==e?null:sd(n.control)}catch{return null}}function Xo(e){return e?.desiredState??"running"}function sS(e){return e==="keeper"||e==="desktop"}function iS(e,r,t=!1){let n=Xo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function cd(e){return e.control?{policyVersion:e.control.policyVersion,state:iS(e.control,e.inFlightWorkers,e.exiting),supervised:sS(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function ud(e){let r=Xo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function pd(e){dd=e}function md(){return dd}var dd,Pn=P(()=>{"use strict";O();dd=null});import{homedir as fd}from"node:os";import gd from"node:path";function aS(e){return e==="~"?fd():e.startsWith("~/")||e.startsWith("~\\")?gd.join(fd(),e.slice(2)):e}function We(e){return gd.resolve(aS(e))}var Vr=P(()=>{"use strict"});function gS(e){let r=e[fS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function hS(e,r={}){return cS.has(e)?!0:pS.has(e)||r.operatorAllow?.has(e)||mS.some(t=>e.endsWith(t))?!1:uS.some(t=>e.endsWith(t))}function da(e){let r=gS(e),t={...e};for(let n of Object.keys(t))hS(n,{operatorAllow:r})&&delete t[n];return t}var lS,cS,uS,dS,pS,mS,fS,pa=P(()=>{"use strict";lS=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],cS=new Set(lS),uS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],dS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],pS=new Set(dS),mS=["_PUBLIC_KEY"],fS="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as kd}from"node:child_process";function Z(e,r,t={}){let n=kd("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=kS(e,r,n);if(t.throwError)throw new Error(o);Je(o)}return n.stdout||""}function kS(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function An(e){return Z(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=kd("git",r,ae({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function hd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Qo(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 Lt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Lt(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 Lt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=hd(e,i,a),c=hd(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Lt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=P(()=>{"use strict";Vr();O();pa()});import{homedir as yd}from"node:os";import ma from"node:path";function RS(e=yd()){return ma.join(e,".kynver",yS)}function vd(e,r=yd()){return ma.resolve(e)===ma.resolve(RS(r))}var yS,Rd,fa=P(()=>{"use strict";de();yS="workspace",Rd="main"});import{existsSync as ha,readFileSync as Sd}from"node:fs";import{homedir as vS}from"node:os";import ze from"node:path";import{fileURLToPath as bS}from"node:url";function wS(e){let r=ze.join(e,"package.json");if(!ha(r))return null;try{let t=JSON.parse(Sd(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function wd(e){return wS(e)==="kynver"}function bd(e){let r=ze.resolve(e);if(!ha(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?ze.resolve(n):null}function xS(e=import.meta.url){let r=ze.dirname(bS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ha(n))try{if(JSON.parse(Sd(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=ze.dirname(r);if(o===r)break;r=o}return null}function ga(e,r,t,n,o){if(!t)return;let s=ze.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!wd(s)||(e.add(s),r.push({repo:s,source:n}))}function _S(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ga(t,n,bd(r),"cwd_git",{requireMonorepo:!1});let o=xS(e?.runtimeModuleUrl??import.meta.url);o&&ga(t,n,bd(o),"runtime_checkout");let s=vS();for(let a of SS)ga(t,n,We(ze.join(s,a)),"well_known_path");let i=ze.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!wd(a.repo))return!0;let l=ze.resolve(a.repo);return i===l||i.startsWith(`${l}${ze.sep}`)})}function Zo(e){return _S(e)[0]??null}var SS,In=P(()=>{"use strict";de();Vr();fa();SS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Ed,readFileSync as ES}from"node:fs";import ct from"node:path";function PS(e){return e.includes("/")||e.includes("\\")}function AS(e){return(e.PATHEXT||CS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function IS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function OS(e,r={}){let t=r.env??process.env,n=r.exists??Ed,o=AS(t),s=ct.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(PS(e)||ct.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of IS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(ct.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function _d(e){return e.replace(/^[\\/]+/,"")}function NS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=TS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=xd.exec(n);if(o)return _d(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?xd.exec(i):null;if(a)return _d(a[1])}return null}function DS(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=OS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=ct.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>ES(m,"utf8")),i=r.exists??Ed,a;try{a=s(n)}catch{throw new On(n)}let l=NS(a);if(!l)throw new On(n);let c=ct.win32.dirname(n),u=ct.win32.join(c,l);if(!i(u))throw new On(n);let d=ct.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function pe(e,r,t={}){let n=DS(e,t);return[n.executable,[...n.prefixArgs,...r]]}var On,CS,xd,TS,vr=P(()=>{"use strict";On=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},CS=".COM;.EXE;.BAT;.CMD";xd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,TS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var Cd=P(()=>{"use strict";vr()});function Id(e){let r=Yo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===Pd?(t.hostname=`www.${Pd}`,Yo(t.toString())):r}catch{return r}}function Tn(e){if(e?.trim())return Id(Yo(e.trim()))}async function Nn(e,r,t=fetch){let n=Id(e),o=new Headers(r?.headers),s=0;for(;s<=Ad;){let i=await t(n,{...r,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(r?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${Ad} redirects for ${e}`)}var Pd,Ad,Dn=P(()=>{"use strict";O();Pd="kynver.com";Ad=10});function ut(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function es(e,r){return e[r]?.trim()||null}function Od(e){let r=e?.split(":")[0]?.trim();return r?ut(r):null}function br(e=process.env,r={}){let t=[],n=Od(r.boxId),o=Od(es(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ut(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ut(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=es(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ut(i)&&t.push(`KYNVER_BOX_ID=${es(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ut(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=es(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function Sr(e={},r=process.env){return br(r,e).boxKind}var Le=P(()=>{"use strict"});function ka(e,r){return e==="forge"?4:Math.max(1,r)}function Mn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var rs=P(()=>{"use strict"});import{readFileSync as MS}from"node:fs";import Td from"node:os";function Nd(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Td.freemem()}if(process.platform==="linux")try{let t=MS("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Td.freemem()}var Dd=P(()=>{"use strict"});import{existsSync as WS,readFileSync as LS,statfsSync as BS}from"node:fs";function ya(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!WS(e))continue;let r=LS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Md(e={}){if(!(e.forceWsl===void 0?ya():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Bt,n=e.wslHostFreeWarnBytes??US,o=e.wslHostFreeCriticalBytes??FS,s=e.statfs??BS,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${KS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function KS(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var US,FS,Bt,Ra=P(()=>{"use strict";US=25*1024*1024*1024,FS=12*1024*1024*1024,Bt="/mnt/c"});import{execFileSync as Wd}from"node:child_process";import{existsSync as ns,readFileSync as Ld,readdirSync as HS,statSync as $S}from"node:fs";import va from"node:path";function ts(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Bd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Wd("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Bt;return r&&ns(va.join(t,"Users",r))?r:null}function qS(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Bt,n=e.windowsUser??Bd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function JS(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function zS(){try{if(ns("/proc/sys/kernel/core_pattern"))return Ld("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Wd("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function XS(e){return!!(e&&/wsl-capture-crash/i.test(e))}function QS(e,r=Bt){let t=va.join(r,"Users",e,".wslconfig");if(!ns(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Ld(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function ZS(e){if(!ns(e))return[];let r=HS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=va.join(e,n.name);try{let s=$S(o),i=JS(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Ut(e={}){if(!(e.forceWsl===void 0?ya():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Bt,n=e.windowsUser??Bd(),o=e.warnBelowBytes??ts("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",jS),s=e.criticalBelowBytes??ts("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",VS),i=e.warnCount??ts("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",GS),a=e.criticalCount??ts("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",YS),l=(e.readCorePattern??zS)(),c=XS(l),u=null;n&&(u=(e.readWslConfig??QS)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=qS({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??ZS)(m)}catch($){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${m}: ${$.message}`,probeError:$.message}}let y=f.reduce(($,C)=>$+C.bytes,0),k=f.length,b=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=y>=s,h=y>=o,w=k>=a,E=k>=i,_=!(g||w||h||E),K=null;if(!_){let $=g||w?"critical":"warning",C=(y/1024**3).toFixed(1),re=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${re}). `+ew({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:_,path:m,windowsUser:n,dumpCount:k,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:K,probeError:null}}function ew(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var jS,VS,GS,YS,os=P(()=>{"use strict";Ra();jS=5*1024*1024*1024,VS=10*1024*1024*1024,GS=2,YS=4});import{statfsSync as rw}from"node:fs";function Gr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??tw,n=e.diskFreeCriticalBytes??nw,o=e.diskMaxUsedPercent??ow,s=e.diskHardMaxUsedPercent??sw,i=rw(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,p=a<t*2,m=p&&c>o,f=p&&c>s,y=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:Md(e.wslHost),b=e.skipWslCrashDumpCheck?null:Ut(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),iw({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function iw(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var tw,nw,ow,sw,Wn=P(()=>{"use strict";os();Ra();tw=30*1024*1024*1024,nw=15*1024*1024*1024,ow=80,sw=90});import{existsSync as aw,readdirSync as lw}from"node:fs";import cw from"node:path";function ar(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=cw.join(N(e.id),"workers");if(!aw(t))return[...r];for(let n of lw(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Ln=P(()=>{"use strict";B();O()});function ba(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Ud(e){let r=e.trim();if(!r)return null;let t=ba(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ba(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ba(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Fd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Ud(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Ud(t);return n||t}var Kd=P(()=>{"use strict"});import{existsSync as uw,readFileSync as dw}from"node:fs";function Hd(e){return e==="complete"}function wr(e){return Hd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!uw(e))return r;let t=Date.now()+pw,n=new Date(t).toISOString(),o=dw(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=Cn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),Hd(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Fd(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var pw,dt=P(()=>{"use strict";Kd();O();pw=6e4});function jd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function ss(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function Vd(e){let r=jd(e[0]);return!!(r&&mw.has(r))}function gw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function hw(e){if(!e||e.includes("*"))return null;let r=gw(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Gd(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Sa(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function kw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function yw(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;$d.has(n)&&(t+=1);continue}r.push(n)}}return r}function Rw(e){let r=!1,t=e.map((o,s)=>{let i=kw(o),a=e[s-1];return a&&$d.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=yw(t);if(n.length===2){let[o,s]=n;if(Sa(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=hw(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function Yd(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function is(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=ss(r);if(!t.length)return{command:r,wrapped:!1};let n=jd(t[0]);if(!n||!fw.has(n))return{command:r,wrapped:!1};let o=Yd(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function vw(e,r){let t=e.trim(),n=ss(t),o=Yd(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function bw(e){let r=e.trim(),t=is(r),n=ss(t.command);if(!n.length||!Vd(n))return{segment:r,changed:!1};let o=Rw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:vw(r,s),changed:!0}:{segment:s,changed:!0}}function wa(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=bw(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function qd(e){let r=is(e).command,t=ss(r.trim());return t.length&&Vd(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Jd(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function Sw(e){let{pattern:r,target:t}=Jd(e);return r?Sa(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Gd(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function ww(e){let{pattern:r,target:t}=Jd(e);if(!r)return null;if(Sa(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Gd(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function xw(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function _w(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function xa(e){let r=e.meta?.trim()||(e.command?_w(e.command):null)||null;if(r){let t=Sw(r),n=xw(t);if(n)return n;let o=ww(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=wa(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var mw,fw,$d,zd=P(()=>{"use strict";mw=new Set(["rg","ripgrep","grep"]),fw=new Set(["bash","sh","dash","zsh"]),$d=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Bn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Pw(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function Un(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Aw(e){let r=e.metadata;if(!Un(r))return null;let t=r.vulnerabilities;if(!Un(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function Iw(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function Ow(e,r){let t=e.error;if(Un(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?Bn(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function Tw(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=Pw(r);if(!t||!Un(t)){let o=Bn(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(Un(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Ow(t,e.stderr)}`};let n=Aw(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Iw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Nw(e){return Ew.test(e)}function Dw(e){let r=is(e).command;return Xd.test(e)||Xd.test(r)||qd(e)}function Mw(e){let r=xa({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&Cw.test(n)){let i=Bn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=wa(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Bn(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function Qd(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Nw(e.command)){let i=r.trim()||n.trim()||t.trim();return Tw({exitCode:e.exitCode,stdout:i,stderr:t})}if(Dw(e.command))return Mw({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=xa({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=Bn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Ew,Xd,Cw,Zd=P(()=>{"use strict";zd();Ew=/\bnpm\s+audit\b/i,Xd=/\b(rg|ripgrep)\b/i,Cw=/\b(error|invalid|unknown|panic|not found)\b/i});function Fn(e){return typeof e=="string"&&Ww.test(e.trim())}function as(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var Ww,ls=P(()=>{"use strict";Ww=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function ep(e,r){if(!r.pinned)return Lw[e.trim()]}function rp(e){return e?["--fallback-model",e]:[]}var Be,pt,Lw,tp,Kn=P(()=>{"use strict";Be="claude-sonnet-5-5",pt="claude-opus-5-5",Lw={[Be]:"claude-sonnet-4-6",[pt]:"claude-opus-4-8"};tp=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function _a(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Bw(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function np(e){if(e.event==="step_update"&&_a(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!_a(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=_a(r.usage)?Bw(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var op=P(()=>{"use strict"});function Ea(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function sp(){return{assistantText:""}}function Uw(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Fw(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(Ea(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function Kw(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function ip(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Uw(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Kw(e))return null;let t=Ea(e.stats)?Fw(e.stats):void 0;if(e.status==="error"){let o=Ea(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var ap=P(()=>{"use strict"});import{existsSync as Hw,readFileSync as $w}from"node:fs";function jw(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Vw(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Gw(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",as(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ft(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Yw(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function qw(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function Jw(e,r){let t=Yw(r);if(!t)return;let n=Ft(t.input_tokens)??Ft(t.inputTokens)??Ft(t.prompt_tokens),o=Ft(t.output_tokens)??Ft(t.outputTokens)??Ft(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=qw(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function zw(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,c=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:c,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function Xw(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function mt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Hw(e))return r;let t=$w(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=sp();for(let s of t){let i=Cn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let m=p;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=jw(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let m=p.find(f=>f?.type==="tool_use");m&&(r.currentTool=String(m.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=Vw(p);m&&(r.currentTool=m)}let l=zw(i);l&&Xw(r,Qd({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=np(i),u=c?null:ip(i,o),d=c??u;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&Gw(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}Jw(r,i)}return r}var Hn=P(()=>{"use strict";Zd();O();ls();Kn();op();ap()});import{accessSync as Qw,constants as Zw,existsSync as ex,readFileSync as rx}from"node:fs";import Ca from"node:path";function cp(e){return Ca.join(e,tx)}function nx(e=process.env,r=process.platform){if(r==="win32")return!1;let t=e.KYNVER_WORKER_EXIT_CAPTURE?.trim().toLowerCase();return!(t==="0"||t==="false"||t==="off")}function lp(e){try{return Qw(e,Zw.X_OK),!0}catch{return!1}}function ox(e,r=process.env){if(!e)return!1;if(e.includes("/"))return lp(e);for(let t of(r.PATH??"").split(Ca.delimiter))if(t&&lp(Ca.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!nx(o,n.platform)?[e,r]:ox(e,o)?[n.nodeExecutable??process.execPath,["-e",sx,cp(t),e,...r]]:[e,r]}function ix(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function cs(e){if(!e)return null;let r=cp(e);if(!ex(r))return null;try{let t=JSON.parse(rx(r,"utf8")),n=t.oomEvidence;return{exitCode:ix(t.exitCode),signal:typeof t.signal=="string"&&t.signal?t.signal:null,...typeof t.startedAt=="string"?{startedAt:t.startedAt}:{},...typeof t.endedAt=="string"?{endedAt:t.endedAt}:{},...typeof t.childPid=="number"?{childPid:t.childPid}:{},...typeof t.spawnError=="string"?{spawnError:t.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function up(e){if(!e)return null;let r=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${r}`:e.exitCode===null?null:`exited with code ${e.exitCode}${r}`}var tx,sx,xr=P(()=>{"use strict";tx="exit.json";sx=String.raw`"use strict";
|
|
10
10
|
const cp = require("child_process"), fs = require("fs");
|
|
11
11
|
const argv = process.argv.slice(1);
|
|
12
12
|
const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
|
|
@@ -72,42 +72,44 @@ child.on("error", (e) => {
|
|
|
72
72
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
73
73
|
});
|
|
74
74
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
75
|
-
`});import Zw from"node:path";function Sa(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&rx.has(r)}function os(e){return!!(e&&ex.test(e))}function cp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Sa(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||os(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":ap.test(r)||ap.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function up(e){let r=[tx(e.stopClass)],t=ip(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function tx(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function dp(e,r=process.env){if(e<=0)return null;let t=Number.parseInt(r.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(t)&&t>0?Math.max(t,lp/2):lp/2;return Math.min(nx,n*2**e)}function pp(e,r,t){let n=0,o;try{o=q(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(t&&s===t)continue;let i=I(Zw.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(ns(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&os(Dt(i.stderrPath,20))&&(n+=1)}}return n}function mp(e,r){if(!e)return r();let t=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return r()}finally{t===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=t,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var ex,ap,rx,lp,nx,wa=P(()=>{"use strict";B();O();wr();ex=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,ap=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,rx=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);lp=2048,nx=8192});function fp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Fn(e){let r=(e??"").trim();if(!r)return null;if(Ln(r))return{blocked:!0,reason:`provider authentication failed: ${fp(r)}`};for(let t of ox)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fp(r)}`};return null}var ox,xa=P(()=>{"use strict";ts();Bn();ox=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:Qd,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function gp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function sx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ix(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gp(e.head)}function ax(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Ft(e){if(e.alive||sx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gp(e.headCommit)??ix(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:ax(s,r,t)}}var ss=P(()=>{"use strict"});import{existsSync as lx,readFileSync as cx,statSync as yp}from"node:fs";import is from"node:path";function mx(e,r=process.env){let t=e?dx:ux,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function fx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function _a(e){try{return yp(e).mtimeMs}catch{return-1}}function gx(e){let r=is.join(e,".git");try{if(yp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(cx(r,"utf8"));return t?is.resolve(e,t[1].trim()):null}catch{return null}}function hp(e){let r=gx(e);return[_a(e),r?_a(is.join(r,"HEAD")):-2,r?_a(is.join(r,"index")):-2].join(":")}function kp(e,r){return{changedFiles:En(e),gitAncestry:Go(e,{base:r.base,baseCommit:r.baseCommit})}}function hx(e,r){for(Gr.delete(e),Gr.set(e,r);Gr.size>px;){let t=Gr.keys().next().value;if(t===void 0)break;Gr.delete(t)}}function Rp(e,r,t){let n=fx(r);if(!e||!e.trim())return Kn.missingWorktree++,{changedFiles:[],gitAncestry:Wt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!lx(e))return Gr.delete(o),Kn.missingWorktree++,{changedFiles:[],gitAncestry:Wt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Gr.delete(o),Kn.liveProbes++,kp(e,r);let s=t.ttlMs??mx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=hp(e),l=Gr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Kn.hits++,l.probe;Kn.misses++;let c=kp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();hx(o,{fingerprint:hp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var ux,dx,px,Gr,Kn,vp=P(()=>{"use strict";de();ux=10*6e4,dx=60*6e4,px=2048,Gr=new Map,Kn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Hn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function yx(e){if(Hn(e.headCommit)||Hn(e.prUrl)||Hn(e.artifactBundlePath)||Hn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Hn(r.head))}function Kt(e){return kx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:yx(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function bp(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var as=P(()=>{"use strict"});function Ea(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Sp(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Ht(e){let r=e.trim();if(!r)return null;let t=Ea(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ea(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ea(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Sp(l);for(let u of n){let d=Sp(u);d>c&&(l=u,c=d)}return l}var ls=P(()=>{"use strict"});function wp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function xp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Rx(e){return new Set(e.map(r=>xp(wp(r)??r)).filter(Boolean))}function _p(e,r,t){let n=wp(e)??e;if(!n)return"unrelated";let o=xp(n);return Rx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ep=P(()=>{"use strict"});function $t(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function vx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function pt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:$t(e)}function cs(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Cp(e){let r=null;if(typeof e=="string"){let o=Ht(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=pt(String(s.prUrl??s.pr_url??"")),a=$t(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:$t(s.mergeCommit??s.merge_commit),reason:$t(s.reason)})}return n}function Pp(e,r){let t=[],n=pt($t(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=pt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ap(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!vx(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?pt($t(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?pt(r.targetPrUrls[0]):null):null;if(s){let d=Pp(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Cp(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Cp(n),a=new Map(i.map(d=>[cs(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>cs(pt(d)??d)).filter(Boolean)),c=Pp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(cs(d)),m=_p(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=cs(pt(d)??d),m=a.get(p);if(!m){u.push(p);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(p)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Ip(e){if(e.blocked)return e.detail??e.reason}var Op=P(()=>{"use strict";ls();Ep()});function Sx(e){let r=Date.now();if(e.providerTerminalError||rs(e.finalResult)||e.finalResult&&e.error?.trim()||Ln(e.error)||Ln(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Fn(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Tp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&xx(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Kt(o);if(s.blocked){let i=bp(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ap({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ip(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(wx(e))return{state:"done",reason:"empty abandoned worker record"};let o=Fn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ft({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=os(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>bx)return{state:"needs_attention",reason:`no first stream event ${ta(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ca?{state:"stale",reason:`no log/event/heartbeat activity for ${ta(n)}s`}:{state:"ok",reason:"recent activity"}}function Tp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function wx(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function xx(e){let r=null;if(typeof e=="string"?r=Ht(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Np(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Sr(t))}function Dp(e){let r=dt(e.stdoutPath),t=me(e.heartbeatPath);return Np(e,r.finalResult,t)}function J(e,r={}){let t=dt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Np(e,t.finalResult,n),i=o?!1:Y(e.pid),a=Ho(e.stdoutPath),l=Ho(e.stderrPath),c=Ho(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=ed([t.lastEventAt,n.lastHeartbeatAt,$o(e.stdoutPath),$o(e.stderrPath),$o(e.heartbeatPath)]),m=i?null:ns(e.workerDir),f=s&&!Sa(s)?s:null,y=t.error||!i&&!s&&Dt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Dt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Tp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Sx({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:h,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),E=g||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",S=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,_=cp({alive:i,finalResult:s,error:k??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),K=S&&!i&&!f?S:_,$=K==="running"||K==="finished"?null:(S===K?e.stopReason:void 0)??up({stopClass:K,exit:m,error:k??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:E,stopClass:K,stopReason:$,exit:m,attention:w,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function we(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Mp(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Pa(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var bx,Ca,fe=P(()=>{"use strict";ct();Un();wa();wr();ts();xa();ss();vp();as();Op();ls();O();bx=18e4,Ca=6e5});import{readFileSync as _x}from"node:fs";function Ex(e){if(!e||process.platform!=="linux")return null;try{return _x(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wp(e){if(!e.pid||process.platform!=="linux")return!0;let r=Ex(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function Yr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!Wp(e)?!1:!Dp(e)}var us=P(()=>{"use strict";fe();O()});import Bp from"node:os";import Up from"node:path";function Lp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Cx(e=U(),r,t){let n=Lp(e.perWorkerMemBytes,ds),o=Lp(e.memReserveBytes,ps),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ms)),i=gs({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Bp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Fp(e,r={}){let t=r.perWorkerMemBytes??ds,n=r.memReserveBytes??ps,o=r.memUtilization??ms,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,fs)}function Px(){return Ad()}function Ax(e){let r=0;for(let t of ir(e)){let n=I(Up.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!Yr(n)||r++}return r}function Aa(){let e=0;for(let r of Xe())e+=Ax(r);return e}function jt(){let e=[];for(let r of Xe())for(let t of ir(r)){let n=I(Up.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&Yr(n)&&e.push({runId:r.id,workerName:t})}return e}function $n(e){let r=e.config??U(),t=e.totalMemBytes??Bp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Cx(r,e.configuredMaxWorkersOverride,t),c=br(r),u=e.freeMemBytes??Px(),d=e.activeWorkers??Aa(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Tn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Vr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var ds,ps,ms,fs,Vt=P(()=>{"use strict";Id();H();We();Jo();hs();Nn();B();Dn();us();O();ds=500*1024*1024,ps=4*1024*1024*1024,ms=.85,fs=64});function jn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function gs(e){let r=e.config??{},t=e.env??process.env,n=jn(r.perWorkerMemBytes,ds),o=jn(r.memReserveBytes,ps),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ms)),i=Fp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:jn(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=jn(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,fs),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&jn(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,fs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var hs=P(()=>{"use strict";Vt()});import{homedir as Ix}from"node:os";import Ox from"node:path";var Kp,Ia=P(()=>{"use strict";Kp=Ox.join(Ix(),".kynver",".env")});var Hp=P(()=>{"use strict"});var $p=P(()=>{"use strict";Hp()});var jp=P(()=>{"use strict"});var Oa=P(()=>{"use strict";$p();jp();_n()});import{existsSync as Tx,readFileSync as Nx}from"node:fs";function Ta(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Tx("/proc/version")){let e=Nx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Na=P(()=>{"use strict"});var Vp=P(()=>{"use strict";Na()});var ks=P(()=>{"use strict";Ia();jr();H();Oa();Vp()});import Mx from"node:os";function Da(e,r){let t=(r??Mx.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function qp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Jp(e,r){let t=e.trim();if(!t)return Da(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=qp(t.slice(n+1));return s?`${o}:${s}`:Da(o)}return`${r}:${qp(t)}`}function ys(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jp(r,e.boxKind):Da(e.boxKind,e.hostLabel)}var Rs=P(()=>{"use strict";We();We()});var zp=P(()=>{"use strict";Ia();Oa();ks()});function bs(){return vs}function Qp(e){if(!vs)return e;if(!Xp)throw new Ma;return Xp}function Qe(e,r=process.env){if(vs)return;let t=r[e]?.trim();return t||void 0}function La(){if(vs)throw new Wa}var Ma,Wa,vs,Xp,Vn=P(()=>{"use strict";Ma=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Wa=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},vs=!1,Xp=null});import{existsSync as xr,mkdirSync as Wx,readdirSync as Ss,renameSync as Zp,statSync as Lx}from"node:fs";import _r from"node:path";function rm(e){try{return Lx(e).isDirectory()}catch{return!1}}function Bx(e){if(!xr(e))return!0;for(let r of em){let t=_r.join(e,r);if(xr(t)&&(!rm(t)||Ss(t).length>0))return!1}return!0}function Ux(e){let r=_r.join(e,"runs");if(!xr(r)||!rm(r))return!1;for(let t of Ss(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=_r.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function Fx(e){let r=_r.join(e,"runs");if(!xr(r))return!1;for(let t of Ss(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(_r.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Kx(e){let r=_r.join(e,"ghost");return xr(r)?!xr(_r.join(r,"runs")):Fx(e)}function tm(e){return Ux(e.sharedRoot)?Bx(e.forgeRoot)?Kx(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function nm(e,r){Wx(r,{recursive:!0});for(let t of em){let n=_r.join(e,t),o=_r.join(r,t);if(xr(n)){if(xr(o)&&Ss(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(xr(o)){Zp(n,o);continue}Zp(n,o)}}}var em,om=P(()=>{"use strict";O();em=["runs","worktrees"]});import{existsSync as ve}from"node:fs";import{homedir as Hx}from"node:os";import ge from"node:path";function Ba(e=process.env){return e.HOME?.trim()||Hx()}function Ua(e=process.env){return ge.join(Ba(e),".kynver","harness")}function ws(e){let r=ge.resolve(Me(e.trim()));for(;$x.has(ge.basename(r));)r=ge.dirname(r);return r}function jx(e,r=process.env){return ge.join(Ua(r),e)}function Vx(e=process.env){let r=Ua(e);if(ve(ge.join(r,"runs")))return!0;if(ve(r)&&!ve(ge.join(r,"ghost"))&&!ve(ge.join(r,"forge")))return ve(r);let t=ge.join(Ba(e),sm);return ve(t)}function xs(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:ws(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:ws(n),source:"config"};let o=jx(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!Gx(o))return{harnessRoot:o,source:"box_scoped"};let i=Ua(r);if(e.boxKind==="forge"){let a=tm({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&nm(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Vx(r)){if(ve(ge.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(ve(i)&&!ve(ge.join(i,"ghost"))&&!ve(ge.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=ge.join(Ba(r),sm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Gx(e){if(!ve(e))return!0;for(let r of["runs","worktrees"]){let t=ge.join(e,r);if(ve(t))return!1}return!0}var sm,$x,Fa=P(()=>{"use strict";jr();om();sm=ge.join(".openclaw","harness");$x=new Set(["runs","worktrees"])});import im from"node:os";function _s(e){return e?.trim()?e.trim():null}function Yx(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function qx(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Gt(e=U(),r=process.env,t={}){let n=vr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||_s(r.KYNVER_BOX_KIND)),a=t.strict===!0||qx(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=_s(e.runnerId),c=_s(r.KYNVER_RUNTIME_ID)??_s(r.OPENCLAW_RUNTIME_ID),u=l??c??Yx(n.boxKind,im.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=gs({config:e,env:r,totalMemBytes:im.totalmem()}),m=Tn(n.boxKind,p.configuredMaxWorkers??da(n.boxKind,p.autoCap)),f=xs({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Gn=P(()=>{"use strict";H();We();Jo();hs();Fa()});var lm=P(()=>{"use strict";Cn();We();Rs();H();ks();zp();On();Vn();Gn()});function ar(e){let r=e.trim().toLowerCase();return Xx[r]??r}var cm,zx,Xx,Es=P(()=>{"use strict";cm=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],zx=cm.join("|"),Xx={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var um=P(()=>{"use strict";jr()});var dm=P(()=>{"use strict";um()});import{execFileSync as Qx}from"node:child_process";function $a(e=process.env){let r=e[Zx]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function e_(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return Qx(e,r,n)}function r_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Ka(e,r){let t=JSON.stringify(mt),n=JSON.stringify(r),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${t}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${t}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}`}function pm(e={}){if($a(e.env??process.env)==="file")return null;let t=r_(e.platform??process.platform);return t?new Ha(t,e.exec):null}var mt,Zx,Er,Ha,mm=P(()=>{"use strict";mt="kynver",Zx="KYNVER_CREDENTIAL_STORE";Er=5e3;Ha=class{constructor(r,t=e_){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",mt,"-a",r,"-w"],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",mt,"account",r],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("get",r)],{timeoutMs:Er}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(r,t){if(!t||/[\r\n]/.test(t))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",mt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",mt,"account",r],{input:`${t}
|
|
76
|
-
|
|
77
|
-
`,timeoutMs:
|
|
78
|
-
`,
|
|
75
|
+
`});import ax from"node:path";function Pa(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&cx.has(r)}function us(e){return!!(e&&lx.test(e))}function mp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Pa(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||us(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":dp.test(r)||dp.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function fp(e){let r=[ux(e.stopClass)],t=up(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function ux(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function gp(e,r=process.env){if(e<=0)return null;let t=Number.parseInt(r.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(t)&&t>0?Math.max(t,pp/2):pp/2;return Math.min(dx,n*2**e)}function hp(e,r,t){let n=0,o;try{o=q(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(t&&s===t)continue;let i=I(ax.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(cs(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&us(Mt(i.stderrPath,20))&&(n+=1)}}return n}function kp(e,r){if(!e)return r();let t=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return r()}finally{t===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=t,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var lx,dp,cx,pp,dx,Aa=P(()=>{"use strict";B();O();xr();lx=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,dp=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,cx=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);pp=2048,dx=8192});function yp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function $n(e){let r=(e??"").trim();if(!r)return null;if(Fn(r))return{blocked:!0,reason:`provider authentication failed: ${yp(r)}`};for(let t of px)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${yp(r)}`};return null}var px,Ia=P(()=>{"use strict";ls();Kn();px=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:tp,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Rp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function fx(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Rp(e.head)}function gx(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Kt(e){if(e.alive||mx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Rp(e.headCommit)??fx(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:gx(s,r,t)}}var ds=P(()=>{"use strict"});import{existsSync as hx,readFileSync as kx,statSync as Sp}from"node:fs";import ps from"node:path";function bx(e,r=process.env){let t=e?Rx:yx,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function Sx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Oa(e){try{return Sp(e).mtimeMs}catch{return-1}}function wx(e){let r=ps.join(e,".git");try{if(Sp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(kx(r,"utf8"));return t?ps.resolve(e,t[1].trim()):null}catch{return null}}function vp(e){let r=wx(e);return[Oa(e),r?Oa(ps.join(r,"HEAD")):-2,r?Oa(ps.join(r,"index")):-2].join(":")}function bp(e,r){return{changedFiles:An(e),gitAncestry:Qo(e,{base:r.base,baseCommit:r.baseCommit})}}function xx(e,r){for(Yr.delete(e),Yr.set(e,r);Yr.size>vx;){let t=Yr.keys().next().value;if(t===void 0)break;Yr.delete(t)}}function wp(e,r,t){let n=Sx(r);if(!e||!e.trim())return jn.missingWorktree++,{changedFiles:[],gitAncestry:Lt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!hx(e))return Yr.delete(o),jn.missingWorktree++,{changedFiles:[],gitAncestry:Lt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Yr.delete(o),jn.liveProbes++,bp(e,r);let s=t.ttlMs??bx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=vp(e),l=Yr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return jn.hits++,l.probe;jn.misses++;let c=bp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();xx(o,{fingerprint:vp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var yx,Rx,vx,Yr,jn,xp=P(()=>{"use strict";de();yx=10*6e4,Rx=60*6e4,vx=2048,Yr=new Map,jn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Vn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _x(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Ex(e){if(Vn(e.headCommit)||Vn(e.prUrl)||Vn(e.artifactBundlePath)||Vn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Vn(r.head))}function Ht(e){return _x(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Ex(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function _p(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var ms=P(()=>{"use strict"});function Ta(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Ep(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function $t(e){let r=e.trim();if(!r)return null;let t=Ta(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ta(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ta(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Ep(l);for(let u of n){let d=Ep(u);d>c&&(l=u,c=d)}return l}var fs=P(()=>{"use strict"});function Cp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function Pp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Cx(e){return new Set(e.map(r=>Pp(Cp(r)??r)).filter(Boolean))}function Ap(e,r,t){let n=Cp(e)??e;if(!n)return"unrelated";let o=Pp(n);return Cx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ip=P(()=>{"use strict"});function jt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Px(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ft(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:jt(e)}function gs(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Op(e){let r=null;if(typeof e=="string"){let o=$t(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=ft(String(s.prUrl??s.pr_url??"")),a=jt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:jt(s.mergeCommit??s.merge_commit),reason:jt(s.reason)})}return n}function Tp(e,r){let t=[],n=ft(jt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=ft(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Np(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Px(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?ft(jt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?ft(r.targetPrUrls[0]):null):null;if(s){let d=Tp(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Op(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Op(n),a=new Map(i.map(d=>[gs(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>gs(ft(d)??d)).filter(Boolean)),c=Tp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(gs(d)),m=Ap(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=gs(ft(d)??d),m=a.get(p);if(!m){u.push(p);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(p)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Dp(e){if(e.blocked)return e.detail??e.reason}var Mp=P(()=>{"use strict";fs();Ip()});function Ix(e){let r=Date.now();if(e.providerTerminalError||as(e.finalResult)||e.finalResult&&e.error?.trim()||Fn(e.error)||Fn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:$n(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Wp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Tx(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ht(o);if(s.blocked){let i=_p(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Np({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Dp(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Ox(e))return{state:"done",reason:"empty abandoned worker record"};let o=$n(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Kt({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=us(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Ax)return{state:"needs_attention",reason:`no first stream event ${la(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Na?{state:"stale",reason:`no log/event/heartbeat activity for ${la(n)}s`}:{state:"ok",reason:"recent activity"}}function Wp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ox(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Tx(e){let r=null;if(typeof e=="string"?r=$t(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Lp(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??wr(t))}function Bp(e){let r=mt(e.stdoutPath),t=me(e.heartbeatPath);return Lp(e,r.finalResult,t)}function J(e,r={}){let t=mt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Lp(e,t.finalResult,n),i=o?!1:Y(e.pid),a=qo(e.stdoutPath),l=qo(e.stderrPath),c=qo(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=wp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=od([t.lastEventAt,n.lastHeartbeatAt,Jo(e.stdoutPath),Jo(e.stderrPath),Jo(e.heartbeatPath)]),m=i?null:cs(e.workerDir),f=s&&!Pa(s)?s:null,y=t.error||!i&&!s&&Mt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Mt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Wp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Ix({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:h,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),E=g||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",S=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,_=mp({alive:i,finalResult:s,error:k??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),K=S&&!i&&!f?S:_,$=K==="running"||K==="finished"?null:(S===K?e.stopReason:void 0)??fp({stopClass:K,exit:m,error:k??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:E,stopClass:K,stopReason:$,exit:m,attention:w,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function xe(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Up(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Da(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var Ax,Na,fe=P(()=>{"use strict";dt();Hn();Aa();xr();ls();Ia();ds();xp();ms();Mp();fs();O();Ax=18e4,Na=6e5});import{readFileSync as Nx}from"node:fs";function Dx(e){if(!e||process.platform!=="linux")return null;try{return Nx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Fp(e){if(!e.pid||process.platform!=="linux")return!0;let r=Dx(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function qr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!Fp(e)?!1:!Bp(e)}var hs=P(()=>{"use strict";fe();O()});import Hp from"node:os";import $p from"node:path";function Kp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Mx(e=U(),r,t){let n=Kp(e.perWorkerMemBytes,ks),o=Kp(e.memReserveBytes,ys),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Rs)),i=bs({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Hp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function jp(e,r={}){let t=r.perWorkerMemBytes??ks,n=r.memReserveBytes??ys,o=r.memUtilization??Rs,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,vs)}function Wx(){return Nd()}function Lx(e){let r=0;for(let t of ar(e)){let n=I($p.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!qr(n)||r++}return r}function Ma(){let e=0;for(let r of Xe())e+=Lx(r);return e}function Vt(){let e=[];for(let r of Xe())for(let t of ar(r)){let n=I($p.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&qr(n)&&e.push({runId:r.id,workerName:t})}return e}function Gn(e){let r=e.config??U(),t=e.totalMemBytes??Hp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Mx(r,e.configuredMaxWorkersOverride,t),c=Sr(r),u=e.freeMemBytes??Wx(),d=e.activeWorkers??Ma(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Mn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Gr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var ks,ys,Rs,vs,Gt=P(()=>{"use strict";Dd();H();Le();rs();Ss();Wn();B();Ln();hs();O();ks=500*1024*1024,ys=4*1024*1024*1024,Rs=.85,vs=64});function Yn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function bs(e){let r=e.config??{},t=e.env??process.env,n=Yn(r.perWorkerMemBytes,ks),o=Yn(r.memReserveBytes,ys),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Rs)),i=jp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Yn(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Yn(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,vs),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Yn(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,vs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Ss=P(()=>{"use strict";Gt()});import{homedir as Bx}from"node:os";import Ux from"node:path";var Vp,Wa=P(()=>{"use strict";Vp=Ux.join(Bx(),".kynver",".env")});var Gp=P(()=>{"use strict"});var Yp=P(()=>{"use strict";Gp()});var qp=P(()=>{"use strict"});var La=P(()=>{"use strict";Yp();qp();Pn()});import{existsSync as Fx,readFileSync as Kx}from"node:fs";function Ba(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Fx("/proc/version")){let e=Kx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ua=P(()=>{"use strict"});var Jp=P(()=>{"use strict";Ua()});var ws=P(()=>{"use strict";Wa();Vr();H();La();Jp()});import $x from"node:os";function Fa(e,r){let t=(r??$x.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Qp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Zp(e,r){let t=e.trim();if(!t)return Fa(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=Qp(t.slice(n+1));return s?`${o}:${s}`:Fa(o)}return`${r}:${Qp(t)}`}function xs(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Zp(r,e.boxKind):Fa(e.boxKind,e.hostLabel)}var _s=P(()=>{"use strict";Le();Le()});var em=P(()=>{"use strict";Wa();La();ws()});function Cs(){return Es}function tm(e){if(!Es)return e;if(!rm)throw new Ka;return rm}function Qe(e,r=process.env){if(Es)return;let t=r[e]?.trim();return t||void 0}function $a(){if(Es)throw new Ha}var Ka,Ha,Es,rm,qn=P(()=>{"use strict";Ka=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ha=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Es=!1,rm=null});import{existsSync as _r,mkdirSync as jx,readdirSync as Ps,renameSync as nm,statSync as Vx}from"node:fs";import Er from"node:path";function sm(e){try{return Vx(e).isDirectory()}catch{return!1}}function Gx(e){if(!_r(e))return!0;for(let r of om){let t=Er.join(e,r);if(_r(t)&&(!sm(t)||Ps(t).length>0))return!1}return!0}function Yx(e){let r=Er.join(e,"runs");if(!_r(r)||!sm(r))return!1;for(let t of Ps(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Er.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function qx(e){let r=Er.join(e,"runs");if(!_r(r))return!1;for(let t of Ps(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(Er.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Jx(e){let r=Er.join(e,"ghost");return _r(r)?!_r(Er.join(r,"runs")):qx(e)}function im(e){return Yx(e.sharedRoot)?Gx(e.forgeRoot)?Jx(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function am(e,r){jx(r,{recursive:!0});for(let t of om){let n=Er.join(e,t),o=Er.join(r,t);if(_r(n)){if(_r(o)&&Ps(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(_r(o)){nm(n,o);continue}nm(n,o)}}}var om,lm=P(()=>{"use strict";O();om=["runs","worktrees"]});import{existsSync as ve}from"node:fs";import{homedir as zx}from"node:os";import ge from"node:path";function ja(e=process.env){return e.HOME?.trim()||zx()}function Va(e=process.env){return ge.join(ja(e),".kynver","harness")}function As(e){let r=ge.resolve(We(e.trim()));for(;Xx.has(ge.basename(r));)r=ge.dirname(r);return r}function Qx(e,r=process.env){return ge.join(Va(r),e)}function Zx(e=process.env){let r=Va(e);if(ve(ge.join(r,"runs")))return!0;if(ve(r)&&!ve(ge.join(r,"ghost"))&&!ve(ge.join(r,"forge")))return ve(r);let t=ge.join(ja(e),cm);return ve(t)}function Is(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:As(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:As(n),source:"config"};let o=Qx(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!e_(o))return{harnessRoot:o,source:"box_scoped"};let i=Va(r);if(e.boxKind==="forge"){let a=im({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&am(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Zx(r)){if(ve(ge.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(ve(i)&&!ve(ge.join(i,"ghost"))&&!ve(ge.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=ge.join(ja(r),cm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function e_(e){if(!ve(e))return!0;for(let r of["runs","worktrees"]){let t=ge.join(e,r);if(ve(t))return!1}return!0}var cm,Xx,Ga=P(()=>{"use strict";Vr();lm();cm=ge.join(".openclaw","harness");Xx=new Set(["runs","worktrees"])});import um from"node:os";function Os(e){return e?.trim()?e.trim():null}function r_(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function t_(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Yt(e=U(),r=process.env,t={}){let n=br(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Os(r.KYNVER_BOX_KIND)),a=t.strict===!0||t_(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=Os(e.runnerId),c=Os(r.KYNVER_RUNTIME_ID)??Os(r.OPENCLAW_RUNTIME_ID),u=l??c??r_(n.boxKind,um.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=bs({config:e,env:r,totalMemBytes:um.totalmem()}),m=Mn(n.boxKind,p.configuredMaxWorkers??ka(n.boxKind,p.autoCap)),f=Is({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 Jn=P(()=>{"use strict";H();Le();rs();Ss();Ga()});var pm=P(()=>{"use strict";In();Le();_s();H();ws();em();Dn();qn();Jn()});function lr(e){let r=e.trim().toLowerCase();return s_[r]??r}var mm,o_,s_,Ts=P(()=>{"use strict";mm=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],o_=mm.join("|"),s_={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var fm=P(()=>{"use strict";Vr()});var gm=P(()=>{"use strict";fm()});import{execFileSync as i_}from"node:child_process";function Ja(e=process.env){let r=e[l_]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function c_(e,r,t){if(!hm.test(e)||!hm.test(r))return null;let n=Buffer.from(t,"utf8").toString("hex");return`add-generic-password -U -s ${e} -a ${r} -l Kynver-${r} -X ${n}
|
|
76
|
+
`}function u_(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return i_(e,r,n)}function d_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Ya(e,r,t){let n=JSON.stringify(t),o=JSON.stringify(r),s="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${s} try { $c = $v.Retrieve(${n}, ${o}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${s} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${n}, ${o}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${n}, ${o}, $s)))`:`${s} try { $old = $v.Retrieve(${n}, ${o}); $v.Remove($old) } catch {}`}function km(e={}){if(Ja(e.env??process.env)==="file")return null;let t=d_(e.platform??process.platform);return t?new qa(t,e.exec,e.service):null}var a_,l_,Cr,hm,qa,ym=P(()=>{"use strict";a_="kynver",l_="KYNVER_CREDENTIAL_STORE";Cr=5e3,hm=/^[A-Za-z0-9_.@:-]{1,128}$/;qa=class{constructor(r,t=u_,n=a_){this.backend=r;this.exec=t;this.service=n}backend;exec;service;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",this.service,"-a",r,"-w"],{timeoutMs:Cr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",this.service,"account",r],{timeoutMs:Cr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ya("get",r,this.service)],{timeoutMs:Cr}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(r,t){if(!t||/[\r\n]/.test(t))return!1;try{if(this.backend==="macos"){let n=c_(this.service,r,t);if(!n)return!1;this.exec("security",["-i"],{input:n,timeoutMs:Cr})}else this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",this.service,"account",r],{input:`${t}
|
|
77
|
+
`,timeoutMs:Cr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ya("set",r,this.service)],{input:`${t}
|
|
78
|
+
`,timeoutMs:Cr})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",this.service,"-a",r],{timeoutMs:Cr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",this.service,"account",r],{timeoutMs:Cr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ya("delete",r,this.service)],{timeoutMs:Cr})}catch{}}}});function zn(){return za||(za=new Xa),za}var Qa,p_,Ns,Xa,za,Za=P(()=>{"use strict";ym();Qa="api-key",p_=6e4,Ns=class extends Error{constructor(r){super(`KYNVER_CREDENTIAL_STORE=keychain but the OS keychain could not store "${r}"; refusing to write the secret to disk`),this.name="KeychainUnavailableError"}},Xa=class{cache=new Map;keychain;env;now;constructor(r={}){this.env=r.env??process.env,this.keychain=r.keychain===void 0?km({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<p_)return t.value;let n=this.keychain.get(r);return this.cache.set(r,{value:n,at:this.now()}),n}write(r,t){let n=Ja(this.env);if(!this.keychain){if(n==="keychain")throw new Ns(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 Ns(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},za=null});import{existsSync as vm,mkdirSync as f_,readFileSync as bm,writeFileSync as g_}from"node:fs";import{homedir as h_,totalmem as MF}from"node:os";import tl from"node:path";function k_(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:We(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:We(e.defaultRepo.trim())}:{}}}function Sm(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!vd(We(r))?e:{...e,defaultBase:Rd}}function y_(){if(!vm(Rm))return null;try{return JSON.parse(bm(Rm,"utf8"))}catch{return null}}function U(){let e=y_();return e?Sm(k_(e)):{}}function Ds(){if($a(),!vm(el))return{};try{return JSON.parse(bm(el,"utf8"))}catch{return{}}}function rl(e){$a(),f_(nl,{recursive:!0}),g_(el,`${JSON.stringify(e,null,2)}
|
|
79
|
+
`,{mode:384})}function R_(e,r,t,n={}){let o=Ds();if(zn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),rl(i);return}rl({...o,...n,[r]:t})}function v_(e,r){let t=zn().read(e);return t||Ds()[r]}function ol(){return tm(b_)}function Pr(){return ol().getApiKey()}function qt(e){return ol().getRunnerToken(e)}function sl(e,r){ol().persistRunnerToken(e,r)}function Q(e){let r=Xn(e);return r||_m("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function il(e){return Xn(e)}function Xn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||U().apiBaseUrl;return Tn(r)}function S_(e,r){let t=e||qt(r)||(r?void 0:qt(U().agentOsId));if(t)return String(t);let n=Qe("KYNVER_RUNTIME_SECRET")||Qe("KYNVER_CRON_SECRET")||Qe("OPENCLAW_CRON_SECRET");if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function w_(e,r,t){let n=S_(e,r);if(n)return{ok:!0,secret:n};let o=Pr(),s=Xn(t?.baseUrl);if(o&&r&&s)try{let i=await al(r,{baseUrl:s,apiKey:o});return sl(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function ee(e,r,t){let n=await w_(e,r,t);if(n.ok)return n.secret;_m(n.reason)}async function wm(e,r){let t=Pr(),n=Xn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await al(e,{baseUrl:n,apiKey:t});return sl(e,o),o}catch{return null}}async function xm(e,r,t){let n=Pr(),o=Xn(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await al(r,{baseUrl:o,apiKey:n});return s&&s!==e?(sl(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function al(e,r){let t=r?.apiKey||Pr();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${Q(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await Nn(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 _m(e){console.error(e),process.exit(1)}var nl,Rm,el,ZF,eK,b_,H=P(()=>{"use strict";In();Vr();fa();Cd();Dn();Le();rs();Ss();Wn();ws();pm();Ts();Jn();gm();qn();Za();nl=tl.join(h_(),".kynver"),Rm=tl.join(nl,"config.json"),el=tl.join(nl,"credentials");ZF=500*1024*1024,eK=4*1024*1024*1024;b_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:v_(Qa,"apiKey")},getRunnerToken(e){let r=Ds();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){R_(Qa,"apiKey",e)},persistRunnerToken(e,r){rl({...Ds(),runnerToken:r,runnerTokenAgentOsId:e})}}});import ll from"node:path";function he(e){return As(e)}function Ue(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return he(e);let r=U(),t=r.harnessRoot?.trim();if(t)return he(t);let n=Yt(r,process.env);return n.identity?n.identity.harnessRoot:Is({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return ll.join(he(e),"runs")}function Jt(e){return ll.join(he(e),"worktrees")}function Em(){let e=Ue();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:Jt(e)}}function Ar(e,r){return ll.join(e,x(r))}var Ze=P(()=>{"use strict";H();Ga();Jn();O()});import{existsSync as Ms,readdirSync as x_,statSync as __}from"node:fs";import gt from"node:path";function le(){return Em()}function q(e){let{runsDir:r}=le(),t=gt.join(Ar(r,x(e)),"run.json");return Ms(t)||Je(`run '${e}' not found`),I(t)}function Xe(){let{runsDir:e}=le();return Cm(e)}function Ws(e){return Cm(Ae(e))}function E_(e){try{return __(e).isDirectory()}catch{return!1}}function Cm(e){if(!Ms(e))return[];let r=[];for(let t of x_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=gt.join(e,t.name);if(!E_(n))continue;let o=I(gt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function zt(e,r){let{runsDir:t}=le(),n=gt.join(Ar(t,x(e)),"run.json"),o=gt.join(Ar(t,x(e)),"workers",x(r),"worker.json");return Ms(o)||(Ms(n)||Je(`run '${e}' not found`),Je(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=le();ue(gt.join(Ar(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(gt.join(Ar(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return Qn(r,e)}function Qn(e,r){return Ar(Ae(e),x(r))}var B=P(()=>{"use strict";Ze();O()});import{parentPort as Ob,workerData as uL}from"node:worker_threads";var xn=null,Ju=-1,zu=0;function Xu(e){xn=e}function Qu(e=Date.now()){return!xn||xn.stallCount===Ju&&e-zu<9e5?null:(Ju=xn.stallCount,zu=e,xn)}var Wb="embedded-1",Lb=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],Bb={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
79
80
|
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
80
81
|
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
81
82
|
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
|
82
|
-
`)},Ob={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Nt={version:Pb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Ab,instructions:Ib,policyThresholds:Ob};var Sn=Nt,Tb="embedded";function Ju(){return Sn.version}function zu(e,r){Sn=e,Tb=r}function wn(e){let r=Sn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Nt.instructions[e];return typeof t=="string"?t:""}function ea(e,r){let t=Sn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Nt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Xu(e){if(!e)return null;let r=e.trim().toLowerCase();return Sn.personas.find(t=>t.slug===r)??null}_n();import yb from"node:path";B();us();O();import k_ from"node:path";function y_(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Os(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(k_.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!Yr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...y_(o)})}return t}H();function zn(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}On();H();function xm(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}function wm(e){return new Error(`callback timeout after ${e}ms`)}async function _m(e,r){let t=xm(r),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(wm(t))},t)})])}catch(i){throw s?wm(t):i}finally{o&&clearTimeout(o)}}function Em(e,r){let t=xm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function gt(e,r,t,n){try{return await _m(async o=>{let s=await In(e,{method:"POST",headers:zn(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Em(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await gt(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Rm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await gt(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function nl(e,r,t){try{return await _m(async n=>{let o=await In(e,{method:"GET",headers:zn(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Em(n,t?.timeoutMs)}}H();Vn();import{spawnSync as O_}from"node:child_process";import{randomBytes as T_}from"node:crypto";import{createPublicKey as x_,verify as __}from"node:crypto";import{createHash as R_,createPublicKey as tK,verify as nK}from"node:crypto";function sl(e){return JSON.stringify(ol(e))}function ol(e){if(Array.isArray(e))return e.map(ol);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ol(e[t]);return r}return e}function il(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function Cm(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=il(t);n&&r.push(n)}return r}function Pm(e=process.env){if(e.NODE_ENV==="production")return!1;let r=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var sK=Buffer.from("302a300506032b6570032100","hex"),Am="ca-6297fb8e1773",v_={[Am]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function b_(e){return`ca-${R_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Im(e,r=process.env){let t=Cm(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>b_(o)===e)??null;let n=v_[e];return!n||e===Am&&!Pm(r)?null:il(n)}var S_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,w_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Ts(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(S_)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(t))return"read_only";for(let s of r.matchAll(w_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var E_=120,Om=["write","read_only","land_pr","verify_live"],C_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var P_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Tm(e){let r=e.trim();if(!r||r.includes("\0")||/\s/.test(r))return null;let t,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(r);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(r)){let a;try{a=new URL(r)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;t=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))t=o[1],n=o[2];else return null;t=t.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${t}/${s.join("/")}`;return P_.test(i)&&i.length<=512?i:null}function Nm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Ts(r)==="read_only"?"read_only":"write"}function A_(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;if(Object.keys(r).sort().join(",")!=="payload,publicKeyId,signature"||typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.payload;if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).sort().join(",")!==[...C_].join(",")||t.v!==1||t.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof t[n]!="string"||!t[n])return!1;return!(typeof t.attempt!="number"||!Number.isInteger(t.attempt)||t.attempt<0||typeof t.exp!="number"||!Number.isFinite(t.exp)||!Om.includes(t.operationClass))}var I_=Buffer.from("302a300506032b6570032100","hex");function Dm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!A_(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(r))if(o[a]!==r[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+E_+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Im(e.publicKeyId,t);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=x_({key:Buffer.concat([I_,Buffer.from(s)]),format:"der",type:"spki"});return __(null,Buffer.from(sl(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}O();var al=class{constructor(r=4096){this.capacity=r}capacity;order=[];keys=new Set;consume(r){if(this.keys.has(r))return!1;for(this.keys.add(r),this.order.push(r);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};function N_(e){let r=(c,u)=>({allow:!1,code:c,reason:u}),{policy:t,identity:n}=e;if(!n)return r("no_identity","the desktop runtime has not been prepared");if(!t)return r("no_policy","no approved execution policy on this computer");if(t.accountId!==n.accountId||t.agentOsId!==n.agentOsId)return r("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return r("repo_identity_unavailable","the repository has no canonical remote identity");if(t.repoIdentity!==e.repoIdentity)return r("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return r("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=Nm(e.decision),a=Dm(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return r(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?t.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${t.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:t.repoIdentity,operationClass:i}}:r("replayed","this claim authorization was already used")}var D_=null,M_=null,W_=new al,L_=new Set;function Mm(){return bs()}function Wm(e){return{v:1,repoIdentity:e,requestNonce:T_(16).toString("base64url")}}function Lm(e){let r=O_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Tm(r.stdout.trim())}function Bm(e){let r=N_({...e,policy:D_,identity:M_,consumed:W_});if(!r.allow){let t=e.decision.task??{},n={taskId:typeof t.id=="string"?t.id:"",code:r.code,reason:r.reason,...r.consentRequired?{consentRequired:r.consentRequired}:{}};for(let o of L_)try{o(n)}catch{}}return r}function Um(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function Xn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Fm(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeout===!0||r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}function ll(e){if(!e||typeof e!="object")return!1;let r=e;return r.timeout===!0?!0:(typeof r.error=="string"?r.error.toLowerCase():"").includes("timeout")}var B_=["implementation","review","landing"],U_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function F_(e){return B_.includes(e)}function K_(e){return U_.includes(e)}function Km(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||F_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:K_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Hm=Nt.personas.map(Km),H_=new Map(Hm.map(e=>[e.slug,e]));function $_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=H_.get(r)??null,n=Xu(r);if(!n)return t;let o=Km(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function cl(e){return $_(e)?.defaultRoleLane??null}function $m(){return Hm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function jm(e){return(e??"").trim().toLowerCase()}function j_(e){switch(jm(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function V_(e){let r=jm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=j_(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Vm(e){return V_(e)??"any"}Nn();H();We();function G_(e=process.env){let r=U();return br(r,e)!=="forge"}function Ns(e,r=process.env){if(G_(r))return e?.maxConcurrentWorkers??void 0}async function Ds(e,r){let t=Q(r.baseUrl?String(r.baseUrl):void 0),n=await ee(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await nl(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}Vt();var Y_={fetchPreferences:Ds,configuredOverride:Ns,observe:$n};async function Gm(e,r=Y_){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Vt();B();B();function Ms(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function ul(e){return e.toLowerCase()}function q_(e){let r=Ms(e,"roleLane");if(r)return r;let t=ul(Ms(e,"executorRef")),n=ul(Ms(e,"title")),o=ul(Ms(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=cl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Ym(e){let r=q_(e);return r?{...e,roleLane:r}:e}H();var J_=/^claude[-_]/i,z_=/^(?:opus|sonnet|haiku)\b/i;function qm(e){let r=e.trim();return J_.test(r)||z_.test(r)}function Jm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function dl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function zm(e){return e.trim().toLowerCase().startsWith("gemini-")}function X_(e){return Jm(e)?"codex":qm(e)?"claude":zm(e)?"gemini":(dl(e),"cursor")}function Q_(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Z_(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?qm(n)||Jm(n)||dl(n)||zm(n)?{lane:t,model:n,provider:X_(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Ue(e){let r=typeof e=="string"?e.trim():"";return r?Q_(r)??Z_(r):null}function Xm(e){let r=Ue(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!dl(r.model)):!1}Es();Es();var Ir="cursor",eE=new Set(["claude","opus","anthropic"]),rE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Qn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ar(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return eE.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ws(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ar(r))return!0;let t=Qn(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ue(Qn(e,"executorRef"));if(n?.provider&&Ar(n.provider)||n?.model&&Ar(tE(n.model)))return!0;let o=Qn(e,"description");if(rE.some(i=>i.test(o)))return!0;let s=Qn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function tE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function nE(e,r){return{provider:Ir,model:Ls,rule:`policy:cursor_default${r}`,requestedModel:e}}var oE=["explicit:","executor_ref:","factory:","task:"];function sE(e){return oE.some(r=>e.startsWith(r))}function pl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ue(Qn(e,"executorRef"))?.provider?!0:Ws(e)}function Qm(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ar(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||sE(r.rule)||pl(t)||!Ar(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return nE(r.model,o)}function Zm(e,r=Ir){let t=e?.trim();return t?ar(t):r}var ef={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function zt(e){return ef[e]}function rf(){return Object.values(ef)}import{existsSync as aE}from"node:fs";import{homedir as lE}from"node:os";import Zn from"node:path";Rr();import{createHash as tf}from"node:crypto";import{statSync as iE}from"node:fs";import{spawnSync as nf}from"node:child_process";function lr(e){try{let r=iE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Xt(e){return tf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Fe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function er(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r),i=nf(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Bs(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return nf(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var cE="codex";function uE(){let e=lE();return[process.env.CODEX_HOME?.trim()?Zn.join(Zn.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Zn.join(e,".codex","auth.json"),Zn.join(e,".config","codex","auth.json")].filter(t=>!!t)}function dE(e){return Zn.dirname(e)}function pE(e){let r,t;for(let n of uE()){if(!aE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:dE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function of(e=new Date().toISOString()){let r=Fe(cE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Xt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=pE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?lr(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as mE}from"node:fs";import{homedir as fE}from"node:os";import ml from"node:path";function gE(){let e=process.env.HERMES_HOME?.trim(),r=e?ml.resolve(e):ml.join(fE(),".hermes");return ml.join(r,"auth.json")}function Us(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=gE(),o=mE(n),s=Bs(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?lr(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Qt(e=new Date().toISOString()){let r=of(e);if(r.ready)return{...r,path:"codex_cli"};let t=Us(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var sf=["low","medium","high"],af={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function lf(e,r){let t=zt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function hE(e,r){let t=zt(e.providerId),n=zt(r.providerId),o=sf.indexOf(t.costTier)-sf.indexOf(n.costTier);if(o!==0)return o;let s=af[e.binding.authSource]-af[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function fl(e){let r=rf().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&lf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(hE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return lf(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as kE}from"node:fs";import{homedir as yE}from"node:os";import RE from"node:path";var vE="claude";function bE(){let e=yE();return[RE.join(e,".claude",".credentials.json")]}function cf(e=new Date().toISOString()){let r=Fe(vE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Xt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=bE().find(i=>kE(i)),o=Bs(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as GE}from"node:fs";import{homedir as VE}from"node:os";import rn from"node:path";wr();O();import{closeSync as Rl,existsSync as ff,mkdirSync as TE,openSync as vl,statSync as NE,unlinkSync as pf}from"node:fs";import{spawn as DE}from"node:child_process";import ME from"node:os";import cr from"node:path";ia();var SE="KYNVER_NO_PROD_DB_CREDENTIALS",wE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=sa(e);if(!r.reviewWorker)return t;let n={...t,[SE]:"1"};for(let o of wE)delete n[o];return n}var xE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function uf(e){return e.replace(xE,"")}var df=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Fs(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function _E(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var EE=new Set(["cursor"]);function CE(e){let r=e.trim().toLowerCase();return EE.has(r)?"auto":null}function gl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return df.test(o)||!Fs(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function Zt(e,r){let t=(e??"").trim();return t?Fs(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function hl(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function en(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return Fs(o)||!_E(o)&&df.test(o)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function kl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=CE(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Fs(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}import{existsSync as eo,readdirSync as PE}from"node:fs";import ht from"node:path";var AE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function IE(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function OE(e){let r=ht.join(e,"versions");if(!eo(r))return null;let t=null,n=-1;for(let o of PE(r,{withFileTypes:!0})){if(!o.isDirectory()||!AE.test(o.name))continue;let s=IE(o.name);s==null||s<=n||(n=s,t=ht.join(r,o.name))}return t}function Ks(e){let r=e?.trim()||ht.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=ht.join(r,"node.exe"),n=ht.join(r,"index.js");if(eo(t)&&eo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=OE(r);if(!o)return null;let s=ht.join(o,"node.exe"),i=ht.join(o,"index.js");return!eo(s)||!eo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var yl="composer-2.5",WE=15e3,LE=6e4,BE=3e4;function UE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function Sl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&ff(cr.join(cr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ks(cr.dirname(e)):t?{nodeExe:e,indexJs:cr.join(cr.dirname(e),"index.js"),versionDir:cr.dirname(e)}:Ks();if(o)return UE(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:ce()}}function FE(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:cr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function gf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function bl(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?Math.floor(n):r}function KE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||cr.join(ME.homedir(),".kynver","locks");return TE(e,{recursive:!0}),cr.join(e,"cursor-agent-start.lock")}function HE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=KE(),r=bl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",LE),t=bl("KYNVER_CURSOR_START_LOCK_STALE_MS",BE),n=Date.now();for(;;)try{let o=vl(e,"wx");return Rl(o),()=>{try{pf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-NE(e).mtimeMs>t){pf(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);gf(250)}}function hf(e=process.env){let r=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(r)return r;if(process.platform==="win32"){let t=Ks(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=cr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(ff(n))return n}return"agent"}function $E(){return hf(process.env)}var kf={name:"cursor",defaultModel:yl,preflightModel(e){return kl(e,yl)},start(e){let r=kl(e.model,yl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=vl(e.stdoutPath,"a"),o=vl(e.stderrPath,"a"),s=["ignore",n,o],i=$E(),a=Sl(i),l=HE(),c;try{let[u,d]=a.shell?[a.executable,mf(e,t,a.prefixArgs)]:Pe(a.executable,mf(e,t,a.prefixArgs),e.workerDir);c=DE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:FE(i,a,e.reviewWorker)})),gf(bl("KYNVER_CURSOR_START_LOCK_HOLD_MS",WE))}finally{l(),Rl(n),Rl(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:t}}};function mf(e,r,t=[]){return[...t,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",r,e.prompt]}import{spawnSync as jE}from"node:child_process";function wl(e,r=process.env){try{let t;try{t=Sl(e)}catch{t={executable:e,prefixArgs:[]}}let n=jE(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function xl(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(rn.join(t,".config","cursor","auth.json")),r.push(rn.join(t,".cursor-agent","auth.json")));let n=VE();if(r.push(rn.join(n,".config","cursor","auth.json")),r.push(rn.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(rn.join(o,"cursor-agent","auth.json")),s&&r.push(rn.join(s,"cursor","auth.json"))}return r}var YE="agent";function yf(e=new Date().toISOString()){let r=Fe(YE,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Xt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=xl().find(a=>GE(a)),o=wl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as qE,readFileSync as JE}from"node:fs";import{homedir as zE}from"node:os";import _l from"node:path";var XE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function QE(){let e=process.env.HERMES_HOME?.trim(),r=e?_l.resolve(e):_l.join(zE(),".hermes");return _l.join(r,".env")}function ZE(e){try{let r=JE(e,"utf8"),t=[];for(let n of XE)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rf(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=QE(),o=qE(n),s=o?ZE(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?lr(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function vf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Qt(r),n={codex:t,cursor:yf(r),claude:cf(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rf(r),hermesOpenAiCodex:Us(r),codexAdapterPath:t.path,readyCount:o}}var eC=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],rC=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function El(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function tC(e){let r=El(e,"executorRef").toLowerCase(),t=El(e,"title").toLowerCase(),n=El(e,"description").toLowerCase(),o=`${r}
|
|
83
|
+
`)},Ub={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Dt={version:Wb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Lb,instructions:Bb,policyThresholds:Ub};var _n=Dt,Fb="embedded";function Zu(){return _n.version}function ed(e,r){_n=e,Fb=r}function En(e){let r=_n.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Dt.instructions[e];return typeof t=="string"?t:""}function ia(e,r){let t=_n.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Dt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function rd(e){if(!e)return null;let r=e.trim().toLowerCase();return _n.personas.find(t=>t.slug===r)??null}Pn();import Eb from"node:path";B();hs();O();import C_ from"node:path";function P_(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 Ls(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(C_.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!qr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...P_(o)})}return t}H();function Zn(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}Dn();H();function Am(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 Pm(e){return new Error(`callback timeout after ${e}ms`)}async function Im(e,r){let t=Am(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(Pm(t))},t)})])}catch(i){throw s?Pm(t):i}finally{o&&clearTimeout(o)}}function Om(e,r){let t=Am(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function ht(e,r,t,n){try{return await Im(async o=>{let s=await Nn(e,{method:"POST",headers:Zn(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Om(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await ht(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await xm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await ht(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function cl(e,r,t){try{return await Im(async n=>{let o=await Nn(e,{method:"GET",headers:Zn(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Om(n,t?.timeoutMs)}}H();qn();import{spawnSync as K_}from"node:child_process";import{randomBytes as H_}from"node:crypto";import{createPublicKey as D_,verify as M_}from"node:crypto";import{createHash as A_,createPublicKey as _K,verify as EK}from"node:crypto";function dl(e){return JSON.stringify(ul(e))}function ul(e){if(Array.isArray(e))return e.map(ul);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ul(e[t]);return r}return e}function pl(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function Tm(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=pl(t);n&&r.push(n)}return r}function Nm(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 PK=Buffer.from("302a300506032b6570032100","hex"),Dm="ca-6297fb8e1773",I_={[Dm]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function O_(e){return`ca-${A_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Mm(e,r=process.env){let t=Tm(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>O_(o)===e)??null;let n=I_[e];return!n||e===Dm&&!Nm(r)?null:pl(n)}var T_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,N_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Bs(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(T_)].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(N_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var W_=120,Wm=["write","read_only","land_pr","verify_live"],L_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var B_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Lm(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 B_.test(i)&&i.length<=512?i:null}function Bm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Bs(r)==="read_only"?"read_only":"write"}function U_(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(",")!==[...L_].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)||!Wm.includes(t.operationClass))}var F_=Buffer.from("302a300506032b6570032100","hex");function Um(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!U_(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+W_+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Mm(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=D_({key:Buffer.concat([F_,Buffer.from(s)]),format:"der",type:"spki"});return M_(null,Buffer.from(dl(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}O();var ml=class{constructor(r=4096){this.capacity=r}capacity;order=[];keys=new Set;consume(r){if(this.keys.has(r))return!1;for(this.keys.add(r),this.order.push(r);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};function $_(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=Bm(e.decision),a=Um(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 j_=null,V_=null,G_=new ml,Y_=new Set;function Fm(){return Cs()}function Km(e){return{v:1,repoIdentity:e,requestNonce:H_(16).toString("base64url")}}function Hm(e){let r=K_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Lm(r.stdout.trim())}function $m(e){let r=$_({...e,policy:j_,identity:V_,consumed:G_});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 Y_)try{o(n)}catch{}}return r}function jm(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function eo(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Vm(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeout===!0||r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}function fl(e){if(!e||typeof e!="object")return!1;let r=e;return r.timeout===!0?!0:(typeof r.error=="string"?r.error.toLowerCase():"").includes("timeout")}var q_=["implementation","review","landing"],J_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function z_(e){return q_.includes(e)}function X_(e){return J_.includes(e)}function Gm(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||z_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:X_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Ym=Dt.personas.map(Gm),Q_=new Map(Ym.map(e=>[e.slug,e]));function Z_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=Q_.get(r)??null,n=rd(r);if(!n)return t;let o=Gm(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function gl(e){return Z_(e)?.defaultRoleLane??null}function qm(){return Ym.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Jm(e){return(e??"").trim().toLowerCase()}function eE(e){switch(Jm(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function rE(e){let r=Jm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=eE(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function zm(e){return rE(e)??"any"}Wn();H();Le();function tE(e=process.env){let r=U();return Sr(r,e)!=="forge"}function Us(e,r=process.env){if(tE(r))return e?.maxConcurrentWorkers??void 0}async function Fs(e,r){let t=Q(r.baseUrl?String(r.baseUrl):void 0),n=await ee(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await cl(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}Gt();var nE={fetchPreferences:Fs,configuredOverride:Us,observe:Gn};async function Xm(e,r=nE){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Gt();B();B();function Ks(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function hl(e){return e.toLowerCase()}function oE(e){let r=Ks(e,"roleLane");if(r)return r;let t=hl(Ks(e,"executorRef")),n=hl(Ks(e,"title")),o=hl(Ks(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=gl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Qm(e){let r=oE(e);return r?{...e,roleLane:r}:e}H();var sE=/^claude[-_]/i,iE=/^(?:opus|sonnet|haiku)\b/i;function Zm(e){let r=e.trim();return sE.test(r)||iE.test(r)}function ef(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function kl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function rf(e){return e.trim().toLowerCase().startsWith("gemini-")}function aE(e){return ef(e)?"codex":Zm(e)?"claude":rf(e)?"gemini":(kl(e),"cursor")}function lE(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function cE(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?Zm(n)||ef(n)||kl(n)||rf(n)?{lane:t,model:n,provider:aE(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Oe(e){let r=typeof e=="string"?e.trim():"";return r?lE(r)??cE(r):null}function tf(e){let r=Oe(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!kl(r.model)):!1}Ts();Ts();var Or="cursor",uE=new Set(["claude","opus","anthropic"]),dE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ro(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ir(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return uE.has(r)?!0:r.includes("claude")||r.includes("opus")}function Hs(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ir(r))return!0;let t=ro(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Oe(ro(e,"executorRef"));if(n?.provider&&Ir(n.provider)||n?.model&&Ir(pE(n.model)))return!0;let o=ro(e,"description");if(dE.some(i=>i.test(o)))return!0;let s=ro(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function pE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function mE(e,r){return{provider:Or,model:$s,rule:`policy:cursor_default${r}`,requestedModel:e}}var fE=["explicit:","executor_ref:","factory:","task:"];function gE(e){return fE.some(r=>e.startsWith(r))}function yl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Oe(ro(e,"executorRef"))?.provider?!0:Hs(e)}function nf(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ir(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||gE(r.rule)||yl(t)||!Ir(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return mE(r.model,o)}function of(e,r=Or){let t=e?.trim();return t?lr(t):r}var sf={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 Xt(e){return sf[e]}function af(){return Object.values(sf)}import{existsSync as kE}from"node:fs";import{homedir as yE}from"node:os";import to from"node:path";vr();import{createHash as lf}from"node:crypto";import{statSync as hE}from"node:fs";import{spawnSync as cf}from"node:child_process";function cr(e){try{let r=hE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return lf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Qt(e){return lf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Fe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function er(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r),i=cf(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 js(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return cf(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 RE="codex";function vE(){let e=yE();return[process.env.CODEX_HOME?.trim()?to.join(to.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,to.join(e,".codex","auth.json"),to.join(e,".config","codex","auth.json")].filter(t=>!!t)}function bE(e){return to.dirname(e)}function SE(e){let r,t;for(let n of vE()){if(!kE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:bE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function uf(e=new Date().toISOString()){let r=Fe(RE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Qt("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}=SE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?cr(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as wE}from"node:fs";import{homedir as xE}from"node:os";import Rl from"node:path";function _E(){let e=process.env.HERMES_HOME?.trim(),r=e?Rl.resolve(e):Rl.join(xE(),".hermes");return Rl.join(r,"auth.json")}function Vs(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=_E(),o=wE(n),s=js(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?cr(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Zt(e=new Date().toISOString()){let r=uf(e);if(r.ready)return{...r,path:"codex_cli"};let t=Vs(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 df=["low","medium","high"],pf={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function mf(e,r){let t=Xt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function EE(e,r){let t=Xt(e.providerId),n=Xt(r.providerId),o=df.indexOf(t.costTier)-df.indexOf(n.costTier);if(o!==0)return o;let s=pf[e.binding.authSource]-pf[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function vl(e){let r=af().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&mf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(EE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return mf(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 CE}from"node:fs";import{homedir as PE}from"node:os";import AE from"node:path";var IE="claude";function OE(){let e=PE();return[AE.join(e,".claude",".credentials.json")]}function ff(e=new Date().toISOString()){let r=Fe(IE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Qt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=OE().find(i=>CE(i)),o=js(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?cr(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as aC}from"node:fs";import{homedir as iC}from"node:os";import nn from"node:path";xr();O();import{closeSync as xl,existsSync as yf,mkdirSync as GE,openSync as _l,statSync as YE,unlinkSync as kf}from"node:fs";import{spawn as qE}from"node:child_process";import JE from"node:os";import ur from"node:path";pa();var TE="KYNVER_NO_PROD_DB_CREDENTIALS",NE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=da(e);if(!r.reviewWorker)return t;let n={...t,[TE]:"1"};for(let o of NE)delete n[o];return n}var DE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function gf(e){return e.replace(DE,"")}var hf=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Gs(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function ME(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var WE=new Set(["cursor"]);function LE(e){let r=e.trim().toLowerCase();return WE.has(r)?"auto":null}function bl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=gf(t).trim()||r;return hf.test(o)||!Gs(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 en(e,r){let t=(e??"").trim();return t?Gs(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 rn(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 tn(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=gf(t).trim()||r;return Gs(o)||!ME(o)&&hf.test(o)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function Sl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=LE(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")`}:Gs(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 no,readdirSync as BE}from"node:fs";import kt from"node:path";var UE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function FE(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 KE(e){let r=kt.join(e,"versions");if(!no(r))return null;let t=null,n=-1;for(let o of BE(r,{withFileTypes:!0})){if(!o.isDirectory()||!UE.test(o.name))continue;let s=FE(o.name);s==null||s<=n||(n=s,t=kt.join(r,o.name))}return t}function Ys(e){let r=e?.trim()||kt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=kt.join(r,"node.exe"),n=kt.join(r,"index.js");if(no(t)&&no(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=KE(r);if(!o)return null;let s=kt.join(o,"node.exe"),i=kt.join(o,"index.js");return!no(s)||!no(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}import{writeFileSync as HE}from"node:fs";import $E from"node:path";var jE="worker-prompt.md";function VE(e=process.platform,r={}){return r.shell?6e3:e==="win32"?24e3:12e4}function qs(e,r,t={}){if(e.length<=VE(t.platform,{shell:t.shell}))return{prompt:e,spilledTo:null};let n=$E.join(r,jE);return HE(n,e,"utf8"),{prompt:[`Your complete task instructions are in this file: ${n}`,"They were too long to pass on the command line.","Read the whole file first, then follow it exactly as if it were this prompt. Do not edit or commit that file."].join(`
|
|
84
|
+
`),spilledTo:n}}var wl="composer-2.5",zE=15e3,XE=6e4,QE=3e4;function ZE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function Cl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&yf(ur.join(ur.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ys(ur.dirname(e)):t?{nodeExe:e,indexJs:ur.join(ur.dirname(e),"index.js"),versionDir:ur.dirname(e)}:Ys();if(o)return ZE(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 eC(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:ur.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function Rf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function El(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?Math.floor(n):r}function rC(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||ur.join(JE.homedir(),".kynver","locks");return GE(e,{recursive:!0}),ur.join(e,"cursor-agent-start.lock")}function tC(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=rC(),r=El("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",XE),t=El("KYNVER_CURSOR_START_LOCK_STALE_MS",QE),n=Date.now();for(;;)try{let o=_l(e,"wx");return xl(o),()=>{try{kf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-YE(e).mtimeMs>t){kf(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Rf(250)}}function vf(e=process.env){let r=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(r)return r;if(process.platform==="win32"){let t=Ys(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=ur.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(yf(n))return n}return"agent"}function nC(){return vf(process.env)}var bf={name:"cursor",defaultModel:wl,preflightModel(e){return Sl(e,wl)},start(e){let r=Sl(e.model,wl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=_l(e.stdoutPath,"a"),o=_l(e.stderrPath,"a"),s=["ignore",n,o],i=nC(),a=Cl(i),l=qs(e.prompt,e.workerDir,{shell:a.shell}),c=oC({...e,prompt:l.prompt},t,a.prefixArgs),u=tC(),d;try{let[p,m]=a.shell?[a.executable,c]:Pe(a.executable,c,e.workerDir);d=qE(p,m,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:eC(i,a,e.reviewWorker)})),Rf(El("KYNVER_CURSOR_START_LOCK_HOLD_MS",zE))}finally{u(),xl(n),xl(o)}if(!d.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return d.unref(),{pid:d.pid,model:t}}};function oC(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 sC}from"node:child_process";function Pl(e,r=process.env){try{let t;try{t=Cl(e)}catch{t={executable:e,prefixArgs:[]}}let n=sC(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function Al(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(nn.join(t,".config","cursor","auth.json")),r.push(nn.join(t,".cursor-agent","auth.json")));let n=iC();if(r.push(nn.join(n,".config","cursor","auth.json")),r.push(nn.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(nn.join(o,"cursor-agent","auth.json")),s&&r.push(nn.join(s,"cursor","auth.json"))}return r}var lC="agent";function Sf(e=new Date().toISOString()){let r=Fe(lC,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Qt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Al().find(a=>aC(a)),o=Pl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?cr(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as cC,readFileSync as uC}from"node:fs";import{homedir as dC}from"node:os";import Il from"node:path";var pC=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function mC(){let e=process.env.HERMES_HOME?.trim(),r=e?Il.resolve(e):Il.join(dC(),".hermes");return Il.join(r,".env")}function fC(e){try{let r=uC(e,"utf8"),t=[];for(let n of pC)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function wf(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=mC(),o=cC(n),s=o?fC(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?cr(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function xf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Zt(r),n={codex:t,cursor:Sf(r),claude:ff(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:wf(r),hermesOpenAiCodex:Vs(r),codexAdapterPath:t.path,readyCount:o}}var gC=[/\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],hC=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function Ol(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function kC(e){let r=Ol(e,"executorRef").toLowerCase(),t=Ol(e,"title").toLowerCase(),n=Ol(e,"description").toLowerCase(),o=`${r}
|
|
83
85
|
${t}
|
|
84
|
-
${n}`;return
|
|
85
|
-
`}function
|
|
86
|
-
`,{mode:384}),r}function Hs(e){try{return sC(_f(e)),!0}catch{return!1}}Bn();function gC(e,r){let n=If(e,r).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}var Af={name:"claude",defaultModel:Le,preflightModel(e){return gl(e,Le)},start(e){let r=gl(e.model,Le);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;gC(e,t);let n=zd(t,{pinned:e.modelPinned===!0}),[o,s]=pe("claude",If(e,t,n)),i=Pf(e.stdoutPath,"a"),a=Pf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=fC(c,u,ae({cwd:e.worktreePath,detached:ce(),stdio:l,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Cf(i),Cf(a),!d.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return d.unref(),{pid:d.pid,model:t}}};function If(e,r,t){return["--model",r,...Xd(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Sf).join(",")}`]:[],"--",e.prompt]}wr();import{closeSync as Mf,existsSync as SC,openSync as Wf}from"node:fs";import{spawn as Ol}from"node:child_process";O();Rr();wr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as hC}from"node:child_process";O();Rr();var $s="gpt-5.6-sol";var Il=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||$s;function kC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function yC(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Nf={name:"hermes-codex",defaultModel:Il,preflightModel(e){return Zt(e,Il)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=Zt(e.model,Il);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=pe(n,yC(t,e.prompt)),i=Tf(e.stdoutPath,"a"),a=Tf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=hC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:kC(e.reviewWorker,e.codexHome)}));if(Of(i),Of(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:t}}};var RC="KYNVER_CODEX_WINDOWS_SANDBOX",vC="unelevated";function bC(e=process.env){return e[RC]?.trim().toLowerCase()==="elevated"?"elevated":vC}function Df(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${bC(r)}"`]}function wC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||$s}var Or=wC();function Tl(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function xC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function _C(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Df(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function EC(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Ol(l,c,t)}if(!SC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Ol(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Ol(i,a,t)}var Lf={name:"codex",defaultModel:Or,preflightModel(e){return Zt(e,Or)},start(e){if(Qt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Nf.start(e);let t=Zt(e.model,Or);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Wf(e.stdoutPath,"a"),s=Wf(e.stderrPath,"a"),i=["ignore",o,s],a=Tl(),l=_C(n,e.prompt,e.executionMode),c;try{c=EC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:xC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Mf(o),Mf(s)}if(!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};wr();import{closeSync as Bf,openSync as Uf}from"node:fs";import TC from"node:path";import{fileURLToPath as NC}from"node:url";import{spawn as DC}from"node:child_process";O();import{existsSync as js}from"node:fs";import yt from"node:path";import{fileURLToPath as CC}from"node:url";function PC(e,r){let t=yt.resolve(e);for(;;){let n=yt.join(t,r);if(js(n))return n;let o=yt.dirname(t);if(o===t)return null;t=o}}function AC(e){return PC(e,yt.join("node_modules",".bin","tsx"))??"npx"}function Nl(e,r){if(e.endsWith(".ts")){let t=AC(yt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Vs(e){if(e.explicitCliPath)return js(e.explicitCliPath)?Nl(e.explicitCliPath,e.nodeExecutable):null;let r=CC(new URL(".",e.importMetaUrl)),t=yt.join(r,"cli.js");if(js(t))return Nl(t,e.nodeExecutable);let n=yt.join(r,"cli.ts");return js(n)?Nl(n,e.nodeExecutable):null}var IC="X-Kynver-Job-Token",io={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function OC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function oo(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[IC]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function so(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Gs(e,r,t){let n=OC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=so(t.memoryQuery);s&&o.set("memoryQuery",s);let i=so(t.mode);return i&&o.set("mode",i),oo(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),oo(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=so(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return oo(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return oo(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return oo(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...so(t.eventKey)?{eventKey:so(t.eventKey)}:{}}})}}function tn(e){return ro.includes(e)}function Ys(e){return to(e).filter(tn).map(r=>{let t=io[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var Rt="openai-compatible",MC=600*1e3;function Dl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var ao=class extends Error{};function WC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new ao(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new ao(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new ao(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):MC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var LC="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function Ml(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:LC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function BC(){let e=NC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=TC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Vs({importMetaUrl:import.meta.url,explicitCliPath:t,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${t} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function UC(e,r,t){let n=e.workerToolGrant,o=n?Ys(n.capabilities):void 0;return{provider:Rt,model:t,request:Ml(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Wl(e,r,t){let n=BC(),o=Uf(e.stdoutPath,"a"),s=Uf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=DC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Bf(o),Bf(s),!c.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(r)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${r.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:t}}var Ff={name:Rt,get defaultModel(){return Dl()},preflightModel(e){return hl(e,Dl())},start(e){let r=hl(e.model,Dl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=WC(process.env),o=UC(e,n,t);return Wl(e,o,t)}};wr();import{closeSync as Vf,openSync as Gf}from"node:fs";import{spawn as HC}from"node:child_process";O();Rr();import FC from"node:path";var KC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function qs(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function Js(e){let r=FC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Kf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Hf(e){let r=e.trim().toLowerCase();return!r||KC.has(r)?[]:["--model",e.trim()]}function $f(e,r){return[...Hf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function jf(e,r){return["--model",r,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",oe]:[],"--prompt",e.prompt]}var ur="gemini";function Oe(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function $C(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Yf={name:ur,get defaultModel(){return Oe()},preflightModel(e){return en(e,Oe())},start(e){let r=en(e.model,Oe());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=qs(),n=Js(t),o=n==="antigravity"?Kf(r):r.model,s=n==="antigravity"?$f(e,o):jf(e,o),[i,a]=pe(t,s),l=Gf(e.stdoutPath,"a"),c=Gf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=HC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:$C(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Vf(l),Vf(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${t}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}};var dr="gemini-api",qf="https://generativelanguage.googleapis.com/v1beta/openai",jC=600*1e3,lo=class extends Error{};function VC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function GC(e=process.env){let r=VC(e);if(!r)throw new lo('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||qf,n;try{n=new URL(t)}catch{throw new lo(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new lo(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):jC;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function YC(e,r,t){let n=e.workerToolGrant,o=n?Ys(n.capabilities):void 0,s=Ml(r,t,e.prompt,o);return{provider:dr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Jf={name:dr,get defaultModel(){return Oe()},preflightModel(e){return en(e,Oe())},start(e){let r=en(e.model,Oe());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=GC(process.env),o=YC(e,n,t);return Wl(e,o,t)}};var qC=Le,Ls="composer-2.5";function xe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function JC(e){if(!e)return;let r=xe(e,"workerModelOverride")||xe(e,"modelOverride");return r||`${xe(e,"title")}
|
|
87
|
-
${
|
|
88
|
-
${xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function zf(e){return e.toLowerCase()}function Qf(e,r=U(),t=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(r.defaultModel?.trim()||t.KYNVER_DEFAULT_MODEL?.trim()):!1}function Bl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||qC}function zs(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?ur:"cursor"}function zC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ls,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Le,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Oe(),provider:ur,rule:n&&n!==ur?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Oe(),provider:dr,rule:n&&n!==dr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Xf(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var XC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Zf(e,r,t){return XC.has(e)?ut:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?ut:Le}function QC(e){let r=zf(xe(e,"executorRef")),t=xe(e,"title").toLowerCase(),n=xe(e,"priority")||"normal",o=zf(xe(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Zf(o,r,t);return{provider:"claude",model:i,rule:i===ut?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Ue(xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Or},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Ue(xe(e,"executorRef"));return{provider:Rt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Ue(xe(e,"executorRef"));return{provider:dr,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Ue(xe(e,"executorRef"));return{provider:ur,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Xf(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Xf(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Bl();return{model:s,provider:zs(s),rule:"default:global"}}function ZC(e){return e?Ue(xe(e,"executorRef")):null}function eP(e){switch(ar(e)){case ur:case dr:return Oe();case"claude":return Le;case"codex":return Or;case"cursor":return Ls;default:return}}var Ll="explicit:cli_provider",eg="config:worker_provider";function rg(e,r,t){let n=ar(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:eP(n)??e.model,rule:t}}function rP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Ll?e:rg(e,t,Ll)}function tP(e,r){if(r.explicitProvider?.trim()||pl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=ar(t);return n===Ir||n===e.provider?e:rg(e,n,eg)}function Xs(e){let r,t=ZC(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=zC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||zs(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||zs(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Ws(e.task)){let l=JC(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",p=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Zf(d,p,m),u=c===ut?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=QC(e.task);r={...l,requestedModel:l.model}}else{let l=Bl();r={model:l,provider:e.explicitProvider?.trim()||zs(l),rule:"default:global",requestedModel:l}}r=rP(r,e.explicitProvider),r=tP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&ar(e.configuredProvider)!==Ir&&r.rule==="config:worker_provider",i=Qm({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Ll||i.rule===eg||Ar(i.provider)&&(e.explicitProviderIsOperatorOverride||Ws(e.task))||i.provider===Rt||i.provider===ur||i.provider===dr||i.provider==="codex")return i;let a=bf({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??Or:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function tg(e,r,t){return e||r||t||Bl()||Le}function nP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ng(e){return e?.trim()||void 0}function og(e){let r=nP(e.task),t=Ue(r),n=e.explicitProvider?.trim().toLowerCase(),o=ng(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,a=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=ng(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&Xm(r)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Ar(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}function sg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ig(){return{maxTaskAttempts:sg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(ea("harness.maxTaskAttempts",4))),dispatchCooldownMs:sg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(ea("harness.dispatchCooldownMs",5e3)))}}H();import iP from"node:path";B();fe();O();var Ul="kynver-harness:",ag="@runner:";function Fl(e){return e?.trim()?e.trim():null}function oP(e){let r=Fl(e);if(!r?.startsWith(Ul))return null;let t=r.slice(Ul.length),n=t.indexOf(ag);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function co(e,r){let t=e.trim(),n=r.trim();return`${Ul}${t}${ag}${n}`}function sP(e,r){let t=Fl(r);return t?oP(e)===t:!1}function Qs(e){let r=Fl(e.workerLeaseOwner);return r&&sP(r,e.runId)?r:co(e.runId,e.runnerId)}H();import lg from"node:os";We();function Tr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Tr(t.runnerId)??Tr(r.KYNVER_RUNTIME_ID)??Tr(r.OPENCLAW_RUNTIME_ID)??Tr(r.HOSTNAME)??lg.hostname(),hostname:Tr(r.HOSTNAME)??lg.hostname(),profile:Tr(r.KYNVER_RUNNER_PROFILE)??Tr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Tr(r.KYNVER_HARNESS_REPO)??Tr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Ju()}}H();async function Zs(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Q(e.baseUrl);try{let o=await ee(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}B();async function ei(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await Zs({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&L(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function cg(e,r){return I(iP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function ug(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Q(r.baseUrl?String(r.baseUrl):void 0),s=await ee(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Kl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=cg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(J(p).status==="done"){u.push(d);continue}let f=Qs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await ei({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,b=await X(k,s,{leaseOwner:y.leaseOwner??f,leaseDurationMs:i,...y.leaseToken?{leaseToken:y.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let g=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function dg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=cg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as LO,mkdirSync as BO}from"node:fs";import dn from"node:path";B();O();import aP from"node:path";function pg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function mg(e,r,t,n){return pg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ri(e,r={}){let t=r.isAlive??Y,n=r.kill??De,o=r.sleep??jo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Hl(e,r,t,n,o={}){mg(e,r,t,n);let s=ri(r.pid,o),i=ri(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function fg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(aP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ri(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function lP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function gg(e,r,t,n={}){if(!lP(n.env))throw Hl(e,r,"watcher_attach_failed",t,n.deps),r.status="failed",L(e,r),new Error(`watcher_attach_failed: ${t}; worker stopped instead of running unwatched`)}wa();de();B();B();var hg="unknown";function kg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==hg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==hg&&t.push({ref:n,source:"base"}),t.push({ref:"origin/main",source:"origin/main"}),t.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of t)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${r||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var cP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,uP="next-action-fix:";function ti(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ti(e)}function dP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(uP)||t.includes("repair")||t.includes("unblock"))}function pP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(cP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ti(String(n.targetPrUrl??n.target_pr_url??"")),s=ti(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?yg(o):null,targetPrBranch:s}}catch{return r}}function Rg(e){if(!dP(e))return null;let r=pP(e.description),t=e.prUrl?yg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ti(e.branch)}:null}function vg(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function bg(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...wn(`worker.prompt.progress.${n}`).split(`
|
|
89
|
-
`),o],i=
|
|
90
|
-
`),a=
|
|
91
|
-
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...
|
|
92
|
-
`),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...
|
|
93
|
-
`)}O();H();var
|
|
94
|
-
${n}`,s=
|
|
95
|
-
`).map(r=>r.trim()).find(Boolean)??""}function
|
|
86
|
+
${n}`;return gC.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":hC.some(s=>s.test(o))?"low":"elevated"}function yC(e){let r=Xt(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 RC(e){let r=e.inventory??xf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function yt(e){let r=yC({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function _f(e){let r=e.task??{},t=kC(r),n=RC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Zt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Or;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=vl({inventory:n,riskClass:t});return yt(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 yt({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 yt({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 yt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=vl({inventory:n,riskClass:t});if(a)return yt({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 yt({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}xr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as AC}from"node:child_process";O();vr();Kn();import{unlinkSync as vC,writeFileSync as bC}from"node:fs";import SC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function Tl(e){return`${JSON.stringify(e)}
|
|
87
|
+
`}function Nl(e){let r;try{r=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!r||typeof r!="object"||Array.isArray(r))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let t=r,n=typeof t.id=="string"?t.id:"";if(t.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(t.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(t.op==="call_tool"){if(typeof t.name!="string"||!t.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:t.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var wC="KYNVER_WORKER_MCP_TOOLS",xC="mcp-config.json",oe="kynver",oo=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Ef=oo.map(e=>`mcp__${oe}__${e}`),_C={"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 so(e){if(!e||e.length===0)return[...oo];let r=new Set;for(let t of e)for(let n of _C[t]??[])r.add(n);return oo.filter(t=>r.has(t))}function Cf(e){return so(e).map(r=>`mcp__${oe}__${r}`)}var EC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],CC=["openai-compatible","gemini-api"];function PC(e){return EC.includes(e)}function Dl(e){return CC.includes(e)}function Pf(e){return PC(e)&&!Dl(e)}function io(e=process.env){let r=e[wC]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function Af(e){return SC.join(e,xC)}function If(e){let r=Af(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return bC(r,`${JSON.stringify(t,null,2)}
|
|
88
|
+
`,{mode:384}),r}function Js(e){try{return vC(Af(e)),!0}catch{return!1}}Kn();function IC(e,r){let n=Df(e,r).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}var Nf={name:"claude",defaultModel:Be,preflightModel(e){return bl(e,Be)},start(e){let r=bl(e.model,Be);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;IC(e,t);let n=ep(t,{pinned:e.modelPinned===!0}),o=qs(e.prompt,e.workerDir),[s,i]=pe("claude",Df({...e,prompt:o.prompt},t,n)),a=Tf(e.stdoutPath,"a"),l=Tf(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=Pe(s,i,e.workerDir),p=AC(u,d,ae({cwd:e.worktreePath,detached:ce(),stdio:c,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Of(a),Of(l),!p.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return p.unref(),{pid:p.pid,model:t}}};function Df(e,r,t){return["--model",r,...rp(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Ef).join(",")}`]:[],"--",e.prompt]}xr();import{closeSync as Uf,existsSync as LC,openSync as Ff}from"node:fs";import{spawn as Wl}from"node:child_process";O();vr();xr();import{closeSync as Mf,openSync as Wf}from"node:fs";import{spawn as OC}from"node:child_process";O();vr();var zs="gpt-5.6-sol";var Ml=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||zs;function TC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function NC(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Lf={name:"hermes-codex",defaultModel:Ml,preflightModel(e){return en(e,Ml)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=en(e.model,Ml);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=pe(n,NC(t,e.prompt)),i=Wf(e.stdoutPath,"a"),a=Wf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=OC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:TC(e.reviewWorker,e.codexHome)}));if(Mf(i),Mf(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:t}}};var DC="KYNVER_CODEX_WINDOWS_SANDBOX",MC="unelevated";function WC(e=process.env){return e[DC]?.trim().toLowerCase()==="elevated"?"elevated":MC}function Bf(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${WC(r)}"`]}function BC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||zs}var Tr=BC();function Ll(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function UC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function FC(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Bf(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function KC(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Wl(l,c,t)}if(!LC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Wl(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Wl(i,a,t)}var Kf={name:"codex",defaultModel:Tr,preflightModel(e){return en(e,Tr)},start(e){if(Zt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Lf.start(e);let t=en(e.model,Tr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Ff(e.stdoutPath,"a"),s=Ff(e.stderrPath,"a"),i=["ignore",o,s],a=Ll(),l=FC(n,e.prompt,e.executionMode),c;try{c=KC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:UC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Uf(o),Uf(s)}if(!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};xr();import{closeSync as Hf,openSync as $f}from"node:fs";import YC from"node:path";import{fileURLToPath as qC}from"node:url";import{spawn as JC}from"node:child_process";O();import{existsSync as Xs}from"node:fs";import Rt from"node:path";import{fileURLToPath as HC}from"node:url";function $C(e,r){let t=Rt.resolve(e);for(;;){let n=Rt.join(t,r);if(Xs(n))return n;let o=Rt.dirname(t);if(o===t)return null;t=o}}function jC(e){return $C(e,Rt.join("node_modules",".bin","tsx"))??"npx"}function Bl(e,r){if(e.endsWith(".ts")){let t=jC(Rt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Qs(e){if(e.explicitCliPath)return Xs(e.explicitCliPath)?Bl(e.explicitCliPath,e.nodeExecutable):null;let r=HC(new URL(".",e.importMetaUrl)),t=Rt.join(r,"cli.js");if(Xs(t))return Bl(t,e.nodeExecutable);let n=Rt.join(r,"cli.ts");return Xs(n)?Bl(n,e.nodeExecutable):null}var VC="X-Kynver-Job-Token",co={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 GC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function ao(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[VC]: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 lo(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Zs(e,r,t){let n=GC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=lo(t.memoryQuery);s&&o.set("memoryQuery",s);let i=lo(t.mode);return i&&o.set("mode",i),ao(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)),ao(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=lo(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return ao(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return ao(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return ao(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...lo(t.eventKey)?{eventKey:lo(t.eventKey)}:{}}})}}function on(e){return oo.includes(e)}function sn(e){return so(e).filter(on).map(r=>{let t=co[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var vt="openai-compatible",zC=600*1e3;function Ul(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var uo=class extends Error{};function XC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new uo(`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 uo(`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 uo(`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):zC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var QC="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 po(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:QC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function ZC(){let e=qC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=YC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Qs({importMetaUrl:import.meta.url,explicitCliPath:t,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${t} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function eP(e,r,t){let n=e.workerToolGrant,o=n?sn(n.capabilities):void 0;return{provider:vt,model:t,request:po(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function mo(e,r,t){let n=ZC(),o=$f(e.stdoutPath,"a"),s=$f(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=JC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Hf(o),Hf(s),!c.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(r)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${r.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:t}}var jf={name:vt,get defaultModel(){return Ul()},preflightModel(e){return rn(e,Ul())},start(e){let r=rn(e.model,Ul());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=XC(process.env),o=eP(e,n,t);return mo(e,o,t)}};xr();import{closeSync as Jf,openSync as zf}from"node:fs";import{spawn as nP}from"node:child_process";O();vr();import rP from"node:path";var tP=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function ei(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function ri(e){let r=rP.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Vf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Gf(e){let r=e.trim().toLowerCase();return!r||tP.has(r)?[]:["--model",e.trim()]}function Yf(e,r){return[...Gf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function qf(e,r){return["--model",r,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",oe]:[],"--prompt",e.prompt]}var dr="gemini";function Te(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function oP(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Xf={name:dr,get defaultModel(){return Te()},preflightModel(e){return tn(e,Te())},start(e){let r=tn(e.model,Te());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=ei(),n=ri(t),o=n==="antigravity"?Vf(r):r.model,s=n==="antigravity"?Yf(e,o):qf(e,o),[i,a]=pe(t,s),l=zf(e.stdoutPath,"a"),c=zf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=nP(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:oP(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Jf(l),Jf(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${t}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}};var pr="gemini-api",Qf="https://generativelanguage.googleapis.com/v1beta/openai",sP=600*1e3,fo=class extends Error{};function iP(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function aP(e=process.env){let r=iP(e);if(!r)throw new fo('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||Qf,n;try{n=new URL(t)}catch{throw new fo(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${Qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new fo(`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):sP;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function lP(e,r,t){let n=e.workerToolGrant,o=n?sn(n.capabilities):void 0,s=po(r,t,e.prompt,o);return{provider:pr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Zf={name:pr,get defaultModel(){return Te()},preflightModel(e){return tn(e,Te())},start(e){let r=tn(e.model,Te());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=aP(process.env),o=lP(e,n,t);return mo(e,o,t)}};var tr="venice",Fl="https://api.venice.ai/api/v1",cP="venice-uncensored-1-2",uP="KYNVER_VENICE_API_KEY",dP="VENICE_API_KEY",pP="KYNVER_VENICE_BASE_URL",mP="KYNVER_VENICE_DEFAULT_MODEL";function eg(e=process.env){return e[uP]?.trim()||e[dP]?.trim()||void 0}function rg(e=process.env){return(e[pP]?.trim()||Fl).replace(/\/+$/,"")}function Jr(e=process.env){return e[mP]?.trim()||cP}function tg(e){return{"content-type":"application/json",authorization:`Bearer ${e}`}}var fP=Be,$s="composer-2.5";function be(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function gP(e){if(!e)return;let r=be(e,"workerModelOverride")||be(e,"modelOverride");return r||`${be(e,"title")}
|
|
89
|
+
${be(e,"description")}
|
|
90
|
+
${be(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function ng(e){return e.toLowerCase()}function sg(e,r=U(),t=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(r.defaultModel?.trim()||t.KYNVER_DEFAULT_MODEL?.trim()):!1}function Hl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||fP}function ti(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?dr:"cursor"}function hP(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:$s,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Be,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Te(),provider:dr,rule:n&&n!==dr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Te(),provider:pr,rule:n&&n!==pr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="venice"||t==="venice-ai"||t==="venice_ai"?{model:Jr(),provider:tr,rule:n&&n!==tr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function og(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var kP=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function ig(e,r,t){return kP.has(e)?pt:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?pt:Be}function yP(e){let r=ng(be(e,"executorRef")),t=be(e,"title").toLowerCase(),n=be(e,"priority")||"normal",o=ng(be(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=ig(o,r,t);return{provider:"claude",model:i,rule:i===pt?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Tr,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Oe(be(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Tr},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Oe(be(e,"executorRef"));return{provider:vt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:venice")||r.startsWith("venice:")){let i=Oe(be(e,"executorRef"));return{provider:tr,...i?.model?{model:i.model}:{model:Jr()},rule:"lane:venice"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Oe(be(e,"executorRef"));return{provider:pr,...i?.model?{model:i.model}:{model:Te()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Oe(be(e,"executorRef"));return{provider:dr,...i?.model?{model:i.model}:{model:Te()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Tr,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return og(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(og(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Hl();return{model:s,provider:ti(s),rule:"default:global"}}function RP(e){return e?Oe(be(e,"executorRef")):null}function vP(e){switch(lr(e)){case dr:case pr:return Te();case tr:return Jr();case"claude":return Be;case"codex":return Tr;case"cursor":return $s;default:return}}var Kl="explicit:cli_provider",ag="config:worker_provider";function lg(e,r,t){let n=lr(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:vP(n)??e.model,rule:t}}function bP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Kl?e:lg(e,t,Kl)}function SP(e,r){if(r.explicitProvider?.trim()||yl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=lr(t);return n===Or||n===e.provider?e:lg(e,n,ag)}function ni(e){let r,t=RP(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=hP(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||ti(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||ti(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Hs(e.task)){let l=gP(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",p=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=ig(d,p,m),u=c===pt?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=yP(e.task);r={...l,requestedModel:l.model}}else{let l=Hl();r={model:l,provider:e.explicitProvider?.trim()||ti(l),rule:"default:global",requestedModel:l}}r=bP(r,e.explicitProvider),r=SP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&lr(e.configuredProvider)!==Or&&r.rule==="config:worker_provider",i=nf({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Kl||i.rule===ag||Ir(i.provider)&&(e.explicitProviderIsOperatorOverride||Hs(e.task))||i.provider===vt||i.provider===dr||i.provider===pr||i.provider===tr||i.provider==="codex")return i;let a=_f({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??Tr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function cg(e,r,t){return e||r||t||Hl()||Be}function wP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ug(e){return e?.trim()||void 0}function dg(e){let r=wP(e.task),t=Oe(r),n=e.explicitProvider?.trim().toLowerCase(),o=ug(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,a=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=ug(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&tf(r)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Ir(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}function pg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function mg(){return{maxTaskAttempts:pg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(ia("harness.maxTaskAttempts",4))),dispatchCooldownMs:pg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(ia("harness.dispatchCooldownMs",5e3)))}}H();import EP from"node:path";B();fe();O();var $l="kynver-harness:",fg="@runner:";function jl(e){return e?.trim()?e.trim():null}function xP(e){let r=jl(e);if(!r?.startsWith($l))return null;let t=r.slice($l.length),n=t.indexOf(fg);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function go(e,r){let t=e.trim(),n=r.trim();return`${$l}${t}${fg}${n}`}function _P(e,r){let t=jl(r);return t?xP(e)===t:!1}function oi(e){let r=jl(e.workerLeaseOwner);return r&&_P(r,e.runId)?r:go(e.runId,e.runnerId)}H();import gg from"node:os";Le();function Nr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Nr(t.runnerId)??Nr(r.KYNVER_RUNTIME_ID)??Nr(r.OPENCLAW_RUNTIME_ID)??Nr(r.HOSTNAME)??gg.hostname(),hostname:Nr(r.HOSTNAME)??gg.hostname(),profile:Nr(r.KYNVER_RUNNER_PROFILE)??Nr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Nr(r.KYNVER_HARNESS_REPO)??Nr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Zu()}}H();async function si(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Q(e.baseUrl);try{let o=await ee(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}B();async function ii(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await si({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&L(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function hg(e,r){return I(EP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function kg(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Q(r.baseUrl?String(r.baseUrl):void 0),s=await ee(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Vl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=hg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(J(p).status==="done"){u.push(d);continue}let f=oi({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await ii({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,b=await X(k,s,{leaseOwner:y.leaseOwner??f,leaseDurationMs:i,...y.leaseToken?{leaseToken:y.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let g=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function yg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=hg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as iT,mkdirSync as aT}from"node:fs";import fn from"node:path";B();O();import CP from"node:path";function Rg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function vg(e,r,t,n){return Rg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ai(e,r={}){let t=r.isAlive??Y,n=r.kill??Me,o=r.sleep??zo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Gl(e,r,t,n,o={}){vg(e,r,t,n);let s=ai(r.pid,o),i=ai(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function bg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(CP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ai(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function PP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function Sg(e,r,t,n={}){if(!PP(n.env))throw Gl(e,r,"watcher_attach_failed",t,n.deps),r.status="failed",L(e,r),new Error(`watcher_attach_failed: ${t}; worker stopped instead of running unwatched`)}Aa();de();B();B();var wg="unknown";function xg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==wg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==wg&&t.push({ref:n,source:"base"}),t.push({ref:"origin/main",source:"origin/main"}),t.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of t)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${r||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var AP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,IP="next-action-fix:";function li(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _g(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:li(e)}function OP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(IP)||t.includes("repair")||t.includes("unblock"))}function TP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(AP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=li(String(n.targetPrUrl??n.target_pr_url??"")),s=li(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?_g(o):null,targetPrBranch:s}}catch{return r}}function Eg(e){if(!OP(e))return null;let r=TP(e.description),t=e.prUrl?_g(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??li(e.branch)}:null}function Cg(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function Pg(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...En(`worker.prompt.progress.${n}`).split(`
|
|
91
|
+
`),o],i=En(`worker.prompt.merge_gate.${n}`).split(`
|
|
92
|
+
`),a=En(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
93
|
+
`);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.",...En("worker.prompt.core_rules").split(`
|
|
94
|
+
`),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...Cg({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
95
|
+
`)}O();H();var NP=600*1e3,ho=class extends Error{};function DP(e=process.env){let r=eg(e);if(!r)throw new ho('the "venice" worker provider requires KYNVER_VENICE_API_KEY (or VENICE_API_KEY) on the daemon host \u2014 create a key at https://venice.ai/settings/api.');let t=rg(e),n;try{n=new URL(t)}catch{throw new ho(`KYNVER_VENICE_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${Fl}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ho(`KYNVER_VENICE_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):NP;return{baseUrl:t,apiKey:r,timeoutMs:s}}function MP(e,r,t){let n=e.workerToolGrant,o=n?sn(n.capabilities):void 0,s=po(r,t,e.prompt,o);return s.headers=tg(r.apiKey??""),{provider:tr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Ag={name:tr,get defaultModel(){return Jr()},preflightModel(e){return rn(e,Jr())},start(e){let r=rn(e.model,Jr());if(!r.ok)throw new Error(`venice provider model preflight failed: ${r.note}`);let t=DP(process.env);return mo(e,MP(e,t,r.model),r.model)}};var ci={claude:Nf,codex:Kf,cursor:bf,[dr]:Xf,[pr]:Zf,[vt]:jf,[tr]:Ag},Ig=null;function Og(e){if(Ig)return Ig;let r=e?.trim();if(r){let o=ci[lr(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(ci).join(", ")}`);return o}let t=of(U().workerProvider),n=ci[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(ci).join(", ")}`);return n}O();import{spawn as YO}from"node:child_process";import{existsSync as qO,openSync as JO,closeSync as Dk}from"node:fs";import zO from"node:path";B();function Tg(e){return!!e.completionReportedAt?.trim()}function ui(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function WP(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Yl(e){return!!(WP(e.completionBlocker)||e.completionOutcome==="rejected")}function ko(e){return Tg(e)&&!Yl(e)}B();fe();H();import Mi from"node:path";function ql(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function yo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var LP=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),Ng=new Set(["done","failed","cancelled"]);function Dg(e){let r=ql(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=yo(r.outcome),n=yo(r.detail)??yo(r.error),o=ql(r.task),s=ql(r.closedTask),i=o?yo(o.status):null,a=s?yo(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&Ng.has(i)||a!==null&&Ng.has(a))||t!==null&&LP.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function Mg(e){return e.taskAdvanced}B();ds();var BP="expert-lane-pr-review:",UP="plan-review-task",FP="scheduledjob:",di=new Set(["lorentz","dalton","rhea","sentinel"]);function KP(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Jl(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function HP(e,r){return e.startsWith("factory:")?e.includes("lb")||Jl(r):!1}function pi(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
|
|
96
|
+
${n}`,s=KP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock:")||r==="lane:over_attempt_recovery"||r.startsWith("next-action-fix:")||r.startsWith("next-action-landing:")||r.startsWith("code-work-lane-chain:release:")?!1:!!(r.startsWith(BP)||r===UP||r.startsWith("daemon-review:")||s&&di.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||HP(r,o)||Jl(o))||r.startsWith(FP)&&e.parentTaskId&&s&&di.has(s)||e.planId&&!e.parentTaskId&&s&&di.has(s)&&Jl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&di.has(s))}var Wg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,$P=new Set(qm()),jP=/no commits between/i;function Lg(e){return!!(e&&jP.test(e))}function Se(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Bg(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Se(e.head)}function Ug(e){if(e==null)return null;let t=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return t?Se(t[0]):null}function VP(e,r,t){let n=r.trim();if(!n)return null;let o=t.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function GP(e,r){if(r.changedFiles.length>0)return!1;let t=Se(e.personaSlug)?.toLowerCase();if(t&&$P.has(t))return!0;let n=Se(e.routingRule)??"";return!!(n&&Wg.test(n))}function YP(e,r){if(e.changedFiles.length>0)return!0;let t=Se(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=VP(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(Se(e.headCommit)||Bg(e.gitAncestry))}function Fg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(pi({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=Se(e.routingRule)??"";if(r&&Wg.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(GP(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(Se(e.patchPath)||Se(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(Se(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(Se(e.prUrl)??Se(e.taskPrUrl)??Se(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return YP(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Kg(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:Se(r?.headCommit)??Bg(e.gitAncestry),prUrl:Se(r?.prUrl)??null}}import{spawnSync as qP}from"node:child_process";function $g(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Hg(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Hg(n[1]);try{let o=new URL(r.includes("://")?r:`https://${r}`);if(o.hostname.toLowerCase()!=="github.com")return null;let s=o.pathname.replace(/^\/+|\/+$/g,"").split("/");if(s.length<2)return null;let[i,a]=s;return!i||!a?null:`${i}/${a.replace(/\.git$/i,"")}`}catch{return null}}function Hg(e){let r=e.split("/").filter(Boolean);if(r.length<2)return null;let t=r[0],n=r[1].replace(/\.git$/i,"");return t&&n?`${t}/${n}`:null}de();function JP(e,r,t){try{let n=qP(e,t,{windowsHide:!0,cwd:r,encoding:"utf8"});return{status:n.status,stdout:(n.stdout||"").trim(),stderr:(n.stderr||"").trim(),error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}var fi={git:(e,r)=>ne(e,r),gh:(e,r)=>JP("gh",e,r)};function zP(e){return e.split(`
|
|
97
|
+
`).map(r=>r.trim()).find(Boolean)??""}function Vg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:$g(t.stdout)}function bt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function mi(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}var jg="Kynver-Task";function XP(e,r){let t=r?.trim();return!t||!/^[\w.-]{1,128}$/.test(t)||new RegExp(`^${jg}:`,"m").test(e)?e:`${e.trimEnd()}
|
|
96
98
|
|
|
97
|
-
${
|
|
98
|
-
`)}function
|
|
99
|
+
${jg}: ${t}`}function Ro(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",XP(n,e.taskId)]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=bt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Gg(e){let r=e.remoteBranch.trim();if(!r)return{ok:!1,detail:"missing remote branch"};let t=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${r}`]);return t.status!==0&&!/already up to date/i.test(t.stderr||t.stdout)?{ok:!1,detail:t.stderr||t.stdout||t.error||"git push to PR branch failed"}:{ok:!0}}function Yg(e){let r=mi(e.worktreePath,e.repo,e.branch,e.exec);if(r)return{ok:!0,prUrl:r,created:!1};let t=e.exec.gh(e.worktreePath,["pr","create","--repo",e.repo,"--base",e.base,"--head",e.branch,"--title",e.title,"--body",e.body,"--draft"]);if(t.status!==0)return{ok:!1,detail:t.stderr||t.stdout||t.error||"gh pr create failed"};let n=QP(t.stdout)??mi(e.worktreePath,e.repo,e.branch,e.exec);return n?{ok:!0,prUrl:n,created:!0}:{ok:!1,detail:"gh pr create succeeded but no PR URL was parsed"}}function QP(e){let t=zP(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function qg(e){return`t-${x(e)}-a`}function Jg(e,r){let t=qg(r);if(e.headRefName.toLowerCase().includes(t))return!0;let n=r.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function vo(e){return e.trim().toLowerCase()}function zg(e,r){if(!e.length)return null;if(r){let t=vo(r),n=e.find(o=>vo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Xg(e,r){let t=vo(r);return e.filter(n=>vo(n.url)!==t).map(n=>n.url)}function Qg(e){try{let r=JSON.parse(e);return Array.isArray(r)?r.map(t=>({url:t.url?.trim()??"",number:Number(t.number)||0,headRefName:t.headRefName?.trim()??"",createdAt:t.createdAt?.trim()??"",body:t.body,title:t.title})).filter(t=>t.url&&t.number>0&&t.headRefName):[]}catch{return[]}}function ZP(e){let r=new Set,t=[];for(let n of e){let o=vo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function eA(e,r,t,n){let o=n.gh(e,["search","prs",t,"--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:Qg(o.stdout).filter(s=>Jg(s,t))}function rA(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=qg(t);return Qg(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Jg(i,t))}function zl(e,r,t,n){let o=t.trim();if(!o)return[];let s=eA(e,r,o,n),i=rA(e,r,o,n);return ZP([...s,...i])}function tA(e){let r=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Xl(e){let r=Xg(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=tA(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?t.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:t,failed:n}}function Zg(e,r,t,n){let o=t.trim();if(!o||!r.trim())return null;let s=n.gh(e,["api",`repos/${r}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}function nA(e){return e.gh(process.cwd(),["--version"]).status===0}function oA(e,r){return`AgentOS harness: ${e} (${r})`}function sA(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(`
|
|
100
|
+
`)}function zr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function iA(e){return zr(e.prUrlHint)??Ug(e.status.finalResult)??zr(e.worker.taskPrUrl)??null}function aA(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??bt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=Ro({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,taskId:e.taskId,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Gg({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=bt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Ql(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??bt(e.snapshot.worktreePath,e.exec)??void 0};let r=Ro({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,taskId:e.taskId,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Zl(e,r=fi){let t=iA(e),n=Kg(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Fg({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?Ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),exec:r}):{ok:!0};if(t)return Ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),exec:r});if(!nA(r)){let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=Vg(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let h=!1,w=!1,E=n.headCommit??bt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=Ro({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,taskId:zr(e.worker.taskId),hasDirtyFiles:!0,exec:r});if(!S.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${S.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};h=S.committed,w=S.pushed,E=S.headCommit??E}else{let S=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(S.status!==0&&!/already up to date/i.test(S.stderr||S.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${S.stderr||S.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};w=S.status===0}return{ok:!0,prUrl:a,headCommit:E,committed:h,pushed:w}}let l=zr(e.worker.taskId),c=[];if(l){c=zl(n.worktreePath,i,l,r);let h=zg(c);if(h){let w=aA({snapshot:n,canonical:h,workerName:e.worker.name,taskId:l,exec:r});return w.ok&&w.prUrl&&Xl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=mi(n.worktreePath,i,n.branch,r);if(u)return Ql({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=Ro({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,taskId:zr(e.worker.taskId),hasDirtyFiles:d,exec:r});if(d&&!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=y.committed,m=y.pushed,!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let h=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(h.status!==0&&!/already up to date/i.test(h.stderr||h.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${h.stderr||h.stdout||h.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=h.status===0}f=y.headCommit??f??bt(n.worktreePath,r)??void 0;let k=f?Zg(n.worktreePath,i,f,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:f,committed:p,pushed:m,created:!1};let b=e.run.base?.trim()||"main",g=Yg({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:oA(e.worker.name,e.worker.runId),body:sA(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Lg(g.detail))return{ok:!0,headCommit:f??void 0,committed:p,pushed:m};let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${g.detail?` (${g.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}if(l&&g.prUrl){let w=[...c.length>0?c:zl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Xl({worktreePath:n.worktreePath,repo:i,rows:w,canonicalPrUrl:g.prUrl,exec:r})}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:p,pushed:m,created:g.created}}fe();dt();Ia();B();fe();O();import YA from"node:path";O();import lA from"node:path";var bo=new Map,ec=new Map;function rc(e){clearInterval(ec.get(e)),ec.delete(e)}function tc(e,r){if(rc(e),!bo.has(e))return;let t=setInterval(()=>{(I(lA.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&an(e)},1e3);t.unref(),ec.set(e,t)}function nc(e,r){rc(e);let t=bo.get(e);t&&t.close(),bo.set(e,r)}async function Xr(e){rc(e);let r=bo.get(e);return r?(bo.delete(e),await r.close(),!0):!1}function an(e){Xr(e).catch(()=>{})}de();import{appendFileSync as cA,existsSync as rh,mkdirSync as th,readFileSync as uA,rmSync as eh,writeFileSync as dA}from"node:fs";import Dr from"node:path";var nh=Dr.join(".cursor","mcp.json");function oh(e){return Dr.join(e,nh)}function pA(e){return Z(e,["ls-files","--error-unmatch",nh.split(Dr.sep).join("/")],{allowFailure:!0}).trim().length>0}function mA(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Dr.isAbsolute(r)?r:Dr.join(e,r),n=Dr.join(t,"info","exclude"),o=".cursor/mcp.json";try{th(Dr.dirname(n),{recursive:!0});let s=rh(n)?uA(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;cA(n,`${s.endsWith(`
|
|
99
101
|
`)||!s?"":`
|
|
100
102
|
`}${o}
|
|
101
|
-
`)}catch{}}function
|
|
102
|
-
`,{mode:384}),
|
|
103
|
-
`)}function
|
|
103
|
+
`)}catch{}}function sh(e){if(pA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .cursor/mcp.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=oh(e.worktreePath);th(Dr.dirname(r),{recursive:!0});let t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return dA(r,`${JSON.stringify(t,null,2)}
|
|
104
|
+
`,{mode:384}),mA(e.worktreePath),{ok:!0,configPath:r}}function gi(e){let r=oh(e);if(!rh(r))return!1;try{eh(r,{force:!0});let t=Dr.dirname(r);return eh(t,{recursive:!1}),!0}catch{return!0}}vr();import{copyFileSync as fA,existsSync as hi,mkdirSync as gA,readFileSync as hA,rmSync as kA,symlinkSync as yA,writeFileSync as RA}from"node:fs";import{spawnSync as vA}from"node:child_process";import{homedir as bA}from"node:os";import Qr from"node:path";var SA="codex-home";function ih(e){return Qr.join(e,SA)}function wA(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return Qr.resolve(r);let t=bA();for(let n of[Qr.join(t,".codex"),Qr.join(t,".config","codex")])if(hi(n))return n;return null}function xA(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${oe}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${oe}.env]`,`${rr} = ${JSON.stringify(e)}`,""].join(`
|
|
105
|
+
`)}function _A(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function ah(e){let r=wA(e.env??process.env),t=r?Qr.join(r,"config.toml"):null,n=t&&hi(t)?hA(t,"utf8"):"";if(n&&_A(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=ih(e.workerDir);gA(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
|
|
104
106
|
`)?"":`
|
|
105
|
-
`;return
|
|
107
|
+
`;return RA(Qr.join(o,"config.toml"),`${n}${s}${xA(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:EA(r,o)}}function EA(e,r){let t=e?Qr.join(e,"auth.json"):null;if(!t||!hi(t))return"none";let n=Qr.join(r,"auth.json");try{return yA(t,n,"file"),"symlink"}catch{try{return fA(t,n),"copy"}catch{return"none"}}}function So(e){let r=ih(e);if(!hi(r))return!1;try{return kA(r,{recursive:!0,force:!0}),!0}catch{return!1}}function lh(e,r,t=1e4){try{let[n,o]=pe(r,["--version"]),s=vA(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 CA,existsSync as oc,mkdirSync as uh,readFileSync as dh,rmSync as ch,writeFileSync as PA}from"node:fs";import Mr from"node:path";var ph=Mr.join(".agents","mcp_config.json");function mh(e){return Mr.join(e,ph)}function AA(e){return Z(e,["ls-files","--error-unmatch",ph.split(Mr.sep).join("/")],{allowFailure:!0}).trim().length>0}function IA(e){if(!oc(e))return{};try{let r=JSON.parse(dh(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t=r.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return{}}}function OA(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Mr.isAbsolute(r)?r:Mr.join(e,r),n=Mr.join(t,"info","exclude"),o=".agents/mcp_config.json";try{uh(Mr.dirname(n),{recursive:!0});let s=oc(n)?dh(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;CA(n,`${s.endsWith(`
|
|
106
108
|
`)||!s?"":`
|
|
107
109
|
`}${o}
|
|
108
|
-
`)}catch{}}function
|
|
109
|
-
`,{mode:384}),
|
|
110
|
-
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:
|
|
110
|
+
`)}catch{}}function fh(e){if(AA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=mh(e.worktreePath),t=IA(r);if(oe in t)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${oe}" server \u2014 refusing to overwrite it`};uh(Mr.dirname(r),{recursive:!0});let n={mcpServers:{...t,[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return PA(r,`${JSON.stringify(n,null,2)}
|
|
111
|
+
`,{mode:384}),OA(e.worktreePath),{ok:!0,configPath:r}}function ki(e){let r=mh(e);if(!oc(r))return!1;try{return ch(r,{force:!0}),ch(Mr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as TA,existsSync as sc,mkdirSync as NA,readFileSync as DA,rmSync as MA,symlinkSync as WA,writeFileSync as LA}from"node:fs";import{homedir as BA}from"node:os";import Wr from"node:path";var UA="gemini-home";function gh(e){return Wr.join(e,UA)}function FA(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||BA()}function KA(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Wr.join(Wr.resolve(r),".gemini"):Wr.join(FA(e),".gemini")}function HA(e){if(!sc(e))return{};try{let r=JSON.parse(DA(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function $A(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function jA(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function VA(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function hh(e){let r=e.env??process.env,t=KA(r),n=HA(Wr.join(t,"settings.json"));if($A(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=gh(e.workerDir),s=Wr.join(o,".gemini");NA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...jA(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:VA(e.brokerSocketPath)}};return LA(Wr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
|
|
112
|
+
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:GA(t,s)}}function GA(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Wr.join(e,o);if(!sc(s))continue;let i=Wr.join(r,o);try{WA(s,i,"file"),n==="none"&&(n="symlink")}catch{try{TA(s,i),n="copy"}catch{}}}return n}function yi(e){let r=gh(e);if(!sc(r))return!1;try{return MA(r,{recursive:!0,force:!0}),!0}catch{return!1}}var qA=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function kh(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function JA(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Zr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:JA(r);return{finalResult:r??t??"completed",summary:t}}function Ri(e,r,t){if(kh(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Zr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(an(e.workerDir),Js(e.workerDir),So(e.workerDir),yi(e.workerDir)),e.worktreePath&&(gi(e.worktreePath),ki(e.worktreePath))}function zA(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function yh(e,r,t={}){let n=zA(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=I(YA.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||kh(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!qA.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Gl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}Ri(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}Hn();function vi(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function XA(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 QA(e){let r=$n(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function ZA(e){let r=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${r}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:r,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function bi(e){let{worker:r,status:t}=e;if(vi(t.finalResult)){let u=me(r.heartbeatPath),d=wr(u),p=vi(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Zr(t)}}if(t.alive)return null;let n=mt(r.stdoutPath);if(vi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Zr(u)}}let o=me(r.heartbeatPath),s=wr(o);if(vi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Zr(u)}}let i=QA(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Zr(u)}}let a=XA(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Zr(u)}}let l=ZA({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Zr(c)}}function Si(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Hn();function wi(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return n!=="node_modules"&&!n.startsWith("node_modules/")})}function Rh(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function vh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function bh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function wh(e){let r=bh(e);if(!r)return[];let t=bh(r.worktreeHandoff),n=vh(t?.disposableArtifactsRemoved);return n.length?n:vh(r.disposableArtifactsRemoved)}function Sh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function xh(e,r){let t=wi(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Sh(o)));return t.every(o=>{let s=Sh(Rh(o));return n.has(s)})}function xi(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _h(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function eI(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 rI(e){let r=_h(e.disposableArtifactsRemoved),t=wh(e.finalResult);return[...new Set([...r,...t])]}function Eh(e){let r=_h(e.changedFiles),t=wi(r),n=rI(e),o=t.length===0||xh(r,n);return xi(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:xi(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:xi(e.artifactBundlePath)||xi(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:eI(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}Ze();import{existsSync as vI,renameSync as bI}from"node:fs";import{mkdirSync as gI}from"node:fs";import hI from"node:path";import{DatabaseSync as kI}from"node:sqlite";var ic=class extends Error{constructor(r,t){super(`local-run-store schema version ${r} is newer than this runtime supports (${t}); refusing to open. Upgrade the runtime or quarantine the database deliberately.`),this.name="SchemaDowngradeRefusedError"}},tI=[`CREATE TABLE IF NOT EXISTS local_meta (
|
|
111
113
|
key TEXT PRIMARY KEY,
|
|
112
114
|
value TEXT NOT NULL
|
|
113
115
|
) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
|
|
@@ -133,8 +135,8 @@ ${Wg}: ${t}`}function mo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirty
|
|
|
133
135
|
payload_json TEXT NOT NULL,
|
|
134
136
|
created_at TEXT NOT NULL,
|
|
135
137
|
PRIMARY KEY (scope, seq)
|
|
136
|
-
) STRICT`];function
|
|
137
|
-
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:
|
|
138
|
+
) STRICT`];function nI(e){if(!e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'local_meta'").get())return null;let t=e.prepare("SELECT value FROM local_meta WHERE key = 'schema_version'").get();if(!t?.value)return null;let n=Number.parseInt(t.value,10);return Number.isFinite(n)?n:null}function Ch(e,r){let t=nI(e);if(t!==null&&t>1)throw new ic(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of tI)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 oI,realpathSync as sI,readFileSync as iI}from"node:fs";import Ph from"node:path";var aI=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),lI=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function cI(){try{return iI("/proc/self/mounts","utf8")}catch{return null}}function uI(e){let r=Ph.resolve(e);for(let t=0;t<64;t+=1){if(oI(r))try{return sI.native(r)}catch{return r}let n=Ph.dirname(r);if(n===r)return r;r=n}return r}function dI(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function pI(e){let r=[];for(let t of e.split(`
|
|
139
|
+
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:dI(n[1]),fsType:n[2]})}return r}function Ah(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function mI(e,r){let t=null,n=Ah(e);for(let o of r){let s=Ah(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function Ih(e,r){let n=(r?.resolveRealPath??uI)(e),o=(r?.mountsSource??cI)();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=mI(n,pI(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 lI.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}:aI.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var _i=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},yI="local-run-store.sqlite",RI=5e3,wo=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=Ih(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new _i(t.reason);gI(r.directory,{recursive:!0,mode:448});let n=hI.join(r.directory,r.filename??yI),o=new kI(n,{timeout:r.busyTimeoutMs??RI}),s=r.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new _i(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Ch(o,s().toISOString())}catch(i){throw o.close(),i}return new e(o,n,s)}inImmediateTransaction(r){this.db.exec("BEGIN IMMEDIATE");try{let t=r();return this.db.exec("COMMIT"),t}catch(t){throw this.db.exec("ROLLBACK"),t}}registerProcessIdentity(r){let t=this.now().toISOString();return this.inImmediateTransaction(()=>{this.db.prepare(`INSERT INTO process_identity
|
|
138
140
|
(process_key, pid, runtime_version, node_version, started_at, registered_at)
|
|
139
141
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
140
142
|
ON CONFLICT(process_key) DO UPDATE SET
|
|
@@ -158,26 +160,26 @@ ${Wg}: ${t}`}function mo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirty
|
|
|
158
160
|
LIMIT ?`).all(...s,n).map(l=>({idempotencyKey:l.idempotency_key,operation:l.operation,resultJson:l.result_json,recordedAt:l.recorded_at}))}deleteOperationReceiptsByKeys(r){return r.length===0?0:this.inImmediateTransaction(()=>{let t=this.db.prepare("DELETE FROM operation_receipts WHERE idempotency_key = ?"),n=0;for(let o of r)n+=Number(t.run(o).changes);return n})}getOperationReceipt(r){let t=this.db.prepare(`SELECT idempotency_key, operation, result_json, recorded_at
|
|
159
161
|
FROM operation_receipts WHERE idempotency_key = ?`).get(r);return t?{idempotencyKey:t.idempotency_key,operation:t.operation,resultJson:t.result_json,recordedAt:t.recorded_at}:null}saveRecoveryCheckpoint(r){return this.inImmediateTransaction(()=>{let t=this.db.prepare("SELECT COALESCE(MAX(seq), 0) AS max_seq FROM recovery_checkpoints WHERE scope = ?").get(r.scope),n=Number(t.max_seq)+1;return this.db.prepare(`INSERT INTO recovery_checkpoints (scope, seq, payload_json, created_at)
|
|
160
162
|
VALUES (?, ?, ?, ?)`).run(r.scope,n,r.payloadJson,this.now().toISOString()),{seq:n}})}latestRecoveryCheckpoint(r){let t=this.db.prepare(`SELECT scope, seq, payload_json, created_at FROM recovery_checkpoints
|
|
161
|
-
WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(r);return t?{scope:t.scope,seq:t.seq,payloadJson:t.payload_json,createdAt:t.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(r){let t=this.db.prepare(`PRAGMA ${r}`).get();return String(Object.values(t)[0])}close(){this.db.close()}};function ZA(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;XA(o)&&QA(o,`${t}${n}`)}return t}function wh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ko.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=ZA(n,r);try{return{store:ko.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function eI(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function rI(){return tI.classifyOptions??eI()}var tI={};var nI=300*1e3,Wr=null,vi=0;function oI(e){vi+=1;try{let r=rI(),t=wh({directory:e,...r?{classifyOptions:r}:{}});return{store:t.store,status:{state:"open",harnessRoot:e,databasePath:t.store.databasePath,schemaVersion:t.store.localSchemaVersion(),recovered:t.recovered,quarantinedTo:t.quarantinedTo,reason:null,openAttempts:vi},failedAtMs:null,permanentRefusal:!1}}catch(r){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${r.name}: ${r.message}`,openAttempts:vi},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function sI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=nI}function z(e=Date.now()){let r=Be();return(!Wr||Wr.status.harnessRoot!==r||sI(Wr,e))&&(aI(),Wr=oI(r)),Wr.store}function iI(){return Wr?Wr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:vi}}function xh(){return z(),iI()}function aI(){try{Wr?.store?.close()}catch{}Wr=null}H();O();import{existsSync as lI,readFileSync as cI}from"node:fs";import{homedir as uI}from"node:os";import dI from"node:path";var pI=3e4,tr=null;function _h(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return dI.join(uI(),".kynver",`local-run-store-flags-${r}.json`)}function nc(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function Eh(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.localRunStoreFlags;return t===void 0?null:nc(t)}function Ch(e,r){try{let t=_h(e),n={contractVersion:1,agentOsId:e,flags:nc(r),deliveredAt:new Date().toISOString()};ue(t,n),tr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Ph(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(tr&&e-tr.loadedAtMs<pI)return tr.flags;try{let r=U().agentOsId?.trim();if(!r)return tr={flags:{},loadedAtMs:e,file:null},tr.flags;let t=_h(r);if(!lI(t))return tr={flags:{},loadedAtMs:e,file:t},tr.flags;let n=JSON.parse(cI(t,"utf8")),o=n?.contractVersion===1?nc(n.flags):{};return tr={flags:o,loadedAtMs:e,file:t},o}catch{return tr={flags:{},loadedAtMs:e,file:null},tr.flags}}var mI=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}];function fI(e){let r=e?.trim().toLowerCase()??"";return r===""?{mode:"off",unknown:!1}:r==="off"||r==="shadow"||r==="enforce"?{mode:r,unknown:!1}:{mode:"off",unknown:!0}}function Lr(e=process.env){let r={},t={},n=[],o=Ph();for(let s of mI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=fI(i);r[s.key]=c.mode,t[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){r[s.key]=l,t[s.key]="server";continue}r[s.key]="off",t[s.key]="default"}return{flags:r,sources:t,warnings:n}}var Te={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Br(e=process.env){return Lr(e).flags.dispatchReceipts}function oc(e){return Br(e)!=="off"}function sc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function Ro(e,r,t){if(!oc())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:sc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Te.storeFailures+=1}}function Ih(e){Ro("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function bi(e){Ro("spawned",e)}function on(e,r){Ro("released",e,{reasonClass:r})}function Oh(e){Ro("completion-sent",e)}function ic(e,r){Ro("completion-acked",e,{outcome:r})}function Th(e){if(!oc())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(t){let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return Te.completionReplaysObserved+=1,!0}}catch{Te.storeFailures+=1}return!1}function ac(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Nh(e){if(Br()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(!t)return!1;let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(Te.completionReplaysShortCircuited+=1,!0):!1}catch{return Te.storeFailures+=1,!1}}var gI=600*1e3;function Dh(e,r){if(Br()!=="enforce")return;let t=z();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Te.storeFailures+=1}}function Mh(e,r){if(Br()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??gI;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Te.storeFailures+=1,[]}}function yo(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var hI=900*1e3,Ah=10080*60*1e3,kI=1440*60*1e3,yI=500,RI=300;function Wh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!oc())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??hI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Ah).toISOString(),limit:yI}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let p=t.getOperationReceipt(`dispatch:spawned:${u}`),m=t.getOperationReceipt(`dispatch:released:${u}`);if(p||m){n-d>=kI&&a.length+5<=RI&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=yo(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=yo(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Br()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Ah}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Te.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Te.storeFailures+=1,r}}function Lh(){return{"dispatchReceipts.storeFailures":Te.storeFailures,"dispatchReceipts.completionReplaysObserved":Te.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Te.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Te.agedReceiptsPruned}}var sn=900*1e3,uc="admission-shadow",lc="worker-slot:",Qr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},cc=!1;function Bh(){cc=!1}function Ur(e=process.env){return Lr(e).flags.admission}function Si(e,r){return`${lc}${e}:${r}`}function Uh(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Si(e,r),uc,sn)}catch{Qr.storeFailures+=1}}function vo(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.releaseAdmission(Si(e,r),uc)}catch{Qr.storeFailures+=1}}function Fh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Ur()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Si(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:lc,limit:500}),s=new Set(o.map(p=>p.key)),i=[...n].filter(p=>!s.has(p)).length,a=o.filter(p=>!n.has(p.key)).length,l=!cc;cc=!0,!l&&i>0&&(Qr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Si(p.runId,p.workerName),uc,sn),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,Qr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:lc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return Qr.storeFailures+=1,r}}function Kh(){return{"admission.storeFailures":Qr.storeFailures,"admission.missingForLive":Qr.missingForLive,"admission.deadSlotsReleased":Qr.deadSlotsReleased}}var dc="worker-slot-n:",wi=64;function Hh(e){return`${dc}${e}`}function xi(e,r){return`${e}:${r}`}var Zr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function $h(e){if(Ur()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(wi,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Zr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=xi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Hh(o),n,sn).acquired)return{admitted:!0,slot:o};return Zr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Zr.enforceStoreFailures+=1,{admitted:!0}}}function et(e,r){if(Ur()==="off")return;let t=z();if(t)try{let n=xi(e,r),o=t.listAdmissionReservations({keyPrefix:dc,limit:wi});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Zr.enforceStoreFailures+=1}}function jh(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Ur()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>xi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:dc,limit:wi}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,sn),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=xi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<wi;d+=1)if(t.tryReserveAdmission(Hh(d),u,sn).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Zr.enforceStoreFailures+=1,r}}function Vh(){return{"admission.enforceStoreFailures":Zr.enforceStoreFailures,"admission.refusedSlotsExhausted":Zr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Zr.admissionsRefusedDiskBackstop}}O();O();var vI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,bI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Gh=new Set(["undefined","null"]),Yh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function SI(e){let r=e.trim();if(!vI.test(r))throw new Error(`invalid run id: ${e}`);return r}function wI(e){let r=e.trim();if(!bI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function qh(e){return typeof e=="string"?e.trim():""}function pc(e){let r=qh(e.run),t=qh(e.name);return(!r||Gh.has(r))&&Je(`missing --run RUN_ID (${Yh})`),(!t||Gh.has(t))&&Je(`missing --name WORKER_NAME (${Yh})`),{runId:SI(r),workerName:wI(t)}}import{existsSync as xI,mkdirSync as _I,readFileSync as EI,writeFileSync as CI}from"node:fs";import{homedir as PI}from"node:os";import tk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function bo(e){return Lr(process.env).flags[e]}var JG=1800*1e3;function mc(e){return`mesh-cron-lease:${e}`}function Jh(e,r){if(bo("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(mc(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(r.leaseToken??null)&&(o.holderBoxId??null)===(r.holderBoxId??null)&&o.authorized===r.authorized)return}t.saveRecoveryCheckpoint({scope:mc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function zh(e,r){let t=bo("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(mc(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(_e.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(_e.meshEnforceStaleInversions+=1,null):s}catch{return _e.meshStoreFailures+=1,null}}function _i(e){return`quota-cooldown:${e}`}var Xh="quota-preflight";function Qh(e,r){if(bo("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(_i(e),Xh,r)}catch{_e.quotaStoreFailures+=1}}function Zh(e){if(bo("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(_i(e),Xh)}catch{_e.quotaStoreFailures+=1}}function ek(e,r){let t=bo("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:_i(e),limit:50}).find(i=>i.key===_i(e)),s=!!o;return s!==r&&(_e.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return _e.quotaStoreFailures+=1,null}}function rk(){return{"keeper.storeFailures":_e.keeperStoreFailures,"meshLease.storeFailures":_e.meshStoreFailures,"meshLease.divergences":_e.meshLeaseDivergences,"meshLease.enforceStaleInversions":_e.meshEnforceStaleInversions,"quota.storeFailures":_e.quotaStoreFailures,"quota.verdictDivergences":_e.quotaVerdictDivergences}}var AI=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,II=30,OI=5,TI=240;function NI(e){let r=e?.trim();return!!(r&&AI.test(r))}function DI(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function fc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(TI,Math.max(OI,e)):II}function nk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||tk.join(PI(),".kynver","provider-quota-cooldowns.json")}function So(e){return(e??"").trim().toLowerCase()}function gc(){let e=nk();if(!xI(e))return{};try{let r=JSON.parse(EI(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[So(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function hc(e){let r=nk();try{_I(tk.dirname(r),{recursive:!0}),CI(r,`${JSON.stringify(e,null,2)}
|
|
162
|
-
`,"utf8")}catch{}}function
|
|
163
|
-
`),
|
|
164
|
-
`))throw new
|
|
165
|
-
`)},
|
|
166
|
-
`)}list(){return this.read().secrets.map(cn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?cn(t):null}put(r){if(!ak(r.name))throw new Se("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new Se("The secret is empty.","invalid");if(r.value.trim().length<nr.minValueChars)throw new Se(`The secret is too short \u2014 use at least ${nr.minValueChars} characters.`,"invalid");if(t>nr.maxValueBytes)throw new Se("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,nr.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===r.name);if(i)return i.value=bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ci(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:cn(i),replaced:!0};if(o.secrets.length>=nr.maxSecrets)throw new Se("This computer already holds the most secrets allowed.","full");let a=`sec_${nO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ci(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:cn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new Se("No saved secret by that name.","not_found");try{let n=Sc(this.opts.vaultKey,t.value,Ci(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:cn(t),value:n}}catch{throw new Se(`The saved value for ${t.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let r=[];for(let t of this.read().secrets)try{r.push({name:t.name,value:Sc(this.opts.vaultKey,t.value,Ci(this.opts.agentOsId,t.handle,t.name)).toString("utf8")})}catch{}return r}touch(r){if(r.length===0)return;let t=this.read(),n=this.now().toISOString();for(let o of t.secrets)r.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(t)}remove(r){let t=this.read(),n=t.secrets.findIndex(s=>r.handle?s.handle===r.handle:s.name===r.name);if(n<0)throw new Se("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?iO(this.file,{force:!0}):this.write(t),cn(o)}};var uO=64,xc=new Map;function dO(e,r){return`${r}\0${e}`}function pO(e){try{let r=lO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function mO(e,r=an()){if(!e)return null;let t=cO.join(r,wc(e)),n=pO(t),o=dO(e,r);if(!n)return xc.delete(o),null;let s=xc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=gk({root:r}),a=hk(new Pi({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return xc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function _c(e,r,t){if(typeof e=="string")return r.redact(e);if(t>uO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>_c(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=_c(s,r,t+1);return n}function yk(e,r,t=an()){let n=mO(e,t);return!n||n.empty?r:_c(r,n,0)}async function Rk(e,r,t){let n=await fetch(e,{method:"POST",headers:zn(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function fO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function vk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function wo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function hO(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function Sk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function kO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function un(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function yO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ec(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function RO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function _o(e){let{runId:r,workerName:t}=pc(e),n=Jt(r,t),o=q(n.runId),s=J(n,Ec(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!we(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&uo(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&$l(n)&&yO(n),!s.finalResult&&s.alive===!1){let _=gi({worker:n,status:s});_&&hi(n,_)&&(L(n.runId,n),n=Jt(r,t),s=J(n,Ec(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Jl({worker:n,run:o,status:s});if(!_.ok)return un(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ec(o)),s=RO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=yh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return un(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{sk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Q(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await ee(p,i,{baseUrl:d});a&&(await ei({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Jt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=ik({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=yk(i,{source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),...k?{workerUsage:k}:{},status:n.leaseToken?{...y,leaseToken:n.leaseToken}:y,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}}),g=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(g){if(Th(g),Nh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return oi(n,n.runId,_),mi(n,s,{source:"harness-completion"}),un(n,void 0),vo(n.runId,n.name),et(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Oh(g)}let h=await Rk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await ym(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Rk(f,m,b))}if(h.ok){let _=Eg(h.parsed);if(!Cg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;un(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return oi(n,n.runId,Ye),g&&ic(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}un(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};oi(n,n.runId,$),mi(n,s,{source:"harness-completion"}),g&&ic(g,"acknowledged"),vo(n.runId,n.name),et(n.runId,n.name);let C=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:K,...C?{prHandoff:{prUrl:C}}:{}}}let w=h.status===401||h.status===403,E=fO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return un(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function wk(e){let{run:r,workerName:t,worker:n}=e,o=J(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ft({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=Sk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=vk(n.completionResponse),m=vk(p?.task),f=wo(p?.outcome),y=wo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=wo(m?.prUrl)??wo(p?.prUrl),g=wo(n.completionReportedAt),h=gO({finished:we(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=hO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:we(o)}),E=kO({changedFiles:o.changedFiles,headCommit:s,prUrl:b??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let S=n.instructionPolicyEvidence;if(!S||typeof S!="object")return null;let _=S.ruleSlugs;return Array.isArray(_)?_.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:b,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:y,completionRouteOutcome:f,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function vO(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!Sk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function bO(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function xo(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function bk(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function SO(e){let r=e.filter(bk),t=e.filter(n=>{if(bk(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function xk(e,r,t){let n={runId:e.id,name:e.name,status:Pa(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:xo(r,"status"),attentionCounts:xo(r,"attention"),lifecycleCounts:xo(r,"lifecycleStage")},n.controller=SO(r)),n}function wO(e){return e.status==="done"&&e.attention==="done"}function Cc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Ai.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?wk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=xk(r,n,!1);return ue(Ai.join(N(r.id),"last-board.json"),o),o}function Pc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Ai.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?vO(a)?bO(i,a):wk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!wO(i)),s=xk(r,o,!0);return s.status=Pa(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:xo(n,"status"),allAttentionCounts:xo(n,"attention")},ue(Ai.join(N(r.id),"last-board-compact.json"),s),s}async function _k(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Cc(t),s=Q(e.baseUrl?String(e.baseUrl):void 0),i=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}O();H();B();O();var Dq=360*60*1e3;function Ck(e){let r=e.nodeExecutable??process.execPath,t=Vs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!_O(n))return;let o=CO.join(e.workerDir,"auto-complete.log"),s;try{s=EO(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=xO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&Ek(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Ek(s)}catch{}return}}de();function Pk(e,r,t){Z(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}We();Rs();H();import DO from"node:net";import{chmodSync as MO,unlinkSync as WO}from"node:fs";import{createHash as PO}from"node:crypto";import{chmodSync as AO,mkdirSync as IO}from"node:fs";import Ak from"node:os";import OO from"node:path";var TO=100,NO="\\\\.\\pipe\\";function Ik(e,r){return PO("sha256").update(e).digest("hex").slice(0,r)}function Ac(e){let r=e.platform??process.platform,t=Ik(e.agentOsId,12),n=Ik(e.workerKey,16);if(r==="win32")return{socketPath:`${NO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=OO.posix,s=e.homeDir??Ak.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=TO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Ak.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Ic(e){e.socketDir&&(IO(e.socketDir,{recursive:!0,mode:448}),AO(e.socketDir,448))}var Eo=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=to(r.capabilities),this.server=DO.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Ic(r.address),await new Promise((n,o)=>{t.server.once("error",o),t.server.listen(r.address.socketPath,()=>{t.server.removeListener("error",o),n()})}),!r.address.isNamedPipe)try{MO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(tn).map(r=>io[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{WO(this.opts.address.socketPath)}catch{}}}refuse(r,t){this.opts.onRefusal?.(r,t)}async handleConnection(r){this.sockets.add(r),r.on("close",()=>{this.sockets.delete(r),this.connections.delete(r)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(r,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),r.end();return}this.connections.add(r);let t=await this.opts.identity.verify({socket:r,workerPid:this.opts.workerPid});if(!t.ok){this.refuse("identity_refused",t.detail),this.write(r,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),r.end();return}let n="";r.setEncoding("utf8"),r.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(r,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),r.end();return}let s=n.indexOf(`
|
|
163
|
+
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 SI(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;vI(o)&&bI(o,`${t}${n}`)}return t}function Oh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=wo.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=SI(n,r);try{return{store:wo.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function wI(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function xI(){return _I.classifyOptions??wI()}var _I={};var EI=300*1e3,Lr=null,Ei=0;function CI(e,r){Ei+=1;try{let t=xI(),n=Oh({directory:e,...t?{classifyOptions:t}:{}});return{store:n.store,status:{state:"open",harnessRoot:e,databasePath:n.store.databasePath,schemaVersion:n.store.localSchemaVersion(),recovered:n.recovered,quarantinedTo:n.quarantinedTo,reason:null,openAttempts:Ei},failedAtMs:null,permanentRefusal:!1}}catch(t){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${t.name}: ${t.message}`,openAttempts:Ei},failedAtMs:r,permanentRefusal:t.name==="FilesystemPolicyError"||t.name==="SchemaDowngradeRefusedError"}}}function PI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=EI}function z(e=Date.now()){let r=Ue();return(!Lr||Lr.status.harnessRoot!==r||PI(Lr,e))&&(II(),Lr=CI(r,e)),Lr.store}function AI(){return Lr?Lr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Ei}}function Th(){return z(),AI()}function II(){try{Lr?.store?.close()}catch{}Lr=null}H();O();import{existsSync as OI,readFileSync as TI}from"node:fs";import{homedir as NI}from"node:os";import DI from"node:path";var MI=3e4,nr=null;function Nh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return DI.join(NI(),".kynver",`local-run-store-flags-${r}.json`)}function ac(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function Dh(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.localRunStoreFlags;return t===void 0?null:ac(t)}function Mh(e,r){try{let t=Nh(e),n={contractVersion:1,agentOsId:e,flags:ac(r),deliveredAt:new Date().toISOString()};ue(t,n),nr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Wh(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(nr&&e-nr.loadedAtMs<MI)return nr.flags;try{let r=U().agentOsId?.trim();if(!r)return nr={flags:{},loadedAtMs:e,file:null},nr.flags;let t=Nh(r);if(!OI(t))return nr={flags:{},loadedAtMs:e,file:t},nr.flags;let n=JSON.parse(TI(t,"utf8")),o=n?.contractVersion===1?ac(n.flags):{};return nr={flags:o,loadedAtMs:e,file:t},o}catch{return nr={flags:{},loadedAtMs:e,file:null},nr.flags}}var WI=[{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 LI(e){let r=e?.trim().toLowerCase()??"";return r===""?{mode:"off",unknown:!1}:r==="off"||r==="shadow"||r==="enforce"?{mode:r,unknown:!1}:{mode:"off",unknown:!0}}function Br(e=process.env){let r={},t={},n=[],o=Wh();for(let s of WI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=LI(i);r[s.key]=c.mode,t[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){r[s.key]=l,t[s.key]="server";continue}r[s.key]="off",t[s.key]="default"}return{flags:r,sources:t,warnings:n}}var Ne={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Ur(e=process.env){return Br(e).flags.dispatchReceipts}function lc(e){return Ur(e)!=="off"}function cc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function _o(e,r,t){if(!lc())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:cc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Ne.storeFailures+=1}}function Bh(e){_o("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function Ci(e){_o("spawned",e)}function ln(e,r){_o("released",e,{reasonClass:r})}function Uh(e){_o("completion-sent",e)}function uc(e,r){_o("completion-acked",e,{outcome:r})}function Fh(e){if(!lc())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(cc("completion-acked",e));if(t){let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return Ne.completionReplaysObserved+=1,!0}}catch{Ne.storeFailures+=1}return!1}function dc(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Kh(e){if(Ur()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(cc("completion-acked",e));if(!t)return!1;let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(Ne.completionReplaysShortCircuited+=1,!0):!1}catch{return Ne.storeFailures+=1,!1}}var BI=600*1e3;function Hh(e,r){if(Ur()!=="enforce")return;let t=z();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Ne.storeFailures+=1}}function $h(e,r){if(Ur()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??BI;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Ne.storeFailures+=1,[]}}function xo(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var UI=900*1e3,Lh=10080*60*1e3,FI=1440*60*1e3,KI=500,HI=300;function jh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!lc())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??UI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Lh).toISOString(),limit:KI}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let p=t.getOperationReceipt(`dispatch:spawned:${u}`),m=t.getOperationReceipt(`dispatch:released:${u}`);if(p||m){n-d>=FI&&a.length+5<=HI&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=xo(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=xo(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Ur()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Lh}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Ne.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Ne.storeFailures+=1,r}}function Vh(){return{"dispatchReceipts.storeFailures":Ne.storeFailures,"dispatchReceipts.completionReplaysObserved":Ne.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Ne.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Ne.agedReceiptsPruned}}var cn=900*1e3,fc="admission-shadow",pc="worker-slot:",et={storeFailures:0,missingForLive:0,deadSlotsReleased:0},mc=!1;function Gh(){mc=!1}function Fr(e=process.env){return Br(e).flags.admission}function Pi(e,r){return`${pc}${e}:${r}`}function Yh(e,r){if(Fr()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Pi(e,r),fc,cn)}catch{et.storeFailures+=1}}function Eo(e,r){if(Fr()==="off")return;let t=z();if(t)try{t.releaseAdmission(Pi(e,r),fc)}catch{et.storeFailures+=1}}function qh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Fr()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Pi(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:pc,limit:500}),s=new Set(o.map(p=>p.key)),i=[...n].filter(p=>!s.has(p)).length,a=o.filter(p=>!n.has(p.key)).length,l=!mc;mc=!0,!l&&i>0&&(et.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Pi(p.runId,p.workerName),fc,cn),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,et.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:pc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return et.storeFailures+=1,r}}function Jh(){return{"admission.storeFailures":et.storeFailures,"admission.missingForLive":et.missingForLive,"admission.deadSlotsReleased":et.deadSlotsReleased}}var gc="worker-slot-n:",Ai=64;function zh(e){return`${gc}${e}`}function Ii(e,r){return`${e}:${r}`}var rt={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function Xh(e){if(Fr()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Ai,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return rt.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=Ii(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(zh(o),n,cn).acquired)return{admitted:!0,slot:o};return rt.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return rt.enforceStoreFailures+=1,{admitted:!0}}}function tt(e,r){if(Fr()==="off")return;let t=z();if(t)try{let n=Ii(e,r),o=t.listAdmissionReservations({keyPrefix:gc,limit:Ai});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{rt.enforceStoreFailures+=1}}function Qh(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Fr()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>Ii(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:gc,limit:Ai}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,cn),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=Ii(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Ai;d+=1)if(t.tryReserveAdmission(zh(d),u,cn).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return rt.enforceStoreFailures+=1,r}}function Zh(){return{"admission.enforceStoreFailures":rt.enforceStoreFailures,"admission.refusedSlotsExhausted":rt.admissionsRefusedSlots,"admission.refusedDiskBackstop":rt.admissionsRefusedDiskBackstop}}O();O();var $I=/^[a-z0-9][a-z0-9._-]{0,127}$/i,jI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,ek=new Set(["undefined","null"]),rk="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function VI(e){let r=e.trim();if(!$I.test(r))throw new Error(`invalid run id: ${e}`);return r}function GI(e){let r=e.trim();if(!jI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function tk(e){return typeof e=="string"?e.trim():""}function hc(e){let r=tk(e.run),t=tk(e.name);return(!r||ek.has(r))&&Je(`missing --run RUN_ID (${rk})`),(!t||ek.has(t))&&Je(`missing --name WORKER_NAME (${rk})`),{runId:VI(r),workerName:GI(t)}}import{existsSync as YI,mkdirSync as qI,readFileSync as JI,writeFileSync as zI}from"node:fs";import{homedir as XI}from"node:os";import uk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function Co(e){return Br(process.env).flags[e]}var TY=1800*1e3;function kc(e){return`mesh-cron-lease:${e}`}function nk(e,r){if(Co("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(kc(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(r.leaseToken??null)&&(o.holderBoxId??null)===(r.holderBoxId??null)&&o.authorized===r.authorized)return}t.saveRecoveryCheckpoint({scope:kc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function ok(e,r){let t=Co("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(kc(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(_e.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(_e.meshEnforceStaleInversions+=1,null):s}catch{return _e.meshStoreFailures+=1,null}}function Oi(e){return`quota-cooldown:${e}`}var sk="quota-preflight";function ik(e,r){if(Co("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Oi(e),sk,r)}catch{_e.quotaStoreFailures+=1}}function ak(e){if(Co("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(Oi(e),sk)}catch{_e.quotaStoreFailures+=1}}function lk(e,r){let t=Co("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:Oi(e),limit:50}).find(i=>i.key===Oi(e)),s=!!o;return s!==r&&(_e.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return _e.quotaStoreFailures+=1,null}}function ck(){return{"keeper.storeFailures":_e.keeperStoreFailures,"meshLease.storeFailures":_e.meshStoreFailures,"meshLease.divergences":_e.meshLeaseDivergences,"meshLease.enforceStaleInversions":_e.meshEnforceStaleInversions,"quota.storeFailures":_e.quotaStoreFailures,"quota.verdictDivergences":_e.quotaVerdictDivergences}}var QI=/\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,ZI=30,eO=5,rO=240;function tO(e){let r=e?.trim();return!!(r&&QI.test(r))}function nO(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function yc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(rO,Math.max(eO,e)):ZI}function dk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||uk.join(XI(),".kynver","provider-quota-cooldowns.json")}function Po(e){return(e??"").trim().toLowerCase()}function Rc(){let e=dk();if(!YI(e))return{};try{let r=JSON.parse(JI(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[Po(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function vc(e){let r=dk();try{qI(uk.dirname(r),{recursive:!0}),zI(r,`${JSON.stringify(e,null,2)}
|
|
164
|
+
`,"utf8")}catch{}}function oO(e,r,t=Date.now()){let n=Po(e);if(!n)return;let o=Rc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},vc(o),ik(n,yc()*6e4)}function sO(e){let r=Po(e);if(!r)return!1;ak(r);let t=Rc();return r in t?(delete t[r],vc(t),!0):!1}function pk(e,r=Date.now()){if(!nO())return{ok:!0};let t=Po(e);if(!t)return{ok:!0};let n=Rc(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+yc()*6e4>r),i=lk(t,s);if(i)return i.blocked?{ok:!1,provider:t,reason:`provider "${t}" is inside its local quota cooldown`+(i.retryAtIso?` \u2014 preflight declines spawn until ${i.retryAtIso}`:""),retryAtIso:i.retryAtIso??new Date(r).toISOString()}:{ok:!0};if(!o)return{ok:!0};let a=Date.parse(o.lastExhaustedAt),l=a+yc()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],vc(n),{ok:!0};let c=new Date(l).toISOString();return{ok:!1,provider:t,reason:`provider "${t}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${c}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:c}}function iO(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function mk(e){let r=Po(e.provider);if(!r)return"none";let t=iO(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?tO(t)?(oO(r,t,e.nowMs??Date.now()),"recorded"):sO(r)?"cleared":"none":"none"}function fk(e){let r=e.usage;return!r||r.inputTokens===void 0&&r.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:r.model?.trim()||e.model?.trim()||null,inputTokens:r.inputTokens??null,outputTokens:r.outputTokens??null}}import{statSync as OO}from"node:fs";import TO from"node:path";Za();import{createECDH as vk,randomBytes as uO}from"node:crypto";import{chmodSync as bk,existsSync as kk,mkdirSync as dO,readFileSync as pO,readdirSync as mO,renameSync as fO,writeFileSync as gO}from"node:fs";import{homedir as hO}from"node:os";import Sk from"node:path";import{createCipheriv as HY,createDecipheriv as $Y,createECDH as jY,createHash as cO,hkdfSync as VY,randomBytes as GY}from"node:crypto";var aO=/^[A-Z][A-Z0-9_]{1,63}$/;var or={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},lO=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function gk(e){return typeof e=="string"&&aO.test(e)&&!lO.has(e)&&!e.startsWith("KYNVER_")}function hk(e){return cO("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var yk="secret-store-keys";function un(){return Sk.join(hO(),".kynver","secrets")}function Sc(e){dO(e,{recursive:!0,mode:448});try{bk(e,448)}catch{}}function wc(e,r){let t=`${e}.${process.pid}.tmp`;gO(t,r,{mode:384});try{bk(t,384)}catch{}fO(t,e)}function Rk(e){if(!e)return null;try{let r=JSON.parse(e);if(r.v===1&&typeof r.ecdh=="string"&&typeof r.vault=="string")return{v:1,ecdh:r.ecdh,vault:r.vault}}catch{}return null}function Ti(e,r){let t=Buffer.from(e.ecdh,"base64"),n=Buffer.from(e.vault,"base64");if(t.length!==32||n.length!==32)throw new Error("secret store keys are corrupt");let o=vk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:hk(s),vaultKey:n,keyStore:r}}var kO=e=>Sk.join(e,"keys.json"),bc=class extends Error{constructor(){super("Saved secrets exist on this computer but their key can't be read (is the OS keyring locked?). Unlock it and try again."),this.name="SecretKeysUnavailableError"}};function wk(e={}){let r=e.root??un(),t=e.keychain??zn(),n=t.available?Rk(t.read(yk)):null;if(n)return Ti(n,"keychain");let o=kO(r),s=kk(o)?Rk(pO(o,"utf8")):null;if(s)return Ti(s,"file");if(kk(r)&&mO(r).some(d=>d.endsWith(".vault.json")))throw new bc;let i=vk("prime256v1");i.generateKeys();let a=Buffer.alloc(32),l=i.getPrivateKey();l.copy(a,32-l.length);let c={v:1,ecdh:a.toString("base64"),vault:uO(32).toString("base64")},u=JSON.stringify(c);return t.write(yk,u)?Ti(c,"keychain"):(Sc(r),wc(o,`${u}
|
|
165
|
+
`),Ti(c,"file"))}function yO(e){let r=new Set([e]),t=Buffer.from(e,"utf8").toString("base64");r.add(t),r.add(t.replace(/=+$/,"")),r.add(t.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""));let n=encodeURIComponent(e);n!==e&&r.add(n);let o=e.trim();return o&&o!==e&&r.add(o),[...r].filter(s=>s.length>=or.minRedactChars)}function RO(e){return e.length>=or.minValueChars&&e.length<or.minRedactChars}function vO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function xk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;RO(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of yO(o.value))r.push({needle:i,label:s,token:!1})}r.sort((o,s)=>s.needle.length-o.needle.length||Number(o.token)-Number(s.token));let t=new Set,n=r.filter(o=>{let s=`${o.token?"t":"s"}:${o.needle}`;return t.has(s)?!1:(t.add(s),!0)});return{empty:n.length===0,maxLength:n.reduce((o,s)=>Math.max(o,s.needle.length),0),partialSuffixLength(o){let s=0;for(let i of n){let a=i.needle[0];for(let l=Math.min(i.needle.length-1,o.length);l>s;l--)if(o[o.length-l]===a&&o.endsWith(i.needle.slice(0,l))){s=l;break}}return s},redact(o){if(!o||n.length===0)return o;let s=o;for(let i of n)if(i.token){let a=new RegExp(`(^|[^A-Za-z0-9_])${vO(i.needle)}(?=$|[^A-Za-z0-9_])`,"g");s=s.replace(a,`$1${i.label}`)}else s.includes(i.needle)&&(s=s.split(i.needle).join(i.label));return s}}}import{createHash as _O,randomBytes as EO}from"node:crypto";import{existsSync as CO,readFileSync as PO,rmSync as AO}from"node:fs";import IO from"node:path";import{createCipheriv as bO,createDecipheriv as SO,randomBytes as wO,scrypt as sq,timingSafeEqual as iq}from"node:crypto";var xO=32,_k=12,xc=16,aq={N:2**17,r:8,p:1},lq=2**14;var dn=class extends Error{constructor(r="the saved-login vault could not be decrypted"){super(r),this.name="VaultCryptoError"}};function _c(e,r,t){if(e.length!==xO)throw new dn("bad key length");let n=wO(_k),o=bO("aes-256-gcm",e,n);o.setAAD(Buffer.from(t,"utf8"));let s=Buffer.concat([o.update(r),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Ec(e,r,t){try{let n=Buffer.from(r.n,"base64"),o=Buffer.from(r.c,"base64");if(n.length!==_k||o.length<xc)throw new dn;let s=SO("aes-256-gcm",e,n);return s.setAAD(Buffer.from(t,"utf8")),s.setAuthTag(o.subarray(o.length-xc)),Buffer.concat([s.update(o.subarray(0,o.length-xc)),s.final()])}catch(n){throw n instanceof dn?n:new dn}}var cq=Buffer.from("kynver-site-login-key-check-v1","utf8");var we=class extends Error{constructor(t,n){super(t);this.code=n;this.name="SecretStoreError"}code};function Cc(e){return`${_O("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ni=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
|
|
166
|
+
`))throw new we("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
|
|
167
|
+
`)},pn=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Di=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new we("workspace is required","invalid");this.root=r.root??un(),this.file=IO.join(this.root,Cc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!CO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(PO(this.file,"utf8"))}catch{throw new we("The saved-secrets file is damaged.","corrupt")}if(r.v!==1||!Array.isArray(r.secrets))throw new we("The saved-secrets file is damaged.","corrupt");if(r.agentOsId!==this.opts.agentOsId)throw new we("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:r.agentOsId,secrets:r.secrets}}write(r){Sc(this.root),wc(this.file,`${JSON.stringify(r)}
|
|
168
|
+
`)}list(){return this.read().secrets.map(pn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?pn(t):null}put(r){if(!gk(r.name))throw new we("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new we("The secret is empty.","invalid");if(r.value.trim().length<or.minValueChars)throw new we(`The secret is too short \u2014 use at least ${or.minValueChars} characters.`,"invalid");if(t>or.maxValueBytes)throw new we("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,or.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===r.name);if(i)return i.value=_c(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ni(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:pn(i),replaced:!0};if(o.secrets.length>=or.maxSecrets)throw new we("This computer already holds the most secrets allowed.","full");let a=`sec_${EO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:_c(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ni(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:pn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new we("No saved secret by that name.","not_found");try{let n=Ec(this.opts.vaultKey,t.value,Ni(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:pn(t),value:n}}catch{throw new we(`The saved value for ${t.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let r=[];for(let t of this.read().secrets)try{r.push({name:t.name,value:Ec(this.opts.vaultKey,t.value,Ni(this.opts.agentOsId,t.handle,t.name)).toString("utf8")})}catch{}return r}touch(r){if(r.length===0)return;let t=this.read(),n=this.now().toISOString();for(let o of t.secrets)r.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(t)}remove(r){let t=this.read(),n=t.secrets.findIndex(s=>r.handle?s.handle===r.handle:s.name===r.name);if(n<0)throw new we("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?AO(this.file,{force:!0}):this.write(t),pn(o)}};var NO=64,Pc=new Map;function DO(e,r){return`${r}\0${e}`}function MO(e){try{let r=OO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function WO(e,r=un()){if(!e)return null;let t=TO.join(r,Cc(e)),n=MO(t),o=DO(e,r);if(!n)return Pc.delete(o),null;let s=Pc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=wk({root:r}),a=xk(new Di({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return Pc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Ac(e,r,t){if(typeof e=="string")return r.redact(e);if(t>NO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>Ac(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=Ac(s,r,t+1);return n}function Ek(e,r,t=un()){let n=WO(e,t);return!n||n.empty?r:Ac(r,n,0)}async function Ck(e,r,t){let n=await fetch(e,{method:"POST",headers:Zn(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function LO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Pk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ao(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function BO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function UO(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function Ik(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function FO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function mn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function KO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ic(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function HO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function Oo(e){let{runId:r,workerName:t}=hc(e),n=zt(r,t),o=q(n.runId),s=J(n,Ic(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!xe(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&ko(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Yl(n)&&KO(n),!s.finalResult&&s.alive===!1){let _=bi({worker:n,status:s});_&&Si(n,_)&&(L(n.runId,n),n=zt(r,t),s=J(n,Ic(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Zl({worker:n,run:o,status:s});if(!_.ok)return mn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ic(o)),s=HO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=Eh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return mn(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{mk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Q(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await ee(p,i,{baseUrl:d});a&&(await ii({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=zt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=fk({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=Ek(i,{source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),...k?{workerUsage:k}:{},status:n.leaseToken?{...y,leaseToken:n.leaseToken}:y,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}}),g=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(g){if(Fh(g),Kh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return ui(n,n.runId,_),Ri(n,s,{source:"harness-completion"}),mn(n,void 0),Eo(n.runId,n.name),tt(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Uh(g)}let h=await Ck(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await wm(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Ck(f,m,b))}if(h.ok){let _=Dg(h.parsed);if(!Mg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;mn(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return ui(n,n.runId,Ye),g&&uc(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}mn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};ui(n,n.runId,$),Ri(n,s,{source:"harness-completion"}),g&&uc(g,"acknowledged"),Eo(n.runId,n.name),tt(n.runId,n.name);let C=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:K,...C?{prHandoff:{prUrl:C}}:{}}}let w=h.status===401||h.status===403,E=LO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return mn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function Ok(e){let{run:r,workerName:t,worker:n}=e,o=J(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Kt({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=Ik(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Pk(n.completionResponse),m=Pk(p?.task),f=Ao(p?.outcome),y=Ao(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=Ao(m?.prUrl)??Ao(p?.prUrl),g=Ao(n.completionReportedAt),h=BO({finished:xe(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=UO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:xe(o)}),E=FO({changedFiles:o.changedFiles,headCommit:s,prUrl:b??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let S=n.instructionPolicyEvidence;if(!S||typeof S!="object")return null;let _=S.ruleSlugs;return Array.isArray(_)?_.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:b,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:y,completionRouteOutcome:f,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function $O(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!Ik(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function jO(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 Io(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function Ak(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function VO(e){let r=e.filter(Ak),t=e.filter(n=>{if(Ak(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function Tk(e,r,t){let n={runId:e.id,name:e.name,status:Da(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:Io(r,"status"),attentionCounts:Io(r,"attention"),lifecycleCounts:Io(r,"lifecycleStage")},n.controller=VO(r)),n}function GO(e){return e.status==="done"&&e.attention==="done"}function Oc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Mi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?Ok({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Tk(r,n,!1);return ue(Mi.join(N(r.id),"last-board.json"),o),o}function Tc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Mi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?$O(a)?jO(i,a):Ok({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!GO(i)),s=Tk(r,o,!0);return s.status=Da(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Io(n,"status"),allAttentionCounts:Io(n,"attention")},ue(Mi.join(N(r.id),"last-board-compact.json"),s),s}async function Nk(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Oc(t),s=Q(e.baseUrl?String(e.baseUrl):void 0),i=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}O();H();B();O();var kJ=360*60*1e3;function Mk(e){let r=e.nodeExecutable??process.execPath,t=Qs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!qO(n))return;let o=zO.join(e.workerDir,"auto-complete.log"),s;try{s=JO(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=YO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&Dk(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Dk(s)}catch{}return}}de();function Wk(e,r,t){Z(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Le();_s();H();import nT from"node:net";import{chmodSync as oT,unlinkSync as sT}from"node:fs";import{createHash as XO}from"node:crypto";import{chmodSync as QO,mkdirSync as ZO}from"node:fs";import Lk from"node:os";import eT from"node:path";var rT=100,tT="\\\\.\\pipe\\";function Bk(e,r){return XO("sha256").update(e).digest("hex").slice(0,r)}function Nc(e){let r=e.platform??process.platform,t=Bk(e.agentOsId,12),n=Bk(e.workerKey,16);if(r==="win32")return{socketPath:`${tT}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=eT.posix,s=e.homeDir??Lk.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=rT)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Lk.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Dc(e){e.socketDir&&(ZO(e.socketDir,{recursive:!0,mode:448}),QO(e.socketDir,448))}var To=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=so(r.capabilities),this.server=nT.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Dc(r.address),await new Promise((n,o)=>{t.server.once("error",o),t.server.listen(r.address.socketPath,()=>{t.server.removeListener("error",o),n()})}),!r.address.isNamedPipe)try{oT(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(on).map(r=>co[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{sT(this.opts.address.socketPath)}catch{}}}refuse(r,t){this.opts.onRefusal?.(r,t)}async handleConnection(r){this.sockets.add(r),r.on("close",()=>{this.sockets.delete(r),this.connections.delete(r)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(r,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),r.end();return}this.connections.add(r);let t=await this.opts.identity.verify({socket:r,workerPid:this.opts.workerPid});if(!t.ok){this.refuse("identity_refused",t.detail),this.write(r,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),r.end();return}let n="";r.setEncoding("utf8"),r.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(r,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),r.end();return}let s=n.indexOf(`
|
|
167
169
|
`);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
|
|
168
|
-
`)}})}write(r,t){if(!r.destroyed)try{r.write(Cl(t))}catch{}}async handleLine(r,t){let n=Pl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!tn(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Gs({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(r,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(r,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}};var Dk={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function Oc(){return Dk}var UO=7200*1e3;async function Mk(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=x(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||Ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Xs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=wg(o.provider),i=o.model;if(s.preflightModel){let T=s.preflightModel(r.model);if(!T.ok)throw new Error(`model preflight failed for provider "${s.name}": ${T.note??"invalid model/provider combination"}`);T.normalized&&console.error(`[supervisor] ${n}: ${T.note}`),i=T.model}let{worktreesDir:a}=le(),l=dn.join(N(e.id),"workers",n);BO(l,{recursive:!0});let c=dn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(LO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Pk(e.repo,c,u);else{let T=kg({baseCommit:e.baseCommit,base:e.base,verifyRef:te=>Z(e.repo,["rev-parse","--verify","--quiet",`${te}^{commit}`],{allowFailure:!0}).trim().length>0});T.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${T.ref} (${T.source})`),e.baseCommit=Z(e.repo,["rev-parse",T.ref],{allowFailure:!0}).trim()||T.ref,Ie(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=dn.join(l,"stdout.jsonl"),m=dn.join(l,"stderr.log"),f=dn.join(l,"heartbeat.jsonl"),y=bg({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:f,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:r.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,b=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let g=ii({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Al(s.name)&&no()){let T=el();T&&r.agentOsId&&r.taskId?(w={apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let K=xf(s.name);if(_&&K&&no()){let T=el();if(T&&r.agentOsId&&r.taskId){let te=Ac({agentOsId:String(r.agentOsId),workerKey:l}),F=await Eo.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+UO,workerPid:process.pid,identity:Oc(),onRefusal:D=>console.error(`[supervisor] ${n}: worker tools refused a call (${D})`)});if(Zl(l,F),s.name==="codex"){let D=Zg({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=eh(D.codexHome,Tl());M.ok?(E=D.codexHome,h=E):(ho(l),await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=Xg({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&Js(qs())==="antigravity"){let D=ih({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=lh({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=Ef({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${F.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?dp(pp(e.id,String(r.taskId),n)):null,C;try{C=mp($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:Qf(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:y,reviewWorker:g,executionMode:r.executionMode??"write",...w?{workerToolGrant:w}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:wf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Hs(l),ci(c),ho(l),pi(l),di(c),nn(l)),Z(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Z(e.repo,["branch","-D",d],{allowFailure:!0}),T}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let re=tg(C.model,i,s.defaultModel),ke=U(),Ye=vr(process.env,ke),gr=He().runnerId,Hr=ys({boxKind:Ye.boxKind,config:ke,env:process.env}),j={name:n,runId:e.id,status:"running",pid:C.pid,model:re,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:r.runtimeEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},executionMode:r.executionMode??"write",boxKind:Ye.boxKind,boxId:Hr,runtimeId:gr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),Ql(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:dn.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Ck({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let F=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=F,L(e.id,j)}if(T)T.pid&&(j.completionSidecarPid=T.pid,L(e.id,j));else{let te=j.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";j.completionBlocker=te,j.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,j),gg(e.id,j,te)}}return j}H();Vn();function FO(e,r){let t=Yt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function KO(e){let r=Cr()?.trim();return r||Qe("KYNVER_API_KEY",e)||Qe("KYNVER_RUNTIME_SECRET",e)||Qe("KYNVER_CRON_SECRET",e)||Qe("OPENCLAW_CRON_SECRET",e)||null}async function Wk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.timeoutMs??8e3,s=new Date(n).toISOString(),i=r.fetcher??fetch,a=FO(t,e.agentOsId),l=KO(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}On();function HO(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?An(t)??null:null}function $O(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function jO(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Lk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=HO(t,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(t.KYNVER_AGENT_OS_ID??t.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=$O(t,o),l=jO(t,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}O();H();import{mkdirSync as Uk}from"node:fs";import{homedir as VO,tmpdir as u2}from"node:os";import Ii from"node:path";function Fk(){let e=process.env.KYNVER_STATE_ROOT;return e?Ii.resolve(e):Ii.join(VO(),".kynver","state")}function Oi(){return Ii.join(Fk(),"plan-outbox")}function GO(){return Ii.join(Fk(),"plan-outbox-archive")}function Kk(){let e=Oi(),r=GO();return Uk(e,{recursive:!0}),Uk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var g2=600*1e3,Co={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Hk(){return{"planOutbox.storeFailures":Co.storeFailures,"planOutbox.corruptItemsSeen":Co.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Co.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Co.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Co.halfArchivesCompleted}}import{existsSync as JO,readFileSync as zO,renameSync as R2,readdirSync as v2,rmSync as b2,writeFileSync as S2,unlinkSync as w2}from"node:fs";import $k from"node:path";function jk(e){if(!JO(e))return null;try{return JSON.parse(zO(e,"utf8"))}catch{return null}}function Ti(e){let{outboxDir:r}=Kk();return{jsonPath:$k.join(r,`${e.id}.json`),bodyPath:$k.join(r,e.bodyPath)}}import tT from"node:path";function Dc(e){let r=tT.join(Oi(),`${e}.json`);return jk(r)}function Mc(e){let r=Ti(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
169
|
-
`)}function
|
|
170
|
-
`),
|
|
171
|
-
`)}var
|
|
172
|
-
`)}function OT(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Ni(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){Xn({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},hr=function(){return F.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Lu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ye,n=Re,o=hr,s=Lu;let i=Gk();if(!i.ok||!i.identity){let v=Yk(i);if(r)return{ok:!1,error:v,boundary:i};console.error(`run dispatch failed: ${v}`),process.exit(1)}let a=i.identity;for(let v of i.warnings)console.error(`[dispatch] runner-boundary warning: ${v}`);let l=q(String(yr(String(e.run||""),"--run"))),c=Vk(l,a);if(!c.ok){let v=c.reason??"run does not belong to this runner boundary";if(r)return{ok:!1,error:v,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${v}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(yr(String(e.agentOsId||""),"--agent-os-id")),d=Q(e.baseUrl?String(e.baseUrl):void 0),p=await ee(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=He({runId:l.id}),k=co(l.id,y.runnerId),b=Mm(),g=b?Lm(l.repo):null,h=new WeakMap;if(b&&m&&!g){let v="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(r)return{ok:!1,error:v,runId:l.id};console.error(`run dispatch failed: ${v}`),process.exit(1)}let w=e.diskPath?Vr({diskPath:String(e.diskPath)}):Vr({diskPath:l.repo}),E=await Gm({runId:l.id,agentOsId:u,args:e}),S=OT(e),_=S.size>0,K=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,$=_?Math.min(K,S.size):K;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let v=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await X(v,p,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let C=f?$:Math.min($,E.slotsAvailable);if(!f&&C<=0){let v={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:E.reason??"no resource slots",resourceGate:E};if(r)return{ok:!0,...v};console.log(JSON.stringify(v,null,2));return}let re=Os(l.id),ke=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ye=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Kl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Cc(l.id),...e.lane?{lane:Vm(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(A=>A.trim()).filter(Boolean)}:{}}),gr=Um(),Hr=async v=>{let R=b&&g?Wm(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:gr})??{ok:!1,status:0,response:null},W=A.response;if(R&&Array.isArray(W?.result?.started))for(let G of W.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:W?.result}};f||Xn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:gr});let j=await Hr(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=ll(j.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:j.dispatch.status,response:j.dispatch.response,authRefreshed:j.dispatch.refreshedAuth===!0,authRefreshFailure:j.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&Xn({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:j.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let T=j.result;if(f){let v=Ry(T),R=vy(T),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:T.started.map(W=>({taskId:W.task.id,title:W.task.title,reason:W.reason})),skipped:T.skipped.map(W=>({taskId:W.task.id,skipReason:W.skipReason,reason:W.reason})),diskGate:T.diskGate,resourceGate:T.resourceGate,inspected:T.inspected,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let te=ig(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Po({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&on({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...A};return F.push(G),Re("outcome",{lastOutcome:G}),!1}async function xb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return V(R,"land_pr task missing prUrl");try{let G=await py({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:A,runId:l.id,workerName:`land-pr-${A}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),qe=await my({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(F.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):V(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function _b(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Po({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&on({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return F.push(W),Re("outcome",{lastOutcome:W}),!1}async function Eb(v){let R=v.task,A=CT(v),W=String(R.id);if(_&&!S.has(W))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=PT(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(dg(l.id,W))return _b(R);let qe=Number(R.attempt)||1;if(qe>te.maxTaskAttempts)return V(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let st=R.leaseToken?String(R.leaseToken).trim():"";if(!st)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let it=x(`t-${R.id}-a${R.attempt}`),kr=Xs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Ym(R)});Ih({taskId:W,leaseToken:st,runId:l.id,workerName:it,provider:kr.provider??null});let Qi=og({task:R,routing:kr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Qi.ok)return V(R,Qi.error??"model_routing_mismatch",{modelRoutingGuard:Qi});if(ky(R)){let Ce=await yy({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let Lo=ok(kr.provider);if(!Lo.ok)return V(R,`provider_quota_exhausted: ${Lo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Lo.provider,retryAt:Lo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Bo=Rg({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),$u=$h({runId:l.id,workerName:it,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Aa()});if(!$u.admitted)return V(R,`admission_refused: ${$u.reason}`,{nonFatal:!0});let Uo=A?.workerMcpToken??null;if(Uo&&no()){let Tt=Lk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Tt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Tt.code}: ${Tt.detail}) \u2014 spawning without tools`),Uo=null;else{let Zi=await Wk(Tt.context);Zi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Zi.error??`HTTP ${Zi.httpStatus}`}) \u2014 spawning without tools`),Uo=null)}}fg(l.id,String(R.id),{except:it});let sr=await Mk(l,{name:it,task:IT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Tt=>Tt.trim()).filter(Boolean):[],model:kr.model,provider:kr.provider,routingRule:kr.rule,requestedModel:kr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Bo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Bo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Bo?.targetPrUrl,repairTargetBranch:Bo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Uo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:st,dispatched:!0,executionMode:Ts(R)}),Fo=await gy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:st,worker:sr,baseUrl:d,secret:p});if(!Fo.ok)return hy(l.id,sr,Fo.error??"dispatch_start_readback_failed"),et(l.id,it),V(R,Fo.error??"dispatch_start_readback_failed",{readback:Fo.detail??null});sr.leaseToken!==st&&(sr.leaseToken=st,sr.leaseOwner=k,L(l.id,sr)),bi({taskId:W,leaseToken:st}),Uh(l.id,it);let ju={taskId:R.id,started:!0,worker:sr.name,pid:sr.pid,branch:sr.branch,model:sr.model,provider:kr.provider,routingRule:kr.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??G,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return F.push(ju),Re("worker_started",{lastOutcome:ju}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??W}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return et(l.id,it),V(R,Ce.message)}}let Xi=new Set;for(let v of Mh(l.id))Xi.add(v);async function Bu(v){let R=v.task,A=String(R.id);if(Xi.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?Bm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=W&&!W.allow?await V(R,`desktop_execution_policy_denied:${W.code}: ${W.reason}`,{desktopPolicyDenied:W.code,...W.code==="operation_not_approved"?{nonFatal:!0}:{}}):Lu(v)?await xb(v):await Eb(v);return G||(Xi.add(A),Dh(A,l.id)),G}for(let v of T.started)await Bu(v);if(D.push(...T.skipped??[]),_)for(let v of D){let R=String(v.task.id);S.has(R)&&F.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&F.length<C;){if(hr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};F.push(A),Re("circuit_breaker",{lastOutcome:A});break}let v=await Hr(1);if(!v.dispatch.ok||!v.result){let A=Fm(v.dispatch.response),W=ye();ie=A&&W>0;let G=ll(v.dispatch.response),qe={started:!1,error:G?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...G?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};F.push(qe),Re("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:qe});break}M+=Number(v.result.inspected)||0,D.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(F.length>=C)break;await Bu(A)}}let Wo=F.filter(v=>v.started).length,$r=Ry(T),Ot=vy(T),Uu=Wo===0&&($r?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if(Uu&&$r?.summary){let v=$r.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??$r.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=Ot?`; dispatch_skip_drain scanned=${Ot.scanned??0} advanced=${Ot.advanced??0}`:"",G=$r.progressionReport?.summary?`; ${$r.progressionReport.summary}`:"",qe=Ot?.prLifecycleAttempt?.summary?`; ${Ot.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${$r.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let Fu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Wo,capacityIdle:Uu,admissionExhaustion:$r,dispatchSkipDrain:Ot,outcomes:F,skipped:D.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:M,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:gr},Ku=v=>!v.started&&v.nonFatal!==!0,Cb=F.some(Ku),Hu=ie&&Wo>0?!0:!Cb;if(Xn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Wo,ok:Hu}),r)return{ok:Hu,...Fu};console.log(JSON.stringify(Fu,null,2)),F.some(Ku)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var TT=1;function mn(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function NT(e){let{maxStarts:r,...t}=e;return t}async function Kc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=NT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ni({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:mn(u)}}let n=Math.min(r,TT),o=Math.max(0,r-n),s=await Ni({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=mn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ni({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=mn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function by(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function DT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Ao(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function MT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Sy(e,r){let t=DT(r),n=Ao(t?.recommendedMaxStarts),o=Ao(t?.actionableReady),s=Ao(t?.queuedTasks),i=Ao(t?.boardAdvancedThisTick)??0,a=Ao(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=MT("KYNVER_DAEMON_MAX_DISPATCH_STARTS");p!==null&&(u=Math.min(u,p));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import PN from"node:path";B();Dn();fe();O();import WT from"node:path";var LT=new Set(["running","dispatching","pending","queued","needs_attention"]),St=new Set(["completed","failed","cancelled","done"]);function wt(e){let r=ir(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(WT.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=J(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Mp(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Io(){let e=[];for(let r of Xe()){if(!LT.has(r.status))continue;let t=wt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Dn();fe();O();ct();Un();import{existsSync as ot,lstatSync as lN,readdirSync as cN,readlinkSync as uN,renameSync as Xc,unlinkSync as dN}from"node:fs";import pr from"node:path";Ze();O();import or from"node:path";var BT=`${or.sep}runs${or.sep}runs${or.sep}`;function Di(e){return e.includes(BT)}function Hc(e,r){return or.join(Ae(he(e)),x(r))}function tt(e,r,t){return or.join(Hc(e,r),"workers",x(t))}function wy(e,r,t){let n=he(e);return or.join(n,"runs","runs",x(r),"workers",x(t))}function $c(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function xt(e){return{workerJsonPath:or.join(e,"worker.json"),stdoutPath:or.join(e,"stdout.jsonl"),stderrPath:or.join(e,"stderr.log"),heartbeatPath:or.join(e,"heartbeat.jsonl"),lastStatusPath:or.join(e,"last-status.json")}}function xy(e){let r=xt(tt(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Di(e.statusPath)?e.statusPath:r}import{existsSync as nt,mkdirSync as eN,readdirSync as Iy,renameSync as rN,statSync as Gc}from"node:fs";import se from"node:path";H();Cn();jr();import UT from"node:path";function FT(e){return UT.resolve(Me(e.trim()))}function jc(e,r,t){let n=e?.trim();return n?{repo:FT(n),source:r,persistedInConfig:t}:null}function KT(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function _y(e={}){let r=e.env??process.env,t=e.config??U(),n=jc(t.defaultRepo,"config",!0);if(n)return n;let o=jc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=jc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||KT(Yo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();ct();Ze();B();O();H();import{existsSync as HT,readFileSync as $T,readdirSync as jT,statSync as VT,writeFileSync as GT}from"node:fs";import YT from"node:path";var Ne="<redacted>",Vc=`[^\\s"'\\\\,}\\]]`,qT=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Vc}+`,"gi"),Ne],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Vc}+`,"gi"),Ne],[/\bkynver_u_[A-Za-z0-9_-]+/g,Ne],[/\bkyn_[A-Za-z0-9]{12,}/g,Ne],[/\bsk-ant-[A-Za-z0-9_-]+/g,Ne],[/\bsk-[A-Za-z0-9_-]{8,}/g,Ne],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,Ne],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,Ne],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,Ne],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${Ne}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Vc}+`,"g"),`$1${Ne}`]],JT=12,zT=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,XT=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,QT=256*1024*1024;function ZT(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=JT))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(Ne));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(Ne))}for(let[o,s]of qT)t=t.replace(o,s);return t}function Ey(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&zT.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Cy(e,r=0){if(r>3||!HT(e))return[];let t=[];for(let n of jT(e,{withFileTypes:!0})){let o=YT.join(e,n.name);n.isDirectory()?t.push(...Cy(o,r+1)):n.isFile()&&XT.test(n.name)&&t.push(o)}return t}function Py(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Cy(e)}catch{return t}for(let o of n)try{if(VT(o).size>QT){t.failed.push(o);continue}let s=$T(o,"utf8"),i=ZT(s,r);if(i===s){t.clean+=1;continue}GT(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Oo=900*1e3,tN=3600*1e3;function Oy(e,r){let t=se.resolve(e),n=se.resolve(Ae(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function Yc(e){if(!nt(e))return[];try{return Iy(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function qc(e){let r=se.join(e,"workers");if(!nt(r))return[];try{return Iy(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Ty(e){return se.join(e,"archived-workers")}function nN(e,r){let t=se.join(Ty(e),x(r));return nt(t)?`${t}-${Date.now()}`:t}function Ay(e,r,t){if(!nt(e))return!1;try{let n=r-Gc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ny(e,r=Date.now(),t=Oo){if(!nt(e))return!1;let n=xt(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Ay(n.stdoutPath,r,t)||Ay(n.heartbeatPath,r,t))}function oN(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-Gc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function sN(e,r,t,n){if(Ny(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=oN(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function fn(e,r=Date.now(),t=Oo){for(let n of qc(e))if(Ny(se.join(e,"workers",n),r,t))return!0;return!1}function iN(){let r=_y()?.repo??"",t="unknown";if(r)try{let n=Z(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function aN(e,r){let t=se.join(Ae(e),x(r));if(!nt(t))return null;let n=qc(t);if(n.length===0)return null;let o;try{o=Gc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=tt(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=fn(t);return{id:r,name:r,...iN(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Jc(e){let r=he(e??Be()),t=Ae(r),n=[];for(let o of Yc(t)){let s=se.join(t,o,"run.json");if(nt(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=aN(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:fn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function zc(e,r={}){let t=he(e??Be()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??tN,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Ey(process.env,[Cr,()=>Yt()])))();Jc(t);for(let c of Yc(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=I(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...qc(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=I(b,void 0);if(!g){let E=se.join(Ty(u),x(y));if(nt(E)&&(p.workers[x(y)]||p.workers[y])){delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:E});continue}i.push({runId:p.id,worker:y,action:"skipped",reason:"worker.json missing"});continue}let h=sN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=nN(u,y);eN(se.dirname(w),{recursive:!0}),rN(k,w),Py(w,l()),delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:h.reason,archivePath:w})}f&&Ie(p)}return{workers:i}}function Dy(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Yc(n)){let s=se.join(n,o);fn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function pN(e,r){let t=Hc(e,r),n;try{n=lN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=pr.resolve(pr.dirname(t),uN(t));if(fn(o)||fn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Xc(o,s),dN(t),Xc(s,t),o}function mN(e){let r=[];for(let t of $c()){let n=pr.join(e.fromDir,t),o=pr.join(e.toDir,t);!ot(n)||ot(o)||(Xc(n,o),r.push(t))}return r}function My(e,r){let t=xt(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function fN(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function gN(e){let r=xt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=ot(r.stdoutPath),o=ot(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?dt(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=Sr(a),c=fN({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:pr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),My(u,e.canonicalDir),u}function hN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=tt(r,e.id,o),a=pr.join(i,"worker.json");(Di(s.workerDir)||Di(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ie(e)),t}function kN(e){let r=[],t=tt(e.harnessRoot,e.run.id,e.workerName),n=wy(e.harnessRoot,e.run.id,e.workerName),o=xt(t),s=mN({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=xy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&ot(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=gN({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return L(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=ot(t),u=$c().some(d=>ot(pr.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:pr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return L(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return My(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",L(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function yN(e,r){let t=pr.join(N(e.id),"workers");if(!ot(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of cN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Wy(){let{harnessRoot:e}=le(),r=Jc(e),t=[];for(let n of Xe()){let o=pN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),hN(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of yN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:tt(e,n.id,i),statusPath:pr.join(tt(e,n.id,i),"worker.json")}},Ie(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...kN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}ct();ls();fe();B();Dn();O();import{execFileSync as Ly}from"node:child_process";import By from"node:path";function Qc(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function RN(e){let r=Qc(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function vN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function bN(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function SN(e){let r=null;if(typeof e=="string"?r=Ht(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Qc(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function wN(e){try{let n=Ly("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Ly("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:Qc(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function xN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??Sr(r)}function _N(e){let r=new Map,t=N(e.id);for(let n of ir(e)){let o=I(By.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of SN(xN(o))){let i=RN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function EN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,vN(r)].filter(Boolean).join(`
|
|
173
|
-
`);return
|
|
174
|
-
`,{mode:384}),
|
|
175
|
-
`);a.trim()&&(
|
|
170
|
+
`)}})}write(r,t){if(!r.destroyed)try{r.write(Tl(t))}catch{}}async handleLine(r,t){let n=Nl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!on(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Zs({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(r,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(r,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}};var Hk={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function Mc(){return Hk}var lT=7200*1e3;async function $k(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=x(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||Or,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:ni({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=Og(o.provider),i=o.model;if(s.preflightModel){let T=s.preflightModel(r.model);if(!T.ok)throw new Error(`model preflight failed for provider "${s.name}": ${T.note??"invalid model/provider combination"}`);T.normalized&&console.error(`[supervisor] ${n}: ${T.note}`),i=T.model}let{worktreesDir:a}=le(),l=fn.join(N(e.id),"workers",n);aT(l,{recursive:!0});let c=fn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(iT(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Wk(e.repo,c,u);else{let T=xg({baseCommit:e.baseCommit,base:e.base,verifyRef:te=>Z(e.repo,["rev-parse","--verify","--quiet",`${te}^{commit}`],{allowFailure:!0}).trim().length>0});T.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${T.ref} (${T.source})`),e.baseCommit=Z(e.repo,["rev-parse",T.ref],{allowFailure:!0}).trim()||T.ref,Ie(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=fn.join(l,"stdout.jsonl"),m=fn.join(l,"stderr.log"),f=fn.join(l,"heartbeat.jsonl"),y=Pg({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:f,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:r.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,b=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let g=pi({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Dl(s.name)&&io()){let T=il();T&&r.agentOsId&&r.taskId?(w={apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let K=Pf(s.name);if(_&&K&&io()){let T=il();if(T&&r.agentOsId&&r.taskId){let te=Nc({agentOsId:String(r.agentOsId),workerKey:l}),F=await To.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+lT,workerPid:process.pid,identity:Mc(),onRefusal:D=>console.error(`[supervisor] ${n}: worker tools refused a call (${D})`)});if(nc(l,F),s.name==="codex"){let D=ah({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=lh(D.codexHome,Ll());M.ok?(E=D.codexHome,h=E):(So(l),await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=sh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&ri(ei())==="antigravity"){let D=fh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=hh({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await Xr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=If({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${F.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?gp(hp(e.id,String(r.taskId),n)):null,C;try{C=kp($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:sg(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:y,reviewWorker:g,executionMode:r.executionMode??"write",...w?{workerToolGrant:w}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:Cf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Js(l),gi(c),So(l),yi(l),ki(c),an(l)),Z(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Z(e.repo,["branch","-D",d],{allowFailure:!0}),T}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let re=cg(C.model,i,s.defaultModel),ke=U(),Ye=br(process.env,ke),hr=He().runnerId,$r=xs({boxKind:Ye.boxKind,config:ke,env:process.env}),j={name:n,runId:e.id,status:"running",pid:C.pid,model:re,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:r.runtimeEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},executionMode:r.executionMode??"write",boxKind:Ye.boxKind,boxId:$r,runtimeId:hr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),tc(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:fn.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Mk({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let F=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=F,L(e.id,j)}if(T)T.pid&&(j.completionSidecarPid=T.pid,L(e.id,j));else{let te=j.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";j.completionBlocker=te,j.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,j),Sg(e.id,j,te)}}return j}H();qn();function cT(e,r){let t=qt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function uT(e){let r=Pr()?.trim();return r||Qe("KYNVER_API_KEY",e)||Qe("KYNVER_RUNTIME_SECRET",e)||Qe("KYNVER_CRON_SECRET",e)||Qe("OPENCLAW_CRON_SECRET",e)||null}async function jk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.timeoutMs??8e3,s=new Date(n).toISOString(),i=r.fetcher??fetch,a=cT(t,e.agentOsId),l=uT(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}`}}}Dn();function dT(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Tn(t)??null:null}function pT(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function mT(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Vk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=dT(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=pT(t,o),l=mT(t,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}O();H();import{mkdirSync as Yk}from"node:fs";import{homedir as fT,tmpdir as Y2}from"node:os";import Wi from"node:path";function qk(){let e=process.env.KYNVER_STATE_ROOT;return e?Wi.resolve(e):Wi.join(fT(),".kynver","state")}function Li(){return Wi.join(qk(),"plan-outbox")}function gT(){return Wi.join(qk(),"plan-outbox-archive")}function Jk(){let e=Li(),r=gT();return Yk(e,{recursive:!0}),Yk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var Q2=600*1e3,No={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function zk(){return{"planOutbox.storeFailures":No.storeFailures,"planOutbox.corruptItemsSeen":No.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":No.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":No.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":No.halfArchivesCompleted}}import{existsSync as yT,readFileSync as RT,renameSync as tz,readdirSync as nz,rmSync as oz,writeFileSync as sz,unlinkSync as iz}from"node:fs";import Xk from"node:path";function Qk(e){if(!yT(e))return null;try{return JSON.parse(RT(e,"utf8"))}catch{return null}}function Bi(e){let{outboxDir:r}=Jk();return{jsonPath:Xk.join(r,`${e.id}.json`),bodyPath:Xk.join(r,e.bodyPath)}}import _T from"node:path";function Bc(e){let r=_T.join(Li(),`${e}.json`);return Qk(r)}function Uc(e){let r=Bi(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
171
|
+
`)}function Fc(e){let r=e.metadata&&typeof e.metadata=="object"?e.metadata:null,t=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(r&&typeof r.planPersistenceOutboxId=="string"?r.planPersistenceOutboxId:void 0);return t?{outboxId:t,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:r&&typeof r.planPersistenceOutboxPath=="string"?r.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:r&&typeof r.planPersistenceBodyPath=="string"?r.planPersistenceBodyPath:void 0}:null}B();function Kc(e){return e?.trim()?e.trim():null}function Zk(e,r){let t=Kc(e.boxKind),n=Kc(e.runnerId),o=Kc(e.harnessRoot);return t&&t!==r.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${t}" but this host is "${r.boxKind}" \u2014 use a run under ${r.harnessRoot}`}:n&&n!==r.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${r.runnerId}"`}:o&&o!==r.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${r.harnessRoot}"`}:!t||!n||!o?(e.boxKind=r.boxKind,e.runnerId=r.runnerId,e.harnessRoot=r.harnessRoot,Ie(e),{ok:!0,stamped:!0}):{ok:!0}}H();Jn();function ey(e=process.env){return Yt(U(),e,{requireExplicitBoxKind:!0})}function ry(e){return[...e.errors,...e.warnings].join("; ")}async function Do(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 gn(e){if(!e||typeof e!="object")return!1;let r=e;return[r.agentOsId,r.subjectTaskId,r.reviewTaskId,r.signature].every(t=>typeof t=="string"&&!!t)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(r.prUrl)&&/^[a-f0-9]{40}$/.test(r.headSha)&&/^[a-f0-9]{64}$/.test(r.reviewGenerationSha256)&&Number.isSafeInteger(r.reviewAttempt)&&r.reviewAttempt>0&&typeof r.acceptedAt=="string"&&Number.isFinite(Date.parse(r.acceptedAt))}function ty(e,r){return e.signature===r.signature&&e.agentOsId===r.agentOsId&&e.subjectTaskId===r.subjectTaskId&&e.prUrl===r.prUrl&&e.reviewTaskId===r.reviewTaskId&&e.reviewAttempt===r.reviewAttempt&&e.reviewGenerationSha256===r.reviewGenerationSha256&&e.headSha===r.headSha&&e.acceptedAt===r.acceptedAt}import{spawnSync as hy}from"node:child_process";var ny=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function nt(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function oy(e){let r=typeof e.completedAt=="string"&&e.completedAt||typeof e.startedAt=="string"&&e.startedAt;if(!r)return 0;let t=Date.parse(r);return Number.isFinite(t)?t:0}function sy(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=nt(o),i=t.get(s);(!i||oy(o)>=oy(i))&&t.set(s,o)}return[...t.values()]}function ET(e){let r=typeof e.detailsUrl=="string"&&e.detailsUrl||typeof e.details_url=="string"&&e.details_url||typeof e.html_url=="string"&&e.html_url||"",t=typeof e.workflowName=="string"?e.workflowName.trim():"",n=e.app&&typeof e.app=="object"?e.app:null,o=typeof n?.slug=="string"?n.slug:"";return t.length>0||o==="github-actions"||/^https:\/\/github\.com\/[^/]+\/[^/]+\/actions\//i.test(r)}function iy(e){let r=sy(e),t=[],n=[],o=[];for(let s of r){if(ET(s)){o.push(nt(s));continue}let i=typeof s.conclusion=="string"?s.conclusion.toUpperCase():"",a=typeof s.status=="string"?s.status.toUpperCase():"",l=typeof s.state=="string"?s.state.toUpperCase():"";if(!(i&&ny.has(i))){if(i){n.push(`${nt(s)}=${i}`);continue}if(!(l&&ny.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${nt(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${nt(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${nt(s)}=${a}`);continue}t.push(`${nt(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function ay(e){return sy(e).some(t=>{let n=nt(t),o=typeof t.conclusion=="string"?t.conclusion.toUpperCase():"",s=typeof t.state=="string"?t.state.toUpperCase():"";return/^vercel/i.test(n)&&(o==="SUCCESS"||s==="SUCCESS")})}var CT=new Set(["CLEAN","HAS_HOOKS"]);function ly(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!CT.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as PT}from"node:child_process";function cy(){if(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim())return{source:"env",configured:!0,reason:"GitHub token already configured in environment"};let e=PT("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 AT,randomUUID as IT}from"node:crypto";import{closeSync as uy,fsyncSync as dy,mkdirSync as OT,openSync as py,realpathSync as TT,writeFileSync as NT}from"node:fs";import Hc from"node:path";function fy(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(r=>typeof r=="string"&&!!r.trim())}function my(e,r,t,n){OT(e,{recursive:!0,mode:448});let o=TT(e),s=py(Hc.join(o,`${r}.${t}.json`),"wx",384);try{NT(s,JSON.stringify({...n,phase:t},null,2)+`
|
|
172
|
+
`),dy(s)}finally{uy(s)}for(let i=o;;i=Hc.dirname(i)){let a=py(i,"r");try{dy(a)}catch(l){if(!DT(l))throw l}finally{uy(a)}if(i===Hc.dirname(i))break}}function DT(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function gy(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:AT("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:IT(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return my(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return my(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function jc(e){return e?.trim()?["--repo",e.trim()]:[]}function ky(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function yy(e,r,t){let n=e.gh(r,t);if(n.status!==0)throw new Error(n.stderr||n.stdout||`gh ${t.join(" ")} failed`);return JSON.parse(n.stdout||"{}")}var MT=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,WT=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,LT=/^docs[(:]/i,BT=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function UT(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=LT.test(r)||BT.test(t),o=MT.test(t),s=WT.test(t);return n||o||s||e.vercelCheckSuccess===!0}function FT(e){if(!UT({title:e.title,body:e.body,vercelCheckSuccess:ay(e.statusCheckRollup)}))throw new Error(`PR #${e.number} lacks landing verification evidence \u2014 add ## Test plan / ## Verification with local commands, Vercel preview, or docs/no-code rationale`)}function KT(e){if(e.state!=="OPEN")throw new Error(`PR #${e.number} is ${e.state}, not OPEN`);if(e.isDraft)throw new Error(`PR #${e.number} is still a draft`);let r=iy(e.statusCheckRollup);if(r.failed.length>0)throw new Error(`PR #${e.number} has failing checks: ${r.failed.join(", ")}`);if(r.pending.length>0)throw new Error(`PR #${e.number} has pending checks: ${r.pending.join(", ")}`);let t=ly(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function HT(e){KT(e),FT(e)}function $T(e){try{return HT(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function jT(e,r,t,n){if(!n?.trim())return;let o=encodeURI(`heads/${n}`);e.gh(r,["api","-X","DELETE",`repos/${t}/git/refs/${o}`])}function VT(e,r,t){if(t?.trim())return t.trim();let n=e.gh(r,["repo","view","--json","nameWithOwner"]);if(n.status!==0)throw new Error(n.stderr||"Could not resolve GitHub repo");let o=JSON.parse(n.stdout||"{}");if(!o.nameWithOwner)throw new Error("Could not resolve GitHub repo");return o.nameWithOwner}function GT(e,r){if(!r?.trim())return;let t=hy("git",["worktree","list","--porcelain"],{windowsHide:!0,cwd:e,encoding:"utf8"});if(t.status!==0)return;let n=String(t.stdout||"").split(/\r?\n/),o=null,s=null;for(let i of n){if(i.startsWith("worktree ")){o=i.slice(9).trim(),s=null;continue}i.startsWith("branch ")&&o&&(s=i.slice(7).trim(),s.endsWith(`/${r}`)&&hy("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function Ry(e){let r=e.cwd??process.cwd(),t=e.exec??fi,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!gn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=cy();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=yy(t,r,["pr","view",n,...jc(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","headRefOid","mergedAt","mergeCommit"].join(",")]);if(a.state==="MERGED")return{prUrl:a.url||n,outcome:"skipped",mergeCommit:a.mergeCommit?.oid??null,provenance:{attribution:"preexisting_merge",mergeInvoked:!1,headSha:a.headRefOid??null,mergedAt:a.mergedAt??null,mergeCommit:a.mergeCommit?.oid??null},reason:`PR #${a.number} is already merged \u2014 land_pr no-op (redelivery)`};if(a.headRefOid?.toLowerCase()!==o.headSha)return s();let l=$T(a);if(l)return e.skipNotReady?{prUrl:a.url||n,outcome:"skipped",reason:l}:{prUrl:a.url||n,outcome:"blocked",reason:l};if(e.dryRun)return{prUrl:a.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};if(!a.headRefOid||!/^[a-f0-9]{40}$/i.test(a.headRefOid)||!fy(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!gn(u)||!ty(o,u))return s();let d=gy(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...jc(e.repo),"--squash","--match-head-commit",o.headSha])}catch{let k=d.finish({attribution:"unconfirmed",mergeInvoked:!0,headSha:a.headRefOid,mergedAt:null,mergeCommit:null,mergeExitCode:null});return{prUrl:n,outcome:"blocked",reason:"merge invocation threw; outcome unconfirmed",provenance:k}}let m=(k,b)=>d.finish({attribution:b,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:k?.mergedAt??null,mergeCommit:k?.mergeCommit?.oid??null,mergeExitCode:p.status});if(p.status!==0){let k=$c(t,r,c,e.repo);return k?{prUrl:k.url||a.url||n,outcome:"skipped",mergeCommit:k.mergeCommit?.oid??null,provenance:m(k,"external_merge_observed"),reason:`PR #${a.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:a.url||n,outcome:"blocked",reason:p.stderr||p.stdout||"gh pr merge failed",provenance:m(null,"unconfirmed")}}let f=$c(t,r,c,e.repo);if(f||(f=$c(t,r,c,e.repo)),!f)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:m(null,"unconfirmed")};let y=m(f,"invoked_merge_observed");try{let k=VT(t,r,e.repo);jT(t,r,k,a.headRefName),GT(r,a.headRefName)}catch{}return{prUrl:f?.url||a.url||n,outcome:"merged",provenance:y,mergeCommit:f?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function $c(e,r,t,n){try{let o=yy(e,r,["pr","view",t,...jc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function vy(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return Ry({prUrl:n,cwd:e.cwd,repo:ky(n),exec:e.exec,operation:e.operation,acceptedReview:gn(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&&gn(s.acceptedReview)?s.acceptedReview:null}})}H();async function by(e){let r=await ee(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),t=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=e.report.provenance?.finishedAt??new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${t}`,taskId:t,leaseToken:e.task.leaseToken??null,startedAt:e.report.provenance?.startedAt??o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await X(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Sy(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "liveReadback": "<prod readback string from acceptance.liveReadbackQuery>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface.","When the subject carries an acceptance snapshot, include liveReadback \u2014 the server oracle rejects passed if the original symptom still appears."].join(`
|
|
173
|
+
`)}var YT="dispatch_start_readback_failed:";function St(e){return`${YT} ${e.trim()}`}function qT(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 JT(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:St("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:St(`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:St(`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:St(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=qT(o);return a?{ok:!1,error:St(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:St(`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:St("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function wy(e){let r=await si({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return JT({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function xy(e,r,t){r.pid&&Y(r.pid)&&(Me(r.pid,"SIGTERM"),Y(r.pid)&&Me(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return L(e,n),n}B();function _y(e){let r=typeof e.personaSlug=="string"?e.personaSlug.trim().toLowerCase():"";if(r==="dalton"||r==="lorentz")return!0;let t=typeof e.executorRef=="string"?e.executorRef.trim().toLowerCase():"";if(t.startsWith("expert-lane-pr-review:")||t.startsWith("scheduledjob:")&&e.parentTaskId)return!0;let n=typeof e.title=="string"?e.title.toLowerCase():"";return n.includes("expert pr review")||n.startsWith("[dalton] review")||n.startsWith("[lorentz] review")}async function Ey(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,t=await X(r,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!t.ok)return null;let n=t.response;return n&&typeof n=="object"?n:null}var Vl=3600*1e3;function Cy(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Py(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function zT(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=QT(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 XT(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function QT(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 ZT(e,r){let t=[`[AgentOS task ${e.id}] ${e.title}`,"",e.description?String(e.description):"(no description on the board task)","",`Board linkage: agentOsId=${r}, taskId=${e.id}, attempt=${e.attempt}, executor=${e.executor}${e.executorRef?`, executorRef=${e.executorRef}`:""}.`,"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish."];e.executor==="verify_live"&&t.push("",Sy());let n=Fc(e);if(n?.outboxId){let o=Bc(n.outboxId);o?t.push("",Uc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
174
|
+
`)}function eN(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Ui(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){eo({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},kr=function(){return F.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Ku=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ye,n=Re,o=kr,s=Ku;let i=ey();if(!i.ok||!i.identity){let v=ry(i);if(r)return{ok:!1,error:v,boundary:i};console.error(`run dispatch failed: ${v}`),process.exit(1)}let a=i.identity;for(let v of i.warnings)console.error(`[dispatch] runner-boundary warning: ${v}`);let l=q(String(Rr(String(e.run||""),"--run"))),c=Zk(l,a);if(!c.ok){let v=c.reason??"run does not belong to this runner boundary";if(r)return{ok:!1,error:v,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${v}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(Rr(String(e.agentOsId||""),"--agent-os-id")),d=Q(e.baseUrl?String(e.baseUrl):void 0),p=await ee(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=He({runId:l.id}),k=go(l.id,y.runnerId),b=Fm(),g=b?Hm(l.repo):null,h=new WeakMap;if(b&&m&&!g){let v="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(r)return{ok:!1,error:v,runId:l.id};console.error(`run dispatch failed: ${v}`),process.exit(1)}let w=e.diskPath?Gr({diskPath:String(e.diskPath)}):Gr({diskPath:l.repo}),E=await Xm({runId:l.id,agentOsId:u,args:e}),S=eN(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=Ls(l.id),ke=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ye=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Vl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Oc(l.id),...e.lane?{lane:zm(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(A=>A.trim()).filter(Boolean)}:{}}),hr=jm(),$r=async v=>{let R=b&&g?Km(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:hr})??{ok:!1,status:0,response:null},W=A.response;if(R&&Array.isArray(W?.result?.started))for(let G of W.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:W?.result}};f||eo({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:hr});let j=await $r(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=fl(j.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:j.dispatch.status,response:j.dispatch.response,authRefreshed:j.dispatch.refreshedAuth===!0,authRefreshFailure:j.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&eo({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:j.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let T=j.result;if(f){let v=Cy(T),R=Py(T),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:T.started.map(W=>({taskId:W.task.id,title:W.task.title,reason:W.reason})),skipped:T.skipped.map(W=>({taskId:W.task.id,skipReason:W.skipReason,reason:W.reason})),diskGate:T.diskGate,resourceGate:T.resourceGate,inspected:T.inspected,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let te=mg(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Do({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&ln({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},dc(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...A};return F.push(G),Re("outcome",{lastOutcome:G}),!1}async function Tb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return V(R,"land_pr task missing prUrl");try{let G=await vy({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:A,runId:l.id,workerName:`land-pr-${A}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),qe=await by({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(F.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):V(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function Nb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Do({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&ln({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},dc(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return F.push(W),Re("outcome",{lastOutcome:W}),!1}async function Db(v){let R=v.task,A=zT(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=XT(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(yg(l.id,W))return Nb(R);let qe=Number(R.attempt)||1;if(qe>te.maxTaskAttempts)return V(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let at=R.leaseToken?String(R.leaseToken).trim():"";if(!at)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let lt=x(`t-${R.id}-a${R.attempt}`),yr=ni({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Qm(R)});Bh({taskId:W,leaseToken:at,runId:l.id,workerName:lt,provider:yr.provider??null});let oa=dg({task:R,routing:yr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!oa.ok)return V(R,oa.error??"model_routing_mismatch",{modelRoutingGuard:oa});if(_y(R)){let Ce=await Ey({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let $o=pk(yr.provider);if(!$o.ok)return V(R,`provider_quota_exhausted: ${$o.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:$o.provider,retryAt:$o.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,jo=Eg({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),Yu=Xh({runId:l.id,workerName:lt,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Ma()});if(!Yu.admitted)return V(R,`admission_refused: ${Yu.reason}`,{nonFatal:!0});let Vo=A?.workerMcpToken??null;if(Vo&&io()){let Nt=Vk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Nt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Nt.code}: ${Nt.detail}) \u2014 spawning without tools`),Vo=null;else{let sa=await jk(Nt.context);sa.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${sa.error??`HTTP ${sa.httpStatus}`}) \u2014 spawning without tools`),Vo=null)}}bg(l.id,String(R.id),{except:lt});let ir=await $k(l,{name:lt,task:ZT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Nt=>Nt.trim()).filter(Boolean):[],model:yr.model,provider:yr.provider,routingRule:yr.rule,requestedModel:yr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:jo?.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:jo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:jo?.targetPrUrl,repairTargetBranch:jo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Vo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:at,dispatched:!0,executionMode:Bs(R)}),Go=await wy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:at,worker:ir,baseUrl:d,secret:p});if(!Go.ok)return xy(l.id,ir,Go.error??"dispatch_start_readback_failed"),tt(l.id,lt),V(R,Go.error??"dispatch_start_readback_failed",{readback:Go.detail??null});ir.leaseToken!==at&&(ir.leaseToken=at,ir.leaseOwner=k,L(l.id,ir)),Ci({taskId:W,leaseToken:at}),Yh(l.id,lt);let qu={taskId:R.id,started:!0,worker:ir.name,pid:ir.pid,branch:ir.branch,model:ir.model,provider:yr.provider,routingRule:yr.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??G,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return F.push(qu),Re("worker_started",{lastOutcome:qu}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??W}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return tt(l.id,lt),V(R,Ce.message)}}let na=new Set;for(let v of $h(l.id))na.add(v);async function Hu(v){let R=v.task,A=String(R.id);if(na.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?$m({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=W&&!W.allow?await V(R,`desktop_execution_policy_denied:${W.code}: ${W.reason}`,{desktopPolicyDenied:W.code,...W.code==="operation_not_approved"?{nonFatal:!0}:{}}):Ku(v)?await Tb(v):await Db(v);return G||(na.add(A),Hh(A,l.id)),G}for(let v of T.started)await Hu(v);if(D.push(...T.skipped??[]),_)for(let v of D){let R=String(v.task.id);S.has(R)&&F.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&F.length<C;){if(kr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};F.push(A),Re("circuit_breaker",{lastOutcome:A});break}let v=await $r(1);if(!v.dispatch.ok||!v.result){let A=Vm(v.dispatch.response),W=ye();ie=A&&W>0;let G=fl(v.dispatch.response),qe={started:!1,error:G?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...G?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};F.push(qe),Re("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:qe});break}M+=Number(v.result.inspected)||0,D.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(F.length>=C)break;await Hu(A)}}let Ho=F.filter(v=>v.started).length,jr=Cy(T),Tt=Py(T),$u=Ho===0&&(jr?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if($u&&jr?.summary){let v=jr.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??jr.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=Tt?`; dispatch_skip_drain scanned=${Tt.scanned??0} advanced=${Tt.advanced??0}`:"",G=jr.progressionReport?.summary?`; ${jr.progressionReport.summary}`:"",qe=Tt?.prLifecycleAttempt?.summary?`; ${Tt.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${jr.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let ju={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Ho,capacityIdle:$u,admissionExhaustion:jr,dispatchSkipDrain:Tt,outcomes:F,skipped:D.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:M,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:hr},Vu=v=>!v.started&&v.nonFatal!==!0,Mb=F.some(Vu),Gu=ie&&Ho>0?!0:!Mb;if(eo({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Ho,ok:Gu}),r)return{ok:Gu,...ju};console.log(JSON.stringify(ju,null,2)),F.some(Vu)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var rN=1;function hn(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 tN(e){let{maxStarts:r,...t}=e;return t}async function Vc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=tN(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ui({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:hn(u)}}let n=Math.min(r,rN),o=Math.max(0,r-n),s=await Ui({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=hn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ui({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=hn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Ay(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function nN(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Mo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function oN(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Iy(e,r){let t=nN(r),n=Mo(t?.recommendedMaxStarts),o=Mo(t?.actionableReady),s=Mo(t?.queuedTasks),i=Mo(t?.boardAdvancedThisTick)??0,a=Mo(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=oN("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 XN from"node:path";B();Ln();fe();O();import sN from"node:path";var iN=new Set(["running","dispatching","pending","queued","needs_attention"]),wt=new Set(["completed","failed","cancelled","done"]);function xt(e){let r=ar(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(sN.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=J(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Up(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Wo(){let e=[];for(let r of Xe()){if(!iN.has(r.status))continue;let t=xt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Ln();fe();O();dt();Hn();import{existsSync as it,lstatSync as ON,readdirSync as TN,readlinkSync as NN,renameSync as ru,unlinkSync as DN}from"node:fs";import mr from"node:path";Ze();O();import sr from"node:path";var aN=`${sr.sep}runs${sr.sep}runs${sr.sep}`;function Fi(e){return e.includes(aN)}function Gc(e,r){return sr.join(Ae(he(e)),x(r))}function ot(e,r,t){return sr.join(Gc(e,r),"workers",x(t))}function Oy(e,r,t){let n=he(e);return sr.join(n,"runs","runs",x(r),"workers",x(t))}function Yc(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function _t(e){return{workerJsonPath:sr.join(e,"worker.json"),stdoutPath:sr.join(e,"stdout.jsonl"),stderrPath:sr.join(e,"stderr.log"),heartbeatPath:sr.join(e,"heartbeat.jsonl"),lastStatusPath:sr.join(e,"last-status.json")}}function Ty(e){let r=_t(ot(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Fi(e.statusPath)?e.statusPath:r}import{existsSync as st,mkdirSync as wN,readdirSync as By,renameSync as xN,statSync as zc}from"node:fs";import se from"node:path";H();In();Vr();import lN from"node:path";function cN(e){return lN.resolve(We(e.trim()))}function qc(e,r,t){let n=e?.trim();return n?{repo:cN(n),source:r,persistedInConfig:t}:null}function uN(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ny(e={}){let r=e.env??process.env,t=e.config??U(),n=qc(t.defaultRepo,"config",!0);if(n)return n;let o=qc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=qc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||uN(Zo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();dt();Ze();B();O();H();import{existsSync as dN,readFileSync as pN,readdirSync as mN,statSync as fN,writeFileSync as gN}from"node:fs";import hN from"node:path";var De="<redacted>",Jc=`[^\\s"'\\\\,}\\]]`,kN=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Jc}+`,"gi"),De],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Jc}+`,"gi"),De],[/\bkynver_u_[A-Za-z0-9_-]+/g,De],[/\bkyn_[A-Za-z0-9]{12,}/g,De],[/\bsk-ant-[A-Za-z0-9_-]+/g,De],[/\bsk-[A-Za-z0-9_-]{8,}/g,De],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,De],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,De],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,De],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${De}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Jc}+`,"g"),`$1${De}`]],yN=12,RN=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,vN=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,bN=256*1024*1024;function SN(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=yN))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(De));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(De))}for(let[o,s]of kN)t=t.replace(o,s);return t}function Dy(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&RN.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function My(e,r=0){if(r>3||!dN(e))return[];let t=[];for(let n of mN(e,{withFileTypes:!0})){let o=hN.join(e,n.name);n.isDirectory()?t.push(...My(o,r+1)):n.isFile()&&vN.test(n.name)&&t.push(o)}return t}function Wy(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=My(e)}catch{return t}for(let o of n)try{if(fN(o).size>bN){t.failed.push(o);continue}let s=pN(o,"utf8"),i=SN(s,r);if(i===s){t.clean+=1;continue}gN(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Lo=900*1e3,_N=3600*1e3;function Uy(e,r){let t=se.resolve(e),n=se.resolve(Ae(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function Xc(e){if(!st(e))return[];try{return By(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Qc(e){let r=se.join(e,"workers");if(!st(r))return[];try{return By(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Fy(e){return se.join(e,"archived-workers")}function EN(e,r){let t=se.join(Fy(e),x(r));return st(t)?`${t}-${Date.now()}`:t}function Ly(e,r,t){if(!st(e))return!1;try{let n=r-zc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ky(e,r=Date.now(),t=Lo){if(!st(e))return!1;let n=_t(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Ly(n.stdoutPath,r,t)||Ly(n.heartbeatPath,r,t))}function CN(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-zc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function PN(e,r,t,n){if(Ky(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=CN(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 kn(e,r=Date.now(),t=Lo){for(let n of Qc(e))if(Ky(se.join(e,"workers",n),r,t))return!0;return!1}function AN(){let r=Ny()?.repo??"",t="unknown";if(r)try{let n=Z(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function IN(e,r){let t=se.join(Ae(e),x(r));if(!st(t))return null;let n=Qc(t);if(n.length===0)return null;let o;try{o=zc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=ot(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=kn(t);return{id:r,name:r,...AN(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Zc(e){let r=he(e??Ue()),t=Ae(r),n=[];for(let o of Xc(t)){let s=se.join(t,o,"run.json");if(st(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=IN(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:kn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function eu(e,r={}){let t=he(e??Ue()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??_N,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Dy(process.env,[Pr,()=>qt()])))();Zc(t);for(let c of Xc(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=I(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...Qc(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=I(b,void 0);if(!g){let E=se.join(Fy(u),x(y));if(st(E)&&(p.workers[x(y)]||p.workers[y])){delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:E});continue}i.push({runId:p.id,worker:y,action:"skipped",reason:"worker.json missing"});continue}let h=PN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=EN(u,y);wN(se.dirname(w),{recursive:!0}),xN(k,w),Wy(w,l()),delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:h.reason,archivePath:w})}f&&Ie(p)}return{workers:i}}function Hy(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Xc(n)){let s=se.join(n,o);kn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function MN(e,r){let t=Gc(e,r),n;try{n=ON(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=mr.resolve(mr.dirname(t),NN(t));if(kn(o)||kn(t))return null;let s=`${t}.materialize-${Date.now()}`;return ru(o,s),DN(t),ru(s,t),o}function WN(e){let r=[];for(let t of Yc()){let n=mr.join(e.fromDir,t),o=mr.join(e.toDir,t);!it(n)||it(o)||(ru(n,o),r.push(t))}return r}function $y(e,r){let t=_t(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 LN(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 BN(e){let r=_t(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=it(r.stdoutPath),o=it(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?mt(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=wr(a),c=LN({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:mr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),$y(u,e.canonicalDir),u}function UN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=ot(r,e.id,o),a=mr.join(i,"worker.json");(Fi(s.workerDir)||Fi(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ie(e)),t}function FN(e){let r=[],t=ot(e.harnessRoot,e.run.id,e.workerName),n=Oy(e.harnessRoot,e.run.id,e.workerName),o=_t(t),s=WN({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=Ty({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&it(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=BN({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return L(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=it(t),u=Yc().some(d=>it(mr.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:mr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return L(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return $y(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",L(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function KN(e,r){let t=mr.join(N(e.id),"workers");if(!it(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of TN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function jy(){let{harnessRoot:e}=le(),r=Zc(e),t=[];for(let n of Xe()){let o=MN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),UN(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 KN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:ot(e,n.id,i),statusPath:mr.join(ot(e,n.id,i),"worker.json")}},Ie(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...FN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}dt();fs();fe();B();Ln();O();import{execFileSync as Vy}from"node:child_process";import Gy from"node:path";function tu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function HN(e){let r=tu(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function $N(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function jN(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function VN(e){let r=null;if(typeof e=="string"?r=$t(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=tu(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function GN(e){try{let n=Vy("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Vy("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:tu(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function YN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??wr(r)}function qN(e){let r=new Map,t=N(e.id);for(let n of ar(e)){let o=I(Gy.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of VN(YN(o))){let i=HN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function JN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,$N(r)].filter(Boolean).join(`
|
|
175
|
+
`);return jN(n)}function zN(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function nu(e={}){let r=e.lookupPr??GN,t=[],n=new Map;for(let o of Xe()){let s=qN(o),i=N(o.id);for(let a of ar(o)){let l=Gy.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!zN(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 JN(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 QN=900*1e3;function ZN(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Yy(e,r){let t=bi({worker:e,status:r}),n=t?Si(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function eD(e,r){r.stopClass&&(e.stopClass=r.stopClass),r.stopReason&&(e.stopReason=r.stopReason),r.exit&&(e.exitCode=r.exit.exitCode,e.exitSignal=r.exit.signal,e.oomEvidence=r.exit.oomEvidence??null);let t=r.error?.trim();t&&(e.exitStderrTail=t.slice(-1e3))}function qy(){let e=jy();if(ZN()){let s=nu(),i=eu();return{workers:[],finalizedRuns:Wo(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Xe())for(let i of ar(s)){let a=XN.join(N(s.id),"workers",x(i),"worker.json"),l=I(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=J(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Yy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",L(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=Yy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,eD(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>QN,m=Number.isFinite(d)&&t-d>Na;if(p&&m){Me(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,l.stopClass="stuck",l.stopReason=`stuck (no progress) \u2014 ${c.attention.reason}`,L(s.id,l),r.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}r.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=nu(),o=eu();return{workers:r,finalizedRuns:Wo(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Gt();B();import lD from"node:path";import{readdirSync as rD,readFileSync as tD}from"node:fs";var nD="dispatch:claim:",oD=900*1e3,sD=10080*60*1e3,iD=200,Et={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function aD(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=rD("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(tD(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Jy(e){let r=Ur(),t={mode:r,scanned:0,outcomes:[]};if(r!=="enforce")return t;let n=z();if(!n)return t;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??oD,i=e.findOrphanPid??aD,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-sD).toISOString(),limit:iD})}catch{return Et.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(nD.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=xo(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=xo(E.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return S===null||S>=f}))continue;let b={};try{b=c.resultJson?JSON.parse(c.resultJson):{}}catch{b={}}let g=b.runId??null,h=b.workerName??null;if(g&&h&&e.hasLiveWorker({runId:g,workerName:h})){Ci({taskId:d,leaseToken:p}),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"finalized_late"});continue}if(g&&h){let E=e.worktreePathFor({runId:g,workerName:h}),S=E?i(E):null;if(S!==null){Et.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?(ln({taskId:d,leaseToken:p},"restart_recovery"),h&&(Eo(g,h),tt(g,h)),Et.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}):(ln({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{Et.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function zy(){return{"dispatchReceipts.recoveredStrandedClaims":Et.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":Et.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":Et.recoveryStoreFailures}}var Xy=!1;async function Qy(e){if(Xy||Ur()!=="enforce")return null;Xy=!0;try{let r=He().runnerId,t=await Jy({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>lD.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Do({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:go(s,r),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return t.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${t.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),t}catch{return null}}H();Le();_s();import SD from"node:os";Ua();import{mkdirSync as mD,readFileSync as fD,renameSync as gD,writeFileSync as hD}from"node:fs";import{homedir as kD}from"node:os";import Ki from"node:path";import{existsSync as cD,readFileSync as uD}from"node:fs";import{dirname as ou,join as eR}from"node:path";import{fileURLToPath as Zy}from"node:url";function dD(e){let r=ou(Zy(e));for(let t=0;t<6;t+=1){if(cD(eR(r,"package.json")))return r;let n=ou(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${ou(Zy(e))}`)}function pD(e=import.meta.url){let r=eR(dD(e),"package.json"),t=JSON.parse(uD(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var rR=pD();function tR(){return Ki.join(kD(),".kynver")}function yD(e=tR()){return Ki.join(e,"doctor-native-windows.json")}function nR(e=tR()){return Ki.join(e,"native-windows-state.json")}function RD(e,r){mD(Ki.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;hD(t,`${JSON.stringify(r,null,2)}
|
|
176
|
+
`,{mode:384}),gD(t,e)}function iu(e){try{return JSON.parse(fD(e,"utf8"))}catch{return null}}function vD(e){let r=iu(yD(e));return!r||typeof r.checkedAt!="string"||typeof r.verdict!="string"?null:{checkedAt:r.checkedAt,runtimeVersion:typeof r.runtimeVersion=="string"?r.runtimeVersion:"unknown",verdict:r.verdict,failing:Array.isArray(r.failing)?r.failing.filter(t=>typeof t=="string"):[],warnings:Array.isArray(r.warnings)?r.warnings.filter(t=>typeof t=="string"):[],providers:r.providers&&typeof r.providers=="object"?Object.fromEntries(Object.entries(r.providers).filter(t=>typeof t[1]=="string")):{},orphanedProcesses:typeof r.orphanedProcesses=="number"?r.orphanedProcesses:0}}function oR(e=new Date,r){try{let t=nR(r),n=iu(t)??{};RD(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function bD(e){let r=iu(nR(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var su=null,sR=null;function iR(e){su=e.admission,sR=e.ownerKind}function aR(e={}){let r=e.platform??process.platform,t=e.hostKind??Ba(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:rR,ownerKind:sR,nativeWindows:n?{admission:su?.basis??null,hostCapability:su?.hostCapability??null,lastDoctor:vD(e.root),lastWorkerCompletedAt:bD(e.root)}:null}}function lR(e,r={}){let t=U(),n=(r.boxKind??Sr(t)).trim().toLowerCase()||"forge",o=r.hostLabel??SD.hostname();return{boxId:xs({boxKind:n,hostLabel:o,explicitBoxId:r.boxId,config:t,env:process.env}),boxKind:n,displayName:r.displayName??null,hostLabel:o,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{},host:aR()}}B();Ze();ds();fe();H();import wD from"node:path";B();fe();O();async function cR(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(Rr(String(e.run||""),"--run"))),n=String(Rr(String(e.agentOsId||""),"--agent-os-id")),o=Q(e.baseUrl?String(e.baseUrl):void 0),s=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=He({runId:t.id}).runnerId,a=await Nk({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(wD.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 Oo({run:t.id,name:p,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(g.ok&&!g.skipped){l.push({worker:p,taskId:m.taskId,pid:m.pid,released:!1,deathReported:!0,stopClass:f.stopClass??null});continue}}catch{}let y=oi({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,b;try{b=await X(k,s,{agentOsId:n,leaseOwner:y,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(g){b={ok:!1,error:g.message}}l.push({worker:p,taskId:m.taskId,pid:m.pid,released:b.ok===!0||b.response?.ok===!0,response:b.response??b})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await X(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(p){u={ok:!1,error:p.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}O();fe();B();O();import xD from"node:path";H();async function uR(e){let r=Q(e.baseUrl),t=await ee(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await X(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function dR(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=I(xD.join(N(t.id),"workers",x(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=J(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await uR({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,L(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}hs();H();Le();Ze();import Ge from"node:path";ms();import $i from"node:path";de();fe();var au=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function pR(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of au)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function $e(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!pR(n)})}function Ct(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 Bo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?$e(e.changedFiles).length>0:!!(Ct(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function Uo(e){return e.status||(e.status=J(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function lu(e,r){if(e.status)return $e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):An(e.worktreePath);return $e(t).length>0}function _D(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function cu(e,r){if(e.status)return e.status;let t=e.worker,n=typeof t.completionReportedAt=="string"&&t.completionReportedAt.trim().length>0,o=!!(t.status&&["done","exited","blocked","failed","abandoned"].includes(t.status))||n,s=_D(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):An(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"}:Qo(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??Ct(s)};return e.status=u,u}return Uo(e)}fe();fe();dt();O();function ED(e,r=Date.now(),t=Lo){let n=me(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function yn(e,r=Date.now(),t=Lo){return Y(e.pid)?!0:ED(e,r,t)}function CD(e,r){return r?r.runTerminalCache.derive(e.run):xt(e.run)}function Kr(e,r=Date.now()){return yn(e.worker,r)}function uu(e,r){return wt.has(e.run.status)?!1:CD(e,r)!==null}function mR(e,r,t=Date.now()){if(Kr(e,t))return!0;if(wt.has(e.run.status)||uu(e,r))return!1;let n=Uo(e);return xe(n)?!1:!!Kr(e,t)}ms();fe();function fR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Kr(e))return!0;let n=r??Uo(e);return!!(!xe(n)||Bo(n)||$e(n.changedFiles).length>0||Ht({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Ct(n.finalResult)}).blocked)}de();O();import{existsSync as hR,mkdirSync as PD,writeFileSync as gR}from"node:fs";import Hi from"node:path";function kR(e,r,t){return Hi.join(e,"salvage",x(r),x(t))}function yR(e){return hR(Hi.join(kR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function RR(e){let r=kR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);PD(r,{recursive:!0});let t=Hi.join(r,"salvage.patch"),n=!1;if(hR(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
177
|
+
`);a.trim()&&(gR(t,a.endsWith(`
|
|
176
178
|
`)?a:`${a}
|
|
177
|
-
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return
|
|
178
|
-
`),o}var iD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function aD(e){e.writeSalvageEvidence&&iD.has(e.skipReason)&&(Fr(e.indexed,e.now)||uR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||dR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function lD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(St.has(r.run.status)||e.liveness&&iu(r,e.liveness)||e.liveness&&we(su(r,e.liveness))&&!Fr(r))?n:t}function cD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:lD(e)}function uD(e,r){if(e.harnessRoot?.trim())return Li.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Li.sep}runs${Li.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function pR(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=cD(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Fr(r,a))return"active_worker";let c=su(r,e.liveness),u=uD(e,r),d=f=>{if(u)try{aD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(iR(r,c)){let f=d("completion_blocked");if(f)return f}if(ou(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(sR(r,e.liveness,a)||!we(c))return"run_still_active";if(To(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if($e(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Kt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Et(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function au(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has(Li.resolve(o))||r&&Fr(r)?"active_worker":r&&ou(r,e.gitStatusCache)?"dirty_worktree":null}function mR(e){return au(e)}var fR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function gR(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)fR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||fR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as RR,readdirSync as vR,statSync as mD}from"node:fs";import bR from"node:path";B();Ze();import hR from"node:path";O();function pD(e,r){return gn(e,r)}function kR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Is(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(hR.join(Jn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=hR.resolve(l.worktreePath);pD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Dy(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function yR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function fD(e,r){try{let t=mD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gD(e,r){let t=bR.join(e,"runs",r,"run.json");return RR(t)?I(t,null):null}function SR(e){try{return vR(e).length===0}catch{return!1}}function wR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(yR(n,r,t,i.liveRunKeys)||!SR(n))return"run_still_active";let a=gD(r,t);return a&&!St.has(a.status)&&!wt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function xR(e){if(!RR(e.worktreesDir))return[];let r=[],t;try{t=vR(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=bR.join(e.worktreesDir,o);SR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:fD(s,e.now)})}return r}de();import{existsSync as cu,rmSync as MR}from"node:fs";import{execFileSync as hD}from"node:child_process";import{existsSync as _R,readdirSync as kD,statSync as yD}from"node:fs";import RD from"node:path";var vD=2500;function bD(e,r=vD){if(!_R(e))return 0;try{let n=hD("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function Kr(e,r=5e4){if(!_R(e))return 0;let t=bD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=kD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=RD.join(i,l),u;try{u=yD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as _D,rmSync as ED}from"node:fs";Ze();import{lstatSync as SD,readdirSync as wD}from"node:fs";function ER(e){try{let r=SD(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function CR(e,r=32){let t=ER(e);if(!t)return!1;if(t.foreign)return!0;try{let n=wD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=ER(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as xD}from"node:child_process";import IR from"node:path";import je from"node:path";function PR(e,r,t,n){let o=je.resolve(e),s=`${je.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=je.relative(t,i);if(a.startsWith("..")||je.isAbsolute(a))return"path_outside_harness";let l=a.split(je.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(je.resolve(r))?"path_outside_harness":null}function Bi(e,r,t){return PR(e,r,t,"node_modules")}function Ui(e,r,t){return PR(e,r,t,".next")}function Fi(e,r,t){let n=je.resolve(e),o=je.relative(t,n);return o.startsWith("..")||je.isAbsolute(o)||o.split(je.sep).length<3||!n.startsWith(je.resolve(r))?"path_outside_harness":null}function AR(e,r,t){let n=je.resolve(e);return Bi(n,r,t)===null||Ui(n,r,t)===null||Fi(n,r,t)===null}function TR(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function OR(e){let r=xD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function NR(e,r,t){if(!AR(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=OR(["chown","-R",`${n}:${o}`,IR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=OR(["rm","-rf",IR.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var lu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function CD(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function DR(e,r,t={}){if(!_D(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?qt(n):null,i=e.bytes??Kr(e.path)??void 0,a=t.removePath??ED,l=t.hasForeignOwnedEntry??CR;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!CD(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=TR();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${lu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=NR(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${lu}`}}}function uu(e){let r=e.harnessRoot;return!r||!Oy(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function du(e,r){let t=uu(e);if(t)return t;let n=DR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function WR(e,r){return du(e,r)}function LR(e,r){return du(e,r)}function BR(e,r){return du(e,r)}function UR(e,r){let t=uu(e);if(t)return t;if(!cu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??Kr(e.path);return MR(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function FR(e,r){let t=uu(e);if(t)return t;if(!cu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??Kr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),cu(e.path)&&MR(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as Ki,readdirSync as Hi,statSync as PD}from"node:fs";import mr from"node:path";function pu(e,r){try{let t=PD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function HR(e,r){let t=mr.relative(r,e);return t===""||!t.startsWith("..")&&!mr.isAbsolute(t)}function KR(e,r,t,n){let o=[];for(let s of nu){if(s===".next")continue;let i=mr.join(e,s);if(!Ki(i))continue;let a=mr.resolve(i);t.has(a)||HR(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:pu(a,r.now)}))}return o}function $R(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...KR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ki(e.worktreesDir))return r;for(let n of Hi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=mr.join(e.worktreesDir,n.name);for(let s of Hi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=mr.join(o,s.name);r.push(...KR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function jR(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Ki(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:pu(a,e.now)})))}if(!t||!Ki(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(mr.resolve(i.worktreePath));for(let i of Hi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=mr.join(e.worktreesDir,i.name),l;try{l=Hi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=mr.resolve(mr.join(a,c.name));o.has(u)||s.has(u)||HR(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:pu(u,e.now)}))}}return n}import{existsSync as YR,readdirSync as VR,statSync as AD}from"node:fs";import hn from"node:path";var ID=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function OD(e,r){try{let t=AD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function TD(e,r){let t=hn.relative(r,e);return t===""||!t.startsWith("..")&&!hn.isAbsolute(t)}function ND(e,r,t,n,o,s){if(!YR(n))return;let i=hn.resolve(n);r.has(i)||TD(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:OD(i,t.now)}))}function GR(e,r,t,n,o){for(let s of ID)ND(e,r,t,hn.join(n,s.dirName),s.kind,o)}function qR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||GR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!YR(e.worktreesDir))return r;for(let n of VR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=hn.join(e.worktreesDir,n.name),s;try{s=VR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=hn.join(o,i.name);GR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as JR,statSync as DD}from"node:fs";import fr from"node:path";function MD(e,r){try{let t=DD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function WD(e){let r=[],t=null;for(let n of e.split(`
|
|
179
|
-
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function
|
|
180
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if($e(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ze();import{existsSync as
|
|
181
|
-
`).map(t=>t.trim()).filter(Boolean)}var Vi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=fv(t)??[];return this.cache.set(t,o),o}};var Gi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=wt(r);return this.cache.set(r.id,n),n}};function sM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function gv(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:sM(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function iM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Be(),t=lv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function aM(e){return typeof e=="string"?{reason:e}:e}function kn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Yi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Kr(e.path,t)}}function hv(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function lM(e,r){return e.kind==="remove_next_cache"?LR(e,r):WR(e,r)}function cM(e,r,t){return e.kind==="remove_next_cache"?Ui(e.path,r,t):Bi(e.path,r,t)}function uM(e){let r=new Map;for(let t of e)for(let[n,o]of QR(t))r.set(n,o);return r}function kv(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function yv(e){return e.indexed?!1:hu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function dM(e={}){let r=fu(e),t=cv();r=uv(r,t);let n=iM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=kR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Io().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ve("finalize",`${s.length} stale run(s) marked terminal`),Ve("index","building worktree index");let i=uM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Gi,gitStatusCache:new Vi,gitRevCache:new ji},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ve("root",C);let re=Ge.join(C,"worktrees"),ke=XR(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},gr=r.scanDependencyCaches?qR(Ye):[];Ve("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Hr=0;for(let F of gr){if(p())break;Hr+=1,Hr%50===0&&Ve("dependency",`${Hr}/${gr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=cM(M,C,re);if(ie){kn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=kv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=yv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=au({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){kn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(lM(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of $R(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Fi(M.path,C,re);if(ie){kn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=kv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=yv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=mR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){kn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(BR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...jR(Ye),...zR(Ye)];Ve("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let F of j){if(p())break;te+=1,te%50===0&&Ve("worktrees",`${te}/${j.length} evaluated`);let D=Ge.resolve(F.path);if(T.has(D))continue;T.add(D);let M={...F,path:D},ie=ke.get(Ge.resolve(M.path))??null,ye=ie?null:ov({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=pR({indexed:ie,worktreePath:Ge.resolve(M.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(Re){let{reason:hr,detail:V}=aM(Re);kn(l,M.path,hr,V),c.push({...M,executed:!1,skipped:!0,skipReason:hr});continue}c.push(FR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of xR({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=M.runId??Ge.basename(D),ye=wR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){kn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(UR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,y=0,k=0,b=0,g=0;for(let C of c)C.bytes&&(m+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(y+=C.bytes),C.executed?(b+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(f+=1)):C.skipped&&(g+=1,C.skipReason==="dry_run"&&C.bytes&&(y+=C.bytes));let h=r.accountBytes?iv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Bt(),E=r.execute&&mv(w),S=E?pv({execute:!0}):null,_=w?{observed:!0,execute:E,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,b+=S.removed.length,Ve("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ve("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=gR(c,l),$=gv({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:hv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:hv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function Rv(e){let r=tv(e);return dM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function vv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as mM}from"node:fs/promises";import{homedir as fM}from"node:os";import At from"node:path";Cn();var pM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},s9=Object.keys(pM);function bv(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function Sv(e,r){let t=bv(e),n=bv(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}var gM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function yn(e){let r=e?.trim();return r||null}function hM(e){return[...new Set(e.filter(r=>!!r))]}function kM(){let e=fM(),r=yn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??yn(process.env.OPENCLAW_NPM_ROOT)??At.join(e,".openclaw","npm"),t=yn(process.env.KYNVER_NPM_GLOBAL_ROOT)??yn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(yn(process.env.NPM_CONFIG_PREFIX)?At.join(yn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):At.join(e,".npm-global","lib","node_modules"));return hM([At.join(r,"lib","node_modules"),At.join(r,"node_modules"),t.endsWith("node_modules")?t:At.join(t,"lib","node_modules")])}async function yM(e){try{let r=JSON.parse(await mM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function RM(e){let r=kM(),t=new Set,n=[];for(let o of r){let s=At.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function wv(e=new Date().toISOString()){let r={};for(let t of gM){let n=null;for(let o of RM(t)){let s=await yM(o);s&&(!n||Sv(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as vM}from"node:child_process";var bM=1e4,SM=4*1024*1024,xv=(e,r,t)=>{try{let n=vM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??bM,maxBuffer:SM});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function qi(e,r,t){return`${e} ${r} ${t}`}function yu(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function _v(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var wM=8e3,xM=30,_M=100,EM=400,CM=3600*1e3,Ru=0;function bu(){return Date.now()<Ru}function PM(e){let r=`${e.stdout}
|
|
182
|
-
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Ev(e){PM(e)&&(Ru=Math.max(Ru,Date.now()+CM))}function vu(e,r){if(bu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Ev(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function AM(e,r,t,n){if(bu())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Ev(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Su(e){return bu()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function IM(e){return Array.isArray(e)?e.map(r=>Rn(r)).filter(r=>r!==null).slice(0,xM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function OM(e,r,t){let n=vu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:IM(n.statuses)}:null}var Cv={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Su,collect(e,r){let t=_v(e);if(!t)return null;let n=AM(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=Rn(n.author),s=Rn(n.mergeCommit),i=Rn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,wM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Rn(u)).filter(u=>u!==null).slice(0,_M).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>Rn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,EM):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Pv={provider:"github",kind:"commit_status",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);return t?OM(r,t.repo,t.sha):null}},Av={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);if(!t)return null;let n=vu(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=vu(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var xu=[];function wu(e){xu.some(r=>r.provider===e.provider&&r.kind===e.kind)||xu.push(e)}function Iv(e,r){return xu.find(t=>t.provider===e&&t.kind===r)??null}function Ov(){wu(Cv),wu(Pv),wu(Av)}var TM=1,NM=25e3;function Tv(e,r={}){Ov();let t=r.run??xv,n=r.now??(()=>new Date),o=r.maxSubjects??TM,s=Date.now()+(r.deadlineMs??NM),i=new Set,a=e.filter(m=>{let f=qi(m.provider,m.kind,m.subject);return i.has(f)?!1:(i.add(f),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,f)=>a[(l+f)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let m of u){let f=qi(m.provider,m.kind,m.subject),y=n(),k=r.cache?.get(f,y)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=Iv(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${b.provider} ${b.kind}`,h=p.get(g);if(h===void 0&&(h=b.isAvailable(t),p.set(g,h)),!h){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,f,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let w=b.collect(m.subject,t);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(E),r.cache?.set(f,E,n())}return d}B();O();import BM from"node:path";B();O();import Nv from"node:path";var DM="provider-evidence-wanted.json",MM="provider-evidence-cache.json",WM=600*1e3;function Dv(e){return Nv.join(N(e),DM)}function LM(e){return Nv.join(N(e),MM)}function Mv(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Wv(e){let r=I(Dv(e),null);return Mv(r?.wanted)}function Lv(e,r){ue(Dv(e),{savedAt:new Date().toISOString(),wanted:r})}function Bv(e,r={}){let t=r.ttlMs??WM,n=LM(e),s={...I(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ue(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Uv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Mv(r):null}var UM="provider-evidence-shared-cache.json",FM=6e4,KM=1,HM=1;function _u(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function $M(){return BM.join(le().harnessRoot,UM)}function jM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?KM:HM;return _u(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,_u("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Fv(){return _u("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",FM)}function VM(e){return Math.floor(e.getTime()/6e4)*6e4}function GM(e){return`${e.provider}:${e.kind}`}function Kv(e,r={}){let t=Bv(e,{ttlMs:r.ttlMs??Fv()}),n=r.file??$M(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Fv(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let m=s[u];if(!m)return null;let f=Date.parse(m.observedAt);return!Number.isFinite(f)||d.getTime()-f>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let m=jM(u.provider);if(m===0)return!0;let f=GM(u),y=VM(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();B();import Hv from"node:path";var $v="mesh-cron-lease.json";function jv(e){let r=I(Hv.join(N(e),$v),null);return zh(e,r)??r}function Vv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(Hv.join(N(e),$v),t),Jh(e,t)}function Gv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}function Yv(e){let r=xh(),t=Lr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Lh());let s=Wh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Hy())}return t.flags.planOutbox!=="off"&&Object.assign(o,Hk()),t.flags.admission!=="off"&&(Object.assign(o,Kh()),t.flags.admission==="enforce"&&Object.assign(o,Vh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,rk()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:r.state,schemaVersion:r.schemaVersion,recovered:r.recovered,unavailableClass:r.reason?r.reason.split(":")[0]??null:null,flags:t.flags,flagSources:t.sources,flagWarningCount:t.warnings.length,divergenceCounters:o}}H();import{createHash as qv}from"node:crypto";import{access as YM,mkdir as J9,readFile as Jv,rename as z9,writeFile as X9}from"node:fs/promises";import{constants as qM}from"node:fs";import{homedir as Eu}from"node:os";import Ee from"node:path";var JM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,zM=/^[A-Za-z0-9._:-]{8,128}$/;function XM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Eu(),".kynver","mcp-installations.json")}function QM(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Eu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Eu(),".npm-global")}function ZM(e){let r=Ee.resolve(e);if(Ee.basename(r)!=="node_modules")return r;let t=Ee.dirname(r);return Ee.basename(t)==="lib"?Ee.dirname(t):t}function eW(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function rW(e){try{return await YM(e,qM.R_OK),!0}catch{return!1}}async function tW(e=XM()){let r;try{r=JSON.parse(await Jv(e,"utf8"))}catch{return[]}if(r.version!==1||!Array.isArray(r.installations)||r.installations.length>100)throw new Error("invalid MCP installation inventory");return r.installations.map(t=>{if(!t||!zM.test(t.inventoryKey)||!JM.test(t.packageName)||!["kynver","openclaw"].includes(t.prefix))throw new Error("invalid adopted MCP installation");if(t.packageName.includes("..")||t.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(t.connectionId&&t.connectionId.length>128)throw new Error("invalid connection identity");if(t.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(t.binName))throw new Error("invalid MCP bin name");let n=t.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...t,envAllowlist:[...new Set(n)],lifecycle:t.lifecycle??"runtime_stdio"}})}function nW(e,r,t){if(typeof e.bin=="string")return Ee.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Ee.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Ee.join(t,s):null}function oW(e){return qv("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function sW(e){let r=[];for(let t of e){let n=ZM(QM(t.prefix)),o=(await Promise.all(eW(n,t.packageName).map(async m=>({candidate:m,ok:await rW(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await Jv(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Ee.dirname(o),a=nW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=qv("sha256").update(JSON.stringify({prefix:n,binName:t.binName??null,envAllowlist:[...t.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],p={inventoryKey:t.inventoryKey,connectionId:t.connectionId??null,packageName:t.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};r.push({report:{...p,displayName:t.displayName?.trim()||t.packageName,inventoryFingerprint:oW(p),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:t.envAllowlist??[],lifecycle:c}})}return r}async function zv(){return sW(await tW())}import{createHash as iW,createHmac as aW,timingSafeEqual as lW}from"node:crypto";function Cu(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:iW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function Xv(e,r,t){let n=Cu(r);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==t||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=aW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&lW(i,s)}ra();Rr();import{createHash as cW}from"node:crypto";import{access as Pu,mkdtemp as uW,readFile as tb,rm as dW}from"node:fs/promises";import{constants as Au}from"node:fs";import{tmpdir as pW}from"node:os";import vn from"node:path";import{spawn as mW}from"node:child_process";import{Client as fW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as gW}from"@modelcontextprotocol/sdk/client/stdio.js";var Iu="https://registry.npmjs.org",Qv=512*1024,Ou=2*6e4,hW=2e4;function nb(){return"npm"}function Zv(e,r){return Buffer.byteLength(e)>=Qv?e:(e+r.toString("utf8")).slice(0,Qv)}function kW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&vn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Iu,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function ob(e,r,t=Ou,n){return new Promise((o,s)=>{let i,a;try{[i,a]=pe(e,r)}catch(m){s(m);return}let l=mW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:kW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Zv(c,m)}),l.stderr.on("data",m=>{u=Zv(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&De(l.pid,"SIGKILL")},t);l.once("error",m=>{clearTimeout(p),s(m)}),l.once("close",m=>{clearTimeout(p),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function yW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:cW(t).update(e).digest("base64")===n}async function RW(e,r,t,n){let o=await ob(nb(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Iu}`,"--ignore-scripts"],Ou,vn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||vn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=vn.join(n,i);if(!yW(await tb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function vW(e,r,t){if((await ob(nb(),["install","--global","--prefix",e,r,`--registry=${Iu}`,"--no-audit","--fund=false"],Ou,t)).code!==0)throw new Error("package_install_failed")}async function sb(e){let r=JSON.parse(await tb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function bW(e){let r={};for(let t of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[t];n!==void 0&&(r[t]=n)}return r}async function eb(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Pu(e.local.binPath,Au.X_OK).catch(async()=>Pu(e.local.binPath,Au.R_OK));let r=new gW({command:e.local.binPath,args:[],env:bW(e.local.envAllowlist),stderr:"pipe"}),t=new fW({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([t.connect(r),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),hW)})]);let o=await t.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await t.close().catch(()=>{})}}async function rb(e,r,t,n,o){let s=await uW(vn.join(pW(),"kynver-mcp-update-"));try{let i=await RW(r,t,n,s);if(await o(),await vW(e.local.prefix,i,vn.join(s,"npm-cache")),await sb(e)!==t)throw new Error("installed_version_mismatch")}finally{await dW(s,{recursive:!0,force:!0})}}async function ib(e,r,t,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==r.inventoryKey||e.report.inventoryFingerprint!==r.inventoryFingerprint||e.report.packageName!==r.packageName)throw new Error("local_inventory_mismatch");if(r.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await t("preflight"),await Pu(e.local.prefix,Au.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await sb(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await rb(e,r.packageName,r.targetVersion,r.targetIntegrity,async()=>{await t("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:r.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await t("restarting"),await t("verifying");let a=await eb(e);return{outcome:"succeeded",observedVersion:r.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!r.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await rb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await eb(e);return{outcome:"rollback_succeeded",observedVersion:r.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:r.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}import{randomBytes as Du}from"node:crypto";import{mkdir as Mu,readFile as Wu,rename as AW,rm as Ji,stat as IW,writeFile as db}from"node:fs/promises";import It from"node:path";import{createHmac as SW,timingSafeEqual as wW}from"node:crypto";import{mkdir as xW,readFile as _W,rename as EW,writeFile as CW}from"node:fs/promises";import{homedir as PW}from"node:os";import Tu from"node:path";function Nu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Tu.join(PW(),".kynver","state","mcp-updates")}function ab(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Tu.join(Nu(),`${e}.json`)}function lb(e,r){let t=Cu(r);return t?SW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function cb(e,r){try{let t=JSON.parse(await _W(ab(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=lb(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!wW(i,a)?null:t}catch{return null}}async function ub(e,r){let t=lb(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=ab(e.operationId);await xW(Tu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await CW(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
183
|
-
`,{mode:384}),await EW(o,n)}var OW="host-mutation.lock";function pb(){return It.join(Nu(),OW)}async function mb(){try{let e=JSON.parse(await Wu(It.join(pb(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:fb(e.pid)}}catch{return null}}function fb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function TW(e){try{return await IW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function gb(){return NW("mcp_update")}async function NW(e){let r=pb(),t=`${r}.reclaiming`;await Mu(It.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await TW(t))return null;for(let o=0;o<2;o+=1)try{await Mu(r,{mode:448});let s={pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await db(It.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Ji(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Wu(It.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Ji(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Mu(t,{mode:448}),n=!0,await db(It.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Wu(It.join(r,"owner.json"),"utf8"))}catch{return null}if(fb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Du(8).toString("hex")}`;await AW(r,a),await Ji(a,{recursive:!0,force:!0})}return null}finally{n&&await Ji(t,{recursive:!0,force:!0})}}function zi(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function DW(e){if(!e||typeof e!="object")return null;let r=e.claim;if(!r||typeof r!="object"||r.waitingForIdle!==!1)return null;let t=r.command;return t&&typeof t=="object"?t:null}function hb(e,r){let t=r.claims;return e.inventoryKey===t.inventoryKey&&e.packageName===t.packageName&&e.installedVersion===t.installedVersion&&e.targetVersion===t.targetVersion&&e.targetIntegrity===t.targetIntegrity&&e.rollbackIntegrity===t.rollbackIntegrity&&e.item.report.inventoryKey===t.inventoryKey&&e.item.report.packageName===t.packageName}function MW(e,r){return{inventoryKey:r.claims.inventoryKey,packageName:r.claims.packageName,installedVersion:r.claims.installedVersion,targetVersion:r.claims.targetVersion,targetIntegrity:r.claims.targetIntegrity,rollbackIntegrity:r.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function kb(e){let r=Q(e.baseUrl),t=await zv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await gt(zi(r,e.agentOsId,"inventory"),e.secret,{items:t.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await gb();if(!o){let s=await mb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await gt(zi(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=DW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!Xv(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await cb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!hb(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let g=t.find(h=>h.report.inventoryKey===i.claims.inventoryKey);if(!g||g.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=g,c=a&&hb(a.recovery,i)?a.recovery:MW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await ub({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await gt(zi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:g})).ok)throw new Error("progress_rejected");p=g,await d(g,!1)},f=g=>m(g),y=()=>m(p),k;try{k=await ib(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await gt(zi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return b.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:k.outcome}}finally{await o.release()}}function WW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function LW(e,r){let t=q(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=I(yb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Yr(a))continue;if(uo(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!we(l))continue;let c=Ft({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await _o({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function BW(e,r,t,n,o){let s=Q(n.baseUrl?String(n.baseUrl):void 0),i=await ee(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await wv(),c=Os(r),u=null;try{let E=Wv(r);if(E.length>0){let S=Kv(r);u=Tv(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Ur()!=="off"){let E=jt();Fh({liveWorkers:E}),jh({liveWorkers:E})}else Bh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=yb.join(Pr(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?Yr($):!1}catch{return!1}};await jy({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Yv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=sd({control:Mt(e),supervisor:cd(),inFlightWorkers:jt().length})}catch{m=null}let f=jv(r),y=qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Pc(r),resourceGate:t,boxResourceSnapshot:eR(t,{harnessRunId:r,boxKind:br(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...y?{daemonEventLoop:y}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=Uv(k.response);if(b)try{Lv(r,b)}catch{}let g=Gv(k);if(g)try{Vv(r,g)}catch{}let h=Eh(k);h&&Ch(e,h);let w=td(k);return w&&od(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Rb(e){let r=String(yr(String(e.run||""),"--run")),t=String(yr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Pc(r);let o=await Ds(t,e),s=Ns(o),i=$n({runId:r,configuredMaxWorkersOverride:s}),a=vv()?Rv(r):void 0,l=await BW(t,r,i,e,a),c;if(n)try{let C=Q(e.baseUrl?String(e.baseUrl):void 0),re=await ee(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await kb({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:jt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=uh(r,l),d=await ug(r,e),p=await LW(r,e);p.some(C=>C.ok&&!C.skipped)&&zy();let m=$n({runId:r,configuredMaxWorkersOverride:s}),f=Fy(),y=await nR(r,e),k=Sy(m,l),b=k.maxStarts,g=Mt(t),h=id(g);h&&(b=0);let w=WW()?await rR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=by(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Kc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),ke=mn(re);S+=ke,K=Math.max(0,K-ke),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Kc({...e,run:r,agentOsId:t},K),re=mn(C);S+=re,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}_n();Vt();_n();function vb(e){return Vo(Mt(e))!=="stopped"?null:jt().length}function bb(e){if(!e||typeof e!="object")return!1;let r=e;return r.type==="tick"&&typeof r.id=="number"&&typeof r.agentOsId=="string"&&!!r.args&&typeof r.args=="object"}function UW(e){e&&(Qy({admission:e.admission,ownerKind:e.ownerKind}),ld(e.ownerKind))}async function FW(e,r={}){try{e.instructionBundle&&zu(e.instructionBundle.bundle,e.instructionBundle.source),Yu(e.eventLoopReport);let t=await(r.runTick??Rb)(e.args),n=(r.countInFlightWorkers??vb)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function Sb(e,r,t={}){UW(r);let n=Promise.resolve();e.on("message",o=>{bb(o)&&(n=n.then(async()=>{e.postMessage(await FW(o,t))}))})}wb?Sb(wb,KW):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|
|
179
|
+
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return gR(Hi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
180
|
+
`),o}var AD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function ID(e){e.writeSalvageEvidence&&AD.has(e.skipReason)&&(Kr(e.indexed,e.now)||yR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||RR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function OD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(wt.has(r.run.status)||e.liveness&&uu(r,e.liveness)||e.liveness&&xe(cu(r,e.liveness))&&!Kr(r))?n:t}function TD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:OD(e)}function ND(e,r){if(e.harnessRoot?.trim())return $i.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${$i.sep}runs${$i.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function vR(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=TD(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Kr(r,a))return"active_worker";let c=cu(r,e.liveness),u=ND(e,r),d=f=>{if(u)try{ID({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(fR(r,c)){let f=d("completion_blocked");if(f)return f}if(lu(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(mR(r,e.liveness,a)||!xe(c))return"run_still_active";if(Bo(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if($e(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Ht({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Ct(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function du(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has($i.resolve(o))||r&&Kr(r)?"active_worker":r&&lu(r,e.gitStatusCache)?"dirty_worktree":null}function bR(e){return du(e)}var SR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function wR(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)SR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||SR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as CR,readdirSync as PR,statSync as WD}from"node:fs";import AR from"node:path";B();Ze();import xR from"node:path";O();function MD(e,r){return yn(e,r)}function _R(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ws(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(xR.join(Qn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=xR.resolve(l.worktreePath);MD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Hy(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function ER(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function LD(e,r){try{let t=WD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function BD(e,r){let t=AR.join(e,"runs",r,"run.json");return CR(t)?I(t,null):null}function IR(e){try{return PR(e).length===0}catch{return!1}}function OR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(ER(n,r,t,i.liveRunKeys)||!IR(n))return"run_still_active";let a=BD(r,t);return a&&!wt.has(a.status)&&!xt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function TR(e){if(!CR(e.worktreesDir))return[];let r=[],t;try{t=PR(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=AR.join(e.worktreesDir,o);IR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:LD(s,e.now)})}return r}de();import{existsSync as mu,rmSync as $R}from"node:fs";import{execFileSync as UD}from"node:child_process";import{existsSync as NR,readdirSync as FD,statSync as KD}from"node:fs";import HD from"node:path";var $D=2500;function jD(e,r=$D){if(!NR(e))return 0;try{let n=UD("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function Hr(e,r=5e4){if(!NR(e))return 0;let t=jD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=FD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=HD.join(i,l),u;try{u=KD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as qD,rmSync as JD}from"node:fs";Ze();import{lstatSync as VD,readdirSync as GD}from"node:fs";function DR(e){try{let r=VD(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function MR(e,r=32){let t=DR(e);if(!t)return!1;if(t.foreign)return!0;try{let n=GD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=DR(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as YD}from"node:child_process";import BR from"node:path";import je from"node:path";function WR(e,r,t,n){let o=je.resolve(e),s=`${je.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=je.relative(t,i);if(a.startsWith("..")||je.isAbsolute(a))return"path_outside_harness";let l=a.split(je.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(je.resolve(r))?"path_outside_harness":null}function ji(e,r,t){return WR(e,r,t,"node_modules")}function Vi(e,r,t){return WR(e,r,t,".next")}function Gi(e,r,t){let n=je.resolve(e),o=je.relative(t,n);return o.startsWith("..")||je.isAbsolute(o)||o.split(je.sep).length<3||!n.startsWith(je.resolve(r))?"path_outside_harness":null}function LR(e,r,t){let n=je.resolve(e);return ji(n,r,t)===null||Vi(n,r,t)===null||Gi(n,r,t)===null}function FR(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function UR(e){let r=YD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function KR(e,r,t){if(!LR(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=UR(["chown","-R",`${n}:${o}`,BR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=UR(["rm","-rf",BR.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var pu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function zD(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function HR(e,r,t={}){if(!qD(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?Jt(n):null,i=e.bytes??Hr(e.path)??void 0,a=t.removePath??JD,l=t.hasForeignOwnedEntry??MR;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!zD(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=FR();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${pu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=KR(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${pu}`}}}function fu(e){let r=e.harnessRoot;return!r||!Uy(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function gu(e,r){let t=fu(e);if(t)return t;let n=HR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function jR(e,r){return gu(e,r)}function VR(e,r){return gu(e,r)}function GR(e,r){return gu(e,r)}function YR(e,r){let t=fu(e);if(t)return t;if(!mu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??Hr(e.path);return $R(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function qR(e,r){let t=fu(e);if(t)return t;if(!mu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??Hr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),mu(e.path)&&$R(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as Yi,readdirSync as qi,statSync as XD}from"node:fs";import fr from"node:path";function hu(e,r){try{let t=XD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function zR(e,r){let t=fr.relative(r,e);return t===""||!t.startsWith("..")&&!fr.isAbsolute(t)}function JR(e,r,t,n){let o=[];for(let s of au){if(s===".next")continue;let i=fr.join(e,s);if(!Yi(i))continue;let a=fr.resolve(i);t.has(a)||zR(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:hu(a,r.now)}))}return o}function XR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...JR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Yi(e.worktreesDir))return r;for(let n of qi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=fr.join(e.worktreesDir,n.name);for(let s of qi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=fr.join(o,s.name);r.push(...JR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function QR(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Yi(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:hu(a,e.now)})))}if(!t||!Yi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(fr.resolve(i.worktreePath));for(let i of qi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=fr.join(e.worktreesDir,i.name),l;try{l=qi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=fr.resolve(fr.join(a,c.name));o.has(u)||s.has(u)||zR(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:hu(u,e.now)}))}}return n}import{existsSync as rv,readdirSync as ZR,statSync as QD}from"node:fs";import Rn from"node:path";var ZD=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function eM(e,r){try{let t=QD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function rM(e,r){let t=Rn.relative(r,e);return t===""||!t.startsWith("..")&&!Rn.isAbsolute(t)}function tM(e,r,t,n,o,s){if(!rv(n))return;let i=Rn.resolve(n);r.has(i)||rM(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:eM(i,t.now)}))}function ev(e,r,t,n,o){for(let s of ZD)tM(e,r,t,Rn.join(n,s.dirName),s.kind,o)}function tv(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||ev(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!rv(e.worktreesDir))return r;for(let n of ZR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Rn.join(e.worktreesDir,n.name),s;try{s=ZR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Rn.join(o,i.name);ev(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as nv,statSync as nM}from"node:fs";import gr from"node:path";function oM(e,r){try{let t=nM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function sM(e){let r=[],t=null;for(let n of e.split(`
|
|
181
|
+
`)){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 iM(e,r){let t=gr.relative(gr.resolve(r),gr.resolve(e));return t!==""&&!t.startsWith("..")&&!gr.isAbsolute(t)}var aM=200;function ov(e){if(!e.includeOrphans||!nv(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(gr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(gr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Z(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=sM(a);for(let c of l){if(i>=aM)break;let u=gr.resolve(c.path);if(u===gr.resolve(s)||!iM(u,e.worktreesDir)||t.has(u)||o.has(u)||!nv(u))continue;let p=gr.relative(e.worktreesDir,u).split(gr.sep),m=p[0],f=p[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:f,repo:s,ageMs:oM(u,e.now)})}}return n}B();O();import Fo from"node:path";function sv(e,r){let t=Fo.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Fo.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function iv(e){let r=new Map;for(let t of Ws(e))for(let n of Object.keys(t.workers||{})){let o=Fo.join(Qn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(Fo.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Fo.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Ko(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Pt(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function yu(e={}){let r=e.execute===!0||e.execute!==!1&&Ko("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Ko("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Pt("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??Pt("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Pt("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Pt("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Pt("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Ko("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Ko("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&&!Ko("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Pt("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=Pt("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:k}}function uv(e){let r=process.env.KYNVER_CLEANUP_SCOPE==="all",t=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=r?Number.isFinite(t)&&t>0?t:6048e5:Number.isFinite(t)&&t>0?t:0;return yu({runIdFilter:r?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:r?216e5:void 0,runDirectoriesAgeMs:r?36e5:void 0,includeOrphans:r?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}de();import{existsSync as Ru,statSync as cM}from"node:fs";import At from"node:path";O();var dv=1800*1e3;function uM(e,r){let t=At.relative(r,e);return t===""||!t.startsWith("..")&&!At.isAbsolute(t)}function dM(e,r,t){if(!Ru(e))return!1;try{let n=r-cM(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function vu(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??dv,n=At.resolve(e.harnessRoot,"runs"),o=At.resolve(n,e.runId,"workers",e.workerName);if(!uM(o,n))return!1;let s=I(At.join(o,"worker.json"),void 0);return s&&yn(s,r,t)?!0:s?!1:dM(At.join(o,"heartbeat.jsonl"),r,t)}function pv(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??dv;if(!Ru(e.worktreePath))return null;if(e.runId&&e.workerName&&vu(e))return"active_worker";let n=At.join(e.worktreePath,".git");if(!Ru(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
182
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if($e(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ze();import{existsSync as pM,readdirSync as mv,statSync as mM}from"node:fs";import fM from"node:path";function fv(e={}){let r=he(e.harnessRoot??Ue()),t=Jt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!pM(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=mv(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=fM.join(t,u.name);try{let p=mM(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of mv(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let m=Hr(d,p);m===null?s=null:s+=m}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}Ze();import{existsSync as gM}from"node:fs";import{homedir as hM}from"node:os";import gv from"node:path";var kM=["/var/tmp/kynver-harness",gv.join(hM(),".openclaw","harness")];function bu(e,r,t){if(!t?.trim())return;let n=he(t.trim());e.has(n)||(e.add(n),r.push(n))}function yM(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function hv(e={}){let r=new Set,t=[];bu(r,t,e.harnessRoot??Ue());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])bu(r,t,o);if(yM(e))for(let o of kM){let s=gv.resolve(o);!r.has(s)&&gM(s)&&bu(r,t,s)}return t}Wn();function RM(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function vM(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function kv(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=vM("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Gr({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function yv(e,r){if(!r.pressured)return e;let t=e.execute||!RM("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}}os();import{unlinkSync as bM}from"node:fs";function Ji(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Rv(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function SM(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function vv(e={}){let r=e.execute===!0||Ji("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Ji("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Ji("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Rv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Ut({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=SM(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{bM(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function bv(e){return e?Ji("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Rv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}os();function Ve(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var zi=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ne(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as wM}from"node:child_process";import{existsSync as xM}from"node:fs";import _M from"node:path";var EM=5e3;function CM(e,r){if(!xM(_M.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=wM("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:EM}),n=t.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:n?"git_timeout":t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function Sv(e){let r=CM(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
183
|
+
`).map(t=>t.trim()).filter(Boolean)}var Xi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Sv(t)??[];return this.cache.set(t,o),o}};var Qi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=xt(r);return this.cache.set(r.id,n),n}};function PM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function wv(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:PM(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 AM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Ue(),t=hv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function IM(e){return typeof e=="string"?{reason:e}:e}function vn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Zi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Hr(e.path,t)}}function xv(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function OM(e,r){return e.kind==="remove_next_cache"?VR(e,r):jR(e,r)}function TM(e,r,t){return e.kind==="remove_next_cache"?Vi(e.path,r,t):ji(e.path,r,t)}function NM(e){let r=new Map;for(let t of e)for(let[n,o]of iv(t))r.set(n,o);return r}function _v(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function Ev(e){return e.indexed?!1:vu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function DM(e={}){let r=yu(e),t=kv();r=yv(r,t);let n=AM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=_R(n.scanRoots,n.now),s=r.finalizeStaleRuns?Wo().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ve("finalize",`${s.length} stale run(s) marked terminal`),Ve("index","building worktree index");let i=NM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Qi,gitStatusCache:new Xi,gitRevCache:new zi},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ve("root",C);let re=Ge.join(C,"worktrees"),ke=sv(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},hr=r.scanDependencyCaches?tv(Ye):[];Ve("dependency",r.scanDependencyCaches?`${hr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let $r=0;for(let F of hr){if(p())break;$r+=1,$r%50===0&&Ve("dependency",`${$r}/${hr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=TM(M,C,re);if(ie){vn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=_v(M,re),Re=ke.get(Ge.resolve(ye))??null,kr=Ev({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=du({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:kr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){vn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(OM(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of XR(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Gi(M.path,C,re);if(ie){vn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=_v(M,re),Re=ke.get(Ge.resolve(ye))??null,kr=Ev({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=bR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:kr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){vn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(GR(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...QR(Ye),...ov(Ye)];Ve("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let F of j){if(p())break;te+=1,te%50===0&&Ve("worktrees",`${te}/${j.length} evaluated`);let D=Ge.resolve(F.path);if(T.has(D))continue;T.add(D);let M={...F,path:D},ie=ke.get(Ge.resolve(M.path))??null,ye=ie?null:pv({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=vR({indexed:ie,worktreePath:Ge.resolve(M.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(Re){let{reason:kr,detail:V}=IM(Re);vn(l,M.path,kr,V),c.push({...M,executed:!1,skipped:!0,skipReason:kr});continue}c.push(qR(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of TR({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=M.runId??Ge.basename(D),ye=OR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){vn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(YR(Zi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,y=0,k=0,b=0,g=0;for(let C of c)C.bytes&&(m+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(y+=C.bytes),C.executed?(b+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(f+=1)):C.skipped&&(g+=1,C.skipReason==="dry_run"&&C.bytes&&(y+=C.bytes));let h=r.accountBytes?fv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Ut(),E=r.execute&&bv(w),S=E?vv({execute:!0}):null,_=w?{observed:!0,execute:E,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,b+=S.removed.length,Ve("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ve("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=wR(c,l),$=wv({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:xv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:xv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function Cv(e){let r=uv(e);return DM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Pv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as WM}from"node:fs/promises";import{homedir as LM}from"node:os";import It from"node:path";In();var MM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},H9=Object.keys(MM);function Av(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function Iv(e,r){let t=Av(e),n=Av(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}var BM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function bn(e){let r=e?.trim();return r||null}function UM(e){return[...new Set(e.filter(r=>!!r))]}function FM(){let e=LM(),r=bn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??bn(process.env.OPENCLAW_NPM_ROOT)??It.join(e,".openclaw","npm"),t=bn(process.env.KYNVER_NPM_GLOBAL_ROOT)??bn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(bn(process.env.NPM_CONFIG_PREFIX)?It.join(bn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):It.join(e,".npm-global","lib","node_modules"));return UM([It.join(r,"lib","node_modules"),It.join(r,"node_modules"),t.endsWith("node_modules")?t:It.join(t,"lib","node_modules")])}async function KM(e){try{let r=JSON.parse(await WM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function HM(e){let r=FM(),t=new Set,n=[];for(let o of r){let s=It.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Ov(e=new Date().toISOString()){let r={};for(let t of BM){let n=null;for(let o of HM(t)){let s=await KM(o);s&&(!n||Iv(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as $M}from"node:child_process";var jM=1e4,VM=4*1024*1024,Tv=(e,r,t)=>{try{let n=$M(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??jM,maxBuffer:VM});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function ea(e,r,t){return`${e} ${r} ${t}`}function Su(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function Nv(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var GM=8e3,YM=30,qM=100,JM=400,zM=3600*1e3,wu=0;function _u(){return Date.now()<wu}function XM(e){let r=`${e.stdout}
|
|
184
|
+
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Dv(e){XM(e)&&(wu=Math.max(wu,Date.now()+zM))}function xu(e,r){if(_u())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Dv(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function QM(e,r,t,n){if(_u())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Dv(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Eu(e){return _u()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Sn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function ZM(e){return Array.isArray(e)?e.map(r=>Sn(r)).filter(r=>r!==null).slice(0,YM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function eW(e,r,t){let n=xu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:ZM(n.statuses)}:null}var Mv={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Eu,collect(e,r){let t=Nv(e);if(!t)return null;let n=QM(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=Sn(n.author),s=Sn(n.mergeCommit),i=Sn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,GM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Sn(u)).filter(u=>u!==null).slice(0,qM).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=>Sn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,JM):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Wv={provider:"github",kind:"commit_status",version:"1",isAvailable:Eu,collect(e,r){let t=Su(e);return t?eW(r,t.repo,t.sha):null}},Lv={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Eu,collect(e,r){let t=Su(e);if(!t)return null;let n=xu(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=xu(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var Pu=[];function Cu(e){Pu.some(r=>r.provider===e.provider&&r.kind===e.kind)||Pu.push(e)}function Bv(e,r){return Pu.find(t=>t.provider===e&&t.kind===r)??null}function Uv(){Cu(Mv),Cu(Wv),Cu(Lv)}var rW=1,tW=25e3;function Fv(e,r={}){Uv();let t=r.run??Tv,n=r.now??(()=>new Date),o=r.maxSubjects??rW,s=Date.now()+(r.deadlineMs??tW),i=new Set,a=e.filter(m=>{let f=ea(m.provider,m.kind,m.subject);return i.has(f)?!1:(i.add(f),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,f)=>a[(l+f)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let m of u){let f=ea(m.provider,m.kind,m.subject),y=n(),k=r.cache?.get(f,y)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=Bv(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${b.provider} ${b.kind}`,h=p.get(g);if(h===void 0&&(h=b.isAvailable(t),p.set(g,h)),!h){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,f,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let w=b.collect(m.subject,t);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(E),r.cache?.set(f,E,n())}return d}B();O();import aW from"node:path";B();O();import Kv from"node:path";var nW="provider-evidence-wanted.json",oW="provider-evidence-cache.json",sW=600*1e3;function Hv(e){return Kv.join(N(e),nW)}function iW(e){return Kv.join(N(e),oW)}function $v(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function jv(e){let r=I(Hv(e),null);return $v(r?.wanted)}function Vv(e,r){ue(Hv(e),{savedAt:new Date().toISOString(),wanted:r})}function Gv(e,r={}){let t=r.ttlMs??sW,n=iW(e),s={...I(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ue(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Yv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?$v(r):null}var lW="provider-evidence-shared-cache.json",cW=6e4,uW=1,dW=1;function Au(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function pW(){return aW.join(le().harnessRoot,lW)}function mW(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?uW:dW;return Au(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,Au("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function qv(){return Au("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",cW)}function fW(e){return Math.floor(e.getTime()/6e4)*6e4}function gW(e){return`${e.provider}:${e.kind}`}function Jv(e,r={}){let t=Gv(e,{ttlMs:r.ttlMs??qv()}),n=r.file??pW(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??qv(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let m=s[u];if(!m)return null;let f=Date.parse(m.observedAt);return!Number.isFinite(f)||d.getTime()-f>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let m=mW(u.provider);if(m===0)return!0;let f=gW(u),y=fW(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();B();import zv from"node:path";var Xv="mesh-cron-lease.json";function Qv(e){let r=I(zv.join(N(e),Xv),null);return ok(e,r)??r}function Zv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(zv.join(N(e),Xv),t),nk(e,t)}function eb(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}function rb(e){let r=Th(),t=Br(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Vh());let s=jh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,zy())}return t.flags.planOutbox!=="off"&&Object.assign(o,zk()),t.flags.admission!=="off"&&(Object.assign(o,Jh()),t.flags.admission==="enforce"&&Object.assign(o,Zh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,ck()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:r.state,schemaVersion:r.schemaVersion,recovered:r.recovered,unavailableClass:r.reason?r.reason.split(":")[0]??null:null,flags:t.flags,flagSources:t.sources,flagWarningCount:t.warnings.length,divergenceCounters:o}}H();import{createHash as tb}from"node:crypto";import{access as hW,mkdir as TQ,readFile as nb,rename as NQ,writeFile as DQ}from"node:fs/promises";import{constants as kW}from"node:fs";import{homedir as Iu}from"node:os";import Ee from"node:path";var yW=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,RW=/^[A-Za-z0-9._:-]{8,128}$/;function vW(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Iu(),".kynver","mcp-installations.json")}function bW(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Iu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Iu(),".npm-global")}function SW(e){let r=Ee.resolve(e);if(Ee.basename(r)!=="node_modules")return r;let t=Ee.dirname(r);return Ee.basename(t)==="lib"?Ee.dirname(t):t}function wW(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function xW(e){try{return await hW(e,kW.R_OK),!0}catch{return!1}}async function _W(e=vW()){let r;try{r=JSON.parse(await nb(e,"utf8"))}catch{return[]}if(r.version!==1||!Array.isArray(r.installations)||r.installations.length>100)throw new Error("invalid MCP installation inventory");return r.installations.map(t=>{if(!t||!RW.test(t.inventoryKey)||!yW.test(t.packageName)||!["kynver","openclaw"].includes(t.prefix))throw new Error("invalid adopted MCP installation");if(t.packageName.includes("..")||t.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(t.connectionId&&t.connectionId.length>128)throw new Error("invalid connection identity");if(t.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(t.binName))throw new Error("invalid MCP bin name");let n=t.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...t,envAllowlist:[...new Set(n)],lifecycle:t.lifecycle??"runtime_stdio"}})}function EW(e,r,t){if(typeof e.bin=="string")return Ee.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Ee.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Ee.join(t,s):null}function CW(e){return tb("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function PW(e){let r=[];for(let t of e){let n=SW(bW(t.prefix)),o=(await Promise.all(wW(n,t.packageName).map(async m=>({candidate:m,ok:await xW(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await nb(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Ee.dirname(o),a=EW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=tb("sha256").update(JSON.stringify({prefix:n,binName:t.binName??null,envAllowlist:[...t.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],p={inventoryKey:t.inventoryKey,connectionId:t.connectionId??null,packageName:t.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};r.push({report:{...p,displayName:t.displayName?.trim()||t.packageName,inventoryFingerprint:CW(p),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:t.envAllowlist??[],lifecycle:c}})}return r}async function ob(){return PW(await _W())}import{createHash as AW,createHmac as IW,timingSafeEqual as OW}from"node:crypto";function Ou(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:AW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function sb(e,r,t){let n=Ou(r);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==t||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=IW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&OW(i,s)}aa();vr();import{createHash as TW}from"node:crypto";import{access as Tu,mkdtemp as NW,readFile as ub,rm as DW}from"node:fs/promises";import{constants as Nu}from"node:fs";import{tmpdir as MW}from"node:os";import wn from"node:path";import{spawn as WW}from"node:child_process";import{Client as LW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as BW}from"@modelcontextprotocol/sdk/client/stdio.js";var Du="https://registry.npmjs.org",ib=512*1024,Mu=2*6e4,UW=2e4;function db(){return"npm"}function ab(e,r){return Buffer.byteLength(e)>=ib?e:(e+r.toString("utf8")).slice(0,ib)}function FW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&wn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Du,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function pb(e,r,t=Mu,n){return new Promise((o,s)=>{let i,a;try{[i,a]=pe(e,r)}catch(m){s(m);return}let l=WW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:FW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=ab(c,m)}),l.stderr.on("data",m=>{u=ab(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&Me(l.pid,"SIGKILL")},t);l.once("error",m=>{clearTimeout(p),s(m)}),l.once("close",m=>{clearTimeout(p),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function KW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:TW(t).update(e).digest("base64")===n}async function HW(e,r,t,n){let o=await pb(db(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Du}`,"--ignore-scripts"],Mu,wn.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"||wn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=wn.join(n,i);if(!KW(await ub(a),t))throw new Error("artifact_integrity_mismatch");return a}async function $W(e,r,t){if((await pb(db(),["install","--global","--prefix",e,r,`--registry=${Du}`,"--no-audit","--fund=false"],Mu,t)).code!==0)throw new Error("package_install_failed")}async function mb(e){let r=JSON.parse(await ub(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function jW(e){let r={};for(let t of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[t];n!==void 0&&(r[t]=n)}return r}async function lb(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Tu(e.local.binPath,Nu.X_OK).catch(async()=>Tu(e.local.binPath,Nu.R_OK));let r=new BW({command:e.local.binPath,args:[],env:jW(e.local.envAllowlist),stderr:"pipe"}),t=new LW({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")),UW)})]);let o=await t.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await t.close().catch(()=>{})}}async function cb(e,r,t,n,o){let s=await NW(wn.join(MW(),"kynver-mcp-update-"));try{let i=await HW(r,t,n,s);if(await o(),await $W(e.local.prefix,i,wn.join(s,"npm-cache")),await mb(e)!==t)throw new Error("installed_version_mismatch")}finally{await DW(s,{recursive:!0,force:!0})}}async function fb(e,r,t,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==r.inventoryKey||e.report.inventoryFingerprint!==r.inventoryFingerprint||e.report.packageName!==r.packageName)throw new Error("local_inventory_mismatch");if(r.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await t("preflight"),await Tu(e.local.prefix,Nu.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await mb(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await cb(e,r.packageName,r.targetVersion,r.targetIntegrity,async()=>{await t("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:r.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await t("restarting"),await t("verifying");let a=await lb(e);return{outcome:"succeeded",observedVersion:r.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!r.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await cb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await lb(e);return{outcome:"rollback_succeeded",observedVersion:r.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:r.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}import{randomBytes as Bu}from"node:crypto";import{mkdir as Uu,readFile as Fu,rename as QW,rm as ra,stat as ZW,writeFile as Rb}from"node:fs/promises";import Ot from"node:path";import{createHmac as VW,timingSafeEqual as GW}from"node:crypto";import{mkdir as YW,readFile as qW,rename as JW,writeFile as zW}from"node:fs/promises";import{homedir as XW}from"node:os";import Wu from"node:path";function Lu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Wu.join(XW(),".kynver","state","mcp-updates")}function gb(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Wu.join(Lu(),`${e}.json`)}function hb(e,r){let t=Ou(r);return t?VW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function kb(e,r){try{let t=JSON.parse(await qW(gb(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=hb(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!GW(i,a)?null:t}catch{return null}}async function yb(e,r){let t=hb(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=gb(e.operationId);await YW(Wu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await zW(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
185
|
+
`,{mode:384}),await JW(o,n)}var eL="host-mutation.lock";function vb(){return Ot.join(Lu(),eL)}async function bb(){try{let e=JSON.parse(await Fu(Ot.join(vb(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:Sb(e.pid)}}catch{return null}}function Sb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function rL(e){try{return await ZW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function wb(){return tL("mcp_update")}async function tL(e){let r=vb(),t=`${r}.reclaiming`;await Uu(Ot.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await rL(t))return null;for(let o=0;o<2;o+=1)try{await Uu(r,{mode:448});let s={pid:process.pid,nonce:Bu(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await Rb(Ot.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await ra(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Fu(Ot.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await ra(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Uu(t,{mode:448}),n=!0,await Rb(Ot.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Bu(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Fu(Ot.join(r,"owner.json"),"utf8"))}catch{return null}if(Sb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Bu(8).toString("hex")}`;await QW(r,a),await ra(a,{recursive:!0,force:!0})}return null}finally{n&&await ra(t,{recursive:!0,force:!0})}}function ta(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function nL(e){if(!e||typeof e!="object")return null;let r=e.claim;if(!r||typeof r!="object"||r.waitingForIdle!==!1)return null;let t=r.command;return t&&typeof t=="object"?t:null}function xb(e,r){let t=r.claims;return e.inventoryKey===t.inventoryKey&&e.packageName===t.packageName&&e.installedVersion===t.installedVersion&&e.targetVersion===t.targetVersion&&e.targetIntegrity===t.targetIntegrity&&e.rollbackIntegrity===t.rollbackIntegrity&&e.item.report.inventoryKey===t.inventoryKey&&e.item.report.packageName===t.packageName}function oL(e,r){return{inventoryKey:r.claims.inventoryKey,packageName:r.claims.packageName,installedVersion:r.claims.installedVersion,targetVersion:r.claims.targetVersion,targetIntegrity:r.claims.targetIntegrity,rollbackIntegrity:r.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function _b(e){let r=Q(e.baseUrl),t=await ob();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await ht(ta(r,e.agentOsId,"inventory"),e.secret,{items:t.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await wb();if(!o){let s=await bb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await ht(ta(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=nL(s.response);if(!i)return{ok:!0,stage:"idle"};if(!sb(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await kb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!xb(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let g=t.find(h=>h.report.inventoryKey===i.claims.inventoryKey);if(!g||g.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=g,c=a&&xb(a.recovery,i)?a.recovery:oL(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await yb({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await ht(ta(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:g})).ok)throw new Error("progress_rejected");p=g,await d(g,!1)},f=g=>m(g),y=()=>m(p),k;try{k=await fb(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await ht(ta(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return b.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:k.outcome}}finally{await o.release()}}function sL(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function iL(e,r){let t=q(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=I(Eb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||qr(a))continue;if(ko(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!xe(l))continue;let c=Kt({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await Oo({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 aL(e,r,t,n,o){let s=Q(n.baseUrl?String(n.baseUrl):void 0),i=await ee(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await Ov(),c=Ls(r),u=null;try{let E=jv(r);if(E.length>0){let S=Jv(r);u=Fv(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Fr()!=="off"){let E=Vt();qh({liveWorkers:E}),Qh({liveWorkers:E})}else Gh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=Eb.join(Ar(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?qr($):!1}catch{return!1}};await Qy({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=rb({hasLiveWorker:d})}catch{p=null}let m=null;try{m=cd({control:Wt(e),supervisor:md(),inFlightWorkers:Vt().length})}catch{m=null}let f=Qv(r),y=Qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Tc(r),resourceGate:t,boxResourceSnapshot:lR(t,{harnessRunId:r,boxKind:Sr(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...y?{daemonEventLoop:y}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=Yv(k.response);if(b)try{Vv(r,b)}catch{}let g=eb(k);if(g)try{Zv(r,g)}catch{}let h=Dh(k);h&&Mh(e,h);let w=id(k);return w&&ld(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Cb(e){let r=String(Rr(String(e.run||""),"--run")),t=String(Rr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Tc(r);let o=await Fs(t,e),s=Us(o),i=Gn({runId:r,configuredMaxWorkersOverride:s}),a=Pv()?Cv(r):void 0,l=await aL(t,r,i,e,a),c;if(n)try{let C=Q(e.baseUrl?String(e.baseUrl):void 0),re=await ee(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await _b({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:Vt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=yh(r,l),d=await kg(r,e),p=await iL(r,e);p.some(C=>C.ok&&!C.skipped)&&oR();let m=Gn({runId:r,configuredMaxWorkersOverride:s}),f=qy(),y=await dR(r,e),k=Iy(m,l),b=k.maxStarts,g=Wt(t),h=ud(g);h&&(b=0);let w=sL()?await cR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=Ay(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Vc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),ke=hn(re);S+=ke,K=Math.max(0,K-ke),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Vc({...e,run:r,agentOsId:t},K),re=hn(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}}Pn();Gt();Pn();function Pb(e){return Xo(Wt(e))!=="stopped"?null:Vt().length}function Ab(e){if(!e||typeof e!="object")return!1;let r=e;return r.type==="tick"&&typeof r.id=="number"&&typeof r.agentOsId=="string"&&!!r.args&&typeof r.args=="object"}function lL(e){e&&(iR({admission:e.admission,ownerKind:e.ownerKind}),pd(e.ownerKind))}async function cL(e,r={}){try{e.instructionBundle&&ed(e.instructionBundle.bundle,e.instructionBundle.source),Xu(e.eventLoopReport);let t=await(r.runTick??Cb)(e.args),n=(r.countInFlightWorkers??Pb)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function Ib(e,r,t={}){lL(r);let n=Promise.resolve();e.on("message",o=>{Ab(o)&&(n=n.then(async()=>{e.postMessage(await cL(o,t))}))})}Ob?Ib(Ob,uL):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|