@kynver-app/runtime 0.2.154 → 0.2.157
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 +19 -2
- package/dist/cli.js +245 -231
- package/dist/daemon-tick-thread.js +55 -55
- package/dist/desktop-entry.js +193 -180
- package/dist/index.js +269 -255
- package/dist/server/cleanup.js +1 -1
- package/package.json +1 -1
|
@@ -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 aS}from"node:child_process";function uS(e){return["/PID",String(e),"/T","/F"]}function dS(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===lS||/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 pS(e){let r=aS("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:cS});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function mS(e){return Number.isInteger(e)&&e>0}function Me(e,r="SIGTERM",t={}){if(!mS(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??pS;return dS(s(uS(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 le(e=process.platform){return e!=="win32"}var lS,cS,ma=P(()=>{"use strict";lS=128,cS=15e3});import{existsSync as fS,mkdirSync as gS,readFileSync as pd,readdirSync as l0,renameSync as hS,rmSync as kS,statSync as md,writeFileSync as yS}from"node:fs";import{randomBytes as RS}from"node:crypto";import vS from"node:path";function ze(e){console.error(e),process.exit(1)}function ie(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function vr(e,r){return e||ze(`missing ${r}`),e}function Pn(e){try{return JSON.parse(e)}catch{return null}}function I(e,r){try{return JSON.parse(pd(e,"utf8"))}catch(t){if(arguments.length>1)return r;ze(`failed to read ${e}: ${t.message}`)}}function ce(e,r){gS(vS.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${RS(4).toString("hex")}.tmp`;try{yS(t,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`),hS(t,e)}catch(n){try{kS(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function qo(e){return String(e).replace(/\/+$/,"")}function zo(e){try{return md(e).size}catch{return 0}}function Xo(e){try{return md(e).mtime.toISOString()}catch{return null}}function Wt(e,r){return fS(e)?pd(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=_d("git",r,ie({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 xd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Zo(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return Bt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Bt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Bt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=xd(e,i,a),c=xd(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Bt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ue=P(()=>{"use strict";Gr();T();ka()});import{homedir as Ed}from"node:os";import ya from"node:path";function LS(e=Ed()){return ya.join(e,".kynver",WS)}function Pd(e,r=Ed()){return ya.resolve(e)===ya.resolve(LS(r))}var WS,Cd,Ra=P(()=>{"use strict";ue();WS="workspace",Cd="main"});import{existsSync as ba,readFileSync as Id}from"node:fs";import{homedir as BS}from"node:os";import Xe from"node:path";import{fileURLToPath as US}from"node:url";function KS(e){let r=Xe.join(e,"package.json");if(!ba(r))return null;try{let t=JSON.parse(Id(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Od(e){return KS(e)==="kynver"}function Ad(e){let r=Xe.resolve(e);if(!ba(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?Xe.resolve(n):null}function HS(e=import.meta.url){let r=Xe.dirname(US(e));for(let t=0;t<8;t+=1){let n=Xe.join(r,"package.json");if(ba(n))try{if(JSON.parse(Id(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=Xe.dirname(r);if(o===r)break;r=o}return null}function va(e,r,t,n,o){if(!t)return;let s=Xe.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Od(s)||(e.add(s),r.push({repo:s,source:n}))}function $S(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];va(t,n,Ad(r),"cwd_git",{requireMonorepo:!1});let o=HS(e?.runtimeModuleUrl??import.meta.url);o&&va(t,n,Ad(o),"runtime_checkout");let s=BS();for(let a of FS)va(t,n,We(Xe.join(s,a)),"well_known_path");let i=Xe.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Od(a.repo))return!0;let l=Xe.resolve(a.repo);return i===l||i.startsWith(`${l}${Xe.sep}`)})}function es(e){return $S(e)[0]??null}var FS,On=P(()=>{"use strict";ue();Gr();Ra();FS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Dd,readFileSync as jS}from"node:fs";import ut from"node:path";function GS(e){return e.includes("/")||e.includes("\\")}function YS(e){return(e.PATHEXT||VS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function JS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function qS(e,r={}){let t=r.env??process.env,n=r.exists??Dd,o=YS(t),s=ut.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(GS(e)||ut.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of JS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(ut.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function Nd(e){return e.replace(/^[\\/]+/,"")}function XS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=zS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Td.exec(n);if(o)return Nd(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?Td.exec(i):null;if(a)return Nd(a[1])}return null}function QS(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=qS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=ut.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>jS(m,"utf8")),i=r.exists??Dd,a;try{a=s(n)}catch{throw new Tn(n)}let l=XS(a);if(!l)throw new Tn(n);let c=ut.win32.dirname(n),u=ut.win32.join(c,l);if(!i(u))throw new Tn(n);let d=ut.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function de(e,r,t={}){let n=QS(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Tn,VS,Td,zS,br=P(()=>{"use strict";Tn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},VS=".COM;.EXE;.BAT;.CMD";Td=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,zS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var Md=P(()=>{"use strict";br()});function Bd(e){let r=Jo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===Wd?(t.hostname=`www.${Wd}`,Jo(t.toString())):r}catch{return r}}function Nn(e){if(e?.trim())return Bd(Jo(e.trim()))}async function Dn(e,r,t=fetch){let n=Bd(e),o=new Headers(r?.headers),s=0;for(;s<=Ld;){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 ${Ld} redirects for ${e}`)}var Wd,Ld,Mn=P(()=>{"use strict";T();Wd="kynver.com";Ld=10});function dt(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function rs(e,r){return e[r]?.trim()||null}function Ud(e){let r=e?.split(":")[0]?.trim();return r?dt(r):null}function Sr(e=process.env,r={}){let t=[],n=Ud(r.boxId),o=Ud(rs(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==dt(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:dt(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=rs(e,"KYNVER_BOX_KIND");if(i)return o&&o!==dt(i)&&t.push(`KYNVER_BOX_ID=${rs(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:dt(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=rs(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function wr(e={},r=process.env){return Sr(r,e).boxKind}var Le=P(()=>{"use strict"});function Sa(e,r){return e==="forge"?4:Math.max(1,r)}function Wn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var ts=P(()=>{"use strict"});import{readFileSync as ZS}from"node:fs";import Fd from"node:os";function Kd(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Fd.freemem()}if(process.platform==="linux")try{let t=ZS("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Fd.freemem()}var Hd=P(()=>{"use strict"});import{existsSync as ew,readFileSync as rw,statfsSync as tw}from"node:fs";function wa(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ew(e))continue;let r=rw(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function $d(e={}){if(!(e.forceWsl===void 0?wa():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.wslHostFreeWarnBytes??nw,o=e.wslHostFreeCriticalBytes??ow,s=e.statfs??tw,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. ${sw()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function sw(){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 nw,ow,Ut,xa=P(()=>{"use strict";nw=25*1024*1024*1024,ow=12*1024*1024*1024,Ut="/mnt/c"});import{execFileSync as jd}from"node:child_process";import{existsSync as os,readFileSync as Vd,readdirSync as iw,statSync as aw}from"node:fs";import _a from"node:path";function ns(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Gd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=jd("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut;return r&&os(_a.join(t,"Users",r))?r:null}function pw(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.windowsUser??Gd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function mw(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 fw(){try{if(os("/proc/sys/kernel/core_pattern"))return Vd("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return jd("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function gw(e){return!!(e&&/wsl-capture-crash/i.test(e))}function hw(e,r=Ut){let t=_a.join(r,"Users",e,".wslconfig");if(!os(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Vd(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 kw(e){if(!os(e))return[];let r=iw(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=_a.join(e,n.name);try{let s=aw(o),i=mw(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Ft(e={}){if(!(e.forceWsl===void 0?wa():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.windowsUser??Gd(),o=e.warnBelowBytes??ns("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",lw),s=e.criticalBelowBytes??ns("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",cw),i=e.warnCount??ns("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",uw),a=e.criticalCount??ns("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",dw),l=(e.readCorePattern??fw)(),c=gw(l),u=null;n&&(u=(e.readWslConfig??hw)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=pw({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??kw)(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),Q=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${Q}). `+yw({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 yw(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 lw,cw,uw,dw,ss=P(()=>{"use strict";xa();lw=5*1024*1024*1024,cw=10*1024*1024*1024,uw=2,dw=4});import{statfsSync as Rw}from"node:fs";function Yr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??vw,n=e.diskFreeCriticalBytes??bw,o=e.diskMaxUsedPercent??Sw,s=e.diskHardMaxUsedPercent??ww,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:$d(e.wslHost),b=e.skipWslCrashDumpCheck?null:Ft(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),xw({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 xw(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 vw,bw,Sw,ww,Ln=P(()=>{"use strict";ss();xa();vw=30*1024*1024*1024,bw=15*1024*1024*1024,Sw=80,ww=90});import{existsSync as _w,readdirSync as Ew}from"node:fs";import Cw from"node:path";function lr(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(!_w(t))return[...r];for(let n of Ew(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Bn=P(()=>{"use strict";B();T()});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 Yd(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 l=Ea(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Ea(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Jd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Yd(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Yd(t);return n||t}var qd=P(()=>{"use strict"});import{existsSync as Pw,readFileSync as Aw}from"node:fs";function zd(e){return e==="complete"}function xr(e){return zd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function pe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Pw(e))return r;let t=Date.now()+Iw,n=new Date(t).toISOString(),o=Aw(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=Pn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
9
|
-
`).filter(Boolean),n=null,o=
|
|
4
|
+
`):""}function Qo(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 fd(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 fa(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var T=P(()=>{"use strict";ma()});import{existsSync as bS,readFileSync as SS}from"node:fs";import{homedir as wS}from"node:os";import xS from"node:path";function ha(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ga(e){return typeof e=="string"&&e.trim()?e:null}function gd(e){let r=ha(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=ga(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:ga(r.requestedByLabel),reason:ga(r.reason)}:null}function hd(e){let r=ha(ha(e)?.response);return!r||r.runtimeControl===void 0?null:gd(r.runtimeControl)}function kd(e,r=wS()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return xS.join(r,".kynver",`runtime-control-${t}.json`)}function yd(e,r,t){try{let n=Lt(e,t);if(n&&n.policyVersion>r.policyVersion)return;ce(kd(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function Lt(e,r){try{let t=kd(e,r);if(!bS(t))return null;let n=JSON.parse(SS(t,"utf8"));return n.agentOsId!==e?null:gd(n.control)}catch{return null}}function Zo(e){return e?.desiredState??"running"}function _S(e){return e==="keeper"||e==="desktop"}function ES(e,r,t=!1){let n=Zo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function Rd(e){return e.control?{policyVersion:e.control.policyVersion,state:ES(e.control,e.inFlightWorkers,e.exiting),supervised:_S(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function vd(e){let r=Zo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function Sd(e){bd=e}function wd(){return bd}var bd,An=P(()=>{"use strict";T();bd=null});import{homedir as xd}from"node:os";import _d from"node:path";function CS(e){return e==="~"?xd():e.startsWith("~/")||e.startsWith("~\\")?_d.join(xd(),e.slice(2)):e}function We(e){return _d.resolve(CS(e))}var Gr=P(()=>{"use strict"});function MS(e){let r=e[DS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function WS(e,r={}){return AS.has(e)?!0:TS.has(e)||r.operatorAllow?.has(e)||NS.some(t=>e.endsWith(t))?!1:IS.some(t=>e.endsWith(t))}function ka(e){let r=MS(e),t={...e};for(let n of Object.keys(t))WS(n,{operatorAllow:r})&&delete t[n];return t}var PS,AS,IS,OS,TS,NS,DS,ya=P(()=>{"use strict";PS=["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"],AS=new Set(PS),IS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],OS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],TS=new Set(OS),NS=["_PUBLIC_KEY"],DS="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as Cd}from"node:child_process";function re(e,r,t={}){let n=Cd("git",r,ie({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=LS(e,r,n);if(t.throwError)throw new Error(o);ze(o)}return n.stdout||""}function LS(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function In(e){return re(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=Cd("git",r,ie({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 Ed(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 es(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return Bt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Bt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Bt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=Ed(e,i,a),c=Ed(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Bt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ue=P(()=>{"use strict";Gr();T();ya()});import{homedir as Pd}from"node:os";import Ra from"node:path";function US(e=Pd()){return Ra.join(e,".kynver",BS)}function Id(e,r=Pd()){return Ra.resolve(e)===Ra.resolve(US(r))}var BS,Ad,va=P(()=>{"use strict";ue();BS="workspace",Ad="main"});import{existsSync as Sa,readFileSync as Td}from"node:fs";import{homedir as FS}from"node:os";import Xe from"node:path";import{fileURLToPath as KS}from"node:url";function $S(e){let r=Xe.join(e,"package.json");if(!Sa(r))return null;try{let t=JSON.parse(Td(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Nd(e){return $S(e)==="kynver"}function Od(e){let r=Xe.resolve(e);if(!Sa(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?Xe.resolve(n):null}function jS(e=import.meta.url){let r=Xe.dirname(KS(e));for(let t=0;t<8;t+=1){let n=Xe.join(r,"package.json");if(Sa(n))try{if(JSON.parse(Td(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=Xe.dirname(r);if(o===r)break;r=o}return null}function ba(e,r,t,n,o){if(!t)return;let s=Xe.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Nd(s)||(e.add(s),r.push({repo:s,source:n}))}function VS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ba(t,n,Od(r),"cwd_git",{requireMonorepo:!1});let o=jS(e?.runtimeModuleUrl??import.meta.url);o&&ba(t,n,Od(o),"runtime_checkout");let s=FS();for(let a of HS)ba(t,n,We(Xe.join(s,a)),"well_known_path");let i=Xe.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Nd(a.repo))return!0;let l=Xe.resolve(a.repo);return i===l||i.startsWith(`${l}${Xe.sep}`)})}function rs(e){return VS(e)[0]??null}var HS,On=P(()=>{"use strict";ue();Gr();va();HS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Wd,readFileSync as GS}from"node:fs";import ut from"node:path";function JS(e){return e.includes("/")||e.includes("\\")}function qS(e){return(e.PATHEXT||YS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function zS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function XS(e,r={}){let t=r.env??process.env,n=r.exists??Wd,o=qS(t),s=ut.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(JS(e)||ut.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of zS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(ut.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function Md(e){return e.replace(/^[\\/]+/,"")}function ZS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=QS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Dd.exec(n);if(o)return Md(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?Dd.exec(i):null;if(a)return Md(a[1])}return null}function ew(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=XS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=ut.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>GS(m,"utf8")),i=r.exists??Wd,a;try{a=s(n)}catch{throw new Tn(n)}let l=ZS(a);if(!l)throw new Tn(n);let c=ut.win32.dirname(n),u=ut.win32.join(c,l);if(!i(u))throw new Tn(n);let d=ut.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function de(e,r,t={}){let n=ew(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Tn,YS,Dd,QS,br=P(()=>{"use strict";Tn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},YS=".COM;.EXE;.BAT;.CMD";Dd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,QS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var Ld=P(()=>{"use strict";br()});function Fd(e){let r=qo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===Bd?(t.hostname=`www.${Bd}`,qo(t.toString())):r}catch{return r}}function Nn(e){if(e?.trim())return Fd(qo(e.trim()))}async function Dn(e,r,t=fetch){let n=Fd(e),o=new Headers(r?.headers),s=0;for(;s<=Ud;){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 ${Ud} redirects for ${e}`)}var Bd,Ud,Mn=P(()=>{"use strict";T();Bd="kynver.com";Ud=10});function dt(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 ts(e,r){return e[r]?.trim()||null}function Kd(e){let r=e?.split(":")[0]?.trim();return r?dt(r):null}function Sr(e=process.env,r={}){let t=[],n=Kd(r.boxId),o=Kd(ts(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==dt(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:dt(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=ts(e,"KYNVER_BOX_KIND");if(i)return o&&o!==dt(i)&&t.push(`KYNVER_BOX_ID=${ts(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:dt(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=ts(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 wr(e={},r=process.env){return Sr(r,e).boxKind}var Le=P(()=>{"use strict"});function wa(e,r){return e==="forge"?4:Math.max(1,r)}function Wn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var ns=P(()=>{"use strict"});import{readFileSync as rw}from"node:fs";import Hd from"node:os";function $d(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Hd.freemem()}if(process.platform==="linux")try{let t=rw("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Hd.freemem()}var jd=P(()=>{"use strict"});import{existsSync as tw,readFileSync as nw,statfsSync as ow}from"node:fs";function xa(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!tw(e))continue;let r=nw(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Vd(e={}){if(!(e.forceWsl===void 0?xa():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.wslHostFreeWarnBytes??sw,o=e.wslHostFreeCriticalBytes??iw,s=e.statfs??ow,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. ${aw()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function aw(){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 sw,iw,Ut,_a=P(()=>{"use strict";sw=25*1024*1024*1024,iw=12*1024*1024*1024,Ut="/mnt/c"});import{execFileSync as Gd}from"node:child_process";import{existsSync as ss,readFileSync as Yd,readdirSync as lw,statSync as cw}from"node:fs";import Ea from"node:path";function os(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Jd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Gd("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut;return r&&ss(Ea.join(t,"Users",r))?r:null}function fw(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.windowsUser??Jd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function gw(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 hw(){try{if(ss("/proc/sys/kernel/core_pattern"))return Yd("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Gd("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function kw(e){return!!(e&&/wsl-capture-crash/i.test(e))}function yw(e,r=Ut){let t=Ea.join(r,"Users",e,".wslconfig");if(!ss(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Yd(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 Rw(e){if(!ss(e))return[];let r=lw(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Ea.join(e,n.name);try{let s=cw(o),i=gw(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Ft(e={}){if(!(e.forceWsl===void 0?xa():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ut,n=e.windowsUser??Jd(),o=e.warnBelowBytes??os("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",uw),s=e.criticalBelowBytes??os("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",dw),i=e.warnCount??os("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",pw),a=e.criticalCount??os("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",mw),l=(e.readCorePattern??hw)(),c=kw(l),u=null;n&&(u=(e.readWslConfig??yw)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=fw({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??Rw)(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),Q=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${Q}). `+vw({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 vw(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 uw,dw,pw,mw,is=P(()=>{"use strict";_a();uw=5*1024*1024*1024,dw=10*1024*1024*1024,pw=2,mw=4});import{statfsSync as bw}from"node:fs";function Yr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Sw,n=e.diskFreeCriticalBytes??ww,o=e.diskMaxUsedPercent??xw,s=e.diskHardMaxUsedPercent??_w,i=bw(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:Vd(e.wslHost),b=e.skipWslCrashDumpCheck?null:Ft(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),Ew({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 Ew(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 Sw,ww,xw,_w,Ln=P(()=>{"use strict";is();_a();Sw=30*1024*1024*1024,ww=15*1024*1024*1024,xw=80,_w=90});import{existsSync as Cw,readdirSync as Pw}from"node:fs";import Aw from"node:path";function lr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=Aw.join(N(e.id),"workers");if(!Cw(t))return[...r];for(let n of Pw(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Bn=P(()=>{"use strict";B();T()});function Ca(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 qd(e){let r=e.trim();if(!r)return null;let t=Ca(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Ca(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Ca(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function zd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?qd(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=qd(t);return n||t}var Xd=P(()=>{"use strict"});import{existsSync as Iw,readFileSync as Ow}from"node:fs";function Qd(e){return e==="complete"}function xr(e){return Qd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function pe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Iw(e))return r;let t=Date.now()+Tw,n=new Date(t).toISOString(),o=Ow(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=Pn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),Qd(r.lastHeartbeatPhase)&&(r.terminalFinalResult=zd(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var Tw,pt=P(()=>{"use strict";Xd();T();Tw=6e4});function ep(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function as(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 rp(e){let r=ep(e[0]);return!!(r&&Nw.has(r))}function Mw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Ww(e){if(!e||e.includes("*"))return null;let r=Mw(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function tp(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Pa(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Lw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Bw(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;Zd.has(n)&&(t+=1);continue}r.push(n)}}return r}function Uw(e){let r=!1,t=e.map((o,s)=>{let i=Lw(o),a=e[s-1];return a&&Zd.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Bw(t);if(n.length===2){let[o,s]=n;if(Pa(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Ww(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 np(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 ls(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=as(r);if(!t.length)return{command:r,wrapped:!1};let n=ep(t[0]);if(!n||!Dw.has(n))return{command:r,wrapped:!1};let o=np(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 Fw(e,r){let t=e.trim(),n=as(t),o=np(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Kw(e){let r=e.trim(),t=ls(r),n=as(t.command);if(!n.length||!rp(n))return{segment:r,changed:!1};let o=Uw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:Fw(r,s),changed:!0}:{segment:s,changed:!0}}function Aa(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=Kw(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function op(e){let r=ls(e).command,t=as(r.trim());return t.length&&rp(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function sp(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 Hw(e){let{pattern:r,target:t}=sp(e);return r?Pa(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:tp(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function $w(e){let{pattern:r,target:t}=sp(e);if(!r)return null;if(Pa(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&tp(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function jw(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 Vw(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 Ia(e){let r=e.meta?.trim()||(e.command?Vw(e.command):null)||null;if(r){let t=Hw(r),n=jw(t);if(n)return n;let o=$w(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=Aa(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var Nw,Dw,Zd,ip=P(()=>{"use strict";Nw=new Set(["rg","ripgrep","grep"]),Dw=new Set(["bash","sh","dash","zsh"]),Zd=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Un(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Jw(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function Fn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function qw(e){let r=e.metadata;if(!Fn(r))return null;let t=r.vulnerabilities;if(!Fn(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function zw(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 Xw(e,r){let t=e.error;if(Fn(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?Un(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function Qw(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=Jw(r);if(!t||!Fn(t)){let o=Un(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Fn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Xw(t,e.stderr)}`};let n=qw(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:zw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Zw(e){return Gw.test(e)}function ex(e){let r=ls(e).command;return ap.test(e)||ap.test(r)||op(e)}function rx(e){let r=Ia({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&Yw.test(n)){let i=Un(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Aa(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Un(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function lp(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Zw(e.command)){let i=r.trim()||n.trim()||t.trim();return Qw({exitCode:e.exitCode,stdout:i,stderr:t})}if(ex(e.command))return rx({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Ia({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=Un(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Gw,ap,Yw,cp=P(()=>{"use strict";ip();Gw=/\bnpm\s+audit\b/i,ap=/\b(rg|ripgrep)\b/i,Yw=/\b(error|invalid|unknown|panic|not found)\b/i});function Kn(e){return typeof e=="string"&&tx.test(e.trim())}function cs(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 tx,us=P(()=>{"use strict";tx=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function up(e,r){if(!r.pinned)return nx[e.trim()]}function dp(e){return e?["--fallback-model",e]:[]}var Be,mt,nx,pp,Hn=P(()=>{"use strict";Be="claude-sonnet-5-5",mt="claude-opus-5-5",nx={[Be]:"claude-sonnet-4-6",[mt]:"claude-opus-4-8"};pp=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function Oa(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ox(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 mp(e){if(e.event==="step_update"&&Oa(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"||!Oa(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=Oa(r.usage)?ox(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 fp=P(()=>{"use strict"});function Ta(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function gp(){return{assistantText:""}}function sx(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function ix(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=(Ta(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 ax(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function hp(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return sx(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!ax(e))return null;let t=Ta(e.stats)?ix(e.stats):void 0;if(e.status==="error"){let o=Ta(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 kp=P(()=>{"use strict"});import{existsSync as lx,readFileSync as cx}from"node:fs";function ux(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function dx(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 px(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",cs(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Kt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function mx(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function fx(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 gx(e,r){let t=mx(r);if(!t)return;let n=Kt(t.input_tokens)??Kt(t.inputTokens)??Kt(t.prompt_tokens),o=Kt(t.output_tokens)??Kt(t.outputTokens)??Kt(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=fx(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function hx(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 kx(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function ft(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!lx(e))return r;let t=cx(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=gp();for(let s of t){let i=Pn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let m=p;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=ux(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=dx(p);m&&(r.currentTool=m)}let l=hx(i);l&&kx(r,lp({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=mp(i),u=c?null:hp(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"&&px(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"}gx(r,i)}return r}var $n=P(()=>{"use strict";cp();T();us();Hn();fp();kp()});import{accessSync as yx,constants as Rx,existsSync as vx,readFileSync as bx}from"node:fs";import Na from"node:path";function Rp(e){return Na.join(e,Sx)}function wx(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 yp(e){try{return yx(e,Rx.X_OK),!0}catch{return!1}}function xx(e,r=process.env){if(!e)return!1;if(e.includes("/"))return yp(e);for(let t of(r.PATH??"").split(Na.delimiter))if(t&&yp(Na.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!wx(o,n.platform)?[e,r]:xx(e,o)?[n.nodeExecutable??process.execPath,["-e",_x,Rp(t),e,...r]]:[e,r]}function Ex(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ds(e){if(!e)return null;let r=Rp(e);if(!vx(r))return null;try{let t=JSON.parse(bx(r,"utf8")),n=t.oomEvidence;return{exitCode:Ex(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 vp(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 Sx,_x,_r=P(()=>{"use strict";Sx="exit.json";_x=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,44 +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 _x from"node:path";function Na(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&Cx.has(r)}function ds(e){return!!(e&&Ex.test(e))}function bp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Na(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||ds(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":Rp.test(r)||Rp.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 Sp(e){let r=[Px(e.stopClass)],t=yp(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 Px(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 wp(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,vp/2):vp/2;return Math.min(Ax,n*2**e)}function xp(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(_x.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(us(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&ds(Wt(i.stderrPath,20))&&(n+=1)}}return n}function _p(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,Rp,Cx,vp,Ax,Da=P(()=>{"use strict";B();T();_r();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,Rp=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,Cx=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);vp=2048,Ax=8192});function Ep(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function jn(e){let r=(e??"").trim();if(!r)return null;if(Kn(r))return{blocked:!0,reason:`provider authentication failed: ${Ep(r)}`};for(let t of Ix)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Ep(r)}`};return null}var Ix,Ma=P(()=>{"use strict";cs();Hn();Ix=[{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:up,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 Cp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ox(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Tx(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Cp(e.head)}function Nx(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Ht(e){if(e.alive||Ox(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Cp(e.headCommit)??Tx(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:Nx(s,r,t)}}var ps=P(()=>{"use strict"});import{existsSync as Dx,readFileSync as Mx,statSync as Ip}from"node:fs";import ms from"node:path";function Ux(e,r=process.env){let t=e?Lx:Wx,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 Wa(e){try{return Ip(e).mtimeMs}catch{return-1}}function Kx(e){let r=ms.join(e,".git");try{if(Ip(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(Mx(r,"utf8"));return t?ms.resolve(e,t[1].trim()):null}catch{return null}}function Pp(e){let r=Kx(e);return[Wa(e),r?Wa(ms.join(r,"HEAD")):-2,r?Wa(ms.join(r,"index")):-2].join(":")}function Ap(e,r){return{changedFiles:In(e),gitAncestry:Zo(e,{base:r.base,baseCommit:r.baseCommit})}}function Hx(e,r){for(Jr.delete(e),Jr.set(e,r);Jr.size>Bx;){let t=Jr.keys().next().value;if(t===void 0)break;Jr.delete(t)}}function Op(e,r,t){let n=Fx(r);if(!e||!e.trim())return Vn.missingWorktree++,{changedFiles:[],gitAncestry:Bt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!Dx(e))return Jr.delete(o),Vn.missingWorktree++,{changedFiles:[],gitAncestry:Bt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Jr.delete(o),Vn.liveProbes++,Ap(e,r);let s=t.ttlMs??Ux(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=Pp(e),l=Jr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Vn.hits++,l.probe;Vn.misses++;let c=Ap(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();Hx(o,{fingerprint:Pp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var Wx,Lx,Bx,Jr,Vn,Tp=P(()=>{"use strict";ue();Wx=10*6e4,Lx=60*6e4,Bx=2048,Jr=new Map,Vn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Gn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function $x(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function jx(e){if(Gn(e.headCommit)||Gn(e.prUrl)||Gn(e.artifactBundlePath)||Gn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Gn(r.head))}function $t(e){return $x(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:jx(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 Np(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var fs=P(()=>{"use strict"});function La(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 Dp(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function jt(e){let r=e.trim();if(!r)return null;let t=La(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=La(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=La(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Dp(l);for(let u of n){let d=Dp(u);d>c&&(l=u,c=d)}return l}var gs=P(()=>{"use strict"});function Mp(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 Wp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Vx(e){return new Set(e.map(r=>Wp(Mp(r)??r)).filter(Boolean))}function Lp(e,r,t){let n=Mp(e)??e;if(!n)return"unrelated";let o=Wp(n);return Vx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Bp=P(()=>{"use strict"});function Vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Gx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function gt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Vt(e)}function hs(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Up(e){let r=null;if(typeof e=="string"){let o=jt(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=gt(String(s.prUrl??s.pr_url??"")),a=Vt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Vt(s.mergeCommit??s.merge_commit),reason:Vt(s.reason)})}return n}function Fp(e,r){let t=[],n=gt(Vt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=gt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Kp(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(!Gx(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?gt(Vt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?gt(r.targetPrUrls[0]):null):null;if(s){let d=Fp(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=Up(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=Up(n),a=new Map(i.map(d=>[hs(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>hs(gt(d)??d)).filter(Boolean)),c=Fp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(hs(d)),m=Lp(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=hs(gt(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 Hp(e){if(e.blocked)return e.detail??e.reason}var $p=P(()=>{"use strict";gs();Bp()});function Jx(e){let r=Date.now();if(e.providerTerminalError||ls(e.finalResult)||e.finalResult&&e.error?.trim()||Kn(e.error)||Kn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:jn(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!jp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&zx(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=$t(o);if(s.blocked){let i=Np(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Kp({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Hp(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(qx(e))return{state:"done",reason:"empty abandoned worker record"};let o=jn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ht({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=ds(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Yx)return{state:"needs_attention",reason:`no first stream event ${ma(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ba?{state:"stale",reason:`no log/event/heartbeat activity for ${ma(n)}s`}:{state:"ok",reason:"recent activity"}}function jp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function qx(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 zx(e){let r=null;if(typeof e=="string"?r=jt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Vp(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??xr(t))}function Gp(e){let r=ft(e.stdoutPath),t=pe(e.heartbeatPath);return Vp(e,r.finalResult,t)}function z(e,r={}){let t=ft(e.stdoutPath),n=pe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Vp(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}=Op(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=pd([t.lastEventAt,n.lastHeartbeatAt,zo(e.stdoutPath),zo(e.stderrPath),zo(e.heartbeatPath)]),m=i?null:us(e.workerDir),f=s&&!Na(s)?s:null,y=t.error||!i&&!s&&Wt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Wt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=jp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Jx({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,_=bp({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)??Sp({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 Yp(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Ua(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 Yx,Ba,me=P(()=>{"use strict";pt();$n();Da();_r();cs();Ma();ps();Tp();fs();$p();gs();T();Yx=18e4,Ba=6e5});import{readFileSync as Xx}from"node:fs";function Qx(e){if(!e||process.platform!=="linux")return null;try{return Xx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Jp(e){if(!e.pid||process.platform!=="linux")return!0;let r=Qx(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)||!Jp(e)?!1:!Gp(e)}var ks=P(()=>{"use strict";me();T()});import zp from"node:os";import Xp from"node:path";function qp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Zx(e=U(),r,t){let n=qp(e.perWorkerMemBytes,ys),o=qp(e.memReserveBytes,Rs),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):vs)),i=Ss({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??zp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Qp(e,r={}){let t=r.perWorkerMemBytes??ys,n=r.memReserveBytes??Rs,o=r.memUtilization??vs,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,bs)}function e_(){return Kd()}function r_(e){let r=0;for(let t of lr(e)){let n=I(Xp.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!qr(n)||r++}return r}function Fa(){let e=0;for(let r of Qe())e+=r_(r);return e}function Gt(){let e=[];for(let r of Qe())for(let t of lr(r)){let n=I(Xp.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&qr(n)&&e.push({runId:r.id,workerName:t})}return e}function Yn(e){let r=e.config??U(),t=e.totalMemBytes??zp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Zx(r,e.configuredMaxWorkersOverride,t),c=wr(r),u=e.freeMemBytes??e_(),d=e.activeWorkers??Fa(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Wn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Yr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var ys,Rs,vs,bs,Yt=P(()=>{"use strict";Hd();H();Le();ts();ws();Ln();B();Bn();ks();T();ys=500*1024*1024,Rs=4*1024*1024*1024,vs=.85,bs=64});function Jn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ss(e){let r=e.config??{},t=e.env??process.env,n=Jn(r.perWorkerMemBytes,ys),o=Jn(r.memReserveBytes,Rs),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):vs)),i=Qp(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,bs),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,bs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var ws=P(()=>{"use strict";Yt()});import{homedir as t_}from"node:os";import n_ from"node:path";var Zp,Ka=P(()=>{"use strict";Zp=n_.join(t_(),".kynver",".env")});var em=P(()=>{"use strict"});var rm=P(()=>{"use strict";em()});var tm=P(()=>{"use strict"});var Ha=P(()=>{"use strict";rm();tm();An()});import{existsSync as o_,readFileSync as s_}from"node:fs";function $a(){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(o_("/proc/version")){let e=s_("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var ja=P(()=>{"use strict"});var nm=P(()=>{"use strict";ja()});var xs=P(()=>{"use strict";Ka();Gr();H();Ha();nm()});import a_ from"node:os";function Va(e,r){let t=(r??a_.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function im(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function am(e,r){let t=e.trim();if(!t)return Va(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=im(t.slice(n+1));return s?`${o}:${s}`:Va(o)}return`${r}:${im(t)}`}function _s(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?am(r,e.boxKind):Va(e.boxKind,e.hostLabel)}var Es=P(()=>{"use strict";Le();Le()});var lm=P(()=>{"use strict";Ka();Ha();xs()});function Ps(){return Cs}function um(e){if(!Cs)return e;if(!cm)throw new Ga;return cm}function Ze(e,r=process.env){if(Cs)return;let t=r[e]?.trim();return t||void 0}function Ja(){if(Cs)throw new Ya}var Ga,Ya,Cs,cm,qn=P(()=>{"use strict";Ga=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ya=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Cs=!1,cm=null});import{existsSync as Er,mkdirSync as l_,readdirSync as As,renameSync as dm,statSync as c_}from"node:fs";import Cr from"node:path";function mm(e){try{return c_(e).isDirectory()}catch{return!1}}function u_(e){if(!Er(e))return!0;for(let r of pm){let t=Cr.join(e,r);if(Er(t)&&(!mm(t)||As(t).length>0))return!1}return!0}function d_(e){let r=Cr.join(e,"runs");if(!Er(r)||!mm(r))return!1;for(let t of As(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Cr.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function p_(e){let r=Cr.join(e,"runs");if(!Er(r))return!1;for(let t of As(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(Cr.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function m_(e){let r=Cr.join(e,"ghost");return Er(r)?!Er(Cr.join(r,"runs")):p_(e)}function fm(e){return d_(e.sharedRoot)?u_(e.forgeRoot)?m_(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 gm(e,r){l_(r,{recursive:!0});for(let t of pm){let n=Cr.join(e,t),o=Cr.join(r,t);if(Er(n)){if(Er(o)&&As(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Er(o)){dm(n,o);continue}dm(n,o)}}}var pm,hm=P(()=>{"use strict";T();pm=["runs","worktrees"]});import{existsSync as Re}from"node:fs";import{homedir as f_}from"node:os";import fe from"node:path";function qa(e=process.env){return e.HOME?.trim()||f_()}function za(e=process.env){return fe.join(qa(e),".kynver","harness")}function Is(e){let r=fe.resolve(We(e.trim()));for(;g_.has(fe.basename(r));)r=fe.dirname(r);return r}function h_(e,r=process.env){return fe.join(za(r),e)}function k_(e=process.env){let r=za(e);if(Re(fe.join(r,"runs")))return!0;if(Re(r)&&!Re(fe.join(r,"ghost"))&&!Re(fe.join(r,"forge")))return Re(r);let t=fe.join(qa(e),km);return Re(t)}function Os(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Is(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Is(n),source:"config"};let o=h_(e.boxKind,r);if(Re(fe.join(o,"runs"))||Re(o)&&!y_(o))return{harnessRoot:o,source:"box_scoped"};let i=za(r);if(e.boxKind==="forge"){let a=fm({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&&gm(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&k_(r)){if(Re(fe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Re(i)&&!Re(fe.join(i,"ghost"))&&!Re(fe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=fe.join(qa(r),km);if(Re(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function y_(e){if(!Re(e))return!0;for(let r of["runs","worktrees"]){let t=fe.join(e,r);if(Re(t))return!1}return!0}var km,g_,Xa=P(()=>{"use strict";Gr();hm();km=fe.join(".openclaw","harness");g_=new Set(["runs","worktrees"])});import ym from"node:os";function Ts(e){return e?.trim()?e.trim():null}function R_(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function v_(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 Jt(e=U(),r=process.env,t={}){let n=Sr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Ts(r.KYNVER_BOX_KIND)),a=t.strict===!0||v_(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=Ts(e.runnerId),c=Ts(r.KYNVER_RUNTIME_ID)??Ts(r.OPENCLAW_RUNTIME_ID),u=l??c??R_(n.boxKind,ym.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=Ss({config:e,env:r,totalMemBytes:ym.totalmem()}),m=Wn(n.boxKind,p.configuredMaxWorkers??Sa(n.boxKind,p.autoCap)),f=Os({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var zn=P(()=>{"use strict";H();Le();ts();ws();Xa()});var vm=P(()=>{"use strict";On();Le();Es();H();xs();lm();Mn();qn();zn()});function cr(e){let r=e.trim().toLowerCase();return w_[r]??r}var bm,S_,w_,Ns=P(()=>{"use strict";bm=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],S_=bm.join("|"),w_={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 Sm=P(()=>{"use strict";Gr()});var wm=P(()=>{"use strict";Sm()});import{execFileSync as x_}from"node:child_process";function el(e=process.env){let r=e[E_]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function C_(e,r,t){if(!xm.test(e)||!xm.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
|
|
77
|
-
`,timeoutMs:Pr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",
|
|
78
|
-
`,timeoutMs:Pr})}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:Pr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",this.service,"account",r],{timeoutMs:Pr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",
|
|
79
|
-
`,{mode:384})}function
|
|
75
|
+
`});import Cx from"node:path";function Da(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&Ax.has(r)}function ps(e){return!!(e&&Px.test(e))}function wp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Da(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||ps(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":bp.test(r)||bp.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 xp(e){let r=[Ix(e.stopClass)],t=vp(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 Ix(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 _p(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,Sp/2):Sp/2;return Math.min(Ox,n*2**e)}function Ep(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(Cx.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(ds(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&ps(Wt(i.stderrPath,20))&&(n+=1)}}return n}function Cp(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 Px,bp,Ax,Sp,Ox,Ma=P(()=>{"use strict";B();T();_r();Px=/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,bp=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,Ax=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);Sp=2048,Ox=8192});function Pp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function jn(e){let r=(e??"").trim();if(!r)return null;if(Kn(r))return{blocked:!0,reason:`provider authentication failed: ${Pp(r)}`};for(let t of Tx)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Pp(r)}`};return null}var Tx,Wa=P(()=>{"use strict";us();Hn();Tx=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:pp,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 Ap(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Nx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Dx(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Ap(e.head)}function Mx(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Ht(e){if(e.alive||Nx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Ap(e.headCommit)??Dx(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:Mx(s,r,t)}}var ms=P(()=>{"use strict"});import{existsSync as Wx,readFileSync as Lx,statSync as Tp}from"node:fs";import fs from"node:path";function Kx(e,r=process.env){let t=e?Ux:Bx,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 Hx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function La(e){try{return Tp(e).mtimeMs}catch{return-1}}function $x(e){let r=fs.join(e,".git");try{if(Tp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(Lx(r,"utf8"));return t?fs.resolve(e,t[1].trim()):null}catch{return null}}function Ip(e){let r=$x(e);return[La(e),r?La(fs.join(r,"HEAD")):-2,r?La(fs.join(r,"index")):-2].join(":")}function Op(e,r){return{changedFiles:In(e),gitAncestry:es(e,{base:r.base,baseCommit:r.baseCommit})}}function jx(e,r){for(Jr.delete(e),Jr.set(e,r);Jr.size>Fx;){let t=Jr.keys().next().value;if(t===void 0)break;Jr.delete(t)}}function Np(e,r,t){let n=Hx(r);if(!e||!e.trim())return Vn.missingWorktree++,{changedFiles:[],gitAncestry:Bt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!Wx(e))return Jr.delete(o),Vn.missingWorktree++,{changedFiles:[],gitAncestry:Bt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Jr.delete(o),Vn.liveProbes++,Op(e,r);let s=t.ttlMs??Kx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=Ip(e),l=Jr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Vn.hits++,l.probe;Vn.misses++;let c=Op(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();jx(o,{fingerprint:Ip(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var Bx,Ux,Fx,Jr,Vn,Dp=P(()=>{"use strict";ue();Bx=10*6e4,Ux=60*6e4,Fx=2048,Jr=new Map,Vn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Gn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Vx(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 Gx(e){if(Gn(e.headCommit)||Gn(e.prUrl)||Gn(e.artifactBundlePath)||Gn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Gn(r.head))}function $t(e){return Vx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Gx(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 Mp(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var gs=P(()=>{"use strict"});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 Wp(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function jt(e){let r=e.trim();if(!r)return null;let t=Ba(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ba(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ba(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Wp(l);for(let u of n){let d=Wp(u);d>c&&(l=u,c=d)}return l}var hs=P(()=>{"use strict"});function Lp(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 Bp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Yx(e){return new Set(e.map(r=>Bp(Lp(r)??r)).filter(Boolean))}function Up(e,r,t){let n=Lp(e)??e;if(!n)return"unrelated";let o=Bp(n);return Yx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Fp=P(()=>{"use strict"});function Vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Jx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function gt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Vt(e)}function ks(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Kp(e){let r=null;if(typeof e=="string"){let o=jt(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=gt(String(s.prUrl??s.pr_url??"")),a=Vt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Vt(s.mergeCommit??s.merge_commit),reason:Vt(s.reason)})}return n}function Hp(e,r){let t=[],n=gt(Vt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=gt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function $p(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(!Jx(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?gt(Vt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?gt(r.targetPrUrls[0]):null):null;if(s){let d=Hp(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=Kp(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=Kp(n),a=new Map(i.map(d=>[ks(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>ks(gt(d)??d)).filter(Boolean)),c=Hp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(ks(d)),m=Up(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=ks(gt(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 jp(e){if(e.blocked)return e.detail??e.reason}var Vp=P(()=>{"use strict";hs();Fp()});function zx(e){let r=Date.now();if(e.providerTerminalError||cs(e.finalResult)||e.finalResult&&e.error?.trim()||Kn(e.error)||Kn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:jn(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Gp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Qx(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=$t(o);if(s.blocked){let i=Mp(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=$p({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=jp(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(Xx(e))return{state:"done",reason:"empty abandoned worker record"};let o=jn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ht({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=ps(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>qx)return{state:"needs_attention",reason:`no first stream event ${fa(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ua?{state:"stale",reason:`no log/event/heartbeat activity for ${fa(n)}s`}:{state:"ok",reason:"recent activity"}}function Gp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Xx(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 Qx(e){let r=null;if(typeof e=="string"?r=jt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Yp(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??xr(t))}function Jp(e){let r=ft(e.stdoutPath),t=pe(e.heartbeatPath);return Yp(e,r.finalResult,t)}function z(e,r={}){let t=ft(e.stdoutPath),n=pe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Yp(e,t.finalResult,n),i=o?!1:Y(e.pid),a=zo(e.stdoutPath),l=zo(e.stderrPath),c=zo(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Np(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=fd([t.lastEventAt,n.lastHeartbeatAt,Xo(e.stdoutPath),Xo(e.stderrPath),Xo(e.heartbeatPath)]),m=i?null:ds(e.workerDir),f=s&&!Da(s)?s:null,y=t.error||!i&&!s&&Wt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Wt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Gp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=zx({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,_=wp({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)??xp({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 qp(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Fa(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var qx,Ua,me=P(()=>{"use strict";pt();$n();Ma();_r();us();Wa();ms();Dp();gs();Vp();hs();T();qx=18e4,Ua=6e5});import{readFileSync as Zx}from"node:fs";function e_(e){if(!e||process.platform!=="linux")return null;try{return Zx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function zp(e){if(!e.pid||process.platform!=="linux")return!0;let r=e_(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)||!zp(e)?!1:!Jp(e)}var ys=P(()=>{"use strict";me();T()});import Qp from"node:os";import Zp from"node:path";function Xp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function r_(e=U(),r,t){let n=Xp(e.perWorkerMemBytes,Rs),o=Xp(e.memReserveBytes,vs),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):bs)),i=ws({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Qp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function em(e,r={}){let t=r.perWorkerMemBytes??Rs,n=r.memReserveBytes??vs,o=r.memUtilization??bs,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Ss)}function t_(){return $d()}function n_(e){let r=0;for(let t of lr(e)){let n=I(Zp.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!qr(n)||r++}return r}function Ka(){let e=0;for(let r of Qe())e+=n_(r);return e}function Gt(){let e=[];for(let r of Qe())for(let t of lr(r)){let n=I(Zp.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&qr(n)&&e.push({runId:r.id,workerName:t})}return e}function Yn(e){let r=e.config??U(),t=e.totalMemBytes??Qp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=r_(r,e.configuredMaxWorkersOverride,t),c=wr(r),u=e.freeMemBytes??t_(),d=e.activeWorkers??Ka(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Wn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Yr({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 Rs,vs,bs,Ss,Yt=P(()=>{"use strict";jd();H();Le();ns();xs();Ln();B();Bn();ys();T();Rs=500*1024*1024,vs=4*1024*1024*1024,bs=.85,Ss=64});function Jn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ws(e){let r=e.config??{},t=e.env??process.env,n=Jn(r.perWorkerMemBytes,Rs),o=Jn(r.memReserveBytes,vs),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):bs)),i=em(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,Ss),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,Ss),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var xs=P(()=>{"use strict";Yt()});import{homedir as o_}from"node:os";import s_ from"node:path";var rm,Ha=P(()=>{"use strict";rm=s_.join(o_(),".kynver",".env")});var tm=P(()=>{"use strict"});var nm=P(()=>{"use strict";tm()});var om=P(()=>{"use strict"});var $a=P(()=>{"use strict";nm();om();An()});import{existsSync as i_,readFileSync as a_}from"node:fs";function ja(){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(i_("/proc/version")){let e=a_("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Va=P(()=>{"use strict"});var sm=P(()=>{"use strict";Va()});var _s=P(()=>{"use strict";Ha();Gr();H();$a();sm()});import c_ from"node:os";function Ga(e,r){let t=(r??c_.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function lm(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function cm(e,r){let t=e.trim();if(!t)return Ga(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=lm(t.slice(n+1));return s?`${o}:${s}`:Ga(o)}return`${r}:${lm(t)}`}function Es(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?cm(r,e.boxKind):Ga(e.boxKind,e.hostLabel)}var Cs=P(()=>{"use strict";Le();Le()});var um=P(()=>{"use strict";Ha();$a();_s()});function As(){return Ps}function pm(e){if(!Ps)return e;if(!dm)throw new Ya;return dm}function Ze(e,r=process.env){if(Ps)return;let t=r[e]?.trim();return t||void 0}function qa(){if(Ps)throw new Ja}var Ya,Ja,Ps,dm,qn=P(()=>{"use strict";Ya=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ja=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Ps=!1,dm=null});import{existsSync as Er,mkdirSync as u_,readdirSync as Is,renameSync as mm,statSync as d_}from"node:fs";import Cr from"node:path";function gm(e){try{return d_(e).isDirectory()}catch{return!1}}function p_(e){if(!Er(e))return!0;for(let r of fm){let t=Cr.join(e,r);if(Er(t)&&(!gm(t)||Is(t).length>0))return!1}return!0}function m_(e){let r=Cr.join(e,"runs");if(!Er(r)||!gm(r))return!1;for(let t of Is(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Cr.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function f_(e){let r=Cr.join(e,"runs");if(!Er(r))return!1;for(let t of Is(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(Cr.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function g_(e){let r=Cr.join(e,"ghost");return Er(r)?!Er(Cr.join(r,"runs")):f_(e)}function hm(e){return m_(e.sharedRoot)?p_(e.forgeRoot)?g_(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 km(e,r){u_(r,{recursive:!0});for(let t of fm){let n=Cr.join(e,t),o=Cr.join(r,t);if(Er(n)){if(Er(o)&&Is(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Er(o)){mm(n,o);continue}mm(n,o)}}}var fm,ym=P(()=>{"use strict";T();fm=["runs","worktrees"]});import{existsSync as Re}from"node:fs";import{homedir as h_}from"node:os";import fe from"node:path";function za(e=process.env){return e.HOME?.trim()||h_()}function Xa(e=process.env){return fe.join(za(e),".kynver","harness")}function Os(e){let r=fe.resolve(We(e.trim()));for(;k_.has(fe.basename(r));)r=fe.dirname(r);return r}function y_(e,r=process.env){return fe.join(Xa(r),e)}function R_(e=process.env){let r=Xa(e);if(Re(fe.join(r,"runs")))return!0;if(Re(r)&&!Re(fe.join(r,"ghost"))&&!Re(fe.join(r,"forge")))return Re(r);let t=fe.join(za(e),Rm);return Re(t)}function Ts(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Os(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Os(n),source:"config"};let o=y_(e.boxKind,r);if(Re(fe.join(o,"runs"))||Re(o)&&!v_(o))return{harnessRoot:o,source:"box_scoped"};let i=Xa(r);if(e.boxKind==="forge"){let a=hm({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&&km(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&R_(r)){if(Re(fe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Re(i)&&!Re(fe.join(i,"ghost"))&&!Re(fe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=fe.join(za(r),Rm);if(Re(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function v_(e){if(!Re(e))return!0;for(let r of["runs","worktrees"]){let t=fe.join(e,r);if(Re(t))return!1}return!0}var Rm,k_,Qa=P(()=>{"use strict";Gr();ym();Rm=fe.join(".openclaw","harness");k_=new Set(["runs","worktrees"])});import vm from"node:os";function Ns(e){return e?.trim()?e.trim():null}function b_(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function S_(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 Jt(e=U(),r=process.env,t={}){let n=Sr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Ns(r.KYNVER_BOX_KIND)),a=t.strict===!0||S_(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=Ns(e.runnerId),c=Ns(r.KYNVER_RUNTIME_ID)??Ns(r.OPENCLAW_RUNTIME_ID),u=l??c??b_(n.boxKind,vm.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=ws({config:e,env:r,totalMemBytes:vm.totalmem()}),m=Wn(n.boxKind,p.configuredMaxWorkers??wa(n.boxKind,p.autoCap)),f=Ts({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var zn=P(()=>{"use strict";H();Le();ns();xs();Qa()});var Sm=P(()=>{"use strict";On();Le();Cs();H();_s();um();Mn();qn();zn()});function cr(e){let r=e.trim().toLowerCase();return __[r]??r}var wm,x_,__,Ds=P(()=>{"use strict";wm=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],x_=wm.join("|"),__={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 xm=P(()=>{"use strict";Gr()});var _m=P(()=>{"use strict";xm()});import{execFileSync as E_}from"node:child_process";function rl(e=process.env){let r=e[P_]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function A_(e,r,t){if(!Em.test(e)||!Em.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 I_(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return E_(e,r,n)}function O_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Za(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 Cm(e={}){if(rl(e.env??process.env)==="file")return null;let t=O_(e.platform??process.platform);return t?new el(t,e.exec,e.service):null}var C_,P_,Pr,Em,el,Pm=P(()=>{"use strict";C_="kynver",P_="KYNVER_CREDENTIAL_STORE";Pr=5e3,Em=/^[A-Za-z0-9_.@:-]{1,128}$/;el=class{constructor(r,t=I_,n=C_){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:Pr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",this.service,"account",r],{timeoutMs:Pr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Za("get",r,this.service)],{timeoutMs:Pr}).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=A_(this.service,r,t);if(!n)return!1;this.exec("security",["-i"],{input:n,timeoutMs:Pr})}else this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",this.service,"account",r],{input:`${t}
|
|
77
|
+
`,timeoutMs:Pr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Za("set",r,this.service)],{input:`${t}
|
|
78
|
+
`,timeoutMs:Pr})}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:Pr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",this.service,"account",r],{timeoutMs:Pr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Za("delete",r,this.service)],{timeoutMs:Pr})}catch{}}}});function Xn(){return tl||(tl=new nl),tl}var ol,T_,Ms,nl,tl,sl=P(()=>{"use strict";Pm();ol="api-key",T_=6e4,Ms=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"}},nl=class{cache=new Map;keychain;env;now;constructor(r={}){this.env=r.env??process.env,this.keychain=r.keychain===void 0?Cm({env:this.env}):r.keychain,this.now=r.now??Date.now}get available(){return this.keychain!==null}get backend(){return this.keychain?.backend??null}read(r){if(!this.keychain)return null;let t=this.cache.get(r);if(t&&this.now()-t.at<T_)return t.value;let n=this.keychain.get(r);return this.cache.set(r,{value:n,at:this.now()}),n}write(r,t){let n=rl(this.env);if(!this.keychain){if(n==="keychain")throw new Ms(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 Ms(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},tl=null});import{existsSync as Im,mkdirSync as D_,readFileSync as Om,writeFileSync as M_}from"node:fs";import{homedir as W_,totalmem as wK}from"node:os";import ll from"node:path";function L_(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:We(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:We(e.defaultRepo.trim())}:{}}}function Tm(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!Id(We(r))?e:{...e,defaultBase:Ad}}function B_(){if(!Im(Am))return null;try{return JSON.parse(Om(Am,"utf8"))}catch{return null}}function U(){let e=B_();return e?Tm(L_(e)):{}}function Ws(){if(qa(),!Im(il))return{};try{return JSON.parse(Om(il,"utf8"))}catch{return{}}}function al(e){qa(),D_(cl,{recursive:!0}),M_(il,`${JSON.stringify(e,null,2)}
|
|
79
|
+
`,{mode:384})}function U_(e,r,t,n={}){let o=Ws();if(Xn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),al(i);return}al({...o,...n,[r]:t})}function F_(e,r){let t=Xn().read(e);return t||Ws()[r]}function ul(){return pm(K_)}function Ar(){return ul().getApiKey()}function qt(e){return ul().getRunnerToken(e)}function dl(e,r){ul().persistRunnerToken(e,r)}function Z(e){let r=Qn(e);return r||Mm("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function pl(e){return Qn(e)}function Qn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||U().apiBaseUrl;return Nn(r)}function H_(e,r){let t=e||qt(r)||(r?void 0:qt(U().agentOsId));if(t)return String(t);let n=Ze("KYNVER_RUNTIME_SECRET")||Ze("KYNVER_CRON_SECRET")||Ze("OPENCLAW_CRON_SECRET");if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function $_(e,r,t){let n=H_(e,r);if(n)return{ok:!0,secret:n};let o=Ar(),s=Qn(t?.baseUrl);if(o&&r&&s)try{let i=await ml(r,{baseUrl:s,apiKey:o});return dl(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 te(e,r,t){let n=await $_(e,r,t);if(n.ok)return n.secret;Mm(n.reason)}async function Nm(e,r){let t=Ar(),n=Qn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await ml(e,{baseUrl:n,apiKey:t});return dl(e,o),o}catch{return null}}async function Dm(e,r,t){let n=Ar(),o=Qn(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await ml(r,{baseUrl:o,apiKey:n});return s&&s!==e?(dl(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 ml(e,r){let t=r?.apiKey||Ar();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${Z(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await Dn(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(r?.enableMcpUpdates?{enableMcpUpdates:!0}:{})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}function Mm(e){console.error(e),process.exit(1)}var cl,Am,il,KK,HK,K_,H=P(()=>{"use strict";On();Gr();va();Ld();Mn();Le();ns();xs();Ln();_s();Sm();Ds();zn();_m();qn();sl();cl=ll.join(W_(),".kynver"),Am=ll.join(cl,"config.json"),il=ll.join(cl,"credentials");KK=500*1024*1024,HK=4*1024*1024*1024;K_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:F_(ol,"apiKey")},getRunnerToken(e){let r=Ws();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){U_(ol,"apiKey",e)},persistRunnerToken(e,r){al({...Ws(),runnerToken:r,runnerTokenAgentOsId:e})}}});import fl from"node:path";function ge(e){return Os(e)}function Ue(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ge(e);let r=U(),t=r.harnessRoot?.trim();if(t)return ge(t);let n=Jt(r,process.env);return n.identity?n.identity.harnessRoot:Ts({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return fl.join(ge(e),"runs")}function zt(e){return fl.join(ge(e),"worktrees")}function Ls(){let e=Ue();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:zt(e)}}function Ir(e,r){return fl.join(e,x(r))}var Fe=P(()=>{"use strict";H();Qa();zn();T()});import{existsSync as Bs,readdirSync as j_,statSync as V_}from"node:fs";import ht from"node:path";function ae(){return Ls()}function q(e){let{runsDir:r}=ae(),t=ht.join(Ir(r,x(e)),"run.json");return Bs(t)||ze(`run '${e}' not found`),I(t)}function Qe(){let{runsDir:e}=ae();return Wm(e)}function Us(e){return Wm(Ae(e))}function G_(e){try{return V_(e).isDirectory()}catch{return!1}}function Wm(e){if(!Bs(e))return[];let r=[];for(let t of j_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ht.join(e,t.name);if(!G_(n))continue;let o=I(ht.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Xt(e,r){let{runsDir:t}=ae(),n=ht.join(Ir(t,x(e)),"run.json"),o=ht.join(Ir(t,x(e)),"workers",x(r),"worker.json");return Bs(o)||(Bs(n)||ze(`run '${e}' not found`),ze(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=ae();ce(ht.join(Ir(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=ae();ce(ht.join(Ir(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=ae();return Zn(r,e)}function Zn(e,r){return Ir(Ae(e),x(r))}var B=P(()=>{"use strict";Fe();T()});import{parentPort as Xb,workerData as QL}from"node:worker_threads";var _n=null,sd=-1,id=0;function ad(e){_n=e}function ld(e=Date.now()){return!_n||_n.stallCount===sd&&e-id<9e5?null:(sd=_n.stallCount,id=e,_n)}var tS="embedded-1",nS=[{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"}],oS={"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(`
|
|
80
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(`
|
|
81
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(`
|
|
82
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(`
|
|
83
|
-
`)},nS={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:eS,generatedAt:"1970-01-01T00:00:00.000Z",personas:rS,instructions:tS,policyThresholds:nS};var En=Mt,oS="embedded";function ad(){return En.version}function ld(e,r){En=e,oS=r}function Cn(e){let r=En.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function da(e,r){let t=En.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function cd(e){if(!e)return null;let r=e.trim().toLowerCase();return En.personas.find(t=>t.slug===r)??null}An();import jb from"node:path";B();ks();T();import V_ from"node:path";function G_(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 Us(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(V_.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,...G_(o)})}return t}H();function eo(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}Mn();H();function Wm(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 Mm(e){return new Error(`callback timeout after ${e}ms`)}async function Lm(e,r){let t=Wm(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(Mm(t))},t)})])}catch(i){throw s?Mm(t):i}finally{o&&clearTimeout(o)}}function Bm(e,r){let t=Wm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function kt(e,r,t,n){try{return await Lm(async o=>{let s=await Dn(e,{method:"POST",headers:eo(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Bm(o,n?.timeoutMs)}}async function J(e,r,t,n){let o=await kt(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Tm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await kt(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function fl(e,r,t){try{return await Lm(async n=>{let o=await Dn(e,{method:"GET",headers:eo(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Bm(n,t?.timeoutMs)}}H();qn();import{spawnSync as sE}from"node:child_process";import{randomBytes as iE}from"node:crypto";import{createPublicKey as Q_,verify as Z_}from"node:crypto";import{createHash as Y_,createPublicKey as pH,verify as mH}from"node:crypto";function hl(e){return JSON.stringify(gl(e))}function gl(e){if(Array.isArray(e))return e.map(gl);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=gl(e[t]);return r}return e}function kl(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 Um(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=kl(t);n&&r.push(n)}return r}function Fm(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 gH=Buffer.from("302a300506032b6570032100","hex"),Km="ca-6297fb8e1773",J_={[Km]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function q_(e){return`ca-${Y_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Hm(e,r=process.env){let t=Um(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>q_(o)===e)??null;let n=J_[e];return!n||e===Km&&!Fm(r)?null:kl(n)}var z_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,X_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Fs(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(z_)].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(X_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var eE=120,$m=["write","read_only","land_pr","verify_live"],rE=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var tE=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function jm(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 tE.test(i)&&i.length<=512?i:null}function Vm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Fs(r)==="read_only"?"read_only":"write"}function nE(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(",")!==[...rE].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)||!$m.includes(t.operationClass))}var oE=Buffer.from("302a300506032b6570032100","hex");function Gm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!nE(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+eE+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Hm(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=Q_({key:Buffer.concat([oE,Buffer.from(s)]),format:"der",type:"spki"});return Z_(null,Buffer.from(hl(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}`}}}T();var yl=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 aE(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=Vm(e.decision),a=Gm(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 lE=null,cE=null,uE=new yl,dE=new Set;function Ym(){return Ps()}function Jm(e){return{v:1,repoIdentity:e,requestNonce:iE(16).toString("base64url")}}function qm(e){let r=sE("git",["-C",e,"remote","get-url","origin"],ie({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:jm(r.stdout.trim())}function zm(e){let r=aE({...e,policy:lE,identity:cE,consumed:uE});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 dE)try{o(n)}catch{}}return r}function Xm(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function ro(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Qm(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 Rl(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 pE=["implementation","review","landing"],mE=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function fE(e){return pE.includes(e)}function gE(e){return mE.includes(e)}function Zm(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||fE(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:gE(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var ef=Mt.personas.map(Zm),hE=new Map(ef.map(e=>[e.slug,e]));function kE(e){if(!e)return null;let r=e.trim().toLowerCase(),t=hE.get(r)??null,n=cd(r);if(!n)return t;let o=Zm(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function vl(e){return kE(e)?.defaultRoleLane??null}function rf(){return ef.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function tf(e){return(e??"").trim().toLowerCase()}function yE(e){switch(tf(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=tf(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=yE(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function nf(e){return RE(e)??"any"}Ln();H();Le();function vE(e=process.env){let r=U();return wr(r,e)!=="forge"}function Ks(e,r=process.env){if(vE(r))return e?.maxConcurrentWorkers??void 0}async function Hs(e,r){let t=Z(r.baseUrl?String(r.baseUrl):void 0),n=await te(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await fl(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}Yt();var bE={fetchPreferences:Hs,configuredOverride:Ks,observe:Yn};async function of(e,r=bE){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Yt();B();B();function $s(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function bl(e){return e.toLowerCase()}function SE(e){let r=$s(e,"roleLane");if(r)return r;let t=bl($s(e,"executorRef")),n=bl($s(e,"title")),o=bl($s(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=vl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function sf(e){let r=SE(e);return r?{...e,roleLane:r}:e}H();var wE=/^claude[-_]/i,xE=/^(?:opus|sonnet|haiku)\b/i;function af(e){let r=e.trim();return wE.test(r)||xE.test(r)}function lf(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Sl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function cf(e){return e.trim().toLowerCase().startsWith("gemini-")}function _E(e){return lf(e)?"codex":af(e)?"claude":cf(e)?"gemini":(Sl(e),"cursor")}function EE(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?af(n)||lf(n)||Sl(n)||cf(n)?{lane:t,model:n,provider:_E(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?EE(r)??CE(r):null}function uf(e){let r=Oe(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Sl(r.model)):!1}Ns();Ns();var Tr="cursor",PE=new Set(["claude","opus","anthropic"]),AE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function to(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Or(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return PE.has(r)?!0:r.includes("claude")||r.includes("opus")}function js(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Or(r))return!0;let t=to(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Oe(to(e,"executorRef"));if(n?.provider&&Or(n.provider)||n?.model&&Or(IE(n.model)))return!0;let o=to(e,"description");if(AE.some(i=>i.test(o)))return!0;let s=to(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function IE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function OE(e,r){return{provider:Tr,model:Vs,rule:`policy:cursor_default${r}`,requestedModel:e}}var TE=["explicit:","executor_ref:","factory:","task:"];function NE(e){return TE.some(r=>e.startsWith(r))}function wl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Oe(to(e,"executorRef"))?.provider?!0:js(e)}function df(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Or(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||NE(r.rule)||wl(t)||!Or(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return OE(r.model,o)}function pf(e,r=Tr){let t=e?.trim();return t?cr(t):r}var mf={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function Qt(e){return mf[e]}function ff(){return Object.values(mf)}import{existsSync as ME}from"node:fs";import{homedir as WE}from"node:os";import no from"node:path";br();import{createHash as gf}from"node:crypto";import{statSync as DE}from"node:fs";import{spawnSync as hf}from"node:child_process";function ur(e){try{let r=DE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return gf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Zt(e){return gf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ke(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]=de(e,r),i=hf(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 Gs(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=de(e,r);return hf(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var LE="codex";function BE(){let e=WE();return[process.env.CODEX_HOME?.trim()?no.join(no.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,no.join(e,".codex","auth.json"),no.join(e,".config","codex","auth.json")].filter(t=>!!t)}function UE(e){return no.dirname(e)}function FE(e){let r,t;for(let n of BE()){if(!ME(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:UE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function kf(e=new Date().toISOString()){let r=Ke(LE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Zt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=FE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?ur(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 KE}from"node:fs";import{homedir as HE}from"node:os";import xl from"node:path";function $E(){let e=process.env.HERMES_HOME?.trim(),r=e?xl.resolve(e):xl.join(HE(),".hermes");return xl.join(r,"auth.json")}function Ys(e=new Date().toISOString()){let r=Ke("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=$E(),o=KE(n),s=Gs(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?ur(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function en(e=new Date().toISOString()){let r=kf(e);if(r.ready)return{...r,path:"codex_cli"};let t=Ys(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 yf=["low","medium","high"],Rf={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function vf(e,r){let t=Qt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function jE(e,r){let t=Qt(e.providerId),n=Qt(r.providerId),o=yf.indexOf(t.costTier)-yf.indexOf(n.costTier);if(o!==0)return o;let s=Rf[e.binding.authSource]-Rf[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function _l(e){let r=ff().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&vf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(jE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return vf(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 VE}from"node:fs";import{homedir as GE}from"node:os";import YE from"node:path";var JE="claude";function qE(){let e=GE();return[YE.join(e,".claude",".credentials.json")]}function bf(e=new Date().toISOString()){let r=Ke(JE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Zt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=qE().find(i=>VE(i)),o=Gs(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?ur(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 _C}from"node:fs";import{homedir as xC}from"node:os";import on from"node:path";_r();T();import{closeSync as Al,existsSync as _f,mkdirSync as uC,openSync as Il,statSync as dC,unlinkSync as xf}from"node:fs";import{spawn as pC}from"node:child_process";import mC from"node:os";import pr from"node:path";ka();var zE="KYNVER_NO_PROD_DB_CREDENTIALS",XE=["KYNVER_ENV_FILE"];function He(e,r={}){let t=ha(e);if(!r.reviewWorker)return t;let n={...t,[zE]:"1"};for(let o of XE)delete n[o];return n}var QE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Sf(e){return e.replace(QE,"")}var wf=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Js(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function ZE(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var eC=new Set(["cursor"]);function rC(e){let r=e.trim().toLowerCase();return eC.has(r)?"auto":null}function El(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Sf(t).trim()||r;return wf.test(o)||!Js(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function rn(e,r){let t=(e??"").trim();return t?Js(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function tn(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function nn(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Sf(t).trim()||r;return Js(o)||!ZE(o)&&wf.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 Cl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=rC(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")`}:Js(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}import{existsSync as oo,readdirSync as tC}from"node:fs";import yt from"node:path";var nC=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function oC(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 sC(e){let r=yt.join(e,"versions");if(!oo(r))return null;let t=null,n=-1;for(let o of tC(r,{withFileTypes:!0})){if(!o.isDirectory()||!nC.test(o.name))continue;let s=oC(o.name);s==null||s<=n||(n=s,t=yt.join(r,o.name))}return t}function qs(e){let r=e?.trim()||yt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=yt.join(r,"node.exe"),n=yt.join(r,"index.js");if(oo(t)&&oo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=sC(r);if(!o)return null;let s=yt.join(o,"node.exe"),i=yt.join(o,"index.js");return!oo(s)||!oo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}import{writeFileSync as iC}from"node:fs";import aC from"node:path";var lC="worker-prompt.md";function cC(e=process.platform,r={}){return r.shell?6e3:e==="win32"?24e3:12e4}function dr(e,r,t={}){if(e.length<=cC(t.platform,{shell:t.shell}))return{prompt:e,spilledTo:null};let n=aC.join(r,lC);return iC(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
|
|
83
|
+
`)},sS={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:tS,generatedAt:"1970-01-01T00:00:00.000Z",personas:nS,instructions:oS,policyThresholds:sS};var En=Mt,iS="embedded";function cd(){return En.version}function ud(e,r){En=e,iS=r}function Cn(e){let r=En.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function pa(e,r){let t=En.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function dd(e){if(!e)return null;let r=e.trim().toLowerCase();return En.personas.find(t=>t.slug===r)??null}An();import Gb from"node:path";B();ys();T();import Y_ from"node:path";function J_(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 Fs(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(Y_.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,...J_(o)})}return t}H();function eo(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}Mn();H();function Bm(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 Lm(e){return new Error(`callback timeout after ${e}ms`)}async function Um(e,r){let t=Bm(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(Lm(t))},t)})])}catch(i){throw s?Lm(t):i}finally{o&&clearTimeout(o)}}function Fm(e,r){let t=Bm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function kt(e,r,t,n){try{return await Um(async o=>{let s=await Dn(e,{method:"POST",headers:eo(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Fm(o,n?.timeoutMs)}}async function J(e,r,t,n){let o=await kt(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Dm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await kt(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function gl(e,r,t){try{return await Um(async n=>{let o=await Dn(e,{method:"GET",headers:eo(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Fm(n,t?.timeoutMs)}}H();qn();import{spawnSync as aE}from"node:child_process";import{randomBytes as lE}from"node:crypto";import{createPublicKey as eE,verify as rE}from"node:crypto";import{createHash as q_,createPublicKey as mH,verify as fH}from"node:crypto";function kl(e){return JSON.stringify(hl(e))}function hl(e){if(Array.isArray(e))return e.map(hl);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=hl(e[t]);return r}return e}function yl(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 Km(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=yl(t);n&&r.push(n)}return r}function Hm(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 hH=Buffer.from("302a300506032b6570032100","hex"),$m="ca-6297fb8e1773",z_={[$m]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function X_(e){return`ca-${q_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function jm(e,r=process.env){let t=Km(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>X_(o)===e)??null;let n=z_[e];return!n||e===$m&&!Hm(r)?null:yl(n)}var Q_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,Z_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Ks(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(Q_)].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(Z_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var tE=120,Vm=["write","read_only","land_pr","verify_live"],nE=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var oE=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Gm(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 oE.test(i)&&i.length<=512?i:null}function Ym(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Ks(r)==="read_only"?"read_only":"write"}function sE(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(",")!==[...nE].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)||!Vm.includes(t.operationClass))}var iE=Buffer.from("302a300506032b6570032100","hex");function Jm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!sE(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+tE+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=jm(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=eE({key:Buffer.concat([iE,Buffer.from(s)]),format:"der",type:"spki"});return rE(null,Buffer.from(kl(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}`}}}T();var Rl=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 cE(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=Ym(e.decision),a=Jm(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 uE=null,dE=null,pE=new Rl,mE=new Set;function qm(){return As()}function zm(e){return{v:1,repoIdentity:e,requestNonce:lE(16).toString("base64url")}}function Xm(e){let r=aE("git",["-C",e,"remote","get-url","origin"],ie({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Gm(r.stdout.trim())}function Qm(e){let r=cE({...e,policy:uE,identity:dE,consumed:pE});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 mE)try{o(n)}catch{}}return r}function Zm(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function ro(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function ef(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 vl(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 fE=["implementation","review","landing"],gE=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function hE(e){return fE.includes(e)}function kE(e){return gE.includes(e)}function rf(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||hE(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:kE(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var tf=Mt.personas.map(rf),yE=new Map(tf.map(e=>[e.slug,e]));function RE(e){if(!e)return null;let r=e.trim().toLowerCase(),t=yE.get(r)??null,n=dd(r);if(!n)return t;let o=rf(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function bl(e){return RE(e)?.defaultRoleLane??null}function nf(){return tf.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function of(e){return(e??"").trim().toLowerCase()}function vE(e){switch(of(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 bE(e){let r=of(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=vE(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function sf(e){return bE(e)??"any"}Ln();H();Le();function SE(e=process.env){let r=U();return wr(r,e)!=="forge"}function Hs(e,r=process.env){if(SE(r))return e?.maxConcurrentWorkers??void 0}async function $s(e,r){let t=Z(r.baseUrl?String(r.baseUrl):void 0),n=await te(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await gl(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}Yt();var wE={fetchPreferences:$s,configuredOverride:Hs,observe:Yn};async function af(e,r=wE){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Yt();B();B();function js(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Sl(e){return e.toLowerCase()}function xE(e){let r=js(e,"roleLane");if(r)return r;let t=Sl(js(e,"executorRef")),n=Sl(js(e,"title")),o=Sl(js(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=bl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function lf(e){let r=xE(e);return r?{...e,roleLane:r}:e}H();var _E=/^claude[-_]/i,EE=/^(?:opus|sonnet|haiku)\b/i;function cf(e){let r=e.trim();return _E.test(r)||EE.test(r)}function uf(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function wl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function df(e){return e.trim().toLowerCase().startsWith("gemini-")}function CE(e){return uf(e)?"codex":cf(e)?"claude":df(e)?"gemini":(wl(e),"cursor")}function PE(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function AE(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?cf(n)||uf(n)||wl(n)||df(n)?{lane:t,model:n,provider:CE(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?PE(r)??AE(r):null}function pf(e){let r=Oe(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!wl(r.model)):!1}Ds();Ds();var Tr="cursor",IE=new Set(["claude","opus","anthropic"]),OE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function to(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Or(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return IE.has(r)?!0:r.includes("claude")||r.includes("opus")}function Vs(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Or(r))return!0;let t=to(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Oe(to(e,"executorRef"));if(n?.provider&&Or(n.provider)||n?.model&&Or(TE(n.model)))return!0;let o=to(e,"description");if(OE.some(i=>i.test(o)))return!0;let s=to(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:Tr,model:Gs,rule:`policy:cursor_default${r}`,requestedModel:e}}var DE=["explicit:","executor_ref:","factory:","task:"];function ME(e){return DE.some(r=>e.startsWith(r))}function xl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Oe(to(e,"executorRef"))?.provider?!0:Vs(e)}function mf(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Or(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||ME(r.rule)||xl(t)||!Or(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return NE(r.model,o)}function ff(e,r=Tr){let t=e?.trim();return t?cr(t):r}var gf={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function Qt(e){return gf[e]}function hf(){return Object.values(gf)}import{existsSync as LE}from"node:fs";import{homedir as BE}from"node:os";import no from"node:path";br();import{createHash as kf}from"node:crypto";import{statSync as WE}from"node:fs";import{spawnSync as yf}from"node:child_process";function ur(e){try{let r=WE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return kf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Zt(e){return kf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ke(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]=de(e,r),i=yf(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 Ys(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=de(e,r);return yf(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 UE="codex";function FE(){let e=BE();return[process.env.CODEX_HOME?.trim()?no.join(no.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,no.join(e,".codex","auth.json"),no.join(e,".config","codex","auth.json")].filter(t=>!!t)}function KE(e){return no.dirname(e)}function HE(e){let r,t;for(let n of FE()){if(!LE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:KE(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 Rf(e=new Date().toISOString()){let r=Ke(UE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Zt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=HE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?ur(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 $E}from"node:fs";import{homedir as jE}from"node:os";import _l from"node:path";function VE(){let e=process.env.HERMES_HOME?.trim(),r=e?_l.resolve(e):_l.join(jE(),".hermes");return _l.join(r,"auth.json")}function Js(e=new Date().toISOString()){let r=Ke("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=VE(),o=$E(n),s=Ys(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?ur(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function en(e=new Date().toISOString()){let r=Rf(e);if(r.ready)return{...r,path:"codex_cli"};let t=Js(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 vf=["low","medium","high"],bf={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Sf(e,r){let t=Qt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function GE(e,r){let t=Qt(e.providerId),n=Qt(r.providerId),o=vf.indexOf(t.costTier)-vf.indexOf(n.costTier);if(o!==0)return o;let s=bf[e.binding.authSource]-bf[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function El(e){let r=hf().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Sf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(GE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Sf(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 YE}from"node:fs";import{homedir as JE}from"node:os";import qE from"node:path";var zE="claude";function XE(){let e=JE();return[qE.join(e,".claude",".credentials.json")]}function wf(e=new Date().toISOString()){let r=Ke(zE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Zt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=XE().find(i=>YE(i)),o=Ys(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?ur(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 CC}from"node:fs";import{homedir as EC}from"node:os";import on from"node:path";_r();T();import{closeSync as Il,existsSync as Cf,mkdirSync as pC,openSync as Ol,statSync as mC,unlinkSync as Ef}from"node:fs";import{spawn as fC}from"node:child_process";import gC from"node:os";import pr from"node:path";ya();var QE="KYNVER_NO_PROD_DB_CREDENTIALS",ZE=["KYNVER_ENV_FILE"];function He(e,r={}){let t=ka(e);if(!r.reviewWorker)return t;let n={...t,[QE]:"1"};for(let o of ZE)delete n[o];return n}var eC=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function xf(e){return e.replace(eC,"")}var _f=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function qs(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function rC(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var tC=new Set(["cursor"]);function nC(e){let r=e.trim().toLowerCase();return tC.has(r)?"auto":null}function Cl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=xf(t).trim()||r;return _f.test(o)||!qs(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function rn(e,r){let t=(e??"").trim();return t?qs(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function tn(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function nn(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=xf(t).trim()||r;return qs(o)||!rC(o)&&_f.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 Pl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=nC(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")`}:qs(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}import{existsSync as oo,readdirSync as oC}from"node:fs";import yt from"node:path";var sC=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function iC(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 aC(e){let r=yt.join(e,"versions");if(!oo(r))return null;let t=null,n=-1;for(let o of oC(r,{withFileTypes:!0})){if(!o.isDirectory()||!sC.test(o.name))continue;let s=iC(o.name);s==null||s<=n||(n=s,t=yt.join(r,o.name))}return t}function zs(e){let r=e?.trim()||yt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=yt.join(r,"node.exe"),n=yt.join(r,"index.js");if(oo(t)&&oo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=aC(r);if(!o)return null;let s=yt.join(o,"node.exe"),i=yt.join(o,"index.js");return!oo(s)||!oo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}import{writeFileSync as lC}from"node:fs";import cC from"node:path";var uC="worker-prompt.md";function dC(e=process.platform,r={}){return r.shell?6e3:e==="win32"?24e3:12e4}function dr(e,r,t={}){if(e.length<=dC(t.platform,{shell:t.shell}))return{prompt:e,spilledTo:null};let n=cC.join(r,uC);return lC(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 Al="composer-2.5",hC=15e3,kC=6e4,yC=3e4;function RC(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:le(),bundledVersionDir:t}}function Nl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Cf(pr.join(pr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?zs(pr.dirname(e)):t?{nodeExe:e,indexJs:pr.join(pr.dirname(e),"index.js"),versionDir:pr.dirname(e)}:zs();if(o)return RC(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:le()}}function vC(e,r,t){return He({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:pr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function Pf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Tl(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 bC(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||pr.join(gC.homedir(),".kynver","locks");return pC(e,{recursive:!0}),pr.join(e,"cursor-agent-start.lock")}function SC(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=bC(),r=Tl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",kC),t=Tl("KYNVER_CURSOR_START_LOCK_STALE_MS",yC),n=Date.now();for(;;)try{let o=Ol(e,"wx");return Il(o),()=>{try{Ef(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-mC(e).mtimeMs>t){Ef(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Pf(250)}}function Af(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=zs(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=pr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(Cf(n))return n}return"agent"}function wC(){return Af(process.env)}var If={name:"cursor",defaultModel:Al,preflightModel(e){return Pl(e,Al)},start(e){let r=Pl(e.model,Al);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Ol(e.stdoutPath,"a"),o=Ol(e.stderrPath,"a"),s=["ignore",n,o],i=wC(),a=Nl(i),l=dr(e.prompt,e.workerDir,{shell:a.shell}),c=xC({...e,prompt:l.prompt},t,a.prefixArgs),u=SC(),d;try{let[p,m]=a.shell?[a.executable,c]:Pe(a.executable,c,e.workerDir);d=fC(p,m,ie({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:vC(i,a,e.reviewWorker)})),Pf(Tl("KYNVER_CURSOR_START_LOCK_HOLD_MS",hC))}finally{u(),Il(n),Il(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 xC(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 _C}from"node:child_process";function Dl(e,r=process.env){try{let t;try{t=Nl(e)}catch{t={executable:e,prefixArgs:[]}}let n=_C(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 Ml(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(on.join(t,".config","cursor","auth.json")),r.push(on.join(t,".cursor-agent","auth.json")));let n=EC();if(r.push(on.join(n,".config","cursor","auth.json")),r.push(on.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(on.join(o,"cursor-agent","auth.json")),s&&r.push(on.join(s,"cursor","auth.json"))}return r}var PC="agent";function Of(e=new Date().toISOString()){let r=Ke(PC,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Zt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Ml().find(a=>CC(a)),o=Dl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?ur(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 AC,readFileSync as IC}from"node:fs";import{homedir as OC}from"node:os";import Wl from"node:path";var TC=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function NC(){let e=process.env.HERMES_HOME?.trim(),r=e?Wl.resolve(e):Wl.join(OC(),".hermes");return Wl.join(r,".env")}function DC(e){try{let r=IC(e,"utf8"),t=[];for(let n of TC)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Tf(e=new Date().toISOString()){let r=Ke("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=NC(),o=AC(n),s=o?DC(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?ur(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 Nf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=en(r),n={codex:t,cursor:Of(r),claude:wf(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:Tf(r),hermesOpenAiCodex:Js(r),codexAdapterPath:t.path,readyCount:o}}var MC=[/\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],WC=[/\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 Ll(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function LC(e){let r=Ll(e,"executorRef").toLowerCase(),t=Ll(e,"title").toLowerCase(),n=Ll(e,"description").toLowerCase(),o=`${r}
|
|
85
85
|
${t}
|
|
86
|
-
${n}`;return
|
|
87
|
-
`}function
|
|
88
|
-
`,{mode:384}),r}function zs(e){try{return BC(Wf(e)),!0}catch{return!1}}Hn();function JC(e,r){let n=Kf(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 Ff={name:"claude",defaultModel:Be,preflightModel(e){return El(e,Be)},start(e){let r=El(e.model,Be);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;JC(e,t);let n=lp(t,{pinned:e.modelPinned===!0}),o=dr(e.prompt,e.workerDir),[s,i]=de("claude",Kf({...e,prompt:o.prompt},t,n)),a=Uf(e.stdoutPath,"a"),l=Uf(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=Pe(s,i,e.workerDir),p=YC(u,d,ie({cwd:e.worktreePath,detached:le(),stdio:c,env:He(process.env,{reviewWorker:e.reviewWorker})}));if(Bf(a),Bf(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 Kf(e,r,t){return["--model",r,...cp(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.settingsPath?["--settings",e.settingsPath]:[],...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Nf).join(",")}`]:[],"--",e.prompt]}_r();import{closeSync as Gf,existsSync as rP,openSync as Yf}from"node:fs";import{spawn as Kl}from"node:child_process";T();br();_r();import{closeSync as Hf,openSync as $f}from"node:fs";import{spawn as qC}from"node:child_process";T();br();var Xs="gpt-5.6-sol";var Fl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Xs;function zC(e,r){return He({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function XC(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 jf={name:"hermes-codex",defaultModel:Fl,preflightModel(e){return rn(e,Fl)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=rn(e.model,Fl);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Ke("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),o=dr(e.prompt,e.workerDir),[s,i]=de(n,XC(t,o.prompt)),a=$f(e.stdoutPath,"a"),l=$f(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=Pe(s,i,e.workerDir),p=qC(u,d,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:c,env:zC(e.reviewWorker,e.codexHome)}));if(Hf(a),Hf(l),!p.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return p.unref(),{pid:p.pid,model:t}}};var QC="KYNVER_CODEX_WINDOWS_SANDBOX",ZC="unelevated";function eP(e=process.env){return e[QC]?.trim().toLowerCase()==="elevated"?"elevated":ZC}function Vf(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${eP(r)}"`]}function tP(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Xs}var Nr=tP();function Hl(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function nP(e,r){return He({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function oP(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Vf(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function sP(e,r,t,n){if(process.platform==="win32"){let[l,c]=de(e,r);return Kl(l,c,t)}if(!rP("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Kl(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Kl(i,a,t)}var Jf={name:"codex",defaultModel:Nr,preflightModel(e){return rn(e,Nr)},start(e){if(en().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return jf.start(e);let t=rn(e.model,Nr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Yf(e.stdoutPath,"a"),s=Yf(e.stderrPath,"a"),i=["ignore",o,s],a=Hl(),l=dr(e.prompt,e.workerDir),c=oP(n,l.prompt,e.executionMode),u;try{u=sP(a,c,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:i,env:nP(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Gf(o),Gf(s)}if(!u.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return u.unref(),{pid:u.pid,model:n}}};_r();import{closeSync as qf,openSync as zf}from"node:fs";import dP from"node:path";import{fileURLToPath as pP}from"node:url";import{spawn as mP}from"node:child_process";T();import{existsSync as Qs}from"node:fs";import vt from"node:path";import{fileURLToPath as iP}from"node:url";function aP(e,r){let t=vt.resolve(e);for(;;){let n=vt.join(t,r);if(Qs(n))return n;let o=vt.dirname(t);if(o===t)return null;t=o}}function lP(e){return aP(e,vt.join("node_modules",".bin","tsx"))??"npx"}function $l(e,r){if(e.endsWith(".ts")){let t=lP(vt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Zs(e){if(e.explicitCliPath)return Qs(e.explicitCliPath)?$l(e.explicitCliPath,e.nodeExecutable):null;let r=iP(new URL(".",e.importMetaUrl)),t=vt.join(r,"cli.js");if(Qs(t))return $l(t,e.nodeExecutable);let n=vt.join(r,"cli.ts");return Qs(n)?$l(n,e.nodeExecutable):null}var cP="X-Kynver-Job-Token",uo={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function uP(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function lo(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[cP]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function co(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function ei(e,r,t){let n=uP(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=co(t.memoryQuery);s&&o.set("memoryQuery",s);let i=co(t.mode);return i&&o.set("mode",i),lo(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),lo(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=co(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return lo(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return lo(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return lo(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...co(t.eventKey)?{eventKey:co(t.eventKey)}:{}}})}}function sn(e){return so.includes(e)}function an(e){return io(e).filter(sn).map(r=>{let t=uo[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var bt="openai-compatible",fP=600*1e3;function jl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var po=class extends Error{};function gP(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new po(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new po(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new po(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):fP;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var hP="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function mo(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:hP},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function kP(){let e=pP(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=dP.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Zs({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 yP(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0;return{provider:bt,model:t,request:mo(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function fo(e,r,t){let n=kP(),o=zf(e.stdoutPath,"a"),s=zf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=mP(a,l,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:i,env:He(process.env,{reviewWorker:e.reviewWorker})}));if(qf(o),qf(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 Xf={name:bt,get defaultModel(){return jl()},preflightModel(e){return tn(e,jl())},start(e){let r=tn(e.model,jl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=gP(process.env),o=yP(e,n,t);return fo(e,o,t)}};_r();import{closeSync as tg,openSync as ng}from"node:fs";import{spawn as bP}from"node:child_process";T();br();import RP from"node:path";var vP=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function ri(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function ti(e){let r=RP.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Qf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Zf(e){let r=e.trim().toLowerCase();return!r||vP.has(r)?[]:["--model",e.trim()]}function eg(e,r){return[...Zf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function rg(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 mr="gemini";function Te(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function SP(e,r){return He({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var og={name:mr,get defaultModel(){return Te()},preflightModel(e){return nn(e,Te())},start(e){let r=nn(e.model,Te());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=ri(),n=ti(t),o=n==="antigravity"?Qf(r):r.model,s={...e,prompt:dr(e.prompt,e.workerDir).prompt},i=n==="antigravity"?eg(s,o):rg(s,o),[a,l]=de(t,i),c=ng(e.stdoutPath,"a"),u=ng(e.stderrPath,"a"),d=["ignore",c,u],[p,m]=Pe(a,l,e.workerDir),f=bP(p,m,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:d,env:SP(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(tg(c),tg(u),!f.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 f.unref(),{pid:f.pid,model:o}}};var fr="gemini-api",sg="https://generativelanguage.googleapis.com/v1beta/openai",wP=600*1e3,go=class extends Error{};function xP(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function _P(e=process.env){let r=xP(e);if(!r)throw new go('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||sg,n;try{n=new URL(t)}catch{throw new go(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${sg}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new go(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):wP;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function EP(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0,s=mo(r,t,e.prompt,o);return{provider:fr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var ig={name:fr,get defaultModel(){return Te()},preflightModel(e){return nn(e,Te())},start(e){let r=nn(e.model,Te());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=_P(process.env),o=EP(e,n,t);return fo(e,o,t)}};var tr="venice",Vl="https://api.venice.ai/api/v1",CP="venice-uncensored-1-2",PP="KYNVER_VENICE_API_KEY",AP="VENICE_API_KEY",IP="KYNVER_VENICE_BASE_URL",OP="KYNVER_VENICE_DEFAULT_MODEL";function ag(e=process.env){return e[PP]?.trim()||e[AP]?.trim()||void 0}function lg(e=process.env){return(e[IP]?.trim()||Vl).replace(/\/+$/,"")}function zr(e=process.env){return e[OP]?.trim()||CP}function cg(e){return{"content-type":"application/json",authorization:`Bearer ${e}`}}var TP=Be,Vs="composer-2.5";function ve(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function NP(e){if(!e)return;let r=ve(e,"workerModelOverride")||ve(e,"modelOverride");return r||`${ve(e,"title")}
|
|
86
|
+
${n}`;return MC.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":WC.some(s=>s.test(o))?"low":"elevated"}function BC(e){let r=Qt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function UC(e){let r=e.inventory??Nf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Rt(e){let r=BC({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 Df(e){let r=e.task??{},t=LC(r),n=UC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:en())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Tr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=El({inventory:n,riskClass:t});return Rt(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return Rt({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return Rt({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return Rt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=El({inventory:n,riskClass:t});if(a)return Rt({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return Rt({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}_r();import{closeSync as Ff,openSync as Kf}from"node:fs";import{spawn as qC}from"node:child_process";T();br();Hn();import{unlinkSync as FC,writeFileSync as KC}from"node:fs";import HC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function Bl(e){return`${JSON.stringify(e)}
|
|
87
|
+
`}function Ul(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 $C="KYNVER_WORKER_MCP_TOOLS",jC="mcp-config.json",oe="kynver",so=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Mf=so.map(e=>`mcp__${oe}__${e}`),VC={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};function io(e){if(!e||e.length===0)return[...so];let r=new Set;for(let t of e)for(let n of VC[t]??[])r.add(n);return so.filter(t=>r.has(t))}function Wf(e){return io(e).map(r=>`mcp__${oe}__${r}`)}var GC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],YC=["openai-compatible","gemini-api"];function JC(e){return GC.includes(e)}function Fl(e){return YC.includes(e)}function Lf(e){return JC(e)&&!Fl(e)}function ao(e=process.env){let r=e[$C]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function Bf(e){return HC.join(e,jC)}function Uf(e){let r=Bf(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return KC(r,`${JSON.stringify(t,null,2)}
|
|
88
|
+
`,{mode:384}),r}function Xs(e){try{return FC(Bf(e)),!0}catch{return!1}}Hn();function zC(e,r){let n=$f(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 Hf={name:"claude",defaultModel:Be,preflightModel(e){return Cl(e,Be)},start(e){let r=Cl(e.model,Be);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;zC(e,t);let n=up(t,{pinned:e.modelPinned===!0}),o=dr(e.prompt,e.workerDir),[s,i]=de("claude",$f({...e,prompt:o.prompt},t,n)),a=Kf(e.stdoutPath,"a"),l=Kf(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=Pe(s,i,e.workerDir),p=qC(u,d,ie({cwd:e.worktreePath,detached:le(),stdio:c,env:He(process.env,{reviewWorker:e.reviewWorker})}));if(Ff(a),Ff(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 $f(e,r,t){return["--model",r,...dp(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.settingsPath?["--settings",e.settingsPath]:[],...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Mf).join(",")}`]:[],"--",e.prompt]}_r();import{closeSync as Jf,existsSync as nP,openSync as qf}from"node:fs";import{spawn as Hl}from"node:child_process";T();br();_r();import{closeSync as jf,openSync as Vf}from"node:fs";import{spawn as XC}from"node:child_process";T();br();var Qs="gpt-5.6-sol";var Kl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Qs;function QC(e,r){return He({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function ZC(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 Gf={name:"hermes-codex",defaultModel:Kl,preflightModel(e){return rn(e,Kl)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=rn(e.model,Kl);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Ke("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),o=dr(e.prompt,e.workerDir),[s,i]=de(n,ZC(t,o.prompt)),a=Vf(e.stdoutPath,"a"),l=Vf(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=Pe(s,i,e.workerDir),p=XC(u,d,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:c,env:QC(e.reviewWorker,e.codexHome)}));if(jf(a),jf(l),!p.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return p.unref(),{pid:p.pid,model:t}}};var eP="KYNVER_CODEX_WINDOWS_SANDBOX",rP="unelevated";function tP(e=process.env){return e[eP]?.trim().toLowerCase()==="elevated"?"elevated":rP}function Yf(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${tP(r)}"`]}function oP(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Qs}var Nr=oP();function $l(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function sP(e,r){return He({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function iP(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Yf(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function aP(e,r,t,n){if(process.platform==="win32"){let[l,c]=de(e,r);return Hl(l,c,t)}if(!nP("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Hl(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Hl(i,a,t)}var zf={name:"codex",defaultModel:Nr,preflightModel(e){return rn(e,Nr)},start(e){if(en().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Gf.start(e);let t=rn(e.model,Nr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=qf(e.stdoutPath,"a"),s=qf(e.stderrPath,"a"),i=["ignore",o,s],a=$l(),l=dr(e.prompt,e.workerDir),c=iP(n,l.prompt,e.executionMode),u;try{u=aP(a,c,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:i,env:sP(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Jf(o),Jf(s)}if(!u.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return u.unref(),{pid:u.pid,model:n}}};_r();import{closeSync as Xf,openSync as Qf}from"node:fs";import mP from"node:path";import{fileURLToPath as fP}from"node:url";import{spawn as gP}from"node:child_process";T();import{existsSync as Zs}from"node:fs";import vt from"node:path";import{fileURLToPath as lP}from"node:url";function cP(e,r){let t=vt.resolve(e);for(;;){let n=vt.join(t,r);if(Zs(n))return n;let o=vt.dirname(t);if(o===t)return null;t=o}}function uP(e){return cP(e,vt.join("node_modules",".bin","tsx"))??"npx"}function jl(e,r){if(e.endsWith(".ts")){let t=uP(vt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function ei(e){if(e.explicitCliPath)return Zs(e.explicitCliPath)?jl(e.explicitCliPath,e.nodeExecutable):null;let r=lP(new URL(".",e.importMetaUrl)),t=vt.join(r,"cli.js");if(Zs(t))return jl(t,e.nodeExecutable);let n=vt.join(r,"cli.ts");return Zs(n)?jl(n,e.nodeExecutable):null}var dP="X-Kynver-Job-Token",uo={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function pP(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function lo(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[dP]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function co(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function ri(e,r,t){let n=pP(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=co(t.memoryQuery);s&&o.set("memoryQuery",s);let i=co(t.mode);return i&&o.set("mode",i),lo(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),lo(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=co(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return lo(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return lo(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return lo(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...co(t.eventKey)?{eventKey:co(t.eventKey)}:{}}})}}function sn(e){return so.includes(e)}function an(e){return io(e).filter(sn).map(r=>{let t=uo[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var bt="openai-compatible",hP=600*1e3;function Vl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var po=class extends Error{};function kP(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new po(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new po(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new po(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):hP;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var yP="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function mo(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:yP},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function RP(){let e=fP(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=mP.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=ei({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 vP(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0;return{provider:bt,model:t,request:mo(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function fo(e,r,t){let n=RP(),o=Qf(e.stdoutPath,"a"),s=Qf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=gP(a,l,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:i,env:He(process.env,{reviewWorker:e.reviewWorker})}));if(Xf(o),Xf(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 Zf={name:bt,get defaultModel(){return Vl()},preflightModel(e){return tn(e,Vl())},start(e){let r=tn(e.model,Vl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=kP(process.env),o=vP(e,n,t);return fo(e,o,t)}};_r();import{closeSync as og,openSync as sg}from"node:fs";import{spawn as wP}from"node:child_process";T();br();import bP from"node:path";var SP=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function ti(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function ni(e){let r=bP.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function eg(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function rg(e){let r=e.trim().toLowerCase();return!r||SP.has(r)?[]:["--model",e.trim()]}function tg(e,r){return[...rg(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function ng(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 mr="gemini";function Te(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function xP(e,r){return He({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var ig={name:mr,get defaultModel(){return Te()},preflightModel(e){return nn(e,Te())},start(e){let r=nn(e.model,Te());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=ti(),n=ni(t),o=n==="antigravity"?eg(r):r.model,s={...e,prompt:dr(e.prompt,e.workerDir).prompt},i=n==="antigravity"?tg(s,o):ng(s,o),[a,l]=de(t,i),c=sg(e.stdoutPath,"a"),u=sg(e.stderrPath,"a"),d=["ignore",c,u],[p,m]=Pe(a,l,e.workerDir),f=wP(p,m,ie({cwd:e.worktreePath,detached:le(),shell:!1,stdio:d,env:xP(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(og(c),og(u),!f.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 f.unref(),{pid:f.pid,model:o}}};var fr="gemini-api",ag="https://generativelanguage.googleapis.com/v1beta/openai",_P=600*1e3,go=class extends Error{};function EP(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function CP(e=process.env){let r=EP(e);if(!r)throw new go('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||ag,n;try{n=new URL(t)}catch{throw new go(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${ag}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new go(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):_P;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function PP(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0,s=mo(r,t,e.prompt,o);return{provider:fr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var lg={name:fr,get defaultModel(){return Te()},preflightModel(e){return nn(e,Te())},start(e){let r=nn(e.model,Te());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=CP(process.env),o=PP(e,n,t);return fo(e,o,t)}};var tr="venice",Gl="https://api.venice.ai/api/v1",AP="venice-uncensored-1-2",IP="KYNVER_VENICE_API_KEY",OP="VENICE_API_KEY",TP="KYNVER_VENICE_BASE_URL",NP="KYNVER_VENICE_DEFAULT_MODEL";function cg(e=process.env){return e[IP]?.trim()||e[OP]?.trim()||void 0}function ug(e=process.env){return(e[TP]?.trim()||Gl).replace(/\/+$/,"")}function zr(e=process.env){return e[NP]?.trim()||AP}function dg(e){return{"content-type":"application/json",authorization:`Bearer ${e}`}}var DP=Be,Gs="composer-2.5";function ve(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function MP(e){if(!e)return;let r=ve(e,"workerModelOverride")||ve(e,"modelOverride");return r||`${ve(e,"title")}
|
|
89
89
|
${ve(e,"description")}
|
|
90
|
-
${ve(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function ug(e){return e.toLowerCase()}function pg(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 Yl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||TP}function ni(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-")?mr:"cursor"}function DP(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Vs,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:mr,rule:n&&n!==mr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Te(),provider:fr,rule:n&&n!==fr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="venice"||t==="venice-ai"||t==="venice_ai"?{model:zr(),provider:tr,rule:n&&n!==tr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function dg(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 MP=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function mg(e,r,t){return MP.has(e)?mt:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?mt:Be}function WP(e){let r=ug(ve(e,"executorRef")),t=ve(e,"title").toLowerCase(),n=ve(e,"priority")||"normal",o=ug(ve(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=mg(o,r,t);return{provider:"claude",model:i,rule:i===mt?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Nr,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Oe(ve(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Nr},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Oe(ve(e,"executorRef"));return{provider:bt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:venice")||r.startsWith("venice:")){let i=Oe(ve(e,"executorRef"));return{provider:tr,...i?.model?{model:i.model}:{model:zr()},rule:"lane:venice"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Oe(ve(e,"executorRef"));return{provider:fr,...i?.model?{model:i.model}:{model:Te()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Oe(ve(e,"executorRef"));return{provider:mr,...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:Nr,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return dg(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(dg(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=Yl();return{model:s,provider:ni(s),rule:"default:global"}}function LP(e){return e?Oe(ve(e,"executorRef")):null}function BP(e){switch(cr(e)){case mr:case fr:return Te();case tr:return zr();case"claude":return Be;case"codex":return Nr;case"cursor":return Vs;default:return}}var Gl="explicit:cli_provider",fg="config:worker_provider";function gg(e,r,t){let n=cr(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:BP(n)??e.model,rule:t}}function UP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Gl?e:gg(e,t,Gl)}function FP(e,r){if(r.explicitProvider?.trim()||wl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=cr(t);return n===Tr||n===e.provider?e:gg(e,n,fg)}function oi(e){let r,t=LP(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=DP(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||ni(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||ni(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&js(e.task)){let l=NP(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=mg(d,p,m),u=c===mt?"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=WP(e.task);r={...l,requestedModel:l.model}}else{let l=Yl();r={model:l,provider:e.explicitProvider?.trim()||ni(l),rule:"default:global",requestedModel:l}}r=UP(r,e.explicitProvider),r=FP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&cr(e.configuredProvider)!==Tr&&r.rule==="config:worker_provider",i=df({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===Gl||i.rule===fg||Or(i.provider)&&(e.explicitProviderIsOperatorOverride||js(e.task))||i.provider===bt||i.provider===mr||i.provider===fr||i.provider===tr||i.provider==="codex")return i;let a=Tf({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??Nr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function hg(e,r,t){return e||r||t||Yl()||Be}function KP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function kg(e){return e?.trim()||void 0}function yg(e){let r=KP(e.task),t=Oe(r),n=e.explicitProvider?.trim().toLowerCase(),o=kg(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=kg(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&uf(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&&!Or(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 Rg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function vg(){return{maxTaskAttempts:Rg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(da("harness.maxTaskAttempts",4))),dispatchCooldownMs:Rg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(da("harness.dispatchCooldownMs",5e3)))}}H();import jP from"node:path";B();me();T();var Jl="kynver-harness:",bg="@runner:";function ql(e){return e?.trim()?e.trim():null}function HP(e){let r=ql(e);if(!r?.startsWith(Jl))return null;let t=r.slice(Jl.length),n=t.indexOf(bg);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function ho(e,r){let t=e.trim(),n=r.trim();return`${Jl}${t}${bg}${n}`}function $P(e,r){let t=ql(r);return t?HP(e)===t:!1}function si(e){let r=ql(e.workerLeaseOwner);return r&&$P(r,e.runId)?r:ho(e.runId,e.runnerId)}H();import Sg from"node:os";Le();function Dr(e){return e?.trim()?e.trim():null}function $e(e={}){let r=e.env??process.env,t=U();return{runnerId:Dr(t.runnerId)??Dr(r.KYNVER_RUNTIME_ID)??Dr(r.OPENCLAW_RUNTIME_ID)??Dr(r.HOSTNAME)??Sg.hostname(),hostname:Dr(r.HOSTNAME)??Sg.hostname(),profile:Dr(r.KYNVER_RUNNER_PROFILE)??Dr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Dr(r.KYNVER_HARNESS_REPO)??Dr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:ad()}}H();async function ii(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Z(e.baseUrl);try{let o=await te(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await J(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 ai(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 ii({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 wg(e,r){return I(jP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function xg(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Z(r.baseUrl?String(r.baseUrl):void 0),s=await te(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):zl,a=$e({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=wg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(z(p).status==="done"){u.push(d);continue}let f=si({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await ai({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 J(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 _g(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=wg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||z(o).status==="done"))return!0}return!1}import{existsSync as YT,mkdirSync as JT}from"node:fs";import gn from"node:path";B();T();import VP from"node:path";function Eg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function Cg(e,r,t,n){return Eg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function li(e,r={}){let t=r.isAlive??Y,n=r.kill??Me,o=r.sleep??Xo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Xl(e,r,t,n,o={}){Cg(e,r,t,n);let s=li(r.pid,o),i=li(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function Pg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(VP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(li(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function GP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function Ag(e,r,t,n={}){if(!GP(n.env))throw Xl(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`)}Da();ue();B();B();var Ig="unknown";function Og(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==Ig&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==Ig&&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 YP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,JP="next-action-fix:";function ci(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Tg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ci(e)}function qP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(JP)||t.includes("repair")||t.includes("unblock"))}function zP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(YP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ci(String(n.targetPrUrl??n.target_pr_url??"")),s=ci(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Tg(o):null,targetPrBranch:s}}catch{return r}}function Ng(e){if(!qP(e))return null;let r=zP(e.description),t=e.prUrl?Tg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ci(e.branch)}:null}function Dg(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 Mg(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...Cn(`worker.prompt.progress.${n}`).split(`
|
|
90
|
+
${ve(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function pg(e){return e.toLowerCase()}function fg(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 Jl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||DP}function oi(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-")?mr:"cursor"}function WP(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Gs,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:mr,rule:n&&n!==mr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Te(),provider:fr,rule:n&&n!==fr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="venice"||t==="venice-ai"||t==="venice_ai"?{model:zr(),provider:tr,rule:n&&n!==tr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function mg(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 LP=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function gg(e,r,t){return LP.has(e)?mt:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?mt:Be}function BP(e){let r=pg(ve(e,"executorRef")),t=ve(e,"title").toLowerCase(),n=ve(e,"priority")||"normal",o=pg(ve(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=gg(o,r,t);return{provider:"claude",model:i,rule:i===mt?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Nr,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Oe(ve(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Nr},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Oe(ve(e,"executorRef"));return{provider:bt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:venice")||r.startsWith("venice:")){let i=Oe(ve(e,"executorRef"));return{provider:tr,...i?.model?{model:i.model}:{model:zr()},rule:"lane:venice"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Oe(ve(e,"executorRef"));return{provider:fr,...i?.model?{model:i.model}:{model:Te()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Oe(ve(e,"executorRef"));return{provider:mr,...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:Nr,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return mg(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(mg(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=Jl();return{model:s,provider:oi(s),rule:"default:global"}}function UP(e){return e?Oe(ve(e,"executorRef")):null}function FP(e){switch(cr(e)){case mr:case fr:return Te();case tr:return zr();case"claude":return Be;case"codex":return Nr;case"cursor":return Gs;default:return}}var Yl="explicit:cli_provider",hg="config:worker_provider";function kg(e,r,t){let n=cr(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:FP(n)??e.model,rule:t}}function KP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Yl?e:kg(e,t,Yl)}function HP(e,r){if(r.explicitProvider?.trim()||xl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=cr(t);return n===Tr||n===e.provider?e:kg(e,n,hg)}function si(e){let r,t=UP(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=WP(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||oi(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||oi(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Vs(e.task)){let l=MP(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=gg(d,p,m),u=c===mt?"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=BP(e.task);r={...l,requestedModel:l.model}}else{let l=Jl();r={model:l,provider:e.explicitProvider?.trim()||oi(l),rule:"default:global",requestedModel:l}}r=KP(r,e.explicitProvider),r=HP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&cr(e.configuredProvider)!==Tr&&r.rule==="config:worker_provider",i=mf({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===Yl||i.rule===hg||Or(i.provider)&&(e.explicitProviderIsOperatorOverride||Vs(e.task))||i.provider===bt||i.provider===mr||i.provider===fr||i.provider===tr||i.provider==="codex")return i;let a=Df({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??Nr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function yg(e,r,t){return e||r||t||Jl()||Be}function $P(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Rg(e){return e?.trim()||void 0}function vg(e){let r=$P(e.task),t=Oe(r),n=e.explicitProvider?.trim().toLowerCase(),o=Rg(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=Rg(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&pf(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&&!Or(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 bg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Sg(){return{maxTaskAttempts:bg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(pa("harness.maxTaskAttempts",4))),dispatchCooldownMs:bg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(pa("harness.dispatchCooldownMs",5e3)))}}H();import GP from"node:path";B();me();T();var ql="kynver-harness:",wg="@runner:";function zl(e){return e?.trim()?e.trim():null}function jP(e){let r=zl(e);if(!r?.startsWith(ql))return null;let t=r.slice(ql.length),n=t.indexOf(wg);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function ho(e,r){let t=e.trim(),n=r.trim();return`${ql}${t}${wg}${n}`}function VP(e,r){let t=zl(r);return t?jP(e)===t:!1}function ii(e){let r=zl(e.workerLeaseOwner);return r&&VP(r,e.runId)?r:ho(e.runId,e.runnerId)}H();import xg from"node:os";Le();function Dr(e){return e?.trim()?e.trim():null}function $e(e={}){let r=e.env??process.env,t=U();return{runnerId:Dr(t.runnerId)??Dr(r.KYNVER_RUNTIME_ID)??Dr(r.OPENCLAW_RUNTIME_ID)??Dr(r.HOSTNAME)??xg.hostname(),hostname:Dr(r.HOSTNAME)??xg.hostname(),profile:Dr(r.KYNVER_RUNNER_PROFILE)??Dr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Dr(r.KYNVER_HARNESS_REPO)??Dr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:cd()}}H();async function ai(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Z(e.baseUrl);try{let o=await te(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await J(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 li(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 ai({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 _g(e,r){return I(GP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function Eg(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Z(r.baseUrl?String(r.baseUrl):void 0),s=await te(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Xl,a=$e({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=_g(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(z(p).status==="done"){u.push(d);continue}let f=ii({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await li({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 J(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 Cg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=_g(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||z(o).status==="done"))return!0}return!1}import{existsSync as JT,mkdirSync as qT}from"node:fs";import gn from"node:path";B();T();import YP from"node:path";function Pg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function Ag(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 ci(e,r={}){let t=r.isAlive??Y,n=r.kill??Me,o=r.sleep??Qo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Ql(e,r,t,n,o={}){Ag(e,r,t,n);let s=ci(r.pid,o),i=ci(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function Ig(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(YP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ci(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function JP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function Og(e,r,t,n={}){if(!JP(n.env))throw Ql(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`)}Ma();ue();B();B();var Tg="unknown";function Ng(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==Tg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==Tg&&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 qP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,zP="next-action-fix:";function ui(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Dg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ui(e)}function XP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(zP)||t.includes("repair")||t.includes("unblock"))}function QP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(qP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ui(String(n.targetPrUrl??n.target_pr_url??"")),s=ui(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Dg(o):null,targetPrBranch:s}}catch{return r}}function Mg(e){if(!XP(e))return null;let r=QP(e.description),t=e.prUrl?Dg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ui(e.branch)}:null}function Wg(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 Lg(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...Cn(`worker.prompt.progress.${n}`).split(`
|
|
91
91
|
`),o],i=Cn(`worker.prompt.merge_gate.${n}`).split(`
|
|
92
92
|
`),a=Cn(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
93
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.",...Cn("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?[...
|
|
95
|
-
`)}T();H();var
|
|
96
|
-
${n}`,s=
|
|
97
|
-
`).map(r=>r.trim()).find(Boolean)??""}function
|
|
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?[...Wg({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
95
|
+
`)}T();H();var ZP=600*1e3,ko=class extends Error{};function eA(e=process.env){let r=cg(e);if(!r)throw new ko('the "venice" worker provider requires KYNVER_VENICE_API_KEY (or VENICE_API_KEY) on the daemon host \u2014 create a key at https://venice.ai/settings/api.');let t=ug(e),n;try{n=new URL(t)}catch{throw new ko(`KYNVER_VENICE_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${Gl}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ko(`KYNVER_VENICE_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):ZP;return{baseUrl:t,apiKey:r,timeoutMs:s}}function rA(e,r,t){let n=e.workerToolGrant,o=n?an(n.capabilities):void 0,s=mo(r,t,e.prompt,o);return s.headers=dg(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 Bg={name:tr,get defaultModel(){return zr()},preflightModel(e){return tn(e,zr())},start(e){let r=tn(e.model,zr());if(!r.ok)throw new Error(`venice provider model preflight failed: ${r.note}`);let t=eA(process.env);return fo(e,rA(e,t,r.model),r.model)}};var di={claude:Hf,codex:zf,cursor:If,[mr]:ig,[fr]:lg,[bt]:Zf,[tr]:Bg},Ug=null;function Fg(e){if(Ug)return Ug;let r=e?.trim();if(r){let o=di[cr(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(di).join(", ")}`);return o}let t=ff(U().workerProvider),n=di[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(di).join(", ")}`);return n}T();import{spawn as PT}from"node:child_process";import{existsSync as AT,openSync as IT,closeSync as Zk}from"node:fs";import OT from"node:path";B();function Kg(e){return!!e.completionReportedAt?.trim()}function pi(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function tA(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Zl(e){return!!(tA(e.completionBlocker)||e.completionOutcome==="rejected")}function yo(e){return Kg(e)&&!Zl(e)}B();me();H();import Ki from"node:path";function ec(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ro(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var nA=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),Hg=new Set(["done","failed","cancelled"]);function $g(e){let r=ec(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=Ro(r.outcome),n=Ro(r.detail)??Ro(r.error),o=ec(r.task),s=ec(r.closedTask),i=o?Ro(o.status):null,a=s?Ro(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&Hg.has(i)||a!==null&&Hg.has(a))||t!==null&&nA.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function jg(e){return e.taskAdvanced}B();ms();var oA="expert-lane-pr-review:",sA="plan-review-task",iA="scheduledjob:",mi=new Set(["lorentz","dalton","rhea","sentinel"]);function aA(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function rc(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function lA(e,r){return e.startsWith("factory:")?e.includes("lb")||rc(r):!1}function fi(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
|
|
96
|
+
${n}`,s=aA(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(oA)||r===sA||r.startsWith("daemon-review:")||s&&mi.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||lA(r,o)||rc(o))||r.startsWith(iA)&&e.parentTaskId&&s&&mi.has(s)||e.planId&&!e.parentTaskId&&s&&mi.has(s)&&rc(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&mi.has(s))}var Vg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,cA=new Set(nf()),uA=/no commits between/i;function Gg(e){return!!(e&&uA.test(e))}function be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Yg(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:be(e.head)}function Jg(e){if(e==null)return null;let t=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return t?be(t[0]):null}function dA(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 pA(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&cA.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&Vg.test(n))}function mA(e,r){if(e.changedFiles.length>0)return!0;let t=be(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=dA(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(be(e.headCommit)||Yg(e.gitAncestry))}function qg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(fi({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=be(e.routingRule)??"";if(r&&Vg.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(pA(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(be(e.patchPath)||be(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(be(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(be(e.prUrl)??be(e.taskPrUrl)??be(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return mA(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function zg(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:be(r?.headCommit)??Yg(e.gitAncestry),prUrl:be(r?.prUrl)??null}}import{spawnSync as fA}from"node:child_process";function Qg(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Xg(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Xg(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 Xg(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}ue();function gA(e,r,t){try{let n=fA(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 hi={git:(e,r)=>ne(e,r),gh:(e,r)=>gA("gh",e,r)};function hA(e){return e.split(`
|
|
97
|
+
`).map(r=>r.trim()).find(Boolean)??""}function eh(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Qg(t.stdout)}function St(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function gi(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 Zg="Kynver-Task";function kA(e,r){let t=r?.trim();return!t||!/^[\w.-]{1,128}$/.test(t)||new RegExp(`^${Zg}:`,"m").test(e)?e:`${e.trimEnd()}
|
|
98
98
|
|
|
99
|
-
${
|
|
100
|
-
`)}function Xr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function
|
|
99
|
+
${Zg}: ${t}`}function vo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",kA(n,e.taskId)]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=St(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function rh(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 th(e){let r=gi(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=yA(t.stdout)??gi(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 yA(e){let t=hA(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}T();function nh(e){return`t-${x(e)}-a`}function oh(e,r){let t=nh(r);if(e.headRefName.toLowerCase().includes(t))return!0;let n=r.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function bo(e){return e.trim().toLowerCase()}function sh(e,r){if(!e.length)return null;if(r){let t=bo(r),n=e.find(o=>bo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function ih(e,r){let t=bo(r);return e.filter(n=>bo(n.url)!==t).map(n=>n.url)}function ah(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 RA(e){let r=new Set,t=[];for(let n of e){let o=bo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function vA(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?[]:ah(o.stdout).filter(s=>oh(s,t))}function bA(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=nh(t);return ah(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||oh(i,t))}function tc(e,r,t,n){let o=t.trim();if(!o)return[];let s=vA(e,r,o,n),i=bA(e,r,o,n);return RA([...s,...i])}function SA(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 nc(e){let r=ih(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=SA(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 lh(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 wA(e){return e.gh(process.cwd(),["--version"]).status===0}function xA(e,r){return`AgentOS harness: ${e} (${r})`}function _A(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 Xr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function EA(e){return Xr(e.prUrlHint)??Jg(e.status.finalResult)??Xr(e.worker.taskPrUrl)??null}function CA(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??St(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=vo({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,taskId:e.taskId,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=rh({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=St(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function oc(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??St(e.snapshot.worktreePath,e.exec)??void 0};let r=vo({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,taskId:e.taskId,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function sc(e,r=hi){let t=EA(e),n=zg(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!qg({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?oc({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:Xr(e.worker.taskId),exec:r}):{ok:!0};if(t)return oc({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:Xr(e.worker.taskId),exec:r});if(!wA(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=eh(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let h=!1,w=!1,E=n.headCommit??St(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=vo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,taskId:Xr(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=Xr(e.worker.taskId),c=[];if(l){c=tc(n.worktreePath,i,l,r);let h=sh(c);if(h){let w=CA({snapshot:n,canonical:h,workerName:e.worker.name,taskId:l,exec:r});return w.ok&&w.prUrl&&nc({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=gi(n.worktreePath,i,n.branch,r);if(u)return oc({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:Xr(e.worker.taskId),exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=vo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,taskId:Xr(e.worker.taskId),hasDirtyFiles:d,exec:r});if(d&&!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=y.committed,m=y.pushed,!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let h=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(h.status!==0&&!/already up to date/i.test(h.stderr||h.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${h.stderr||h.stdout||h.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=h.status===0}f=y.headCommit??f??St(n.worktreePath,r)??void 0;let k=f?lh(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=th({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:xA(e.worker.name,e.worker.runId),body:_A(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Gg(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:tc(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];nc({worktreePath:n.worktreePath,repo:i,rows:w,canonicalPrUrl:g.prUrl,exec:r})}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:p,pushed:m,created:g.created}}me();pt();Wa();B();me();T();import mI from"node:path";T();import PA from"node:path";var So=new Map,ic=new Map;function ac(e){clearInterval(ic.get(e)),ic.delete(e)}function lc(e,r){if(ac(e),!So.has(e))return;let t=setInterval(()=>{(I(PA.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&ln(e)},1e3);t.unref(),ic.set(e,t)}function cc(e,r){ac(e);let t=So.get(e);t&&t.close(),So.set(e,r)}async function Qr(e){ac(e);let r=So.get(e);return r?(So.delete(e),await r.close(),!0):!1}function ln(e){Qr(e).catch(()=>{})}ue();import{appendFileSync as AA,existsSync as uh,mkdirSync as dh,readFileSync as IA,rmSync as ch,writeFileSync as OA}from"node:fs";import Mr from"node:path";var ph=Mr.join(".cursor","mcp.json");function mh(e){return Mr.join(e,ph)}function TA(e){return re(e,["ls-files","--error-unmatch",ph.split(Mr.sep).join("/")],{allowFailure:!0}).trim().length>0}function NA(e){let r=re(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=".cursor/mcp.json";try{dh(Mr.dirname(n),{recursive:!0});let s=uh(n)?IA(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;AA(n,`${s.endsWith(`
|
|
101
101
|
`)||!s?"":`
|
|
102
102
|
`}${o}
|
|
103
|
-
`)}catch{}}function
|
|
104
|
-
`,{mode:384}),
|
|
105
|
-
`)}function
|
|
103
|
+
`)}catch{}}function fh(e){if(TA(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=mh(e.worktreePath);dh(Mr.dirname(r),{recursive:!0});let t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return OA(r,`${JSON.stringify(t,null,2)}
|
|
104
|
+
`,{mode:384}),NA(e.worktreePath),{ok:!0,configPath:r}}function ki(e){let r=mh(e);if(!uh(r))return!1;try{ch(r,{force:!0});let t=Mr.dirname(r);return ch(t,{recursive:!1}),!0}catch{return!0}}br();import{copyFileSync as DA,existsSync as yi,mkdirSync as MA,readFileSync as WA,rmSync as LA,symlinkSync as BA,writeFileSync as UA}from"node:fs";import{spawnSync as FA}from"node:child_process";import{homedir as KA}from"node:os";import Zr from"node:path";var HA="codex-home";function gh(e){return Zr.join(e,HA)}function $A(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return Zr.resolve(r);let t=KA();for(let n of[Zr.join(t,".codex"),Zr.join(t,".config","codex")])if(yi(n))return n;return null}function jA(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 VA(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function hh(e){let r=$A(e.env??process.env),t=r?Zr.join(r,"config.toml"):null,n=t&&yi(t)?WA(t,"utf8"):"";if(n&&VA(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=gh(e.workerDir);MA(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
|
|
106
106
|
`)?"":`
|
|
107
|
-
`;return
|
|
107
|
+
`;return UA(Zr.join(o,"config.toml"),`${n}${s}${jA(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:GA(r,o)}}function GA(e,r){let t=e?Zr.join(e,"auth.json"):null;if(!t||!yi(t))return"none";let n=Zr.join(r,"auth.json");try{return BA(t,n,"file"),"symlink"}catch{try{return DA(t,n),"copy"}catch{return"none"}}}function wo(e){let r=gh(e);if(!yi(r))return!1;try{return LA(r,{recursive:!0,force:!0}),!0}catch{return!1}}function kh(e,r,t=1e4){try{let[n,o]=de(r,["--version"]),s=FA(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}}}ue();import{appendFileSync as YA,existsSync as uc,mkdirSync as Rh,readFileSync as vh,rmSync as yh,writeFileSync as JA}from"node:fs";import Wr from"node:path";var bh=Wr.join(".agents","mcp_config.json");function Sh(e){return Wr.join(e,bh)}function qA(e){return re(e,["ls-files","--error-unmatch",bh.split(Wr.sep).join("/")],{allowFailure:!0}).trim().length>0}function zA(e){if(!uc(e))return{};try{let r=JSON.parse(vh(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t=r.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return{}}}function XA(e){let r=re(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Wr.isAbsolute(r)?r:Wr.join(e,r),n=Wr.join(t,"info","exclude"),o=".agents/mcp_config.json";try{Rh(Wr.dirname(n),{recursive:!0});let s=uc(n)?vh(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;YA(n,`${s.endsWith(`
|
|
108
108
|
`)||!s?"":`
|
|
109
109
|
`}${o}
|
|
110
|
-
`)}catch{}}function
|
|
111
|
-
`,{mode:384}),
|
|
112
|
-
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:
|
|
110
|
+
`)}catch{}}function wh(e){if(qA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=Sh(e.worktreePath),t=zA(r);if(oe in t)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${oe}" server \u2014 refusing to overwrite it`};Rh(Wr.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 JA(r,`${JSON.stringify(n,null,2)}
|
|
111
|
+
`,{mode:384}),XA(e.worktreePath),{ok:!0,configPath:r}}function Ri(e){let r=Sh(e);if(!uc(r))return!1;try{return yh(r,{force:!0}),yh(Wr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as QA,existsSync as dc,mkdirSync as ZA,readFileSync as eI,rmSync as rI,symlinkSync as tI,writeFileSync as nI}from"node:fs";import{homedir as oI}from"node:os";import Lr from"node:path";var sI="gemini-home";function xh(e){return Lr.join(e,sI)}function iI(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||oI()}function aI(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Lr.join(Lr.resolve(r),".gemini"):Lr.join(iI(e),".gemini")}function lI(e){if(!dc(e))return{};try{let r=JSON.parse(eI(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function cI(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function uI(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function dI(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function _h(e){let r=e.env??process.env,t=aI(r),n=lI(Lr.join(t,"settings.json"));if(cI(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=xh(e.workerDir),s=Lr.join(o,".gemini");ZA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...uI(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:dI(e.brokerSocketPath)}};return nI(Lr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
|
|
112
|
+
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:pI(t,s)}}function pI(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Lr.join(e,o);if(!dc(s))continue;let i=Lr.join(r,o);try{tI(s,i,"file"),n==="none"&&(n="symlink")}catch{try{QA(s,i),n="copy"}catch{}}}return n}function vi(e){let r=xh(e);if(!dc(r))return!1;try{return rI(r,{recursive:!0,force:!0}),!0}catch{return!1}}var fI=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Eh(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function gI(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 et(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:gI(r);return{finalResult:r??t??"completed",summary:t}}function bi(e,r,t){if(Eh(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=et(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(ln(e.workerDir),Xs(e.workerDir),wo(e.workerDir),vi(e.workerDir)),e.worktreePath&&(ki(e.worktreePath),Ri(e.worktreePath))}function hI(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function Ch(e,r,t={}){let n=hI(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=I(mI.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||Eh(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!fI.has(l))continue;let c=z(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Ql(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}bi(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}$n();function Si(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 kI(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 yI(e){let r=jn(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function RI(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 wi(e){let{worker:r,status:t}=e;if(Si(t.finalResult)){let u=pe(r.heartbeatPath),d=xr(u),p=Si(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:et(t)}}if(t.alive)return null;let n=ft(r.stdoutPath);if(Si(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:et(u)}}let o=pe(r.heartbeatPath),s=xr(o);if(Si(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:et(u)}}let i=yI(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:et(u)}}let a=kI(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:et(u)}}let l=RI({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:et(c)}}function xi(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}$n();function _i(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 Ph(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 Ah(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Ih(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Th(e){let r=Ih(e);if(!r)return[];let t=Ih(r.worktreeHandoff),n=Ah(t?.disposableArtifactsRemoved);return n.length?n:Ah(r.disposableArtifactsRemoved)}function Oh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Nh(e,r){let t=_i(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Oh(o)));return t.every(o=>{let s=Oh(Ph(o));return n.has(s)})}function Ei(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Dh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function vI(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 bI(e){let r=Dh(e.disposableArtifactsRemoved),t=Th(e.finalResult);return[...new Set([...r,...t])]}function Mh(e){let r=Dh(e.changedFiles),t=_i(r),n=bI(e),o=t.length===0||Nh(r,n);return Ei(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`}:Ei(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`}:Ei(e.artifactBundlePath)||Ei(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}:vI(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`}}Fe();import{existsSync as FI,renameSync as KI}from"node:fs";import{mkdirSync as MI}from"node:fs";import WI from"node:path";import{DatabaseSync as LI}from"node:sqlite";var pc=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"}},SI=[`CREATE TABLE IF NOT EXISTS local_meta (
|
|
113
113
|
key TEXT PRIMARY KEY,
|
|
114
114
|
value TEXT NOT NULL
|
|
115
115
|
) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
|
|
@@ -135,8 +135,8 @@ ${Xg}: ${t}`}function vo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirty
|
|
|
135
135
|
payload_json TEXT NOT NULL,
|
|
136
136
|
created_at TEXT NOT NULL,
|
|
137
137
|
PRIMARY KEY (scope, seq)
|
|
138
|
-
) STRICT`];function
|
|
139
|
-
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:
|
|
138
|
+
) STRICT`];function wI(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 Wh(e,r){let t=wI(e);if(t!==null&&t>1)throw new pc(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of SI)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 xI,realpathSync as _I,readFileSync as EI}from"node:fs";import Lh from"node:path";var CI=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),PI=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function AI(){try{return EI("/proc/self/mounts","utf8")}catch{return null}}function II(e){let r=Lh.resolve(e);for(let t=0;t<64;t+=1){if(xI(r))try{return _I.native(r)}catch{return r}let n=Lh.dirname(r);if(n===r)return r;r=n}return r}function OI(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function TI(e){let r=[];for(let t of e.split(`
|
|
139
|
+
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:OI(n[1]),fsType:n[2]})}return r}function Bh(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function NI(e,r){let t=null,n=Bh(e);for(let o of r){let s=Bh(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function Uh(e,r){let n=(r?.resolveRealPath??II)(e),o=(r?.mountsSource??AI)();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=NI(n,TI(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 PI.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}:CI.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var Ci=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},BI="local-run-store.sqlite",UI=5e3,xo=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=Uh(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new Ci(t.reason);MI(r.directory,{recursive:!0,mode:448});let n=WI.join(r.directory,r.filename??BI),o=new LI(n,{timeout:r.busyTimeoutMs??UI}),s=r.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new Ci(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Wh(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
|
|
140
140
|
(process_key, pid, runtime_version, node_version, started_at, registered_at)
|
|
141
141
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
142
142
|
ON CONFLICT(process_key) DO UPDATE SET
|
|
@@ -160,27 +160,27 @@ ${Xg}: ${t}`}function vo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirty
|
|
|
160
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
|
|
161
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)
|
|
162
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
|
|
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 FI(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;BI(o)&&UI(o,`${t}${n}`)}return t}function Bh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=xo.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=FI(n,r);try{return{store:xo.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function KI(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function HI(){return $I.classifyOptions??KI()}var $I={};var jI=300*1e3,Br=null,Ci=0;function VI(e,r){Ci+=1;try{let t=HI(),n=Bh({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:Ci},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:Ci},failedAtMs:r,permanentRefusal:t.name==="FilesystemPolicyError"||t.name==="SchemaDowngradeRefusedError"}}}function GI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=jI}function X(e=Date.now()){let r=Ue();return(!Br||Br.status.harnessRoot!==r||GI(Br,e))&&(JI(),Br=VI(r,e)),Br.store}function YI(){return Br?Br.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Ci}}function Uh(){return X(),YI()}function JI(){try{Br?.store?.close()}catch{}Br=null}H();T();import{existsSync as qI,readFileSync as zI}from"node:fs";import{homedir as XI}from"node:os";import QI from"node:path";var ZI=3e4,nr=null;function Fh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return QI.join(XI(),".kynver",`local-run-store-flags-${r}.json`)}function pc(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 Kh(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:pc(t)}function Hh(e,r){try{let t=Fh(e),n={contractVersion:1,agentOsId:e,flags:pc(r),deliveredAt:new Date().toISOString()};ce(t,n),nr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function $h(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(nr&&e-nr.loadedAtMs<ZI)return nr.flags;try{let r=U().agentOsId?.trim();if(!r)return nr={flags:{},loadedAtMs:e,file:null},nr.flags;let t=Fh(r);if(!qI(t))return nr={flags:{},loadedAtMs:e,file:t},nr.flags;let n=JSON.parse(zI(t,"utf8")),o=n?.contractVersion===1?pc(n.flags):{};return nr={flags:o,loadedAtMs:e,file:t},o}catch{return nr={flags:{},loadedAtMs:e,file:null},nr.flags}}var eO=[{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 rO(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 Ur(e=process.env){let r={},t={},n=[],o=$h();for(let s of eO){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=rO(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 Fr(e=process.env){return Ur(e).flags.dispatchReceipts}function mc(e){return Fr(e)!=="off"}function fc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function Eo(e,r,t){if(!mc())return;let n=X();if(n)try{n.recordOperationReceipt({idempotencyKey:fc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Ne.storeFailures+=1}}function Vh(e){Eo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function Pi(e){Eo("spawned",e)}function cn(e,r){Eo("released",e,{reasonClass:r})}function Gh(e){Eo("completion-sent",e)}function gc(e,r){Eo("completion-acked",e,{outcome:r})}function Yh(e){if(!mc())return!1;let r=X();if(!r)return!1;try{let t=r.getOperationReceipt(fc("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 hc(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Jh(e){if(Fr()!=="enforce")return!1;let r=X();if(!r)return!1;try{let t=r.getOperationReceipt(fc("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 tO=600*1e3;function qh(e,r){if(Fr()!=="enforce")return;let t=X();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 zh(e,r){if(Fr()!=="enforce")return[];let t=X();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??tO;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Ne.storeFailures+=1,[]}}function _o(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var nO=900*1e3,jh=10080*60*1e3,oO=1440*60*1e3,sO=500,iO=300;function Xh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!mc())return r;let t=X();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??nO;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-jh).toISOString(),limit:sO}),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>=oO&&a.length+5<=iO&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=_o(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=_o(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Fr()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=jh}).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 Qh(){return{"dispatchReceipts.storeFailures":Ne.storeFailures,"dispatchReceipts.completionReplaysObserved":Ne.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Ne.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Ne.agedReceiptsPruned}}var un=900*1e3,Rc="admission-shadow",kc="worker-slot:",rt={storeFailures:0,missingForLive:0,deadSlotsReleased:0},yc=!1;function Zh(){yc=!1}function Kr(e=process.env){return Ur(e).flags.admission}function Ai(e,r){return`${kc}${e}:${r}`}function ek(e,r){if(Kr()==="off")return;let t=X();if(t)try{t.tryReserveAdmission(Ai(e,r),Rc,un)}catch{rt.storeFailures+=1}}function Co(e,r){if(Kr()==="off")return;let t=X();if(t)try{t.releaseAdmission(Ai(e,r),Rc)}catch{rt.storeFailures+=1}}function rk(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Kr()==="off")return r;let t=X();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Ai(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:kc,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=!yc;yc=!0,!l&&i>0&&(rt.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Ai(p.runId,p.workerName),Rc,un),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,rt.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:kc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return rt.storeFailures+=1,r}}function tk(){return{"admission.storeFailures":rt.storeFailures,"admission.missingForLive":rt.missingForLive,"admission.deadSlotsReleased":rt.deadSlotsReleased}}var vc="worker-slot-n:",Ii=64;function nk(e){return`${vc}${e}`}function Oi(e,r){return`${e}:${r}`}var tt={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function ok(e){if(Kr()!=="enforce")return{admitted:!0};let r=X();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Ii,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return tt.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=Oi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(nk(o),n,un).acquired)return{admitted:!0,slot:o};return tt.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return tt.enforceStoreFailures+=1,{admitted:!0}}}function nt(e,r){if(Kr()==="off")return;let t=X();if(t)try{let n=Oi(e,r),o=t.listAdmissionReservations({keyPrefix:vc,limit:Ii});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{tt.enforceStoreFailures+=1}}function sk(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Kr()!=="enforce")return r;let t=X();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>Oi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:vc,limit:Ii}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,un),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=Oi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Ii;d+=1)if(t.tryReserveAdmission(nk(d),u,un).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return tt.enforceStoreFailures+=1,r}}function ik(){return{"admission.enforceStoreFailures":tt.enforceStoreFailures,"admission.refusedSlotsExhausted":tt.admissionsRefusedSlots,"admission.refusedDiskBackstop":tt.admissionsRefusedDiskBackstop}}T();T();var aO=/^[a-z0-9][a-z0-9._-]{0,127}$/i,lO=/^[a-z0-9][a-z0-9._-]{0,63}$/i,ak=new Set(["undefined","null"]),lk="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function cO(e){let r=e.trim();if(!aO.test(r))throw new Error(`invalid run id: ${e}`);return r}function uO(e){let r=e.trim();if(!lO.test(r))throw new Error(`invalid worker name: ${e}`);return r}function ck(e){return typeof e=="string"?e.trim():""}function bc(e){let r=ck(e.run),t=ck(e.name);return(!r||ak.has(r))&&ze(`missing --run RUN_ID (${lk})`),(!t||ak.has(t))&&ze(`missing --name WORKER_NAME (${lk})`),{runId:cO(r),workerName:uO(t)}}import{existsSync as dO,mkdirSync as pO,readFileSync as mO,writeFileSync as fO}from"node:fs";import{homedir as gO}from"node:os";import kk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function Po(e){return Ur(process.env).flags[e]}var SJ=1800*1e3;function Sc(e){return`mesh-cron-lease:${e}`}function uk(e,r){if(Po("meshLease")==="off")return;let t=X();if(t)try{let n=t.latestRecoveryCheckpoint(Sc(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:Sc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function dk(e,r){let t=Po("meshLease");if(t==="off")return null;let n=X();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(Sc(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 Ti(e){return`quota-cooldown:${e}`}var pk="quota-preflight";function mk(e,r){if(Po("quota")==="off")return;let t=X();if(t)try{t.tryReserveAdmission(Ti(e),pk,r)}catch{_e.quotaStoreFailures+=1}}function fk(e){if(Po("quota")==="off")return;let r=X();if(r)try{r.releaseAdmission(Ti(e),pk)}catch{_e.quotaStoreFailures+=1}}function gk(e,r){let t=Po("quota");if(t==="off")return null;let n=X();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:Ti(e),limit:50}).find(i=>i.key===Ti(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 hk(){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 hO=/\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,kO=30,yO=5,RO=240;function vO(e){let r=e?.trim();return!!(r&&hO.test(r))}function bO(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function wc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(RO,Math.max(yO,e)):kO}function yk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||kk.join(gO(),".kynver","provider-quota-cooldowns.json")}function Ao(e){return(e??"").trim().toLowerCase()}function xc(){let e=yk();if(!dO(e))return{};try{let r=JSON.parse(mO(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[Ao(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function _c(e){let r=yk();try{pO(kk.dirname(r),{recursive:!0}),fO(r,`${JSON.stringify(e,null,2)}
|
|
164
|
-
`,"utf8")}catch{}}function
|
|
165
|
-
`),
|
|
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 HI(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;FI(o)&&KI(o,`${t}${n}`)}return t}function Fh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=xo.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=HI(n,r);try{return{store:xo.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function $I(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function jI(){return VI.classifyOptions??$I()}var VI={};var GI=300*1e3,Br=null,Pi=0;function YI(e,r){Pi+=1;try{let t=jI(),n=Fh({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:Pi},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:Pi},failedAtMs:r,permanentRefusal:t.name==="FilesystemPolicyError"||t.name==="SchemaDowngradeRefusedError"}}}function JI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=GI}function X(e=Date.now()){let r=Ue();return(!Br||Br.status.harnessRoot!==r||JI(Br,e))&&(zI(),Br=YI(r,e)),Br.store}function qI(){return Br?Br.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Pi}}function Kh(){return X(),qI()}function zI(){try{Br?.store?.close()}catch{}Br=null}H();T();import{existsSync as XI,readFileSync as QI}from"node:fs";import{homedir as ZI}from"node:os";import eO from"node:path";var rO=3e4,nr=null;function Hh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return eO.join(ZI(),".kynver",`local-run-store-flags-${r}.json`)}function mc(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function $h(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.localRunStoreFlags;return t===void 0?null:mc(t)}function jh(e,r){try{let t=Hh(e),n={contractVersion:1,agentOsId:e,flags:mc(r),deliveredAt:new Date().toISOString()};ce(t,n),nr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Vh(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(nr&&e-nr.loadedAtMs<rO)return nr.flags;try{let r=U().agentOsId?.trim();if(!r)return nr={flags:{},loadedAtMs:e,file:null},nr.flags;let t=Hh(r);if(!XI(t))return nr={flags:{},loadedAtMs:e,file:t},nr.flags;let n=JSON.parse(QI(t,"utf8")),o=n?.contractVersion===1?mc(n.flags):{};return nr={flags:o,loadedAtMs:e,file:t},o}catch{return nr={flags:{},loadedAtMs:e,file:null},nr.flags}}var tO=[{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 nO(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 Ur(e=process.env){let r={},t={},n=[],o=Vh();for(let s of tO){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=nO(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 Fr(e=process.env){return Ur(e).flags.dispatchReceipts}function fc(e){return Fr(e)!=="off"}function gc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function Eo(e,r,t){if(!fc())return;let n=X();if(n)try{n.recordOperationReceipt({idempotencyKey:gc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Ne.storeFailures+=1}}function Yh(e){Eo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function Ai(e){Eo("spawned",e)}function cn(e,r){Eo("released",e,{reasonClass:r})}function Jh(e){Eo("completion-sent",e)}function hc(e,r){Eo("completion-acked",e,{outcome:r})}function qh(e){if(!fc())return!1;let r=X();if(!r)return!1;try{let t=r.getOperationReceipt(gc("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 kc(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function zh(e){if(Fr()!=="enforce")return!1;let r=X();if(!r)return!1;try{let t=r.getOperationReceipt(gc("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 oO=600*1e3;function Xh(e,r){if(Fr()!=="enforce")return;let t=X();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 Qh(e,r){if(Fr()!=="enforce")return[];let t=X();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??oO;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Ne.storeFailures+=1,[]}}function _o(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var sO=900*1e3,Gh=10080*60*1e3,iO=1440*60*1e3,aO=500,lO=300;function Zh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!fc())return r;let t=X();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??sO;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Gh).toISOString(),limit:aO}),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>=iO&&a.length+5<=lO&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=_o(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=_o(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Fr()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Gh}).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 ek(){return{"dispatchReceipts.storeFailures":Ne.storeFailures,"dispatchReceipts.completionReplaysObserved":Ne.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Ne.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Ne.agedReceiptsPruned}}var un=900*1e3,vc="admission-shadow",yc="worker-slot:",rt={storeFailures:0,missingForLive:0,deadSlotsReleased:0},Rc=!1;function rk(){Rc=!1}function Kr(e=process.env){return Ur(e).flags.admission}function Ii(e,r){return`${yc}${e}:${r}`}function tk(e,r){if(Kr()==="off")return;let t=X();if(t)try{t.tryReserveAdmission(Ii(e,r),vc,un)}catch{rt.storeFailures+=1}}function Co(e,r){if(Kr()==="off")return;let t=X();if(t)try{t.releaseAdmission(Ii(e,r),vc)}catch{rt.storeFailures+=1}}function nk(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Kr()==="off")return r;let t=X();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Ii(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:yc,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=!Rc;Rc=!0,!l&&i>0&&(rt.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Ii(p.runId,p.workerName),vc,un),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,rt.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:yc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return rt.storeFailures+=1,r}}function ok(){return{"admission.storeFailures":rt.storeFailures,"admission.missingForLive":rt.missingForLive,"admission.deadSlotsReleased":rt.deadSlotsReleased}}var bc="worker-slot-n:",Oi=64;function sk(e){return`${bc}${e}`}function Ti(e,r){return`${e}:${r}`}var tt={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function ik(e){if(Kr()!=="enforce")return{admitted:!0};let r=X();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Oi,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return tt.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=Ti(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(sk(o),n,un).acquired)return{admitted:!0,slot:o};return tt.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return tt.enforceStoreFailures+=1,{admitted:!0}}}function nt(e,r){if(Kr()==="off")return;let t=X();if(t)try{let n=Ti(e,r),o=t.listAdmissionReservations({keyPrefix:bc,limit:Oi});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{tt.enforceStoreFailures+=1}}function ak(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Kr()!=="enforce")return r;let t=X();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>Ti(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:bc,limit:Oi}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,un),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=Ti(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Oi;d+=1)if(t.tryReserveAdmission(sk(d),u,un).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return tt.enforceStoreFailures+=1,r}}function lk(){return{"admission.enforceStoreFailures":tt.enforceStoreFailures,"admission.refusedSlotsExhausted":tt.admissionsRefusedSlots,"admission.refusedDiskBackstop":tt.admissionsRefusedDiskBackstop}}T();T();var cO=/^[a-z0-9][a-z0-9._-]{0,127}$/i,uO=/^[a-z0-9][a-z0-9._-]{0,63}$/i,ck=new Set(["undefined","null"]),uk="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function dO(e){let r=e.trim();if(!cO.test(r))throw new Error(`invalid run id: ${e}`);return r}function pO(e){let r=e.trim();if(!uO.test(r))throw new Error(`invalid worker name: ${e}`);return r}function dk(e){return typeof e=="string"?e.trim():""}function Sc(e){let r=dk(e.run),t=dk(e.name);return(!r||ck.has(r))&&ze(`missing --run RUN_ID (${uk})`),(!t||ck.has(t))&&ze(`missing --name WORKER_NAME (${uk})`),{runId:dO(r),workerName:pO(t)}}import{existsSync as mO,mkdirSync as fO,readFileSync as gO,writeFileSync as hO}from"node:fs";import{homedir as kO}from"node:os";import Rk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function Po(e){return Ur(process.env).flags[e]}var wJ=1800*1e3;function wc(e){return`mesh-cron-lease:${e}`}function pk(e,r){if(Po("meshLease")==="off")return;let t=X();if(t)try{let n=t.latestRecoveryCheckpoint(wc(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:wc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function mk(e,r){let t=Po("meshLease");if(t==="off")return null;let n=X();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(wc(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 Ni(e){return`quota-cooldown:${e}`}var fk="quota-preflight";function gk(e,r){if(Po("quota")==="off")return;let t=X();if(t)try{t.tryReserveAdmission(Ni(e),fk,r)}catch{_e.quotaStoreFailures+=1}}function hk(e){if(Po("quota")==="off")return;let r=X();if(r)try{r.releaseAdmission(Ni(e),fk)}catch{_e.quotaStoreFailures+=1}}function kk(e,r){let t=Po("quota");if(t==="off")return null;let n=X();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:Ni(e),limit:50}).find(i=>i.key===Ni(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 yk(){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 yO=/\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,RO=30,vO=5,bO=240;function SO(e){let r=e?.trim();return!!(r&&yO.test(r))}function wO(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function xc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(bO,Math.max(vO,e)):RO}function vk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||Rk.join(kO(),".kynver","provider-quota-cooldowns.json")}function Ao(e){return(e??"").trim().toLowerCase()}function _c(){let e=vk();if(!mO(e))return{};try{let r=JSON.parse(gO(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[Ao(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function Ec(e){let r=vk();try{fO(Rk.dirname(r),{recursive:!0}),hO(r,`${JSON.stringify(e,null,2)}
|
|
164
|
+
`,"utf8")}catch{}}function xO(e,r,t=Date.now()){let n=Ao(e);if(!n)return;let o=_c();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},Ec(o),gk(n,xc()*6e4)}function _O(e){let r=Ao(e);if(!r)return!1;hk(r);let t=_c();return r in t?(delete t[r],Ec(t),!0):!1}function bk(e,r=Date.now()){if(!wO())return{ok:!0};let t=Ao(e);if(!t)return{ok:!0};let n=_c(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+xc()*6e4>r),i=kk(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+xc()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],Ec(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 EO(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Sk(e){let r=Ao(e.provider);if(!r)return"none";let t=EO(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?SO(t)?(xO(r,t,e.nowMs??Date.now()),"recorded"):_O(r)?"cleared":"none":"none"}function wk(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 zO}from"node:fs";import XO from"node:path";sl();import{createECDH as Pk,randomBytes as IO}from"node:crypto";import{chmodSync as Ak,existsSync as Cc,mkdirSync as OO,readFileSync as Ik,readdirSync as Ok,renameSync as TO,writeFileSync as NO}from"node:fs";import{homedir as DO}from"node:os";import Io from"node:path";import{createCipheriv as NJ,createDecipheriv as DJ,createECDH as MJ,createHash as AO,hkdfSync as WJ,randomBytes as LJ}from"node:crypto";var CO=/^[A-Z][A-Z0-9_]{1,63}$/;var or={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},PO=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function xk(e){return typeof e=="string"&&CO.test(e)&&!PO.has(e)&&!e.startsWith("KYNVER_")}function _k(e){return AO("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var Ek="secret-store-keys";function dn(){return Io.join(DO(),".kynver","secrets")}function Ac(e){OO(e,{recursive:!0,mode:448});try{Ak(e,448)}catch{}}function Ic(e,r){let t=`${e}.${process.pid}.tmp`;NO(t,r,{mode:384});try{Ak(t,384)}catch{}TO(t,e)}function Ck(e){if(!e)return null;try{let r=JSON.parse(e);if(r.v===1&&typeof r.ecdh=="string"&&typeof r.vault=="string")return{v:1,ecdh:r.ecdh,vault:r.vault}}catch{}return null}function Di(e,r){let t=Buffer.from(e.ecdh,"base64"),n=Buffer.from(e.vault,"base64");if(t.length!==32||n.length!==32)throw new Error("secret store keys are corrupt");let o=Pk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:_k(s),vaultKey:n,keyStore:r}}var MO=e=>Io.join(e,"keys.json");function WO(e){let r=Io.join(Io.dirname(e),"site-logins");return Cc(r)?Ok(r).filter(t=>t.endsWith(".vault.json")).some(t=>{try{return JSON.parse(Ik(Io.join(r,t),"utf8")).keyMode==="computer"}catch{return!1}}):!1}var Pc=class extends Error{constructor(){super("Saved secrets or website logins 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 Tk(e={}){let r=e.root??dn(),t=e.keychain??Xn(),n=t.available?Ck(t.read(Ek)):null;if(n)return Di(n,"keychain");let o=MO(r),s=Cc(o)?Ck(Ik(o,"utf8")):null;if(s)return Di(s,"file");if(Cc(r)&&Ok(r).some(d=>d.endsWith(".vault.json"))||WO(r))throw new Pc;let i=Pk("prime256v1");i.generateKeys();let a=Buffer.alloc(32),l=i.getPrivateKey();l.copy(a,32-l.length);let c={v:1,ecdh:a.toString("base64"),vault:IO(32).toString("base64")},u=JSON.stringify(c);return t.write(Ek,u)?Di(c,"keychain"):(Ac(r),Ic(o,`${u}
|
|
165
|
+
`),Di(c,"file"))}function LO(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 BO(e){return e.length>=or.minValueChars&&e.length<or.minRedactChars}function UO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Nk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;BO(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of LO(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_])${UO(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 jO,randomBytes as VO}from"node:crypto";import{existsSync as GO,readFileSync as YO,rmSync as JO}from"node:fs";import qO from"node:path";import{createCipheriv as FO,createDecipheriv as KO,hkdfSync as zJ,randomBytes as HO,scrypt as XJ,timingSafeEqual as QJ}from"node:crypto";var $O=32,Dk=12,Oc=16,ZJ={N:2**17,r:8,p:1},eq=2**14;var pn=class extends Error{constructor(r="the saved-login vault could not be decrypted"){super(r),this.name="VaultCryptoError"}};function Tc(e,r,t){if(e.length!==$O)throw new pn("bad key length");let n=HO(Dk),o=FO("aes-256-gcm",e,n);o.setAAD(Buffer.from(t,"utf8"));let s=Buffer.concat([o.update(r),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Nc(e,r,t){try{let n=Buffer.from(r.n,"base64"),o=Buffer.from(r.c,"base64");if(n.length!==Dk||o.length<Oc)throw new pn;let s=KO("aes-256-gcm",e,n);return s.setAAD(Buffer.from(t,"utf8")),s.setAuthTag(o.subarray(o.length-Oc)),Buffer.concat([s.update(o.subarray(0,o.length-Oc)),s.final()])}catch(n){throw n instanceof pn?n:new pn}}var rq=Buffer.from("kynver-site-login-key-check-v1","utf8");var Se=class extends Error{constructor(t,n){super(t);this.code=n;this.name="SecretStoreError"}code};function Dc(e){return`${jO("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Mi=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
|
|
166
166
|
`))throw new Se("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
|
|
167
|
-
`)},mn=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),
|
|
168
|
-
`)}list(){return this.read().secrets.map(mn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?mn(t):null}put(r){if(!Sk(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<or.minValueChars)throw new Se(`The secret is too short \u2014 use at least ${or.minValueChars} characters.`,"invalid");if(t>or.maxValueBytes)throw new Se("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=Ic(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Di(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:mn(i),replaced:!0};if(o.secrets.length>=or.maxSecrets)throw new Se("This computer already holds the most secrets allowed.","full");let a=`sec_${jO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:Ic(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Di(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:mn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new Se("No saved secret by that name.","not_found");try{let n=Oc(this.opts.vaultKey,t.value,Di(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:mn(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:Oc(this.opts.vaultKey,t.value,Di(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?YO(this.file,{force:!0}):this.write(t),mn(o)}};var XO=64,Nc=new Map;function QO(e,r){return`${r}\0${e}`}function ZO(e){try{let r=qO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function eT(e,r=dn()){if(!e)return null;let t=zO.join(r,Tc(e)),n=ZO(t),o=QO(e,r);if(!n)return Nc.delete(o),null;let s=Nc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=Ik({root:r}),a=Ok(new Mi({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return Nc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Dc(e,r,t){if(typeof e=="string")return r.redact(e);if(t>XO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>Dc(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=Dc(s,r,t+1);return n}function Wi(e,r,t=dn()){let n=eT(e,t);return!n||n.empty?r:Dc(r,n,0)}Fe();import{createHash as iT}from"node:crypto";import{mkdirSync as aT,readFileSync as lT,readdirSync as bq,rmSync as Uk,writeFileSync as cT}from"node:fs";import Fk from"node:path";import{existsSync as rT,mkdirSync as gq,readFileSync as tT,readdirSync as nT,writeFileSync as hq}from"node:fs";import Nk from"node:path";var oT="compaction-spool",sT="offset.json";var Dk=6e4,Mk=300;function Li(e){return Nk.join(e,oT)}function Wk(e){return rT(e)?nT(e).filter(r=>r.endsWith(".json")&&r!==sT).sort().map(r=>Nk.join(e,r)):[]}function Lk(e){try{let r=JSON.parse(tT(e,"utf8"));return r?.version===1&&Array.isArray(r.messages)?r:null}catch{return null}}var uT="KYNVER_COMPACTION_FACT_FLUSH",dT=Mk,pT=Dk*2;function Mc(e=process.env){let r=e[uT]?.trim().toLowerCase();return r==="off"||r==="0"||r==="false"}var mT=new Set(["nothing_to_extract"]),Ui=3600,Cq=336*60*60*1e3;function Kk(){return Fk.join(Ws().harnessRoot,"compaction-spool-pending")}function Hk(e,r){return Fk.join(e,`${iT("sha1").update(r).digest("hex").slice(0,20)}.json`)}function fT(e){try{return JSON.parse(lT(e,"utf8"))}catch{return null}}function gT(e){let r=e.response,t=Number(r?.retryAfterSeconds);return Number.isFinite(t)&&t>0?Math.min(t,2880*60):Ui}function Bi(e,r,t,n){let o=e.pendingDir??Kk();aT(o,{recursive:!0,mode:448});let s=Hk(o,e.workerDir),i=fT(s),a=new Date(n.getTime()+t*1e3).toISOString(),l={workerDir:e.workerDir,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,firstPendingAt:i?.firstPendingAt??n.toISOString(),retryAt:a,lastReason:r};return cT(s,JSON.stringify(l),{mode:384}),a}function Bk(e){Uk(Hk(e.pendingDir??Kk(),e.workerDir),{force:!0})}function hT(e){let r=e.flat(),t=[],n=0;for(let o=r.length-1;o>=0&&t.length<dT;o-=1){let s=r[o];if(n+s.content.length>pT)break;t.push(s),n+=s.content.length}return t.reverse()}async function $k(e){if(Mc(e.env))return{drained:!1,reason:"off"};let r=e.now??new Date,n=Wk(Li(e.workerDir)).map(d=>({file:d,entry:Lk(d)})),o=n.filter(d=>d.entry&&d.entry.messages.length>0);if(o.length===0)return Bk(e),{drained:!1,reason:"empty"};let s=hT(o.map(d=>d.entry.messages)),i=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/compaction-flush`,a=Wi(e.agentOsId,{source:"kynver-harness",taskId:e.taskId,runId:e.runId,workerName:e.workerName,compactions:o.length,messages:s}),l=e.post??((d,p,m)=>J(d,p,m,{agentOsId:e.agentOsId,baseUrl:e.baseUrl})),c;try{c=await l(i,e.secret,a)}catch{return{drained:!1,reason:"post_failed",retryAt:Bi(e,"post_failed",Ui,r)}}if(c.status===429)return{drained:!1,reason:"over_cap",status:429,retryAt:Bi(e,"over_cap",gT(c),r)};if(!c.ok){let d=Bi(e,`http_${c.status}`,Ui,r);return{drained:!1,reason:"post_failed",status:c.status,retryAt:d}}let u=c.response?.skipped;if(typeof u=="string"&&!mT.has(u)){let d=Bi(e,`skipped_${u}`,Ui,r);return{drained:!1,reason:"server_skipped",status:c.status,retryAt:d}}for(let{file:d}of n)Uk(d,{force:!0});return Bk(e),{drained:!0,files:o.length,messages:s.length,status:c.status}}async function jk(e,r,t){let n=await fetch(e,{method:"POST",headers:eo(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function kT(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 Io(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yT(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function RT(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 Yk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function vT(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function fn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function bT(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Wc(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function ST(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function To(e){let{runId:r,workerName:t}=bc(e),n=Xt(r,t),o=q(n.runId),s=z(n,Wc(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!xe(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&yo(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Ql(n)&&bT(n),!s.finalResult&&s.alive===!1){let _=Si({worker:n,status:s});_&&wi(n,_)&&(L(n.runId,n),n=Xt(r,t),s=z(n,Wc(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=oc({worker:n,run:o,status:s});if(!_.ok)return fn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=z(n,Wc(o)),s=ST(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=Nh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return fn(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{vk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Z(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await te(p,i,{baseUrl:d});a&&(await ai({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Xt(r,t)),a&&await $k({workerDir:n.workerDir,agentOsId:i,taskId:String(a),runId:n.runId,workerName:n.name,baseUrl:d,secret:m}).catch(()=>{});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=bk({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=Wi(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(Yh(g),Jh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return di(n,n.runId,_),vi(n,s,{source:"harness-completion"}),fn(n,void 0),Co(n.runId,n.name),nt(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Gh(g)}let h=await jk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await Om(i,{baseUrl:d});_&&_!==m&&(m=_,h=await jk(f,m,b))}if(h.ok){let _=Kg(h.parsed);if(!Hg(_)){let we=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;fn(n,we);let Je={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return di(n,n.runId,Je),g&&gc(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:we,completionBlocked:!0}}fn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};di(n,n.runId,$),vi(n,s,{source:"harness-completion"}),g&&gc(g,"acknowledged"),Co(n.runId,n.name),nt(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=kT(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return fn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function Jk(e){let{run:r,workerName:t,worker:n}=e,o=z(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ht({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=Yk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Vk(n.completionResponse),m=Vk(p?.task),f=Io(p?.outcome),y=Io(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=Io(m?.prUrl)??Io(p?.prUrl),g=Io(n.completionReportedAt),h=yT({finished:xe(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=RT({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:xe(o)}),E=vT({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 wT(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&&!Yk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function xT(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function Oo(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function Gk(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 _T(e){let r=e.filter(Gk),t=e.filter(n=>{if(Gk(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 qk(e,r,t){let n={runId:e.id,name:e.name,status:Ua(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:Oo(r,"status"),attentionCounts:Oo(r,"attention"),lifecycleCounts:Oo(r,"lifecycleStage")},n.controller=_T(r)),n}function ET(e){return e.status==="done"&&e.attention==="done"}function Lc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Fi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?Jk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=qk(r,n,!1);return ce(Fi.join(N(r.id),"last-board.json"),o),o}function Bc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Fi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?wT(a)?xT(i,a):Jk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!ET(i)),s=qk(r,o,!0);return s.status=Ua(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Oo(n,"status"),allAttentionCounts:Oo(n,"attention")},ce(Fi.join(N(r.id),"last-board-compact.json"),s),s}async function zk(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Lc(t),s=Z(e.baseUrl?String(e.baseUrl):void 0),i=await te(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await J(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}}T();H();B();T();var w2=360*60*1e3;function Qk(e){let r=e.nodeExecutable??process.execPath,t=Zs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!PT(n))return;let o=IT.join(e.workerDir,"auto-complete.log"),s;try{s=AT(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=CT(t.command,a,ie({detached:le(),stdio:i,env:process.env}));return s!==void 0&&Xk(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Xk(s)}catch{}return}}ue();function Zk(e,r,t){re(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Le();Es();H();import LT from"node:net";import{chmodSync as BT,unlinkSync as UT}from"node:fs";import{createHash as OT}from"node:crypto";import{chmodSync as TT,mkdirSync as NT}from"node:fs";import ey from"node:os";import DT from"node:path";var MT=100,WT="\\\\.\\pipe\\";function ry(e,r){return OT("sha256").update(e).digest("hex").slice(0,r)}function Uc(e){let r=e.platform??process.platform,t=ry(e.agentOsId,12),n=ry(e.workerKey,16);if(r==="win32")return{socketPath:`${WT}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=DT.posix,s=e.homeDir??ey.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=MT)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??ey.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Fc(e){e.socketDir&&(NT(e.socketDir,{recursive:!0,mode:448}),TT(e.socketDir,448))}var No=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=io(r.capabilities),this.server=LT.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Fc(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{BT(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(sn).map(r=>uo[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{UT(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
|
+
`)},mn=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Wi=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new Se("workspace is required","invalid");this.root=r.root??dn(),this.file=qO.join(this.root,Dc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!GO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(YO(this.file,"utf8"))}catch{throw new Se("The saved-secrets file is damaged.","corrupt")}if(r.v!==1||!Array.isArray(r.secrets))throw new Se("The saved-secrets file is damaged.","corrupt");if(r.agentOsId!==this.opts.agentOsId)throw new Se("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:r.agentOsId,secrets:r.secrets}}write(r){Ac(this.root),Ic(this.file,`${JSON.stringify(r)}
|
|
168
|
+
`)}list(){return this.read().secrets.map(mn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?mn(t):null}put(r){if(!xk(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<or.minValueChars)throw new Se(`The secret is too short \u2014 use at least ${or.minValueChars} characters.`,"invalid");if(t>or.maxValueBytes)throw new Se("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=Tc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Mi(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:mn(i),replaced:!0};if(o.secrets.length>=or.maxSecrets)throw new Se("This computer already holds the most secrets allowed.","full");let a=`sec_${VO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:Tc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Mi(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:mn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new Se("No saved secret by that name.","not_found");try{let n=Nc(this.opts.vaultKey,t.value,Mi(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:mn(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:Nc(this.opts.vaultKey,t.value,Mi(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?JO(this.file,{force:!0}):this.write(t),mn(o)}};var QO=64,Mc=new Map;function ZO(e,r){return`${r}\0${e}`}function eT(e){try{let r=zO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function rT(e,r=dn()){if(!e)return null;let t=XO.join(r,Dc(e)),n=eT(t),o=ZO(e,r);if(!n)return Mc.delete(o),null;let s=Mc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=Tk({root:r}),a=Nk(new Wi({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return Mc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Wc(e,r,t){if(typeof e=="string")return r.redact(e);if(t>QO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>Wc(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=Wc(s,r,t+1);return n}function Li(e,r,t=dn()){let n=rT(e,t);return!n||n.empty?r:Wc(r,n,0)}Fe();import{createHash as aT}from"node:crypto";import{mkdirSync as lT,readFileSync as cT,readdirSync as wq,rmSync as Kk,writeFileSync as uT}from"node:fs";import Hk from"node:path";import{existsSync as tT,mkdirSync as kq,readFileSync as nT,readdirSync as oT,writeFileSync as yq}from"node:fs";import Mk from"node:path";var sT="compaction-spool",iT="offset.json";var Wk=6e4,Lk=300;function Bi(e){return Mk.join(e,sT)}function Bk(e){return tT(e)?oT(e).filter(r=>r.endsWith(".json")&&r!==iT).sort().map(r=>Mk.join(e,r)):[]}function Uk(e){try{let r=JSON.parse(nT(e,"utf8"));return r?.version===1&&Array.isArray(r.messages)?r:null}catch{return null}}var dT="KYNVER_COMPACTION_FACT_FLUSH",pT=Lk,mT=Wk*2;function Lc(e=process.env){let r=e[dT]?.trim().toLowerCase();return r==="off"||r==="0"||r==="false"}var fT=new Set(["nothing_to_extract"]),Fi=3600,Aq=336*60*60*1e3;function $k(){return Hk.join(Ls().harnessRoot,"compaction-spool-pending")}function jk(e,r){return Hk.join(e,`${aT("sha1").update(r).digest("hex").slice(0,20)}.json`)}function gT(e){try{return JSON.parse(cT(e,"utf8"))}catch{return null}}function hT(e){let r=e.response,t=Number(r?.retryAfterSeconds);return Number.isFinite(t)&&t>0?Math.min(t,2880*60):Fi}function Ui(e,r,t,n){let o=e.pendingDir??$k();lT(o,{recursive:!0,mode:448});let s=jk(o,e.workerDir),i=gT(s),a=new Date(n.getTime()+t*1e3).toISOString(),l={workerDir:e.workerDir,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,firstPendingAt:i?.firstPendingAt??n.toISOString(),retryAt:a,lastReason:r};return uT(s,JSON.stringify(l),{mode:384}),a}function Fk(e){Kk(jk(e.pendingDir??$k(),e.workerDir),{force:!0})}function kT(e){let r=e.flat(),t=[],n=0;for(let o=r.length-1;o>=0&&t.length<pT;o-=1){let s=r[o];if(n+s.content.length>mT)break;t.push(s),n+=s.content.length}return t.reverse()}async function Vk(e){if(Lc(e.env))return{drained:!1,reason:"off"};let r=e.now??new Date,n=Bk(Bi(e.workerDir)).map(d=>({file:d,entry:Uk(d)})),o=n.filter(d=>d.entry&&d.entry.messages.length>0);if(o.length===0)return Fk(e),{drained:!1,reason:"empty"};let s=kT(o.map(d=>d.entry.messages)),i=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/compaction-flush`,a=Li(e.agentOsId,{source:"kynver-harness",taskId:e.taskId,runId:e.runId,workerName:e.workerName,compactions:o.length,messages:s}),l=e.post??((d,p,m)=>J(d,p,m,{agentOsId:e.agentOsId,baseUrl:e.baseUrl})),c;try{c=await l(i,e.secret,a)}catch{return{drained:!1,reason:"post_failed",retryAt:Ui(e,"post_failed",Fi,r)}}if(c.status===429)return{drained:!1,reason:"over_cap",status:429,retryAt:Ui(e,"over_cap",hT(c),r)};if(!c.ok){let d=Ui(e,`http_${c.status}`,Fi,r);return{drained:!1,reason:"post_failed",status:c.status,retryAt:d}}let u=c.response?.skipped;if(typeof u=="string"&&!fT.has(u)){let d=Ui(e,`skipped_${u}`,Fi,r);return{drained:!1,reason:"server_skipped",status:c.status,retryAt:d}}for(let{file:d}of n)Kk(d,{force:!0});return Fk(e),{drained:!0,files:o.length,messages:s.length,status:c.status}}async function Gk(e,r,t){let n=await fetch(e,{method:"POST",headers:eo(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function yT(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Yk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Oo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function RT(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function vT(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 qk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function bT(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function fn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function ST(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Bc(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function wT(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function No(e){let{runId:r,workerName:t}=Sc(e),n=Xt(r,t),o=q(n.runId),s=z(n,Bc(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!xe(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&yo(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Zl(n)&&ST(n),!s.finalResult&&s.alive===!1){let _=wi({worker:n,status:s});_&&xi(n,_)&&(L(n.runId,n),n=Xt(r,t),s=z(n,Bc(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=sc({worker:n,run:o,status:s});if(!_.ok)return fn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=z(n,Bc(o)),s=wT(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=Mh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return fn(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{Sk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Z(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await te(p,i,{baseUrl:d});a&&(await li({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Xt(r,t)),a&&await Vk({workerDir:n.workerDir,agentOsId:i,taskId:String(a),runId:n.runId,workerName:n.name,baseUrl:d,secret:m}).catch(()=>{});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=wk({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=Li(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(qh(g),zh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return pi(n,n.runId,_),bi(n,s,{source:"harness-completion"}),fn(n,void 0),Co(n.runId,n.name),nt(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Jh(g)}let h=await Gk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await Nm(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Gk(f,m,b))}if(h.ok){let _=$g(h.parsed);if(!jg(_)){let we=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;fn(n,we);let Je={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return pi(n,n.runId,Je),g&&hc(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:we,completionBlocked:!0}}fn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};pi(n,n.runId,$),bi(n,s,{source:"harness-completion"}),g&&hc(g,"acknowledged"),Co(n.runId,n.name),nt(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=yT(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return fn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function zk(e){let{run:r,workerName:t,worker:n}=e,o=z(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ht({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=qk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Yk(n.completionResponse),m=Yk(p?.task),f=Oo(p?.outcome),y=Oo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=Oo(m?.prUrl)??Oo(p?.prUrl),g=Oo(n.completionReportedAt),h=RT({finished:xe(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=vT({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:xe(o)}),E=bT({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 xT(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&&!qk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function _T(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 To(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 Jk(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 ET(e){let r=e.filter(Jk),t=e.filter(n=>{if(Jk(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:Fa(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:To(r,"status"),attentionCounts:To(r,"attention"),lifecycleCounts:To(r,"lifecycleStage")},n.controller=ET(r)),n}function CT(e){return e.status==="done"&&e.attention==="done"}function Uc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Ki.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?zk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Xk(r,n,!1);return ce(Ki.join(N(r.id),"last-board.json"),o),o}function Fc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Ki.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?xT(a)?_T(i,a):zk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!CT(i)),s=Xk(r,o,!0);return s.status=Fa(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:To(n,"status"),allAttentionCounts:To(n,"attention")},ce(Ki.join(N(r.id),"last-board-compact.json"),s),s}async function Qk(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Uc(t),s=Z(e.baseUrl?String(e.baseUrl):void 0),i=await te(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await J(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}}T();H();B();T();var _2=360*60*1e3;function ey(e){let r=e.nodeExecutable??process.execPath,t=ei({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!AT(n))return;let o=OT.join(e.workerDir,"auto-complete.log"),s;try{s=IT(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=PT(t.command,a,ie({detached:le(),stdio:i,env:process.env}));return s!==void 0&&Zk(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Zk(s)}catch{}return}}ue();function ry(e,r,t){re(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();Cs();H();import BT from"node:net";import{chmodSync as UT,unlinkSync as FT}from"node:fs";import{createHash as TT}from"node:crypto";import{chmodSync as NT,mkdirSync as DT}from"node:fs";import ty from"node:os";import MT from"node:path";var WT=100,LT="\\\\.\\pipe\\";function ny(e,r){return TT("sha256").update(e).digest("hex").slice(0,r)}function Kc(e){let r=e.platform??process.platform,t=ny(e.agentOsId,12),n=ny(e.workerKey,16);if(r==="win32")return{socketPath:`${LT}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=MT.posix,s=e.homeDir??ty.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=WT)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??ty.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Hc(e){e.socketDir&&(DT(e.socketDir,{recursive:!0,mode:448}),NT(e.socketDir,448))}var Do=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=io(r.capabilities),this.server=BT.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Hc(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{UT(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(sn).map(r=>uo[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{FT(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(`
|
|
169
169
|
`);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
|
|
170
|
-
`)}})}write(r,t){if(!r.destroyed)try{r.write(
|
|
171
|
-
`,{mode:384}),n}var qT=7200*1e3;async function ay(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||Tr,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:oi({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=Bg(o.provider),i=o.model;if(s.preflightModel){let F=s.preflightModel(r.model);if(!F.ok)throw new Error(`model preflight failed for provider "${s.name}": ${F.note??"invalid model/provider combination"}`);F.normalized&&console.error(`[supervisor] ${n}: ${F.note}`),i=F.model}let{worktreesDir:a}=ae(),l=gn.join(N(e.id),"workers",n);JT(l,{recursive:!0});let c=gn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(YT(c))throw new Error(`worktree path already exists: ${c}`);if(re(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Zk(e.repo,c,u);else{let F=Og({baseCommit:e.baseCommit,base:e.base,verifyRef:D=>re(e.repo,["rev-parse","--verify","--quiet",`${D}^{commit}`],{allowFailure:!0}).trim().length>0});F.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${F.ref} (${F.source})`),e.baseCommit=re(e.repo,["rev-parse",F.ref],{allowFailure:!0}).trim()||F.ref,Ie(e)),re(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=gn.join(l,"stdout.jsonl"),m=gn.join(l,"stderr.log"),f=gn.join(l,"heartbeat.jsonl"),y=Mg({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=mi({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Ul(s.name)&&ao()){let F=dl();F&&r.agentOsId&&r.taskId?(w={apiBaseUrl:F,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=Mf(s.name);if(_&&K&&ao()){let F=dl();if(F&&r.agentOsId&&r.taskId){let D=Uc({agentOsId:String(r.agentOsId),workerKey:l}),V=await No.start({address:D,apiBaseUrl:F,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+qT,workerPid:process.pid,identity:Kc(),onRefusal:O=>console.error(`[supervisor] ${n}: worker tools refused a call (${O})`)});if(lc(l,V),s.name==="codex"){let O=fh({workerDir:l,brokerSocketPath:D.socketPath});if(O.ok){let ee=gh(O.codexHome,Hl());ee.ok?(E=O.codexHome,h=E):(wo(l),await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${ee.detail}); spawning with the normal environment`))}else await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`)}else if(s.name==="cursor"){let O=ph({worktreePath:c,brokerSocketPath:D.socketPath});O.ok?h=O.configPath:(await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`))}else if(s.name==="gemini"&&ti(ri())==="antigravity"){let O=bh({worktreePath:c,brokerSocketPath:D.socketPath});O.ok?h=O.configPath:(await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`))}else if(s.name==="gemini"){let O=wh({workerDir:l,brokerSocketPath:D.socketPath});O.ok?(S=O.geminiCliHome,h=S):(await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`))}else h=Lf({workerDir:l,brokerSocketPath:D.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${V.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $;if(s.name==="claude"&&r.agentOsId&&r.taskId&&process.platform!=="win32"&&!Mc())try{$=iy({workerDir:l})??void 0}catch(F){console.error(`[supervisor] ${n}: compaction hook skipped \u2014 ${F.message}`)}let C=r.taskId?wp(xp(e.id,String(r.taskId),n)):null,Q;try{Q=_p(C,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:pg(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}:{},...$?{settingsPath:$}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:Df(r.workerMcpCapabilities)}:{}}))}catch(F){throw h&&(zs(l),hi(c),wo(l),Ri(l),yi(c),ln(l)),re(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),re(e.repo,["branch","-D",d],{allowFailure:!0}),F}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 we=hg(Q.model,i,s.defaultModel),Je=U(),ir=Sr(process.env,Je),jr=$e().runnerId,he=_s({boxKind:ir.boxKind,config:Je,env:process.env}),W={name:n,runId:e.id,status:"running",pid:Q.pid,model:we,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:ir.boxKind,boxId:he,runtimeId:jr,startedAt:new Date().toISOString(),...C?{oomRetryHeapMb:C}:{}};if(L(e.id,W),ac(l,Q.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:gn.join(l,"worker.json")}},e.status="running",Ie(e),W.agentOsId&&W.taskId){let F;try{F=Qk({runId:e.id,workerName:n,workerDir:l,agentOsId:W.agentOsId})}catch(D){let V=`completion sidecar failed to spawn: ${D.message}`;W.completionBlocker=V,L(e.id,W)}if(F)F.pid&&(W.completionSidecarPid=F.pid,L(e.id,W));else{let D=W.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";W.completionBlocker=D,W.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,W),Ag(e.id,W,D)}}return W}H();qn();function zT(e,r){let t=qt(r)?.trim();return t||Ze("KYNVER_RUNNER_TOKEN",e)||Ze("OPENCLAW_RUNNER_TOKEN",e)||null}function XT(e){let r=Ar()?.trim();return r||Ze("KYNVER_API_KEY",e)||Ze("KYNVER_RUNTIME_SECRET",e)||Ze("KYNVER_CRON_SECRET",e)||Ze("OPENCLAW_CRON_SECRET",e)||null}async function ly(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=zT(t,e.agentOsId),l=XT(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}Mn();function QT(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Nn(t)??null:null}function ZT(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function eN(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function cy(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=QT(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=ZT(t,o),l=eN(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()}}}T();H();import{mkdirSync as dy}from"node:fs";import{homedir as rN,tmpdir as iX}from"node:os";import Ki from"node:path";function py(){let e=process.env.KYNVER_STATE_ROOT;return e?Ki.resolve(e):Ki.join(rN(),".kynver","state")}function Hi(){return Ki.join(py(),"plan-outbox")}function tN(){return Ki.join(py(),"plan-outbox-archive")}function my(){let e=Hi(),r=tN();return dy(e,{recursive:!0}),dy(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var dX=600*1e3,Do={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function fy(){return{"planOutbox.storeFailures":Do.storeFailures,"planOutbox.corruptItemsSeen":Do.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Do.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Do.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Do.halfArchivesCompleted}}import{existsSync as sN,readFileSync as iN,renameSync as gX,readdirSync as hX,rmSync as kX,writeFileSync as yX,unlinkSync as RX}from"node:fs";import gy from"node:path";function hy(e){if(!sN(e))return null;try{return JSON.parse(iN(e,"utf8"))}catch{return null}}function $i(e){let{outboxDir:r}=my();return{jsonPath:gy.join(r,`${e.id}.json`),bodyPath:gy.join(r,e.bodyPath)}}import pN from"node:path";function Gc(e){let r=pN.join(Hi(),`${e}.json`);return hy(r)}function Yc(e){let r=$i(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(`
|
|
172
|
-
`)}function
|
|
173
|
-
`),
|
|
174
|
-
`)}var
|
|
175
|
-
`)}function KN(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 ji(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ke=function(){return D.filter(v=>v.started).length},ye=function(v,R){ro({runId:l.id,agentOsId:u,phase:v,startedCount:ke(),outcomeCount:D.length,cappedStarts:C,...R})},yr=function(){return D.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},qu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ke,n=ye,o=yr,s=qu;let i=yy();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(vr(String(e.run||""),"--run"))),c=ky(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(vr(String(e.agentOsId||""),"--agent-os-id")),d=Z(e.baseUrl?String(e.baseUrl):void 0),p=await te(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=$e({runId:l.id}),k=ho(l.id,y.runnerId),b=Ym(),g=b?qm(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?Yr({diskPath:String(e.diskPath)}):Yr({diskPath:l.repo}),E=await of({runId:l.id,agentOsId:u,args:e}),S=KN(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 J(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 Q=Us(l.id),we=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Je=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):zl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:Q,runnerPresence:y,harnessBoardSnapshot:Lc(l.id),...e.lane?{lane:nf(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)}:{}}),ir=Xm(),jr=async v=>{let R=b&&g?Jm(g):void 0,A=await J(we,p,Je(v,R),{agentOsId:u,baseUrl:d,timeoutMs:ir})??{ok:!1,status:0,response:null},M=A.response;if(R&&Array.isArray(M?.result?.started))for(let G of M.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:M?.result}};f||ro({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:ir});let he=await jr(_||f?C:1);if(!he.dispatch.ok||!he.result){let v=Rl(he.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:he.dispatch.status,response:he.dispatch.response,authRefreshed:he.dispatch.refreshedAuth===!0,authRefreshFailure:he.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&ro({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:he.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let W=he.result;if(f){let v=Vy(W),R=Gy(W),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:W.started.map(M=>({taskId:M.task.id,title:M.task.title,reason:M.reason})),skipped:W.skipped.map(M=>({taskId:M.task.id,skipReason:M.skipReason,reason:M.reason})),diskGate:W.diskGate,resourceGate:W.resourceGate,inspected:W.inspected,pagesScanned:W.pagesScanned??null,candidatesExhausted:W.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 F=vg(),D=[],V=[],O=Number(W.inspected)||0,ee=!1;async function j(v,R,A){let M=await Mo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&cn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},hc(R));let G={taskId:v.id,started:!1,error:R,released:M.released,releaseResponse:M.releaseResponse,...A};return D.push(G),ye("outcome",{lastOutcome:G}),!1}async function zb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return j(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return j(R,"land_pr task missing prUrl");try{let G=await By({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 Uy({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(D.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):j(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return j(R,G.message)}}async function Xb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Mo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&cn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},hc(R));let M={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return D.push(M),ye("outcome",{lastOutcome:M}),!1}async function Qb(v){let R=v.task,A=LN(v),M=String(R.id);if(_&&!S.has(M))return j(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=BN(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return j(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return j(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(_g(l.id,M))return Xb(R);let qe=Number(R.attempt)||1;if(qe>F.maxTaskAttempts)return j(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${F.maxTaskAttempts})`);let lt=R.leaseToken?String(R.leaseToken).trim():"";if(!lt)return j(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let ct=x(`t-${R.id}-a${R.attempt}`),Rr=oi({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:sf(R)});Vh({taskId:M,leaseToken:lt,runId:l.id,workerName:ct,provider:Rr.provider??null});let ca=yg({task:R,routing:Rr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!ca.ok)return j(R,ca.error??"model_routing_mismatch",{modelRoutingGuard:ca});if($y(R)){let Ce=await jy({agentOsId:u,taskId:M,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return j(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==M)return j(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let jo=Rk(Rr.provider);if(!jo.ok)return j(R,`provider_quota_exhausted: ${jo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:jo.provider,retryAt:jo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Vo=Ng({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}),rd=ok({runId:l.id,workerName:ct,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Fa()});if(!rd.admitted)return j(R,`admission_refused: ${rd.reason}`,{nonFatal:!0});let Go=A?.workerMcpToken??null;if(Go&&ao()){let Dt=cy({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Dt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Dt.code}: ${Dt.detail}) \u2014 spawning without tools`),Go=null;else{let ua=await ly(Dt.context);ua.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${ua.error??`HTTP ${ua.httpStatus}`}) \u2014 spawning without tools`),Go=null)}}Pg(l.id,String(R.id),{except:ct});let ar=await ay(l,{name:ct,task:FN(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Dt=>Dt.trim()).filter(Boolean):[],model:Rr.model,provider:Rr.provider,routingRule:Rr.rule,requestedModel:Rr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Vo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Vo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Vo?.targetPrUrl,repairTargetBranch:Vo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Go,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:lt,dispatched:!0,executionMode:Fs(R)}),Yo=await Ky({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:lt,worker:ar,baseUrl:d,secret:p});if(!Yo.ok)return Hy(l.id,ar,Yo.error??"dispatch_start_readback_failed"),nt(l.id,ct),j(R,Yo.error??"dispatch_start_readback_failed",{readback:Yo.detail??null});ar.leaseToken!==lt&&(ar.leaseToken=lt,ar.leaseOwner=k,L(l.id,ar)),Pi({taskId:M,leaseToken:lt}),ek(l.id,ct);let td={taskId:R.id,started:!0,worker:ar.name,pid:ar.pid,branch:ar.branch,model:ar.model,provider:Rr.provider,routingRule:Rr.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 D.push(td),ye("worker_started",{lastOutcome:td}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${M}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${M}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${M}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??M}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${M}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return nt(l.id,ct),j(R,Ce.message)}}let la=new Set;for(let v of zh(l.id))la.add(v);async function zu(v){let R=v.task,A=String(R.id);if(la.has(A))return j(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let M=b?zm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=M&&!M.allow?await j(R,`desktop_execution_policy_denied:${M.code}: ${M.reason}`,{desktopPolicyDenied:M.code,...M.code==="operation_not_approved"?{nonFatal:!0}:{}}):qu(v)?await zb(v):await Qb(v);return G||(la.add(A),qh(A,l.id)),G}for(let v of W.started)await zu(v);if(V.push(...W.skipped??[]),_)for(let v of V){let R=String(v.task.id);S.has(R)&&D.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&D.length<C;){if(yr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};D.push(A),ye("circuit_breaker",{lastOutcome:A});break}let v=await jr(1);if(!v.dispatch.ok||!v.result){let A=Qm(v.dispatch.response),M=ke();ee=A&&M>0;let G=Rl(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}:{},...ee?{nonFatal:!0,partialTopUp:!0}:{}};D.push(qe),ye("top_up_failed",{partialTopUpInterrupted:ee,lastOutcome:qe});break}O+=Number(v.result.inspected)||0,V.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(D.length>=C)break;await zu(A)}}let $o=D.filter(v=>v.started).length,Vr=Vy(W),Nt=Gy(W),Xu=$o===0&&(Vr?.capacityIdle===!0||Number(W.resourceGate?.slotsAvailable)>0);if(Xu&&Vr?.summary){let v=Vr.skipReasonCounts?.retry_ceiling_exceeded??0,R=W.overAttemptIdleRecovery??Vr.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",M=Nt?`; dispatch_skip_drain scanned=${Nt.scanned??0} advanced=${Nt.advanced??0}`:"",G=Vr.progressionReport?.summary?`; ${Vr.progressionReport.summary}`:"",qe=Nt?.prLifecycleAttempt?.summary?`; ${Nt.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Vr.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${M}${G}${qe}`)}let Qu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:$o,capacityIdle:Xu,admissionExhaustion:Vr,dispatchSkipDrain:Nt,outcomes:D,skipped:V.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:O,pagesScanned:W.pagesScanned??null,candidatesExhausted:W.candidatesExhausted??null,diskGate:W.diskGate,resourceGate:W.resourceGate,...ee?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:ir},Zu=v=>!v.started&&v.nonFatal!==!0,Zb=D.some(Zu),ed=ee&&$o>0?!0:!Zb;if(ro({runId:l.id,agentOsId:u,phase:"complete",partial:ee,startedCount:$o,ok:ed}),r)return{ok:ed,...Qu};console.log(JSON.stringify(Qu,null,2)),D.some(Zu)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var HN=1;function kn(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function $N(e){let{maxStarts:r,...t}=e;return t}async function Zc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=$N(e);if(t.targetTaskId||t.targetTaskIds){let u=await ji({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:kn(u)}}let n=Math.min(r,HN),o=Math.max(0,r-n),s=await ji({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=kn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await ji({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=kn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Yy(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 jN(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Wo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function VN(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Jy(e,r){let t=jN(r),n=Wo(t?.recommendedMaxStarts),o=Wo(t?.actionableReady),s=Wo(t?.queuedTasks),i=Wo(t?.boardAdvancedThisTick)??0,a=Wo(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=VN("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 BD from"node:path";B();Bn();me();T();import GN from"node:path";var YN=new Set(["running","dispatching","pending","queued","needs_attention"]),xt=new Set(["completed","failed","cancelled","done"]);function _t(e){let r=lr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(GN.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=z(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Yp(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Lo(){let e=[];for(let r of Qe()){if(!YN.has(r.status))continue;let t=_t(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Bn();me();T();pt();$n();import{existsSync as at,lstatSync as yD,readdirSync as RD,readlinkSync as vD,renameSync as cu,unlinkSync as bD}from"node:fs";import gr from"node:path";Fe();T();import sr from"node:path";var JN=`${sr.sep}runs${sr.sep}runs${sr.sep}`;function Vi(e){return e.includes(JN)}function eu(e,r){return sr.join(Ae(ge(e)),x(r))}function st(e,r,t){return sr.join(eu(e,r),"workers",x(t))}function qy(e,r,t){let n=ge(e);return sr.join(n,"runs","runs",x(r),"workers",x(t))}function ru(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Et(e){return{workerJsonPath:sr.join(e,"worker.json"),stdoutPath:sr.join(e,"stdout.jsonl"),stderrPath:sr.join(e,"stderr.log"),heartbeatPath:sr.join(e,"heartbeat.jsonl"),lastStatusPath:sr.join(e,"last-status.json")}}function zy(e){let r=Et(st(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Vi(e.statusPath)?e.statusPath:r}import{existsSync as it,mkdirSync as uD,readdirSync as tR,renameSync as dD,statSync as ou}from"node:fs";import se from"node:path";H();On();Gr();import qN from"node:path";function zN(e){return qN.resolve(We(e.trim()))}function tu(e,r,t){let n=e?.trim();return n?{repo:zN(n),source:r,persistedInConfig:t}:null}function XN(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Xy(e={}){let r=e.env??process.env,t=e.config??U(),n=tu(t.defaultRepo,"config",!0);if(n)return n;let o=tu(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=tu(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||XN(es({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}ue();pt();Fe();B();T();H();import{existsSync as QN,readFileSync as ZN,readdirSync as eD,statSync as rD,writeFileSync as tD}from"node:fs";import nD from"node:path";var De="<redacted>",nu=`[^\\s"'\\\\,}\\]]`,oD=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${nu}+`,"gi"),De],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${nu}+`,"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>)${nu}+`,"g"),`$1${De}`]],sD=12,iD=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,aD=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,lD=256*1024*1024;function cD(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=sD))].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 oD)t=t.replace(o,s);return t}function Qy(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&iD.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Zy(e,r=0){if(r>3||!QN(e))return[];let t=[];for(let n of eD(e,{withFileTypes:!0})){let o=nD.join(e,n.name);n.isDirectory()?t.push(...Zy(o,r+1)):n.isFile()&&aD.test(n.name)&&t.push(o)}return t}function eR(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Zy(e)}catch{return t}for(let o of n)try{if(rD(o).size>lD){t.failed.push(o);continue}let s=ZN(o,"utf8"),i=cD(s,r);if(i===s){t.clean+=1;continue}tD(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Bo=900*1e3,pD=3600*1e3;function nR(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 su(e){if(!it(e))return[];try{return tR(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function iu(e){let r=se.join(e,"workers");if(!it(r))return[];try{return tR(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function oR(e){return se.join(e,"archived-workers")}function mD(e,r){let t=se.join(oR(e),x(r));return it(t)?`${t}-${Date.now()}`:t}function rR(e,r,t){if(!it(e))return!1;try{let n=r-ou(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function sR(e,r=Date.now(),t=Bo){if(!it(e))return!1;let n=Et(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=pe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(rR(n.stdoutPath,r,t)||rR(n.heartbeatPath,r,t))}function fD(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-ou(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function gD(e,r,t,n){if(sR(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=fD(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function yn(e,r=Date.now(),t=Bo){for(let n of iu(e))if(sR(se.join(e,"workers",n),r,t))return!0;return!1}function hD(){let r=Xy()?.repo??"",t="unknown";if(r)try{let n=re(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function kD(e,r){let t=se.join(Ae(e),x(r));if(!it(t))return null;let n=iu(t);if(n.length===0)return null;let o;try{o=ou(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=st(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=yn(t);return{id:r,name:r,...hD(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function au(e){let r=ge(e??Ue()),t=Ae(r),n=[];for(let o of su(t)){let s=se.join(t,o,"run.json");if(it(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=kD(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:yn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function lu(e,r={}){let t=ge(e??Ue()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??pD,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Qy(process.env,[Ar,()=>qt()])))();au(t);for(let c of su(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||{}),...iu(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(oR(u),x(y));if(it(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=gD(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=mD(u,y);uD(se.dirname(w),{recursive:!0}),dD(k,w),eR(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 iR(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of su(n)){let s=se.join(n,o);yn(s,r)&&t.add(`${e}\0${o}`)}return t}B();T();function SD(e,r){let t=eu(e,r),n;try{n=yD(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=gr.resolve(gr.dirname(t),vD(t));if(yn(o)||yn(t))return null;let s=`${t}.materialize-${Date.now()}`;return cu(o,s),bD(t),cu(s,t),o}function wD(e){let r=[];for(let t of ru()){let n=gr.join(e.fromDir,t),o=gr.join(e.toDir,t);!at(n)||at(o)||(cu(n,o),r.push(t))}return r}function aR(e,r){let t=Et(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function xD(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 _D(e){let r=Et(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=at(r.stdoutPath),o=at(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?ft(r.stdoutPath):{finalResult:null},a=o?pe(r.heartbeatPath):pe(""),l=xr(a),c=xD({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:gr.join(ae().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}),aR(u,e.canonicalDir),u}function ED(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=st(r,e.id,o),a=gr.join(i,"worker.json");(Vi(s.workerDir)||Vi(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 CD(e){let r=[],t=st(e.harnessRoot,e.run.id,e.workerName),n=qy(e.harnessRoot,e.run.id,e.workerName),o=Et(t),s=wD({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=zy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&at(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=_D({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=at(t),u=ru().some(d=>at(gr.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:gr.join(ae().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 aR(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 PD(e,r){let t=gr.join(N(e.id),"workers");if(!at(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of RD(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function lR(){let{harnessRoot:e}=ae(),r=au(e),t=[];for(let n of Qe()){let o=SD(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),ED(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 PD(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:st(e,n.id,i),statusPath:gr.join(st(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(...CD({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}pt();gs();me();B();Bn();T();import{execFileSync as cR}from"node:child_process";import uR from"node:path";function uu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function AD(e){let r=uu(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function ID(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function OD(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 TD(e){let r=null;if(typeof e=="string"?r=jt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=uu(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 ND(e){try{let n=cR("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=cR("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:uu(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 DD(e){let r=pe(e.heartbeatPath);return e.completionSnapshot?.finalResult??xr(r)}function MD(e){let r=new Map,t=N(e.id);for(let n of lr(e)){let o=I(uR.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of TD(DD(o))){let i=AD(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function WD(e,r){let t=pe(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,ID(r)].filter(Boolean).join(`
|
|
176
|
-
`);return
|
|
177
|
-
`,{mode:384}),
|
|
178
|
-
`);a.trim()&&(
|
|
170
|
+
`)}})}write(r,t){if(!r.destroyed)try{r.write(Bl(t))}catch{}}async handleLine(r,t){let n=Ul(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!sn(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await ri({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 ay={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 $c(){return ay}import{existsSync as KT,writeFileSync as HT}from"node:fs";import Vc from"node:path";import{fileURLToPath as $T}from"node:url";var jT="claude-compaction-hook-settings.json";function VT(){return Vc.join(Vc.dirname($T(import.meta.url)),"hooks","precompact-spool.js")}function jc(e){return`'${e.replace(/'/g,"'\\''")}'`}function GT(e){return[jc(e.nodePath),jc(e.scriptPath),"--spool",jc(e.spoolDir)].join(" ")}function YT(e){return{hooks:{PreCompact:[{hooks:[{type:"command",command:e,timeout:30}]}]}}}function ly(e){let r=e.scriptPath??VT();if(!KT(r))return null;let t=GT({nodePath:e.nodePath??process.execPath,scriptPath:r,spoolDir:Bi(e.workerDir)}),n=Vc.join(e.workerDir,jT);return HT(n,`${JSON.stringify(YT(t),null,2)}
|
|
171
|
+
`,{mode:384}),n}var zT=7200*1e3;async function cy(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||Tr,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:si({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=Fg(o.provider),i=o.model;if(s.preflightModel){let F=s.preflightModel(r.model);if(!F.ok)throw new Error(`model preflight failed for provider "${s.name}": ${F.note??"invalid model/provider combination"}`);F.normalized&&console.error(`[supervisor] ${n}: ${F.note}`),i=F.model}let{worktreesDir:a}=ae(),l=gn.join(N(e.id),"workers",n);qT(l,{recursive:!0});let c=gn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(JT(c))throw new Error(`worktree path already exists: ${c}`);if(re(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)ry(e.repo,c,u);else{let F=Ng({baseCommit:e.baseCommit,base:e.base,verifyRef:D=>re(e.repo,["rev-parse","--verify","--quiet",`${D}^{commit}`],{allowFailure:!0}).trim().length>0});F.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${F.ref} (${F.source})`),e.baseCommit=re(e.repo,["rev-parse",F.ref],{allowFailure:!0}).trim()||F.ref,Ie(e)),re(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=gn.join(l,"stdout.jsonl"),m=gn.join(l,"stderr.log"),f=gn.join(l,"heartbeat.jsonl"),y=Lg({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=fi({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Fl(s.name)&&ao()){let F=pl();F&&r.agentOsId&&r.taskId?(w={apiBaseUrl:F,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=Lf(s.name);if(_&&K&&ao()){let F=pl();if(F&&r.agentOsId&&r.taskId){let D=Kc({agentOsId:String(r.agentOsId),workerKey:l}),V=await Do.start({address:D,apiBaseUrl:F,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+zT,workerPid:process.pid,identity:$c(),onRefusal:O=>console.error(`[supervisor] ${n}: worker tools refused a call (${O})`)});if(cc(l,V),s.name==="codex"){let O=hh({workerDir:l,brokerSocketPath:D.socketPath});if(O.ok){let ee=kh(O.codexHome,$l());ee.ok?(E=O.codexHome,h=E):(wo(l),await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${ee.detail}); spawning with the normal environment`))}else await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`)}else if(s.name==="cursor"){let O=fh({worktreePath:c,brokerSocketPath:D.socketPath});O.ok?h=O.configPath:(await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`))}else if(s.name==="gemini"&&ni(ti())==="antigravity"){let O=wh({worktreePath:c,brokerSocketPath:D.socketPath});O.ok?h=O.configPath:(await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`))}else if(s.name==="gemini"){let O=_h({workerDir:l,brokerSocketPath:D.socketPath});O.ok?(S=O.geminiCliHome,h=S):(await Qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${O.detail}`))}else h=Uf({workerDir:l,brokerSocketPath:D.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${V.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $;if(s.name==="claude"&&r.agentOsId&&r.taskId&&process.platform!=="win32"&&!Lc())try{$=ly({workerDir:l})??void 0}catch(F){console.error(`[supervisor] ${n}: compaction hook skipped \u2014 ${F.message}`)}let C=r.taskId?_p(Ep(e.id,String(r.taskId),n)):null,Q;try{Q=Cp(C,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:fg(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}:{},...$?{settingsPath:$}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:Wf(r.workerMcpCapabilities)}:{}}))}catch(F){throw h&&(Xs(l),ki(c),wo(l),vi(l),Ri(c),ln(l)),re(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),re(e.repo,["branch","-D",d],{allowFailure:!0}),F}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 we=yg(Q.model,i,s.defaultModel),Je=U(),ir=Sr(process.env,Je),jr=$e().runnerId,he=Es({boxKind:ir.boxKind,config:Je,env:process.env}),W={name:n,runId:e.id,status:"running",pid:Q.pid,model:we,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:ir.boxKind,boxId:he,runtimeId:jr,startedAt:new Date().toISOString(),...C?{oomRetryHeapMb:C}:{}};if(L(e.id,W),lc(l,Q.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:gn.join(l,"worker.json")}},e.status="running",Ie(e),W.agentOsId&&W.taskId){let F;try{F=ey({runId:e.id,workerName:n,workerDir:l,agentOsId:W.agentOsId})}catch(D){let V=`completion sidecar failed to spawn: ${D.message}`;W.completionBlocker=V,L(e.id,W)}if(F)F.pid&&(W.completionSidecarPid=F.pid,L(e.id,W));else{let D=W.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";W.completionBlocker=D,W.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,W),Og(e.id,W,D)}}return W}H();qn();function XT(e,r){let t=qt(r)?.trim();return t||Ze("KYNVER_RUNNER_TOKEN",e)||Ze("OPENCLAW_RUNNER_TOKEN",e)||null}function QT(e){let r=Ar()?.trim();return r||Ze("KYNVER_API_KEY",e)||Ze("KYNVER_RUNTIME_SECRET",e)||Ze("KYNVER_CRON_SECRET",e)||Ze("OPENCLAW_CRON_SECRET",e)||null}async function uy(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=XT(t,e.agentOsId),l=QT(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}Mn();function ZT(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Nn(t)??null:null}function eN(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function rN(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function dy(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=ZT(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=eN(t,o),l=rN(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()}}}T();H();import{mkdirSync as my}from"node:fs";import{homedir as tN,tmpdir as lX}from"node:os";import Hi from"node:path";function fy(){let e=process.env.KYNVER_STATE_ROOT;return e?Hi.resolve(e):Hi.join(tN(),".kynver","state")}function $i(){return Hi.join(fy(),"plan-outbox")}function nN(){return Hi.join(fy(),"plan-outbox-archive")}function gy(){let e=$i(),r=nN();return my(e,{recursive:!0}),my(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var mX=600*1e3,Mo={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function hy(){return{"planOutbox.storeFailures":Mo.storeFailures,"planOutbox.corruptItemsSeen":Mo.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Mo.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Mo.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Mo.halfArchivesCompleted}}import{existsSync as iN,readFileSync as aN,renameSync as kX,readdirSync as yX,rmSync as RX,writeFileSync as vX,unlinkSync as bX}from"node:fs";import ky from"node:path";function yy(e){if(!iN(e))return null;try{return JSON.parse(aN(e,"utf8"))}catch{return null}}function ji(e){let{outboxDir:r}=gy();return{jsonPath:ky.join(r,`${e.id}.json`),bodyPath:ky.join(r,e.bodyPath)}}import mN from"node:path";function Jc(e){let r=mN.join($i(),`${e}.json`);return yy(r)}function qc(e){let r=ji(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(`
|
|
172
|
+
`)}function zc(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 Xc(e){return e?.trim()?e.trim():null}function Ry(e,r){let t=Xc(e.boxKind),n=Xc(e.runnerId),o=Xc(e.harnessRoot);return t&&t!==r.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${t}" but this host is "${r.boxKind}" \u2014 use a run under ${r.harnessRoot}`}:n&&n!==r.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${r.runnerId}"`}:o&&o!==r.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${r.harnessRoot}"`}:!t||!n||!o?(e.boxKind=r.boxKind,e.runnerId=r.runnerId,e.harnessRoot=r.harnessRoot,Ie(e),{ok:!0,stamped:!0}):{ok:!0}}H();zn();function vy(e=process.env){return Jt(U(),e,{requireExplicitBoxKind:!0})}function by(e){return[...e.errors,...e.warnings].join("; ")}async function Wo(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await J(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,transportError:!1,releaseResponse:t.response??t}}function hn(e){if(!e||typeof e!="object")return!1;let r=e;return[r.agentOsId,r.subjectTaskId,r.reviewTaskId,r.signature].every(t=>typeof t=="string"&&!!t)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(r.prUrl)&&/^[a-f0-9]{40}$/.test(r.headSha)&&/^[a-f0-9]{64}$/.test(r.reviewGenerationSha256)&&Number.isSafeInteger(r.reviewAttempt)&&r.reviewAttempt>0&&typeof r.acceptedAt=="string"&&Number.isFinite(Date.parse(r.acceptedAt))}function Sy(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 Wy}from"node:child_process";var wy=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function ot(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function xy(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 _y(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=ot(o),i=t.get(s);(!i||xy(o)>=xy(i))&&t.set(s,o)}return[...t.values()]}function fN(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 Ey(e){let r=_y(e),t=[],n=[],o=[];for(let s of r){if(fN(s)){o.push(ot(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&&wy.has(i))){if(i){n.push(`${ot(s)}=${i}`);continue}if(!(l&&wy.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${ot(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${ot(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${ot(s)}=${a}`);continue}t.push(`${ot(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function Cy(e){return _y(e).some(t=>{let n=ot(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 gN=new Set(["CLEAN","HAS_HOOKS"]);function Py(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!gN.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as hN}from"node:child_process";function Ay(){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=hN("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 kN,randomUUID as yN}from"node:crypto";import{closeSync as Iy,fsyncSync as Oy,mkdirSync as RN,openSync as Ty,realpathSync as vN,writeFileSync as bN}from"node:fs";import Qc from"node:path";function Dy(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(r=>typeof r=="string"&&!!r.trim())}function Ny(e,r,t,n){RN(e,{recursive:!0,mode:448});let o=vN(e),s=Ty(Qc.join(o,`${r}.${t}.json`),"wx",384);try{bN(s,JSON.stringify({...n,phase:t},null,2)+`
|
|
173
|
+
`),Oy(s)}finally{Iy(s)}for(let i=o;;i=Qc.dirname(i)){let a=Ty(i,"r");try{Oy(a)}catch(l){if(!SN(l))throw l}finally{Iy(a)}if(i===Qc.dirname(i))break}}function SN(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function My(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:kN("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:yN(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return Ny(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return Ny(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function eu(e){return e?.trim()?["--repo",e.trim()]:[]}function Ly(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function By(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 wN=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,xN=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,_N=/^docs[(:]/i,EN=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function CN(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=_N.test(r)||EN.test(t),o=wN.test(t),s=xN.test(t);return n||o||s||e.vercelCheckSuccess===!0}function PN(e){if(!CN({title:e.title,body:e.body,vercelCheckSuccess:Cy(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 AN(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=Ey(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=Py(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function IN(e){AN(e),PN(e)}function ON(e){try{return IN(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function TN(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 NN(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 DN(e,r){if(!r?.trim())return;let t=Wy("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}`)&&Wy("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function Uy(e){let r=e.cwd??process.cwd(),t=e.exec??hi,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!hn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=Ay();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=By(t,r,["pr","view",n,...eu(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=ON(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)||!Dy(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!hn(u)||!Sy(o,u))return s();let d=My(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...eu(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=Zc(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=Zc(t,r,c,e.repo);if(f||(f=Zc(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=NN(t,r,e.repo);TN(t,r,k,a.headRefName),DN(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 Zc(e,r,t,n){try{let o=By(e,r,["pr","view",t,...eu(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function Fy(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return Uy({prUrl:n,cwd:e.cwd,repo:Ly(n),exec:e.exec,operation:e.operation,acceptedReview:hn(t)?t:void 0,revalidateAcceptedReview:async()=>{let o=await J(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(r.id))}/landing-review`,e.secret,{leaseToken:r.leaseToken,leaseOwner:r.leaseOwner,attempt:r.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&hn(s.acceptedReview)?s.acceptedReview:null}})}H();async function Ky(e){let r=await te(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 J(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Hy(){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(`
|
|
174
|
+
`)}var MN="dispatch_start_readback_failed:";function wt(e){return`${MN} ${e.trim()}`}function WN(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 LN(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:wt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:wt(`AgentOS task status=${r.status} (expected running)`),detail:{taskId:r.taskId,status:r.status,leaseOwner:r.leaseOwner,blocker:r.blocker},snapshot:r};let s=r.leaseOwner?.trim()??"";if(!s||s!==t.trim())return{ok:!1,error:wt(`leaseOwner mismatch (board=${s||"null"}, expected=${t})`),detail:{taskId:r.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:t},snapshot:r};let i=r.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:wt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=WN(o);return a?{ok:!1,error:wt(a),detail:{taskId:o.taskId,worker:o.name},snapshot:r}:r.heartbeatAt?.trim()?o.executorRef?.trim()&&r.executorRef?.trim()&&o.executorRef.trim()!==r.executorRef.trim()?{ok:!1,error:wt(`executorRef mismatch (board=${r.executorRef}, worker=${o.executorRef})`),detail:{taskId:r.taskId,boardExecutorRef:r.executorRef,workerExecutorRef:o.executorRef},snapshot:r}:{ok:!0,snapshot:r}:{ok:!1,error:wt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function $y(e){let r=await ai({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return LN({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}T();B();function jy(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 Vy(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 Gy(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,t=await J(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 Xl=3600*1e3;function Yy(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Jy(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function BN(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=FN(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 UN(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function FN(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 KN(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("",Hy());let n=zc(e);if(n?.outboxId){let o=Jc(n.outboxId);o?t.push("",qc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
175
|
+
`)}function HN(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Vi(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ke=function(){return D.filter(v=>v.started).length},ye=function(v,R){ro({runId:l.id,agentOsId:u,phase:v,startedCount:ke(),outcomeCount:D.length,cappedStarts:C,...R})},yr=function(){return D.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Xu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ke,n=ye,o=yr,s=Xu;let i=vy();if(!i.ok||!i.identity){let v=by(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(vr(String(e.run||""),"--run"))),c=Ry(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(vr(String(e.agentOsId||""),"--agent-os-id")),d=Z(e.baseUrl?String(e.baseUrl):void 0),p=await te(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=$e({runId:l.id}),k=ho(l.id,y.runnerId),b=qm(),g=b?Xm(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?Yr({diskPath:String(e.diskPath)}):Yr({diskPath:l.repo}),E=await af({runId:l.id,agentOsId:u,args:e}),S=HN(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 J(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 Q=Fs(l.id),we=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Je=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Xl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:Q,runnerPresence:y,harnessBoardSnapshot:Uc(l.id),...e.lane?{lane:sf(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)}:{}}),ir=Zm(),jr=async v=>{let R=b&&g?zm(g):void 0,A=await J(we,p,Je(v,R),{agentOsId:u,baseUrl:d,timeoutMs:ir})??{ok:!1,status:0,response:null},M=A.response;if(R&&Array.isArray(M?.result?.started))for(let G of M.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:M?.result}};f||ro({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:ir});let he=await jr(_||f?C:1);if(!he.dispatch.ok||!he.result){let v=vl(he.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:he.dispatch.status,response:he.dispatch.response,authRefreshed:he.dispatch.refreshedAuth===!0,authRefreshFailure:he.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&ro({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:he.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let W=he.result;if(f){let v=Yy(W),R=Jy(W),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:W.started.map(M=>({taskId:M.task.id,title:M.task.title,reason:M.reason})),skipped:W.skipped.map(M=>({taskId:M.task.id,skipReason:M.skipReason,reason:M.reason})),diskGate:W.diskGate,resourceGate:W.resourceGate,inspected:W.inspected,pagesScanned:W.pagesScanned??null,candidatesExhausted:W.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 F=Sg(),D=[],V=[],O=Number(W.inspected)||0,ee=!1;async function j(v,R,A){let M=await Wo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&cn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},kc(R));let G={taskId:v.id,started:!1,error:R,released:M.released,releaseResponse:M.releaseResponse,...A};return D.push(G),ye("outcome",{lastOutcome:G}),!1}async function Qb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return j(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return j(R,"land_pr task missing prUrl");try{let G=await Fy({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 Ky({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(D.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):j(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return j(R,G.message)}}async function Zb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Wo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&cn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},kc(R));let M={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return D.push(M),ye("outcome",{lastOutcome:M}),!1}async function eS(v){let R=v.task,A=BN(v),M=String(R.id);if(_&&!S.has(M))return j(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=UN(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return j(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return j(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(Cg(l.id,M))return Zb(R);let qe=Number(R.attempt)||1;if(qe>F.maxTaskAttempts)return j(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${F.maxTaskAttempts})`);let lt=R.leaseToken?String(R.leaseToken).trim():"";if(!lt)return j(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let ct=x(`t-${R.id}-a${R.attempt}`),Rr=si({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:lf(R)});Yh({taskId:M,leaseToken:lt,runId:l.id,workerName:ct,provider:Rr.provider??null});let ua=vg({task:R,routing:Rr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!ua.ok)return j(R,ua.error??"model_routing_mismatch",{modelRoutingGuard:ua});if(Vy(R)){let Ce=await Gy({agentOsId:u,taskId:M,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return j(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==M)return j(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let Vo=bk(Rr.provider);if(!Vo.ok)return j(R,`provider_quota_exhausted: ${Vo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Vo.provider,retryAt:Vo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Go=Mg({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}),nd=ik({runId:l.id,workerName:ct,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Ka()});if(!nd.admitted)return j(R,`admission_refused: ${nd.reason}`,{nonFatal:!0});let Yo=A?.workerMcpToken??null;if(Yo&&ao()){let Dt=dy({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Dt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Dt.code}: ${Dt.detail}) \u2014 spawning without tools`),Yo=null;else{let da=await uy(Dt.context);da.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${da.error??`HTTP ${da.httpStatus}`}) \u2014 spawning without tools`),Yo=null)}}Ig(l.id,String(R.id),{except:ct});let ar=await cy(l,{name:ct,task:KN(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Dt=>Dt.trim()).filter(Boolean):[],model:Rr.model,provider:Rr.provider,routingRule:Rr.rule,requestedModel:Rr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Go?.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:Go?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Go?.targetPrUrl,repairTargetBranch:Go?.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:Yo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:lt,dispatched:!0,executionMode:Ks(R)}),Jo=await $y({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:lt,worker:ar,baseUrl:d,secret:p});if(!Jo.ok)return jy(l.id,ar,Jo.error??"dispatch_start_readback_failed"),nt(l.id,ct),j(R,Jo.error??"dispatch_start_readback_failed",{readback:Jo.detail??null});ar.leaseToken!==lt&&(ar.leaseToken=lt,ar.leaseOwner=k,L(l.id,ar)),Ai({taskId:M,leaseToken:lt}),tk(l.id,ct);let od={taskId:R.id,started:!0,worker:ar.name,pid:ar.pid,branch:ar.branch,model:ar.model,provider:Rr.provider,routingRule:Rr.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 D.push(od),ye("worker_started",{lastOutcome:od}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${M}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${M}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${M}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??M}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${M}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return nt(l.id,ct),j(R,Ce.message)}}let ca=new Set;for(let v of Qh(l.id))ca.add(v);async function Qu(v){let R=v.task,A=String(R.id);if(ca.has(A))return j(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let M=b?Qm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=M&&!M.allow?await j(R,`desktop_execution_policy_denied:${M.code}: ${M.reason}`,{desktopPolicyDenied:M.code,...M.code==="operation_not_approved"?{nonFatal:!0}:{}}):Xu(v)?await Qb(v):await eS(v);return G||(ca.add(A),Xh(A,l.id)),G}for(let v of W.started)await Qu(v);if(V.push(...W.skipped??[]),_)for(let v of V){let R=String(v.task.id);S.has(R)&&D.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&D.length<C;){if(yr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};D.push(A),ye("circuit_breaker",{lastOutcome:A});break}let v=await jr(1);if(!v.dispatch.ok||!v.result){let A=ef(v.dispatch.response),M=ke();ee=A&&M>0;let G=vl(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}:{},...ee?{nonFatal:!0,partialTopUp:!0}:{}};D.push(qe),ye("top_up_failed",{partialTopUpInterrupted:ee,lastOutcome:qe});break}O+=Number(v.result.inspected)||0,V.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(D.length>=C)break;await Qu(A)}}let jo=D.filter(v=>v.started).length,Vr=Yy(W),Nt=Jy(W),Zu=jo===0&&(Vr?.capacityIdle===!0||Number(W.resourceGate?.slotsAvailable)>0);if(Zu&&Vr?.summary){let v=Vr.skipReasonCounts?.retry_ceiling_exceeded??0,R=W.overAttemptIdleRecovery??Vr.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",M=Nt?`; dispatch_skip_drain scanned=${Nt.scanned??0} advanced=${Nt.advanced??0}`:"",G=Vr.progressionReport?.summary?`; ${Vr.progressionReport.summary}`:"",qe=Nt?.prLifecycleAttempt?.summary?`; ${Nt.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Vr.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${M}${G}${qe}`)}let ed={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:jo,capacityIdle:Zu,admissionExhaustion:Vr,dispatchSkipDrain:Nt,outcomes:D,skipped:V.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:O,pagesScanned:W.pagesScanned??null,candidatesExhausted:W.candidatesExhausted??null,diskGate:W.diskGate,resourceGate:W.resourceGate,...ee?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:ir},rd=v=>!v.started&&v.nonFatal!==!0,rS=D.some(rd),td=ee&&jo>0?!0:!rS;if(ro({runId:l.id,agentOsId:u,phase:"complete",partial:ee,startedCount:jo,ok:td}),r)return{ok:td,...ed};console.log(JSON.stringify(ed,null,2)),D.some(rd)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var $N=1;function kn(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function jN(e){let{maxStarts:r,...t}=e;return t}async function ru(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=jN(e);if(t.targetTaskId||t.targetTaskIds){let u=await Vi({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:kn(u)}}let n=Math.min(r,$N),o=Math.max(0,r-n),s=await Vi({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=kn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Vi({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=kn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function qy(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 VN(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Lo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function GN(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function zy(e,r){let t=VN(r),n=Lo(t?.recommendedMaxStarts),o=Lo(t?.actionableReady),s=Lo(t?.queuedTasks),i=Lo(t?.boardAdvancedThisTick)??0,a=Lo(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=GN("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 UD from"node:path";B();Bn();me();T();import YN from"node:path";var JN=new Set(["running","dispatching","pending","queued","needs_attention"]),xt=new Set(["completed","failed","cancelled","done"]);function _t(e){let r=lr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(YN.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=z(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),qp(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Bo(){let e=[];for(let r of Qe()){if(!JN.has(r.status))continue;let t=_t(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Bn();me();T();pt();$n();import{existsSync as at,lstatSync as RD,readdirSync as vD,readlinkSync as bD,renameSync as du,unlinkSync as SD}from"node:fs";import gr from"node:path";Fe();T();import sr from"node:path";var qN=`${sr.sep}runs${sr.sep}runs${sr.sep}`;function Gi(e){return e.includes(qN)}function tu(e,r){return sr.join(Ae(ge(e)),x(r))}function st(e,r,t){return sr.join(tu(e,r),"workers",x(t))}function Xy(e,r,t){let n=ge(e);return sr.join(n,"runs","runs",x(r),"workers",x(t))}function nu(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Et(e){return{workerJsonPath:sr.join(e,"worker.json"),stdoutPath:sr.join(e,"stdout.jsonl"),stderrPath:sr.join(e,"stderr.log"),heartbeatPath:sr.join(e,"heartbeat.jsonl"),lastStatusPath:sr.join(e,"last-status.json")}}function Qy(e){let r=Et(st(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Gi(e.statusPath)?e.statusPath:r}import{existsSync as it,mkdirSync as dD,readdirSync as oR,renameSync as pD,statSync as iu}from"node:fs";import se from"node:path";H();On();Gr();import zN from"node:path";function XN(e){return zN.resolve(We(e.trim()))}function ou(e,r,t){let n=e?.trim();return n?{repo:XN(n),source:r,persistedInConfig:t}:null}function QN(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Zy(e={}){let r=e.env??process.env,t=e.config??U(),n=ou(t.defaultRepo,"config",!0);if(n)return n;let o=ou(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=ou(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||QN(rs({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}ue();pt();Fe();B();T();H();import{existsSync as ZN,readFileSync as eD,readdirSync as rD,statSync as tD,writeFileSync as nD}from"node:fs";import oD from"node:path";var De="<redacted>",su=`[^\\s"'\\\\,}\\]]`,sD=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${su}+`,"gi"),De],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${su}+`,"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([Bb]earer|BEARER|[Bb]asic|BASIC)\s+(?!<redacted>)(?![A-Za-z][a-z]{0,14}(?:-[A-Za-z][a-z]{0,14})*(?![A-Za-z0-9_~+/=-]|\.[A-Za-z0-9_~+/=-]))[A-Za-z0-9._~+/=-]{8,}/g,`$1 ${De}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${su}+`,"g"),`$1${De}`]],iD=12,aD=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,lD=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,cD=256*1024*1024;function uD(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=iD))].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 sD)t=t.replace(o,s);return t}function eR(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&aD.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function rR(e,r=0){if(r>3||!ZN(e))return[];let t=[];for(let n of rD(e,{withFileTypes:!0})){let o=oD.join(e,n.name);n.isDirectory()?t.push(...rR(o,r+1)):n.isFile()&&lD.test(n.name)&&t.push(o)}return t}function tR(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=rR(e)}catch{return t}for(let o of n)try{if(tD(o).size>cD){t.failed.push(o);continue}let s=eD(o,"utf8"),i=uD(s,r);if(i===s){t.clean+=1;continue}nD(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Uo=900*1e3,mD=3600*1e3;function sR(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 au(e){if(!it(e))return[];try{return oR(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function lu(e){let r=se.join(e,"workers");if(!it(r))return[];try{return oR(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function iR(e){return se.join(e,"archived-workers")}function fD(e,r){let t=se.join(iR(e),x(r));return it(t)?`${t}-${Date.now()}`:t}function nR(e,r,t){if(!it(e))return!1;try{let n=r-iu(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function aR(e,r=Date.now(),t=Uo){if(!it(e))return!1;let n=Et(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=pe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(nR(n.stdoutPath,r,t)||nR(n.heartbeatPath,r,t))}function gD(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-iu(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function hD(e,r,t,n){if(aR(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=gD(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function yn(e,r=Date.now(),t=Uo){for(let n of lu(e))if(aR(se.join(e,"workers",n),r,t))return!0;return!1}function kD(){let r=Zy()?.repo??"",t="unknown";if(r)try{let n=re(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function yD(e,r){let t=se.join(Ae(e),x(r));if(!it(t))return null;let n=lu(t);if(n.length===0)return null;let o;try{o=iu(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=st(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=yn(t);return{id:r,name:r,...kD(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function cu(e){let r=ge(e??Ue()),t=Ae(r),n=[];for(let o of au(t)){let s=se.join(t,o,"run.json");if(it(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=yD(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:yn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function uu(e,r={}){let t=ge(e??Ue()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??mD,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>eR(process.env,[Ar,()=>qt()])))();cu(t);for(let c of au(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||{}),...lu(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(iR(u),x(y));if(it(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=hD(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=fD(u,y);dD(se.dirname(w),{recursive:!0}),pD(k,w),tR(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 lR(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of au(n)){let s=se.join(n,o);yn(s,r)&&t.add(`${e}\0${o}`)}return t}B();T();function wD(e,r){let t=tu(e,r),n;try{n=RD(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=gr.resolve(gr.dirname(t),bD(t));if(yn(o)||yn(t))return null;let s=`${t}.materialize-${Date.now()}`;return du(o,s),SD(t),du(s,t),o}function xD(e){let r=[];for(let t of nu()){let n=gr.join(e.fromDir,t),o=gr.join(e.toDir,t);!at(n)||at(o)||(du(n,o),r.push(t))}return r}function cR(e,r){let t=Et(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function _D(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 ED(e){let r=Et(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=at(r.stdoutPath),o=at(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?ft(r.stdoutPath):{finalResult:null},a=o?pe(r.heartbeatPath):pe(""),l=xr(a),c=_D({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:gr.join(ae().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}),cR(u,e.canonicalDir),u}function CD(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=st(r,e.id,o),a=gr.join(i,"worker.json");(Gi(s.workerDir)||Gi(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 PD(e){let r=[],t=st(e.harnessRoot,e.run.id,e.workerName),n=Xy(e.harnessRoot,e.run.id,e.workerName),o=Et(t),s=xD({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=Qy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&at(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=ED({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=at(t),u=nu().some(d=>at(gr.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:gr.join(ae().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 cR(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 AD(e,r){let t=gr.join(N(e.id),"workers");if(!at(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of vD(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function uR(){let{harnessRoot:e}=ae(),r=cu(e),t=[];for(let n of Qe()){let o=wD(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),CD(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 AD(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:st(e,n.id,i),statusPath:gr.join(st(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(...PD({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}pt();hs();me();B();Bn();T();import{execFileSync as dR}from"node:child_process";import pR from"node:path";function pu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function ID(e){let r=pu(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function OD(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function TD(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 ND(e){let r=null;if(typeof e=="string"?r=jt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=pu(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 DD(e){try{let n=dR("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=dR("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:pu(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 MD(e){let r=pe(e.heartbeatPath);return e.completionSnapshot?.finalResult??xr(r)}function WD(e){let r=new Map,t=N(e.id);for(let n of lr(e)){let o=I(pR.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of ND(MD(o))){let i=ID(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function LD(e,r){let t=pe(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,OD(r)].filter(Boolean).join(`
|
|
176
|
+
`);return TD(n)}function BD(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function mu(e={}){let r=e.lookupPr??DD,t=[],n=new Map;for(let o of Qe()){let s=WD(o),i=N(o.id);for(let a of lr(o)){let l=pR.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!BD(c))continue;let u=z(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of LD(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 FD=900*1e3;function KD(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function mR(e,r){let t=wi({worker:e,status:r}),n=t?xi(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 HD(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 fR(){let e=uR();if(KD()){let s=mu(),i=uu();return{workers:[],finalizedRuns:Bo(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Qe())for(let i of lr(s)){let a=UD.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=z(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=mR(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=mR(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,HD(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>FD,m=Number.isFinite(d)&&t-d>Ua;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=mu(),o=uu();return{workers:r,finalizedRuns:Bo(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Yt();B();import zD from"node:path";import{readdirSync as $D,readFileSync as jD}from"node:fs";var VD="dispatch:claim:",GD=900*1e3,YD=10080*60*1e3,JD=200,Ct={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function qD(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=$D("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(jD(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function gR(e){let r=Fr(),t={mode:r,scanned:0,outcomes:[]};if(r!=="enforce")return t;let n=X();if(!n)return t;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??GD,i=e.findOrphanPid??qD,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-YD).toISOString(),limit:JD})}catch{return Ct.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(VD.length),d=u.split(":")[0]??"",p=u.slice(d.length+1);if(!(!d||!p))try{let m=Date.parse(c.recordedAt);if(!Number.isFinite(m)||o-m<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let f=_o(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=_o(E.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return S===null||S>=f}))continue;let b={};try{b=c.resultJson?JSON.parse(c.resultJson):{}}catch{b={}}let g=b.runId??null,h=b.workerName??null;if(g&&h&&e.hasLiveWorker({runId:g,workerName:h})){Ai({taskId:d,leaseToken:p}),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"finalized_late"});continue}if(g&&h){let E=e.worktreePathFor({runId:g,workerName:h}),S=E?i(E):null;if(S!==null){Ct.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_orphan",detail:`live pid ${S} references ${E}`});continue}}if(!g){a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let w=await e.releaseClaim({taskId:d,leaseToken:p,runId:g});w.released?(cn({taskId:d,leaseToken:p},"restart_recovery"),h&&(Co(g,h),nt(g,h)),Ct.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"released"})):w.transportError?a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_transport",detail:w.detail}):(cn({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{Ct.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function hR(){return{"dispatchReceipts.recoveredStrandedClaims":Ct.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":Ct.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":Ct.recoveryStoreFailures}}var kR=!1;async function yR(e){if(kR||Fr()!=="enforce")return null;kR=!0;try{let r=$e().runnerId,t=await gR({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>zD.join(ae().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Wo({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:ho(s,r),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return t.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${t.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),t}catch{return null}}H();Le();Cs();import uM from"node:os";Va();import{mkdirSync as rM,readFileSync as tM,renameSync as nM,writeFileSync as oM}from"node:fs";import{homedir as sM}from"node:os";import Yi from"node:path";import{existsSync as XD,readFileSync as QD}from"node:fs";import{dirname as fu,join as vR}from"node:path";import{fileURLToPath as RR}from"node:url";function ZD(e){let r=fu(RR(e));for(let t=0;t<6;t+=1){if(XD(vR(r,"package.json")))return r;let n=fu(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${fu(RR(e))}`)}function eM(e=import.meta.url){let r=vR(ZD(e),"package.json"),t=JSON.parse(QD(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var bR=eM();function SR(){return Yi.join(sM(),".kynver")}function iM(e=SR()){return Yi.join(e,"doctor-native-windows.json")}function wR(e=SR()){return Yi.join(e,"native-windows-state.json")}function aM(e,r){rM(Yi.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;oM(t,`${JSON.stringify(r,null,2)}
|
|
177
|
+
`,{mode:384}),nM(t,e)}function hu(e){try{return JSON.parse(tM(e,"utf8"))}catch{return null}}function lM(e){let r=hu(iM(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 xR(e=new Date,r){try{let t=wR(r),n=hu(t)??{};aM(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function cM(e){let r=hu(wR(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var gu=null,_R=null;function ER(e){gu=e.admission,_R=e.ownerKind}function CR(e={}){let r=e.platform??process.platform,t=e.hostKind??ja(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:bR,ownerKind:_R,nativeWindows:n?{admission:gu?.basis??null,hostCapability:gu?.hostCapability??null,lastDoctor:lM(e.root),lastWorkerCompletedAt:cM(e.root)}:null}}function PR(e,r={}){let t=U(),n=(r.boxKind??wr(t)).trim().toLowerCase()||"box",o=r.hostLabel??uM.hostname();return{boxId:Es({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:CR()}}B();Fe();ms();me();H();import dM from"node:path";B();me();T();async function AR(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(vr(String(e.run||""),"--run"))),n=String(vr(String(e.agentOsId||""),"--agent-os-id")),o=Z(e.baseUrl?String(e.baseUrl):void 0),s=await te(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=$e({runId:t.id}).runnerId,a=await Qk({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(dM.join(N(t.id),"workers",x(p),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let f=z(m);if(f.alive||f.finalResult||m.completionReportedAt)continue;try{let g=await No({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=ii({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 J(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 J(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)}}T();me();B();T();import pM from"node:path";H();async function IR(e){let r=Z(e.baseUrl),t=await te(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 J(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 OR(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(pM.join(N(t.id),"workers",x(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=z(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 IR({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}ys();H();Le();Fe();import Ye from"node:path";gs();import qi from"node:path";ue();me();var ku=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function TR(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of ku)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function je(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!TR(n)})}function Pt(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Fo(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?je(e.changedFiles).length>0:!!(Pt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}T();function Ko(e){return e.status||(e.status=z(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function yu(e,r){if(e.status)return je(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):In(e.worktreePath);return je(t).length>0}function mM(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Ru(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=mM(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):In(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:es(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:c,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??Pt(s)};return e.status=u,u}return Ko(e)}me();me();pt();T();function fM(e,r=Date.now(),t=Uo){let n=pe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Rn(e,r=Date.now(),t=Uo){return Y(e.pid)?!0:fM(e,r,t)}function gM(e,r){return r?r.runTerminalCache.derive(e.run):_t(e.run)}function Hr(e,r=Date.now()){return Rn(e.worker,r)}function vu(e,r){return xt.has(e.run.status)?!1:gM(e,r)!==null}function NR(e,r,t=Date.now()){if(Hr(e,t))return!0;if(xt.has(e.run.status)||vu(e,r))return!1;let n=Ko(e);return xe(n)?!1:!!Hr(e,t)}gs();me();function DR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Hr(e))return!0;let n=r??Ko(e);return!!(!xe(n)||Fo(n)||je(n.changedFiles).length>0||$t({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Pt(n.finalResult)}).blocked)}ue();T();import{existsSync as WR,mkdirSync as hM,writeFileSync as MR}from"node:fs";import Ji from"node:path";function LR(e,r,t){return Ji.join(e,"salvage",x(r),x(t))}function BR(e){return WR(Ji.join(LR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function UR(e){let r=LR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);hM(r,{recursive:!0});let t=Ji.join(r,"salvage.patch"),n=!1;if(WR(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(`
|
|
178
|
+
`);a.trim()&&(MR(t,a.endsWith(`
|
|
179
179
|
`)?a:`${a}
|
|
180
|
-
`),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
|
|
181
|
-
`),o}var hM=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function kM(e){e.writeSalvageEvidence&&hM.has(e.skipReason)&&(Hr(e.indexed,e.now)||WR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||LR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function yM(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(xt.has(r.run.status)||e.liveness&&yu(r,e.liveness)||e.liveness&&xe(ku(r,e.liveness))&&!Hr(r))?n:t}function RM(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:yM(e)}function vM(e,r){if(e.harnessRoot?.trim())return Ji.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Ji.sep}runs${Ji.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function BR(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=RM(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Hr(r,a))return"active_worker";let c=ku(r,e.liveness),u=vM(e,r),d=f=>{if(u)try{kM({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(TR(r,c)){let f=d("completion_blocked");if(f)return f}if(hu(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(OR(r,e.liveness,a)||!xe(c))return"run_still_active";if(Uo(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if(je(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if($t({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Pt(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function Ru(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(Ji.resolve(o))||r&&Hr(r)?"active_worker":r&&hu(r,e.gitStatusCache)?"dirty_worktree":null}function UR(e){return Ru(e)}var FR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function KR(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 VR,readdirSync as GR,statSync as wM}from"node:fs";import YR from"node:path";B();Fe();import HR from"node:path";T();function SM(e,r){return Rn(e,r)}function $R(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Bs(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(HR.join(Zn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=HR.resolve(l.worktreePath);SM(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of iR(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function jR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}T();function xM(e,r){try{let t=wM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function _M(e,r){let t=YR.join(e,"runs",r,"run.json");return VR(t)?I(t,null):null}function JR(e){try{return GR(e).length===0}catch{return!1}}function qR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(jR(n,r,t,i.liveRunKeys)||!JR(n))return"run_still_active";let a=_M(r,t);return a&&!xt.has(a.status)&&!_t(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function zR(e){if(!VR(e.worktreesDir))return[];let r=[],t;try{t=GR(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=YR.join(e.worktreesDir,o);JR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:xM(s,e.now)})}return r}ue();import{existsSync as bu,rmSync as av}from"node:fs";import{execFileSync as EM}from"node:child_process";import{existsSync as XR,readdirSync as CM,statSync as PM}from"node:fs";import AM from"node:path";var IM=2500;function OM(e,r=IM){if(!XR(e))return 0;try{let n=EM("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 $r(e,r=5e4){if(!XR(e))return 0;let t=OM(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=CM(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=AM.join(i,l),u;try{u=PM(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as MM,rmSync as WM}from"node:fs";Fe();import{lstatSync as TM,readdirSync as NM}from"node:fs";function QR(e){try{let r=TM(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 ZR(e,r=32){let t=QR(e);if(!t)return!1;if(t.foreign)return!0;try{let n=NM(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=QR(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as DM}from"node:child_process";import tv from"node:path";import Ve from"node:path";function ev(e,r,t,n){let o=Ve.resolve(e),s=`${Ve.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ve.relative(t,i);if(a.startsWith("..")||Ve.isAbsolute(a))return"path_outside_harness";let l=a.split(Ve.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ve.resolve(r))?"path_outside_harness":null}function qi(e,r,t){return ev(e,r,t,"node_modules")}function zi(e,r,t){return ev(e,r,t,".next")}function Xi(e,r,t){let n=Ve.resolve(e),o=Ve.relative(t,n);return o.startsWith("..")||Ve.isAbsolute(o)||o.split(Ve.sep).length<3||!n.startsWith(Ve.resolve(r))?"path_outside_harness":null}function rv(e,r,t){let n=Ve.resolve(e);return qi(n,r,t)===null||zi(n,r,t)===null||Xi(n,r,t)===null}function ov(){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 nv(e){let r=DM("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function sv(e,r,t){if(!rv(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=nv(["chown","-R",`${n}:${o}`,tv.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=nv(["rm","-rf",tv.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 vu="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 LM(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function iv(e,r,t={}){if(!MM(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?zt(n):null,i=e.bytes??$r(e.path)??void 0,a=t.removePath??WM,l=t.hasForeignOwnedEntry??ZR;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!LM(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=ov();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${vu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=sv(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}; ${vu}`}}}function Su(e){let r=e.harnessRoot;return!r||!nR(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function wu(e,r){let t=Su(e);if(t)return t;let n=iv(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function lv(e,r){return wu(e,r)}function cv(e,r){return wu(e,r)}function uv(e,r){return wu(e,r)}function dv(e,r){let t=Su(e);if(t)return t;if(!bu(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??$r(e.path);return av(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 pv(e,r){let t=Su(e);if(t)return t;if(!bu(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??$r(e.path);return n&&re(n,["worktree","remove","--force",e.path],{allowFailure:!0}),bu(e.path)&&av(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 Qi,readdirSync as Zi,statSync as BM}from"node:fs";import hr from"node:path";function xu(e,r){try{let t=BM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function fv(e,r){let t=hr.relative(r,e);return t===""||!t.startsWith("..")&&!hr.isAbsolute(t)}function mv(e,r,t,n){let o=[];for(let s of gu){if(s===".next")continue;let i=hr.join(e,s);if(!Qi(i))continue;let a=hr.resolve(i);t.has(a)||fv(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:xu(a,r.now)}))}return o}function gv(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...mv(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Qi(e.worktreesDir))return r;for(let n of Zi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=hr.join(e.worktreesDir,n.name);for(let s of Zi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=hr.join(o,s.name);r.push(...mv(i,e,t,{runId:n.name,worker:s.name}))}}return r}function hv(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;Qi(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:xu(a,e.now)})))}if(!t||!Qi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(hr.resolve(i.worktreePath));for(let i of Zi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=hr.join(e.worktreesDir,i.name),l;try{l=Zi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=hr.resolve(hr.join(a,c.name));o.has(u)||s.has(u)||fv(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:xu(u,e.now)}))}}return n}import{existsSync as Rv,readdirSync as kv,statSync as UM}from"node:fs";import vn from"node:path";var FM=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function KM(e,r){try{let t=UM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function HM(e,r){let t=vn.relative(r,e);return t===""||!t.startsWith("..")&&!vn.isAbsolute(t)}function $M(e,r,t,n,o,s){if(!Rv(n))return;let i=vn.resolve(n);r.has(i)||HM(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:KM(i,t.now)}))}function yv(e,r,t,n,o){for(let s of FM)$M(e,r,t,vn.join(n,s.dirName),s.kind,o)}function vv(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||yv(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 kv(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=vn.join(e.worktreesDir,n.name),s;try{s=kv(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=vn.join(o,i.name);yv(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ue();import{existsSync as bv,statSync as jM}from"node:fs";import kr from"node:path";function VM(e,r){try{let t=jM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function GM(e){let r=[],t=null;for(let n of e.split(`
|
|
182
|
-
`)){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
|
|
183
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(je(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}Fe();import{existsSync as
|
|
184
|
-
`).map(t=>t.trim()).filter(Boolean)}var ta=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 na=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=_t(r);return this.cache.set(r.id,n),n}};function gW(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Kv(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:gW(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 hW(e={}){let r=e.harnessRoot?ge(e.harnessRoot):Ue(),t=Dv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function kW(e){return typeof e=="string"?{reason:e}:e}function bn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function oa(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:$r(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 yW(e,r){return e.kind==="remove_next_cache"?cv(e,r):lv(e,r)}function RW(e,r,t){return e.kind==="remove_next_cache"?zi(e.path,r,t):qi(e.path,r,t)}function vW(e){let r=new Map;for(let t of e)for(let[n,o]of xv(t))r.set(n,o);return r}function $v(e,r){return e.runId&&e.worker?Ye.join(r,e.runId,e.worker):Ye.resolve(e.path,"..")}function jv(e){return e.indexed?!1:Pu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function bW(e={}){let r=Eu(e),t=Mv();r=Wv(r,t);let n=hW(e);Ge("scan",`${n.scanRoots.length} harness root(s)`);let o=$R(n.scanRoots,n.now),s=r.finalizeStaleRuns?Lo().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ge("finalize",`${s.length} stale run(s) marked terminal`),Ge("index","building worktree index");let i=vW(n.scanRoots);Ge("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new na,gitStatusCache:new ta,gitRevCache:new ra},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ge("root",C);let Q=Ye.join(C,"worktrees"),we=wv(i,C),Je={harnessRoot:C,worktreesDir:Q,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:we,now:n.now},ir=r.scanDependencyCaches?vv(Je):[];Ge("dependency",r.scanDependencyCaches?`${ir.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let jr=0;for(let D of ir){if(p())break;jr+=1,jr%50===0&&Ge("dependency",`${jr}/${ir.length} evaluated`);let V=Ye.resolve(D.path);if(u.has(V))continue;u.add(V);let O={...D,path:V},ee=RW(O,C,Q);if(ee){bn(l,O.path,ee),c.push({...O,executed:!1,skipped:!0,skipReason:ee});continue}let ke=$v(O,Q),ye=we.get(Ye.resolve(ke))??null,yr=jv({candidate:O,indexed:ye,harnessRoot:C,now:n.now}),j=Ru({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:O.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:yr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){bn(l,O.path,j),c.push({...O,executed:!1,skipped:!0,skipReason:j});continue}c.push(yW(oa(O,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let D of gv(Je)){if(p())break;let V=Ye.resolve(D.path);if(u.has(V))continue;u.add(V);let O={...D,path:V},ee=Xi(O.path,C,Q);if(ee){bn(l,O.path,ee),c.push({...O,executed:!1,skipped:!0,skipReason:ee});continue}let ke=$v(O,Q),ye=we.get(Ye.resolve(ke))??null,yr=jv({candidate:O,indexed:ye,harnessRoot:C,now:n.now}),j=UR({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:O.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:yr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){bn(l,O.path,j),c.push({...O,executed:!1,skipped:!0,skipReason:j});continue}c.push(uv(oa(O,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let he=[...hv(Je),...Sv(Je)];Ge("worktrees",`${he.length} candidate(s) at ${C}`);let W=new Set,F=0;for(let D of he){if(p())break;F+=1,F%50===0&&Ge("worktrees",`${F}/${he.length} evaluated`);let V=Ye.resolve(D.path);if(W.has(V))continue;W.add(V);let O={...D,path:V},ee=we.get(Ye.resolve(O.path))??null,ke=ee?null:Iv({worktreePath:O.path,harnessRoot:C,runId:O.runId,workerName:O.worker,now:n.now}),ye=BR({indexed:ee,worktreePath:Ye.resolve(O.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:O.ageMs,orphanSafety:ke,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(ye){let{reason:yr,detail:j}=kW(ye);bn(l,O.path,yr,j),c.push({...O,executed:!1,skipped:!0,skipReason:yr});continue}c.push(pv(oa(O,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let D of zR({harnessRoot:C,worktreesDir:Q,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let V=Ye.resolve(D.path);if(u.has(V))continue;u.add(V);let O={...D,path:V},ee=O.runId??Ye.basename(V),ke=qR({harnessRoot:C,runId:ee,runPath:V,ageMs:O.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ke){bn(l,O.path,ke),c.push({...O,executed:!1,skipped:!0,skipReason:ke});continue}c.push(dv(oa(O,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?Tv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Ft(),E=r.execute&&Uv(w),S=E?Bv({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,Ge("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ge("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=KR(c,l),$=Kv({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 Vv(e){let r=Pv(e);return bW({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Gv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as wW}from"node:fs/promises";import{homedir as xW}from"node:os";import Ot from"node:path";On();var SW={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},rZ=Object.keys(SW);function Yv(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 Jv(e,r){let t=Yv(e),n=Yv(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 _W=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function Sn(e){let r=e?.trim();return r||null}function EW(e){return[...new Set(e.filter(r=>!!r))]}function CW(){let e=xW(),r=Sn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Sn(process.env.OPENCLAW_NPM_ROOT)??Ot.join(e,".openclaw","npm"),t=Sn(process.env.KYNVER_NPM_GLOBAL_ROOT)??Sn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Sn(process.env.NPM_CONFIG_PREFIX)?Ot.join(Sn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Ot.join(e,".npm-global","lib","node_modules"));return EW([Ot.join(r,"lib","node_modules"),Ot.join(r,"node_modules"),t.endsWith("node_modules")?t:Ot.join(t,"lib","node_modules")])}async function PW(e){try{let r=JSON.parse(await wW(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function AW(e){let r=CW(),t=new Set,n=[];for(let o of r){let s=Ot.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function qv(e=new Date().toISOString()){let r={};for(let t of _W){let n=null;for(let o of AW(t)){let s=await PW(o);s&&(!n||Jv(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 IW}from"node:child_process";var OW=1e4,TW=4*1024*1024,zv=(e,r,t)=>{try{let n=IW(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??OW,maxBuffer:TW});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 sa(e,r,t){return`${e} ${r} ${t}`}function Iu(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function Xv(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var NW=8e3,DW=30,MW=100,WW=400,LW=3600*1e3,Ou=0;function Nu(){return Date.now()<Ou}function BW(e){let r=`${e.stdout}
|
|
185
|
-
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Qv(e){BW(e)&&(Ou=Math.max(Ou,Date.now()+LW))}function Tu(e,r){if(Nu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Qv(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function UW(e,r,t,n){if(Nu())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Qv(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Du(e){return Nu()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function wn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function FW(e){return Array.isArray(e)?e.map(r=>wn(r)).filter(r=>r!==null).slice(0,DW).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function KW(e,r,t){let n=Tu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:FW(n.statuses)}:null}var Zv={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Du,collect(e,r){let t=Xv(e);if(!t)return null;let n=UW(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=wn(n.author),s=wn(n.mergeCommit),i=wn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,NW):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>wn(u)).filter(u=>u!==null).slice(0,MW).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>wn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,WW):[];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}}},eb={provider:"github",kind:"commit_status",version:"1",isAvailable:Du,collect(e,r){let t=Iu(e);return t?KW(r,t.repo,t.sha):null}},rb={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Du,collect(e,r){let t=Iu(e);if(!t)return null;let n=Tu(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=Tu(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 Wu=[];function Mu(e){Wu.some(r=>r.provider===e.provider&&r.kind===e.kind)||Wu.push(e)}function tb(e,r){return Wu.find(t=>t.provider===e&&t.kind===r)??null}function nb(){Mu(Zv),Mu(eb),Mu(rb)}var HW=1,$W=25e3;function ob(e,r={}){nb();let t=r.run??zv,n=r.now??(()=>new Date),o=r.maxSubjects??HW,s=Date.now()+(r.deadlineMs??$W),i=new Set,a=e.filter(m=>{let f=sa(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=sa(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=tb(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();T();import JW from"node:path";B();T();import sb from"node:path";var jW="provider-evidence-wanted.json",VW="provider-evidence-cache.json",GW=600*1e3;function ib(e){return sb.join(N(e),jW)}function YW(e){return sb.join(N(e),VW)}function ab(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 lb(e){let r=I(ib(e),null);return ab(r?.wanted)}function cb(e,r){ce(ib(e),{savedAt:new Date().toISOString(),wanted:r})}function ub(e,r={}){let t=r.ttlMs??GW,n=YW(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&&(ce(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function db(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?ab(r):null}var qW="provider-evidence-shared-cache.json",zW=6e4,XW=1,QW=1;function Lu(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 ZW(){return JW.join(ae().harnessRoot,qW)}function eL(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?XW:QW;return Lu(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,Lu("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function pb(){return Lu("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",zW)}function rL(e){return Math.floor(e.getTime()/6e4)*6e4}function tL(e){return`${e.provider}:${e.kind}`}function mb(e,r={}){let t=ub(e,{ttlMs:r.ttlMs??pb()}),n=r.file??ZW(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??pb(),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=eL(u.provider);if(m===0)return!0;let f=tL(u),y=rL(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&&(ce(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}T();B();import fb from"node:path";var gb="mesh-cron-lease.json";function hb(e){let r=I(fb.join(N(e),gb),null);return dk(e,r)??r}function kb(e,r){let t={...r,updatedAt:new Date().toISOString()};ce(fb.join(N(e),gb),t),uk(e,t)}function yb(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=Uh(),t=Ur(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Qh());let s=Xh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,fR())}return t.flags.planOutbox!=="off"&&Object.assign(o,fy()),t.flags.admission!=="off"&&(Object.assign(o,tk()),t.flags.admission==="enforce"&&Object.assign(o,ik())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,hk()),{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 vb}from"node:crypto";import{access as nL,mkdir as VZ,readFile as bb,rename as GZ,writeFile as YZ}from"node:fs/promises";import{constants as oL}from"node:fs";import{homedir as Bu}from"node:os";import Ee from"node:path";var sL=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,iL=/^[A-Za-z0-9._:-]{8,128}$/;function aL(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Bu(),".kynver","mcp-installations.json")}function lL(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Bu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Bu(),".npm-global")}function cL(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 uL(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function dL(e){try{return await nL(e,oL.R_OK),!0}catch{return!1}}async function pL(e=aL()){let r;try{r=JSON.parse(await bb(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||!iL.test(t.inventoryKey)||!sL.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 mL(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 fL(e){return vb("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 gL(e){let r=[];for(let t of e){let n=cL(lL(t.prefix)),o=(await Promise.all(uL(n,t.packageName).map(async m=>({candidate:m,ok:await dL(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await bb(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=mL(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=vb("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:fL(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 Sb(){return gL(await pL())}import{createHash as hL,createHmac as kL,timingSafeEqual as yL}from"node:crypto";function Uu(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:hL("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function wb(e,r,t){let n=Uu(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=kL("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&yL(i,s)}pa();br();import{createHash as RL}from"node:crypto";import{access as Fu,mkdtemp as vL,readFile as Pb,rm as bL}from"node:fs/promises";import{constants as Ku}from"node:fs";import{tmpdir as SL}from"node:os";import xn from"node:path";import{spawn as wL}from"node:child_process";import{Client as xL}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as _L}from"@modelcontextprotocol/sdk/client/stdio.js";var Hu="https://registry.npmjs.org",xb=512*1024,$u=2*6e4,EL=2e4;function Ab(){return"npm"}function _b(e,r){return Buffer.byteLength(e)>=xb?e:(e+r.toString("utf8")).slice(0,xb)}function CL(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&xn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Hu,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 Ib(e,r,t=$u,n){return new Promise((o,s)=>{let i,a;try{[i,a]=de(e,r)}catch(m){s(m);return}let l=wL(i,a,{shell:!1,windowsHide:!0,detached:le(),env:CL(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=_b(c,m)}),l.stderr.on("data",m=>{u=_b(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 PL(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:RL(t).update(e).digest("base64")===n}async function AL(e,r,t,n){let o=await Ib(Ab(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Hu}`,"--ignore-scripts"],$u,xn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||xn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=xn.join(n,i);if(!PL(await Pb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function IL(e,r,t){if((await Ib(Ab(),["install","--global","--prefix",e,r,`--registry=${Hu}`,"--no-audit","--fund=false"],$u,t)).code!==0)throw new Error("package_install_failed")}async function Ob(e){let r=JSON.parse(await Pb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function OL(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 Fu(e.local.binPath,Ku.X_OK).catch(async()=>Fu(e.local.binPath,Ku.R_OK));let r=new _L({command:e.local.binPath,args:[],env:OL(e.local.envAllowlist),stderr:"pipe"}),t=new xL({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")),EL)})]);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 vL(xn.join(SL(),"kynver-mcp-update-"));try{let i=await AL(r,t,n,s);if(await o(),await IL(e.local.prefix,i,xn.join(s,"npm-cache")),await Ob(e)!==t)throw new Error("installed_version_mismatch")}finally{await bL(s,{recursive:!0,force:!0})}}async function Tb(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 Fu(e.local.prefix,Ku.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await Ob(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await 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 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 Cb(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 Gu}from"node:crypto";import{mkdir as Yu,readFile as Ju,rename as UL,rm as ia,stat as FL,writeFile as Lb}from"node:fs/promises";import Tt from"node:path";import{createHmac as TL,timingSafeEqual as NL}from"node:crypto";import{mkdir as DL,readFile as ML,rename as WL,writeFile as LL}from"node:fs/promises";import{homedir as BL}from"node:os";import ju from"node:path";function Vu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||ju.join(BL(),".kynver","state","mcp-updates")}function Nb(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return ju.join(Vu(),`${e}.json`)}function Db(e,r){let t=Uu(r);return t?TL("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function Mb(e,r){try{let t=JSON.parse(await ML(Nb(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=Db(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!NL(i,a)?null:t}catch{return null}}async function Wb(e,r){let t=Db(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=Nb(e.operationId);await DL(ju.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await LL(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
186
|
-
`,{mode:384}),await WL(o,n)}var KL="host-mutation.lock";function Bb(){return Tt.join(Vu(),KL)}async function Ub(){try{let e=JSON.parse(await Ju(Tt.join(Bb(),"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 HL(e){try{return await FL(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function Kb(){return $L("mcp_update")}async function $L(e){let r=Bb(),t=`${r}.reclaiming`;await Yu(Tt.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await HL(t))return null;for(let o=0;o<2;o+=1)try{await Yu(r,{mode:448});let s={pid:process.pid,nonce:Gu(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await Lb(Tt.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await ia(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Ju(Tt.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await ia(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Yu(t,{mode:448}),n=!0,await Lb(Tt.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Gu(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 Ju(Tt.join(r,"owner.json"),"utf8"))}catch{return null}if(Fb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Gu(8).toString("hex")}`;await UL(r,a),await ia(a,{recursive:!0,force:!0})}return null}finally{n&&await ia(t,{recursive:!0,force:!0})}}function aa(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function jL(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 VL(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=Z(e.baseUrl),t=await Sb();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await kt(aa(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 Kb();if(!o){let s=await Ub();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await kt(aa(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=jL(s.response);if(!i)return{ok:!0,stage:"idle"};if(!wb(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await Mb(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:VL(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await Wb({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await kt(aa(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 Tb(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await kt(aa(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 GL(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function YL(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(jb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||qr(a))continue;if(yo(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=z(a);if(!xe(l))continue;let c=Ht({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await To({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function JL(e,r,t,n,o){let s=Z(n.baseUrl?String(n.baseUrl):void 0),i=await te(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await qv(),c=Us(r),u=null;try{let E=lb(r);if(E.length>0){let S=mb(r);u=ob(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Kr()!=="off"){let E=Gt();rk({liveWorkers:E}),sk({liveWorkers:E})}else Zh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=ae(),K=jb.join(Ir(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?qr($):!1}catch{return!1}};await hR({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Rb({hasLiveWorker:d})}catch{p=null}let m=null;try{m=kd({control:Lt(e),supervisor:bd(),inFlightWorkers:Gt().length})}catch{m=null}let f=hb(r),y=id(),k=await J(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Bc(r),resourceGate:t,boxResourceSnapshot:ER(t,{harnessRunId:r,boxKind:wr(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:$e({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=db(k.response);if(b)try{cb(r,b)}catch{}let g=yb(k);if(g)try{kb(r,g)}catch{}let h=Kh(k);h&&Hh(e,h);let w=fd(k);return w&&hd(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 Vb(e){let r=String(vr(String(e.run||""),"--run")),t=String(vr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Bc(r);let o=await Hs(t,e),s=Ks(o),i=Yn({runId:r,configuredMaxWorkersOverride:s}),a=Gv()?Vv(r):void 0,l=await JL(t,r,i,e,a),c;if(n)try{let C=Z(e.baseUrl?String(e.baseUrl):void 0),Q=await te(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await $b({agentOsId:t,secret:Q,baseUrl:C,activeOwnedSessions:Gt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=_h(r,l),d=await xg(r,e),p=await YL(r,e);p.some(C=>C.ok&&!C.skipped)&&SR();let m=Yn({runId:r,configuredMaxWorkersOverride:s}),f=pR(),y=await AR(r,e),k=Jy(m,l),b=k.maxStarts,g=Lt(t),h=yd(g);h&&(b=0);let w=GL()?await CR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=Yy(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),Q=await Zc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),we=kn(Q);S+=we,K=Math.max(0,K-we),E={exactTargetTaskIds:_,exact:Q,startedCount:S}}if(n&&K>0){let C=await Zc({...e,run:r,agentOsId:t},K),Q=kn(C);S+=Q,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}An();Yt();An();function Gb(e){return Qo(Lt(e))!=="stopped"?null:Gt().length}function Yb(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 qL(e){e&&(xR({admission:e.admission,ownerKind:e.ownerKind}),vd(e.ownerKind))}async function zL(e,r={}){try{e.instructionBundle&&ld(e.instructionBundle.bundle,e.instructionBundle.source),sd(e.eventLoopReport);let t=await(r.runTick??Vb)(e.args),n=(r.countInFlightWorkers??Gb)(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 Jb(e,r,t={}){qL(r);let n=Promise.resolve();e.on("message",o=>{Yb(o)&&(n=n.then(async()=>{e.postMessage(await zL(o,t))}))})}qb?Jb(qb,XL):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|
|
180
|
+
`),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 MR(Ji.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
181
|
+
`),o}var kM=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function yM(e){e.writeSalvageEvidence&&kM.has(e.skipReason)&&(Hr(e.indexed,e.now)||BR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||UR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function RM(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(xt.has(r.run.status)||e.liveness&&vu(r,e.liveness)||e.liveness&&xe(Ru(r,e.liveness))&&!Hr(r))?n:t}function vM(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:RM(e)}function bM(e,r){if(e.harnessRoot?.trim())return qi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${qi.sep}runs${qi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function FR(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=vM(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Hr(r,a))return"active_worker";let c=Ru(r,e.liveness),u=bM(e,r),d=f=>{if(u)try{yM({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(DR(r,c)){let f=d("completion_blocked");if(f)return f}if(yu(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(NR(r,e.liveness,a)||!xe(c))return"run_still_active";if(Fo(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if(je(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if($t({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Pt(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function bu(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(qi.resolve(o))||r&&Hr(r)?"active_worker":r&&yu(r,e.gitStatusCache)?"dirty_worktree":null}function KR(e){return bu(e)}var HR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function $R(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)HR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||HR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as YR,readdirSync as JR,statSync as xM}from"node:fs";import qR from"node:path";B();Fe();import jR from"node:path";T();function wM(e,r){return Rn(e,r)}function VR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Us(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(jR.join(Zn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=jR.resolve(l.worktreePath);wM(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of lR(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function GR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}T();function _M(e,r){try{let t=xM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function EM(e,r){let t=qR.join(e,"runs",r,"run.json");return YR(t)?I(t,null):null}function zR(e){try{return JR(e).length===0}catch{return!1}}function XR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(GR(n,r,t,i.liveRunKeys)||!zR(n))return"run_still_active";let a=EM(r,t);return a&&!xt.has(a.status)&&!_t(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function QR(e){if(!YR(e.worktreesDir))return[];let r=[],t;try{t=JR(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=qR.join(e.worktreesDir,o);zR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:_M(s,e.now)})}return r}ue();import{existsSync as wu,rmSync as cv}from"node:fs";import{execFileSync as CM}from"node:child_process";import{existsSync as ZR,readdirSync as PM,statSync as AM}from"node:fs";import IM from"node:path";var OM=2500;function TM(e,r=OM){if(!ZR(e))return 0;try{let n=CM("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 $r(e,r=5e4){if(!ZR(e))return 0;let t=TM(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=PM(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=IM.join(i,l),u;try{u=AM(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as WM,rmSync as LM}from"node:fs";Fe();import{lstatSync as NM,readdirSync as DM}from"node:fs";function ev(e){try{let r=NM(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 rv(e,r=32){let t=ev(e);if(!t)return!1;if(t.foreign)return!0;try{let n=DM(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=ev(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as MM}from"node:child_process";import ov from"node:path";import Ve from"node:path";function tv(e,r,t,n){let o=Ve.resolve(e),s=`${Ve.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ve.relative(t,i);if(a.startsWith("..")||Ve.isAbsolute(a))return"path_outside_harness";let l=a.split(Ve.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ve.resolve(r))?"path_outside_harness":null}function zi(e,r,t){return tv(e,r,t,"node_modules")}function Xi(e,r,t){return tv(e,r,t,".next")}function Qi(e,r,t){let n=Ve.resolve(e),o=Ve.relative(t,n);return o.startsWith("..")||Ve.isAbsolute(o)||o.split(Ve.sep).length<3||!n.startsWith(Ve.resolve(r))?"path_outside_harness":null}function nv(e,r,t){let n=Ve.resolve(e);return zi(n,r,t)===null||Xi(n,r,t)===null||Qi(n,r,t)===null}function iv(){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 sv(e){let r=MM("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function av(e,r,t){if(!nv(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=sv(["chown","-R",`${n}:${o}`,ov.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=sv(["rm","-rf",ov.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 Su="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 BM(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function lv(e,r,t={}){if(!WM(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?zt(n):null,i=e.bytes??$r(e.path)??void 0,a=t.removePath??LM,l=t.hasForeignOwnedEntry??rv;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!BM(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=iv();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Su}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=av(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}; ${Su}`}}}function xu(e){let r=e.harnessRoot;return!r||!sR(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function _u(e,r){let t=xu(e);if(t)return t;let n=lv(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function uv(e,r){return _u(e,r)}function dv(e,r){return _u(e,r)}function pv(e,r){return _u(e,r)}function mv(e,r){let t=xu(e);if(t)return t;if(!wu(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??$r(e.path);return cv(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 fv(e,r){let t=xu(e);if(t)return t;if(!wu(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??$r(e.path);return n&&re(n,["worktree","remove","--force",e.path],{allowFailure:!0}),wu(e.path)&&cv(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 Zi,readdirSync as ea,statSync as UM}from"node:fs";import hr from"node:path";function Eu(e,r){try{let t=UM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function hv(e,r){let t=hr.relative(r,e);return t===""||!t.startsWith("..")&&!hr.isAbsolute(t)}function gv(e,r,t,n){let o=[];for(let s of ku){if(s===".next")continue;let i=hr.join(e,s);if(!Zi(i))continue;let a=hr.resolve(i);t.has(a)||hv(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:Eu(a,r.now)}))}return o}function kv(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...gv(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Zi(e.worktreesDir))return r;for(let n of ea(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=hr.join(e.worktreesDir,n.name);for(let s of ea(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=hr.join(o,s.name);r.push(...gv(i,e,t,{runId:n.name,worker:s.name}))}}return r}function yv(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;Zi(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:Eu(a,e.now)})))}if(!t||!Zi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(hr.resolve(i.worktreePath));for(let i of ea(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=hr.join(e.worktreesDir,i.name),l;try{l=ea(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=hr.resolve(hr.join(a,c.name));o.has(u)||s.has(u)||hv(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Eu(u,e.now)}))}}return n}import{existsSync as bv,readdirSync as Rv,statSync as FM}from"node:fs";import vn from"node:path";var KM=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function HM(e,r){try{let t=FM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function $M(e,r){let t=vn.relative(r,e);return t===""||!t.startsWith("..")&&!vn.isAbsolute(t)}function jM(e,r,t,n,o,s){if(!bv(n))return;let i=vn.resolve(n);r.has(i)||$M(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:HM(i,t.now)}))}function vv(e,r,t,n,o){for(let s of KM)jM(e,r,t,vn.join(n,s.dirName),s.kind,o)}function Sv(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||vv(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!bv(e.worktreesDir))return r;for(let n of Rv(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=vn.join(e.worktreesDir,n.name),s;try{s=Rv(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=vn.join(o,i.name);vv(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ue();import{existsSync as wv,statSync as VM}from"node:fs";import kr from"node:path";function GM(e,r){try{let t=VM(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function YM(e){let r=[],t=null;for(let n of e.split(`
|
|
182
|
+
`)){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 JM(e,r){let t=kr.relative(kr.resolve(r),kr.resolve(e));return t!==""&&!t.startsWith("..")&&!kr.isAbsolute(t)}var qM=200;function xv(e){if(!e.includeOrphans||!wv(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(kr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(kr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=re(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=YM(a);for(let c of l){if(i>=qM)break;let u=kr.resolve(c.path);if(u===kr.resolve(s)||!JM(u,e.worktreesDir)||t.has(u)||o.has(u)||!wv(u))continue;let p=kr.relative(e.worktreesDir,u).split(kr.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:GM(u,e.now)})}}return n}B();T();import Ho from"node:path";function _v(e,r){let t=Ho.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ho.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Ev(e){let r=new Map;for(let t of Us(e))for(let n of Object.keys(t.workers||{})){let o=Ho.join(Zn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(Ho.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ho.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function $o(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function At(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Pu(e={}){let r=e.execute===!0||e.execute!==!1&&$o("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!$o("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??At("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??At("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??At("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??At("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??At("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||$o("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=$o("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&&!$o("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=At("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=At("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:k}}function Iv(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 Pu({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})}ue();import{existsSync as Au,statSync as XM}from"node:fs";import It from"node:path";T();var Ov=1800*1e3;function QM(e,r){let t=It.relative(r,e);return t===""||!t.startsWith("..")&&!It.isAbsolute(t)}function ZM(e,r,t){if(!Au(e))return!1;try{let n=r-XM(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Iu(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ov,n=It.resolve(e.harnessRoot,"runs"),o=It.resolve(n,e.runId,"workers",e.workerName);if(!QM(o,n))return!1;let s=I(It.join(o,"worker.json"),void 0);return s&&Rn(s,r,t)?!0:s?!1:ZM(It.join(o,"heartbeat.jsonl"),r,t)}function Tv(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ov;if(!Au(e.worktreePath))return null;if(e.runId&&e.workerName&&Iu(e))return"active_worker";let n=It.join(e.worktreePath,".git");if(!Au(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
183
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(je(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}Fe();import{existsSync as eW,readdirSync as Nv,statSync as rW}from"node:fs";import tW from"node:path";function Dv(e={}){let r=ge(e.harnessRoot??Ue()),t=zt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!eW(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=Nv(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=tW.join(t,u.name);try{let p=rW(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of Nv(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let m=$r(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}}Fe();import{existsSync as nW}from"node:fs";import{homedir as oW}from"node:os";import Mv from"node:path";var sW=["/var/tmp/kynver-harness",Mv.join(oW(),".openclaw","harness")];function Ou(e,r,t){if(!t?.trim())return;let n=ge(t.trim());e.has(n)||(e.add(n),r.push(n))}function iW(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 Wv(e={}){let r=new Set,t=[];Ou(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??[])Ou(r,t,o);if(iW(e))for(let o of sW){let s=Mv.resolve(o);!r.has(s)&&nW(s)&&Ou(r,t,s)}return t}Ln();function aW(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function lW(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Lv(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=lW("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Yr({...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 Bv(e,r){if(!r.pressured)return e;let t=e.execute||!aW("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}}is();import{unlinkSync as cW}from"node:fs";function ra(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Uv(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function uW(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function Fv(e={}){let r=e.execute===!0||ra("KYNVER_WSL_CRASH_DUMP_EXECUTE")||ra("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||ra("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Uv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Ft({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=uW(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{cW(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 Kv(e){return e?ra("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Uv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}is();function Ge(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}ue();var ta=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 dW}from"node:child_process";import{existsSync as pW}from"node:fs";import mW from"node:path";var fW=5e3;function gW(e,r){if(!pW(mW.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=dW("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:fW}),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 Hv(e){let r=gW(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
184
|
+
`).map(t=>t.trim()).filter(Boolean)}var na=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Hv(t)??[];return this.cache.set(t,o),o}};var oa=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=_t(r);return this.cache.set(r.id,n),n}};function hW(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function $v(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:hW(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 kW(e={}){let r=e.harnessRoot?ge(e.harnessRoot):Ue(),t=Wv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function yW(e){return typeof e=="string"?{reason:e}:e}function bn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function sa(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:$r(e.path,t)}}function jv(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 RW(e,r){return e.kind==="remove_next_cache"?dv(e,r):uv(e,r)}function vW(e,r,t){return e.kind==="remove_next_cache"?Xi(e.path,r,t):zi(e.path,r,t)}function bW(e){let r=new Map;for(let t of e)for(let[n,o]of Ev(t))r.set(n,o);return r}function Vv(e,r){return e.runId&&e.worker?Ye.join(r,e.runId,e.worker):Ye.resolve(e.path,"..")}function Gv(e){return e.indexed?!1:Iu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function SW(e={}){let r=Pu(e),t=Lv();r=Bv(r,t);let n=kW(e);Ge("scan",`${n.scanRoots.length} harness root(s)`);let o=VR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Bo().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ge("finalize",`${s.length} stale run(s) marked terminal`),Ge("index","building worktree index");let i=bW(n.scanRoots);Ge("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new oa,gitStatusCache:new na,gitRevCache:new ta},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ge("root",C);let Q=Ye.join(C,"worktrees"),we=_v(i,C),Je={harnessRoot:C,worktreesDir:Q,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:we,now:n.now},ir=r.scanDependencyCaches?Sv(Je):[];Ge("dependency",r.scanDependencyCaches?`${ir.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let jr=0;for(let D of ir){if(p())break;jr+=1,jr%50===0&&Ge("dependency",`${jr}/${ir.length} evaluated`);let V=Ye.resolve(D.path);if(u.has(V))continue;u.add(V);let O={...D,path:V},ee=vW(O,C,Q);if(ee){bn(l,O.path,ee),c.push({...O,executed:!1,skipped:!0,skipReason:ee});continue}let ke=Vv(O,Q),ye=we.get(Ye.resolve(ke))??null,yr=Gv({candidate:O,indexed:ye,harnessRoot:C,now:n.now}),j=bu({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:O.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:yr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){bn(l,O.path,j),c.push({...O,executed:!1,skipped:!0,skipReason:j});continue}c.push(RW(sa(O,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let D of kv(Je)){if(p())break;let V=Ye.resolve(D.path);if(u.has(V))continue;u.add(V);let O={...D,path:V},ee=Qi(O.path,C,Q);if(ee){bn(l,O.path,ee),c.push({...O,executed:!1,skipped:!0,skipReason:ee});continue}let ke=Vv(O,Q),ye=we.get(Ye.resolve(ke))??null,yr=Gv({candidate:O,indexed:ye,harnessRoot:C,now:n.now}),j=KR({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:O.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:yr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){bn(l,O.path,j),c.push({...O,executed:!1,skipped:!0,skipReason:j});continue}c.push(pv(sa(O,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let he=[...yv(Je),...xv(Je)];Ge("worktrees",`${he.length} candidate(s) at ${C}`);let W=new Set,F=0;for(let D of he){if(p())break;F+=1,F%50===0&&Ge("worktrees",`${F}/${he.length} evaluated`);let V=Ye.resolve(D.path);if(W.has(V))continue;W.add(V);let O={...D,path:V},ee=we.get(Ye.resolve(O.path))??null,ke=ee?null:Tv({worktreePath:O.path,harnessRoot:C,runId:O.runId,workerName:O.worker,now:n.now}),ye=FR({indexed:ee,worktreePath:Ye.resolve(O.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:O.ageMs,orphanSafety:ke,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(ye){let{reason:yr,detail:j}=yW(ye);bn(l,O.path,yr,j),c.push({...O,executed:!1,skipped:!0,skipReason:yr});continue}c.push(fv(sa(O,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let D of QR({harnessRoot:C,worktreesDir:Q,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let V=Ye.resolve(D.path);if(u.has(V))continue;u.add(V);let O={...D,path:V},ee=O.runId??Ye.basename(V),ke=XR({harnessRoot:C,runId:ee,runPath:V,ageMs:O.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ke){bn(l,O.path,ke),c.push({...O,executed:!1,skipped:!0,skipReason:ke});continue}c.push(mv(sa(O,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?Dv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Ft(),E=r.execute&&Kv(w),S=E?Fv({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,Ge("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ge("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=$R(c,l),$=$v({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:jv(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:jv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function Yv(e){let r=Iv(e);return SW({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Jv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as xW}from"node:fs/promises";import{homedir as _W}from"node:os";import Ot from"node:path";On();var wW={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},nZ=Object.keys(wW);function qv(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 zv(e,r){let t=qv(e),n=qv(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 EW=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function Sn(e){let r=e?.trim();return r||null}function CW(e){return[...new Set(e.filter(r=>!!r))]}function PW(){let e=_W(),r=Sn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Sn(process.env.OPENCLAW_NPM_ROOT)??Ot.join(e,".openclaw","npm"),t=Sn(process.env.KYNVER_NPM_GLOBAL_ROOT)??Sn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Sn(process.env.NPM_CONFIG_PREFIX)?Ot.join(Sn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Ot.join(e,".npm-global","lib","node_modules"));return CW([Ot.join(r,"lib","node_modules"),Ot.join(r,"node_modules"),t.endsWith("node_modules")?t:Ot.join(t,"lib","node_modules")])}async function AW(e){try{let r=JSON.parse(await xW(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function IW(e){let r=PW(),t=new Set,n=[];for(let o of r){let s=Ot.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Xv(e=new Date().toISOString()){let r={};for(let t of EW){let n=null;for(let o of IW(t)){let s=await AW(o);s&&(!n||zv(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 OW}from"node:child_process";var TW=1e4,NW=4*1024*1024,Qv=(e,r,t)=>{try{let n=OW(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??TW,maxBuffer:NW});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 ia(e,r,t){return`${e} ${r} ${t}`}function Tu(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 Zv(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 DW=8e3,MW=30,WW=100,LW=400,BW=3600*1e3,Nu=0;function Mu(){return Date.now()<Nu}function UW(e){let r=`${e.stdout}
|
|
185
|
+
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function eb(e){UW(e)&&(Nu=Math.max(Nu,Date.now()+BW))}function Du(e,r){if(Mu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return eb(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function FW(e,r,t,n){if(Mu())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return eb(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Wu(e){return Mu()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function wn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function KW(e){return Array.isArray(e)?e.map(r=>wn(r)).filter(r=>r!==null).slice(0,MW).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function HW(e,r,t){let n=Du(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:KW(n.statuses)}:null}var rb={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Wu,collect(e,r){let t=Zv(e);if(!t)return null;let n=FW(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=wn(n.author),s=wn(n.mergeCommit),i=wn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,DW):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>wn(u)).filter(u=>u!==null).slice(0,WW).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>wn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,LW):[];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}}},tb={provider:"github",kind:"commit_status",version:"1",isAvailable:Wu,collect(e,r){let t=Tu(e);return t?HW(r,t.repo,t.sha):null}},nb={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Wu,collect(e,r){let t=Tu(e);if(!t)return null;let n=Du(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=Du(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 Bu=[];function Lu(e){Bu.some(r=>r.provider===e.provider&&r.kind===e.kind)||Bu.push(e)}function ob(e,r){return Bu.find(t=>t.provider===e&&t.kind===r)??null}function sb(){Lu(rb),Lu(tb),Lu(nb)}var $W=1,jW=25e3;function ib(e,r={}){sb();let t=r.run??Qv,n=r.now??(()=>new Date),o=r.maxSubjects??$W,s=Date.now()+(r.deadlineMs??jW),i=new Set,a=e.filter(m=>{let f=ia(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=ia(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=ob(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();T();import qW from"node:path";B();T();import ab from"node:path";var VW="provider-evidence-wanted.json",GW="provider-evidence-cache.json",YW=600*1e3;function lb(e){return ab.join(N(e),VW)}function JW(e){return ab.join(N(e),GW)}function cb(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 ub(e){let r=I(lb(e),null);return cb(r?.wanted)}function db(e,r){ce(lb(e),{savedAt:new Date().toISOString(),wanted:r})}function pb(e,r={}){let t=r.ttlMs??YW,n=JW(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&&(ce(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function mb(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?cb(r):null}var zW="provider-evidence-shared-cache.json",XW=6e4,QW=1,ZW=1;function Uu(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 eL(){return qW.join(ae().harnessRoot,zW)}function rL(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?QW:ZW;return Uu(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,Uu("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function fb(){return Uu("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",XW)}function tL(e){return Math.floor(e.getTime()/6e4)*6e4}function nL(e){return`${e.provider}:${e.kind}`}function gb(e,r={}){let t=pb(e,{ttlMs:r.ttlMs??fb()}),n=r.file??eL(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??fb(),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=rL(u.provider);if(m===0)return!0;let f=nL(u),y=tL(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&&(ce(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}T();B();import hb from"node:path";var kb="mesh-cron-lease.json";function yb(e){let r=I(hb.join(N(e),kb),null);return mk(e,r)??r}function Rb(e,r){let t={...r,updatedAt:new Date().toISOString()};ce(hb.join(N(e),kb),t),pk(e,t)}function vb(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 bb(e){let r=Kh(),t=Ur(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,ek());let s=Zh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,hR())}return t.flags.planOutbox!=="off"&&Object.assign(o,hy()),t.flags.admission!=="off"&&(Object.assign(o,ok()),t.flags.admission==="enforce"&&Object.assign(o,lk())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,yk()),{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 Sb}from"node:crypto";import{access as oL,mkdir as YZ,readFile as wb,rename as JZ,writeFile as qZ}from"node:fs/promises";import{constants as sL}from"node:fs";import{homedir as Fu}from"node:os";import Ee from"node:path";var iL=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,aL=/^[A-Za-z0-9._:-]{8,128}$/;function lL(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Fu(),".kynver","mcp-installations.json")}function cL(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Fu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Fu(),".npm-global")}function uL(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 dL(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function pL(e){try{return await oL(e,sL.R_OK),!0}catch{return!1}}async function mL(e=lL()){let r;try{r=JSON.parse(await wb(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||!aL.test(t.inventoryKey)||!iL.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 fL(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 gL(e){return Sb("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 hL(e){let r=[];for(let t of e){let n=uL(cL(t.prefix)),o=(await Promise.all(dL(n,t.packageName).map(async m=>({candidate:m,ok:await pL(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await wb(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=fL(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=Sb("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:gL(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 xb(){return hL(await mL())}import{createHash as kL,createHmac as yL,timingSafeEqual as RL}from"node:crypto";function Ku(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:kL("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function _b(e,r,t){let n=Ku(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=yL("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&RL(i,s)}ma();br();import{createHash as vL}from"node:crypto";import{access as Hu,mkdtemp as bL,readFile as Ib,rm as SL}from"node:fs/promises";import{constants as $u}from"node:fs";import{tmpdir as wL}from"node:os";import xn from"node:path";import{spawn as xL}from"node:child_process";import{Client as _L}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as EL}from"@modelcontextprotocol/sdk/client/stdio.js";var ju="https://registry.npmjs.org",Eb=512*1024,Vu=2*6e4,CL=2e4;function Ob(){return"npm"}function Cb(e,r){return Buffer.byteLength(e)>=Eb?e:(e+r.toString("utf8")).slice(0,Eb)}function PL(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&xn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:ju,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function Tb(e,r,t=Vu,n){return new Promise((o,s)=>{let i,a;try{[i,a]=de(e,r)}catch(m){s(m);return}let l=xL(i,a,{shell:!1,windowsHide:!0,detached:le(),env:PL(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Cb(c,m)}),l.stderr.on("data",m=>{u=Cb(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 AL(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:vL(t).update(e).digest("base64")===n}async function IL(e,r,t,n){let o=await Tb(Ob(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${ju}`,"--ignore-scripts"],Vu,xn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||xn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=xn.join(n,i);if(!AL(await Ib(a),t))throw new Error("artifact_integrity_mismatch");return a}async function OL(e,r,t){if((await Tb(Ob(),["install","--global","--prefix",e,r,`--registry=${ju}`,"--no-audit","--fund=false"],Vu,t)).code!==0)throw new Error("package_install_failed")}async function Nb(e){let r=JSON.parse(await Ib(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function TL(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 Pb(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Hu(e.local.binPath,$u.X_OK).catch(async()=>Hu(e.local.binPath,$u.R_OK));let r=new EL({command:e.local.binPath,args:[],env:TL(e.local.envAllowlist),stderr:"pipe"}),t=new _L({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")),CL)})]);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 Ab(e,r,t,n,o){let s=await bL(xn.join(wL(),"kynver-mcp-update-"));try{let i=await IL(r,t,n,s);if(await o(),await OL(e.local.prefix,i,xn.join(s,"npm-cache")),await Nb(e)!==t)throw new Error("installed_version_mismatch")}finally{await SL(s,{recursive:!0,force:!0})}}async function Db(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 Hu(e.local.prefix,$u.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await Nb(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await Ab(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 Pb(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 Ab(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await Pb(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 Ju}from"node:crypto";import{mkdir as qu,readFile as zu,rename as FL,rm as aa,stat as KL,writeFile as Ub}from"node:fs/promises";import Tt from"node:path";import{createHmac as NL,timingSafeEqual as DL}from"node:crypto";import{mkdir as ML,readFile as WL,rename as LL,writeFile as BL}from"node:fs/promises";import{homedir as UL}from"node:os";import Gu from"node:path";function Yu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Gu.join(UL(),".kynver","state","mcp-updates")}function Mb(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Gu.join(Yu(),`${e}.json`)}function Wb(e,r){let t=Ku(r);return t?NL("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function Lb(e,r){try{let t=JSON.parse(await WL(Mb(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=Wb(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!DL(i,a)?null:t}catch{return null}}async function Bb(e,r){let t=Wb(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=Mb(e.operationId);await ML(Gu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await BL(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
186
|
+
`,{mode:384}),await LL(o,n)}var HL="host-mutation.lock";function Fb(){return Tt.join(Yu(),HL)}async function Kb(){try{let e=JSON.parse(await zu(Tt.join(Fb(),"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:Hb(e.pid)}}catch{return null}}function Hb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function $L(e){try{return await KL(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function $b(){return jL("mcp_update")}async function jL(e){let r=Fb(),t=`${r}.reclaiming`;await qu(Tt.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await $L(t))return null;for(let o=0;o<2;o+=1)try{await qu(r,{mode:448});let s={pid:process.pid,nonce:Ju(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await Ub(Tt.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await aa(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await zu(Tt.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await aa(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await qu(t,{mode:448}),n=!0,await Ub(Tt.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Ju(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 zu(Tt.join(r,"owner.json"),"utf8"))}catch{return null}if(Hb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Ju(8).toString("hex")}`;await FL(r,a),await aa(a,{recursive:!0,force:!0})}return null}finally{n&&await aa(t,{recursive:!0,force:!0})}}function la(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function VL(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 jb(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 GL(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 Vb(e){let r=Z(e.baseUrl),t=await xb();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await kt(la(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 $b();if(!o){let s=await Kb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await kt(la(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=VL(s.response);if(!i)return{ok:!0,stage:"idle"};if(!_b(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await Lb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!jb(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&&jb(a.recovery,i)?a.recovery:GL(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await Bb({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await kt(la(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 Db(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await kt(la(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 YL(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function JL(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(Gb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||qr(a))continue;if(yo(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=z(a);if(!xe(l))continue;let c=Ht({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await No({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 qL(e,r,t,n,o){let s=Z(n.baseUrl?String(n.baseUrl):void 0),i=await te(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await Xv(),c=Fs(r),u=null;try{let E=ub(r);if(E.length>0){let S=gb(r);u=ib(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Kr()!=="off"){let E=Gt();nk({liveWorkers:E}),ak({liveWorkers:E})}else rk()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=ae(),K=Gb.join(Ir(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?qr($):!1}catch{return!1}};await yR({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=bb({hasLiveWorker:d})}catch{p=null}let m=null;try{m=Rd({control:Lt(e),supervisor:wd(),inFlightWorkers:Gt().length})}catch{m=null}let f=yb(r),y=ld(),k=await J(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Fc(r),resourceGate:t,boxResourceSnapshot:PR(t,{harnessRunId:r,boxKind:wr(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:$e({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=mb(k.response);if(b)try{db(r,b)}catch{}let g=vb(k);if(g)try{Rb(r,g)}catch{}let h=$h(k);h&&jh(e,h);let w=hd(k);return w&&yd(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Yb(e){let r=String(vr(String(e.run||""),"--run")),t=String(vr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Fc(r);let o=await $s(t,e),s=Hs(o),i=Yn({runId:r,configuredMaxWorkersOverride:s}),a=Jv()?Yv(r):void 0,l=await qL(t,r,i,e,a),c;if(n)try{let C=Z(e.baseUrl?String(e.baseUrl):void 0),Q=await te(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await Vb({agentOsId:t,secret:Q,baseUrl:C,activeOwnedSessions:Gt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=Ch(r,l),d=await Eg(r,e),p=await JL(r,e);p.some(C=>C.ok&&!C.skipped)&&xR();let m=Yn({runId:r,configuredMaxWorkersOverride:s}),f=fR(),y=await OR(r,e),k=zy(m,l),b=k.maxStarts,g=Lt(t),h=vd(g);h&&(b=0);let w=YL()?await AR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=qy(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),Q=await ru({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),we=kn(Q);S+=we,K=Math.max(0,K-we),E={exactTargetTaskIds:_,exact:Q,startedCount:S}}if(n&&K>0){let C=await ru({...e,run:r,agentOsId:t},K),Q=kn(C);S+=Q,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}An();Yt();An();function Jb(e){return Zo(Lt(e))!=="stopped"?null:Gt().length}function qb(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 zL(e){e&&(ER({admission:e.admission,ownerKind:e.ownerKind}),Sd(e.ownerKind))}async function XL(e,r={}){try{e.instructionBundle&&ud(e.instructionBundle.bundle,e.instructionBundle.source),ad(e.eventLoopReport);let t=await(r.runTick??Yb)(e.args),n=(r.countInFlightWorkers??Jb)(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 zb(e,r,t={}){zL(r);let n=Promise.resolve();e.on("message",o=>{qb(o)&&(n=n.then(async()=>{e.postMessage(await XL(o,t))}))})}Xb?zb(Xb,QL):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|