@kynver-app/runtime 0.2.138 → 0.2.141
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 +135 -135
- package/dist/chat/chat-access-change-record.js +1 -1
- package/dist/chat/chat-turn-envelope.js +1 -1
- package/dist/chat/command-auth-proof.js +1 -1
- package/dist/cli.js +211 -207
- package/dist/daemon-tick-thread.js +58 -54
- package/dist/desktop-entry.js +162 -158
- package/dist/dispatch-claim-authorization.js +1 -1
- package/dist/index.js +235 -231
- package/dist/instruction-bundle/contract.js +2 -2
- package/dist/local-run-store/index.js +10 -8
- package/dist/server/cleanup.js +3 -1
- package/dist/server/default-repo.js +3 -1
- package/dist/server/dispatch-routing.js +3 -1
- package/dist/server/model-routing.js +3 -1
- package/dist/server/monitor.js +3 -1
- package/dist/server/orchestration.js +5 -3
- package/dist/server/worker-policy.js +6 -4
- package/package.json +225 -224
- package/scripts/postinstall-banner.mjs +28 -0
|
@@ -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 Nb}from"node:child_process";function Wb(e){return["/PID",String(e),"/T","/F"]}function Lb(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Db||/not found/i.test(e.stderr)?{method:"taskkill",outcome:"not_found"}:{method:"taskkill",outcome:"failed",detail:`taskkill exit ${e.status??"null"}: ${e.stderr.trim().slice(0,300)}`}}function Bb(e){let r=Nb("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:Mb});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Ub(e){return Number.isInteger(e)&&e>0}function De(e,r="SIGTERM",t={}){if(!Ub(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??Bb;return Lb(s(Wb(e)))}let o=t.kill??((s,i)=>{process.kill(s,i)});try{return o(-e,r),{method:"group",outcome:"signalled"}}catch{}try{return o(e,r),{method:"pid",outcome:"signalled"}}catch(s){let i=s.code;return i==="ESRCH"?{method:"pid",outcome:"not_found"}:{method:"pid",outcome:"failed",detail:i??s.message}}}function ce(e=process.platform){return e!=="win32"}var Db,Mb,ra=P(()=>{"use strict";Db=128,Mb=15e3});import{existsSync as Fb,mkdirSync as Kb,readFileSync as Qu,readdirSync as XW,renameSync as Hb,rmSync as $b,statSync as Zu,writeFileSync as jb}from"node:fs";import{randomBytes as Vb}from"node:crypto";import Gb from"node:path";function Je(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function yr(e,r){return e||Je(`missing ${r}`),e}function xn(e){try{return JSON.parse(e)}catch{return null}}function I(e,r){try{return JSON.parse(Qu(e,"utf8"))}catch(t){if(arguments.length>1)return r;Je(`failed to read ${e}: ${t.message}`)}}function ue(e,r){Kb(Gb.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${Vb(4).toString("hex")}.tmp`;try{jb(t,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`),Hb(t,e)}catch(n){try{$b(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Ko(e){return String(e).replace(/\/+$/,"")}function Ho(e){try{return Zu(e).size}catch{return 0}}function $o(e){try{return Zu(e).mtime.toISOString()}catch{return null}}function Dt(e,r){return Fb(e)?Qu(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=md("git",r,ae({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function pd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Vo(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return Mt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Mt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Mt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=pd(e,i,a),c=pd(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Mt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=P(()=>{"use strict";jr();O();sa()});import{homedir as fd}from"node:os";import ia from"node:path";function uS(e=fd()){return ia.join(e,".kynver",cS)}function hd(e,r=fd()){return ia.resolve(e)===ia.resolve(uS(r))}var cS,gd,aa=P(()=>{"use strict";de();cS="workspace",gd="main"});import{existsSync as ca,readFileSync as yd}from"node:fs";import{homedir as dS}from"node:os";import ze from"node:path";import{fileURLToPath as pS}from"node:url";function fS(e){let r=ze.join(e,"package.json");if(!ca(r))return null;try{let t=JSON.parse(yd(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Rd(e){return fS(e)==="kynver"}function kd(e){let r=ze.resolve(e);if(!ca(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?ze.resolve(n):null}function gS(e=import.meta.url){let r=ze.dirname(pS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ca(n))try{if(JSON.parse(yd(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=ze.dirname(r);if(o===r)break;r=o}return null}function la(e,r,t,n,o){if(!t)return;let s=ze.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Rd(s)||(e.add(s),r.push({repo:s,source:n}))}function hS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];la(t,n,kd(r),"cwd_git",{requireMonorepo:!1});let o=gS(e?.runtimeModuleUrl??import.meta.url);o&&la(t,n,kd(o),"runtime_checkout");let s=dS();for(let a of mS)la(t,n,Me(ze.join(s,a)),"well_known_path");let i=ze.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Rd(a.repo))return!0;let l=ze.resolve(a.repo);return i===l||i.startsWith(`${l}${ze.sep}`)})}function Go(e){return hS(e)[0]??null}var mS,En=P(()=>{"use strict";de();jr();aa();mS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sd,readFileSync as kS}from"node:fs";import it from"node:path";function RS(e){return e.includes("/")||e.includes("\\")}function vS(e){return(e.PATHEXT||yS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function bS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function SS(e,r={}){let t=r.env??process.env,n=r.exists??Sd,o=vS(t),s=it.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(RS(e)||it.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of bS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(it.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function bd(e){return e.replace(/^[\\/]+/,"")}function xS(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=wS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=vd.exec(n);if(o)return bd(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?vd.exec(i):null;if(a)return bd(a[1])}return null}function _S(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=SS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=it.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>kS(m,"utf8")),i=r.exists??Sd,a;try{a=s(n)}catch{throw new Cn(n)}let l=xS(a);if(!l)throw new Cn(n);let c=it.win32.dirname(n),u=it.win32.join(c,l);if(!i(u))throw new Cn(n);let d=it.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function pe(e,r,t={}){let n=_S(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Cn,yS,vd,wS,Rr=P(()=>{"use strict";Cn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},yS=".COM;.EXE;.BAT;.CMD";vd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,wS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var wd=P(()=>{"use strict";Rr()});function Ed(e){let r=Fo(e);try{let t=new URL(r);return t.hostname.toLowerCase()===xd?(t.hostname=`www.${xd}`,Fo(t.toString())):r}catch{return r}}function Pn(e){if(e?.trim())return Ed(Fo(e.trim()))}async function An(e,r,t=fetch){let n=Ed(e),o=new Headers(r?.headers),s=0;for(;s<=_d;){let i=await t(n,{...r,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(r?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${_d} redirects for ${e}`)}var xd,_d,In=P(()=>{"use strict";O();xd="kynver.com";_d=10});function at(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function Yo(e,r){return e[r]?.trim()||null}function Cd(e){let r=e?.split(":")[0]?.trim();return r?at(r):null}function vr(e=process.env,r={}){let t=[],n=Cd(r.boxId),o=Cd(Yo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==at(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:at(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Yo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==at(i)&&t.push(`KYNVER_BOX_ID=${Yo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:at(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=Yo(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function br(e={},r=process.env){return vr(r,e).boxKind}var We=P(()=>{"use strict"});function ua(e,r){return e==="forge"?4:Math.max(1,r)}function On(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var qo=P(()=>{"use strict"});import{readFileSync as ES}from"node:fs";import Pd from"node:os";function Ad(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Pd.freemem()}if(process.platform==="linux")try{let t=ES("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Pd.freemem()}var Id=P(()=>{"use strict"});import{existsSync as CS,readFileSync as PS,statfsSync as AS}from"node:fs";function da(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!CS(e))continue;let r=PS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Od(e={}){if(!(e.forceWsl===void 0?da():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.wslHostFreeWarnBytes??IS,o=e.wslHostFreeCriticalBytes??OS,s=e.statfs??AS,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${TS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function TS(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var IS,OS,Wt,pa=P(()=>{"use strict";IS=25*1024*1024*1024,OS=12*1024*1024*1024,Wt="/mnt/c"});import{execFileSync as Td}from"node:child_process";import{existsSync as zo,readFileSync as Nd,readdirSync as NS,statSync as DS}from"node:fs";import ma from"node:path";function Jo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Dd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Td("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt;return r&&zo(ma.join(t,"Users",r))?r:null}function US(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.windowsUser??Dd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function FS(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function KS(){try{if(zo("/proc/sys/kernel/core_pattern"))return Nd("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Td("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function HS(e){return!!(e&&/wsl-capture-crash/i.test(e))}function $S(e,r=Wt){let t=ma.join(r,"Users",e,".wslconfig");if(!zo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Nd(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function jS(e){if(!zo(e))return[];let r=NS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=ma.join(e,n.name);try{let s=DS(o),i=FS(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Lt(e={}){if(!(e.forceWsl===void 0?da():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wt,n=e.windowsUser??Dd(),o=e.warnBelowBytes??Jo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",MS),s=e.criticalBelowBytes??Jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",WS),i=e.warnCount??Jo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",LS),a=e.criticalCount??Jo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",BS),l=(e.readCorePattern??KS)(),c=HS(l),u=null;n&&(u=(e.readWslConfig??$S)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=US({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??jS)(m)}catch($){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${m}: ${$.message}`,probeError:$.message}}let y=f.reduce(($,C)=>$+C.bytes,0),k=f.length,b=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=y>=s,h=y>=o,w=k>=a,E=k>=i,_=!(g||w||h||E),K=null;if(!_){let $=g||w?"critical":"warning",C=(y/1024**3).toFixed(1),re=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${re}). `+VS({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:_,path:m,windowsUser:n,dumpCount:k,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:K,probeError:null}}function VS(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var MS,WS,LS,BS,Xo=P(()=>{"use strict";pa();MS=5*1024*1024*1024,WS=10*1024*1024*1024,LS=2,BS=4});import{statfsSync as GS}from"node:fs";function Vr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??YS,n=e.diskFreeCriticalBytes??qS,o=e.diskMaxUsedPercent??JS,s=e.diskHardMaxUsedPercent??zS,i=GS(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,p=a<t*2,m=p&&c>o,f=p&&c>s,y=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:Od(e.wslHost),b=e.skipWslCrashDumpCheck?null:Lt(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),XS({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function XS(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var YS,qS,JS,zS,Tn=P(()=>{"use strict";Xo();pa();YS=30*1024*1024*1024,qS=15*1024*1024*1024,JS=80,zS=90});import{existsSync as QS,readdirSync as ZS}from"node:fs";import ew from"node:path";function ir(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=ew.join(N(e.id),"workers");if(!QS(t))return[...r];for(let n of ZS(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Nn=P(()=>{"use strict";B();O()});function fa(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Md(e){let r=e.trim();if(!r)return null;let t=fa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=fa(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=fa(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Wd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Md(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Md(t);return n||t}var Ld=P(()=>{"use strict"});import{existsSync as rw,readFileSync as tw}from"node:fs";function Bd(e){return e==="complete"}function Sr(e){return Bd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!rw(e))return r;let t=Date.now()+nw,n=new Date(t).toISOString(),o=tw(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
9
|
-
`).filter(Boolean),n=null,o=rp();for(let s of t){let i=
|
|
4
|
+
`):""}function jo(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ed(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function ta(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=P(()=>{"use strict";ra()});import{existsSync as Yb,readFileSync as qb}from"node:fs";import{homedir as Jb}from"node:os";import zb from"node:path";function oa(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function na(e){return typeof e=="string"&&e.trim()?e:null}function rd(e){let r=oa(e);if(!r)return null;let t=r.desiredState;if(t!=="running"&&t!=="paused"&&t!=="stopped")return null;let n=r.policyVersion;if(typeof n!="number"||!Number.isInteger(n)||n<0)return null;let o=na(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:na(r.requestedByLabel),reason:na(r.reason)}:null}function td(e){let r=oa(oa(e)?.response);return!r||r.runtimeControl===void 0?null:rd(r.runtimeControl)}function nd(e,r=Jb()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return zb.join(r,".kynver",`runtime-control-${t}.json`)}function od(e,r,t){try{let n=Mt(e,t);if(n&&n.policyVersion>r.policyVersion)return;ue(nd(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function Mt(e,r){try{let t=nd(e,r);if(!Yb(t))return null;let n=JSON.parse(qb(t,"utf8"));return n.agentOsId!==e?null:rd(n.control)}catch{return null}}function Vo(e){return e?.desiredState??"running"}function Xb(e){return e==="keeper"||e==="desktop"}function Qb(e,r,t=!1){let n=Vo(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function sd(e){return e.control?{policyVersion:e.control.policyVersion,state:Qb(e.control,e.inFlightWorkers,e.exiting),supervised:Xb(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function id(e){let r=Vo(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function ld(e){ad=e}function cd(){return ad}var ad,_n=P(()=>{"use strict";O();ad=null});import{homedir as ud}from"node:os";import dd from"node:path";function Zb(e){return e==="~"?ud():e.startsWith("~/")||e.startsWith("~\\")?dd.join(ud(),e.slice(2)):e}function Me(e){return dd.resolve(Zb(e))}var jr=P(()=>{"use strict"});function aS(e){let r=e[iS];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function lS(e,r={}){return rS.has(e)?!0:oS.has(e)||r.operatorAllow?.has(e)||sS.some(t=>e.endsWith(t))?!1:tS.some(t=>e.endsWith(t))}function sa(e){let r=aS(e),t={...e};for(let n of Object.keys(t))lS(n,{operatorAllow:r})&&delete t[n];return t}var eS,rS,tS,nS,oS,sS,iS,ia=P(()=>{"use strict";eS=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],rS=new Set(eS),tS=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],nS=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],oS=new Set(nS),sS=["_PUBLIC_KEY"],iS="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as md}from"node:child_process";function Z(e,r,t={}){let n=md("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=cS(e,r,n);if(t.throwError)throw new Error(o);Je(o)}return n.stdout||""}function cS(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function En(e){return Z(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function ne(e,r){try{let t=md("git",r,ae({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function pd(e,r,t){let n=ne(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Go(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return Wt(n,"missing worktree path");let s=ne(e,["rev-parse","HEAD"]);if(s.status!==0)return Wt(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=ne(e,["rev-parse",n]);if(p.status!==0)return Wt(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=pd(e,i,a),c=pd(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Wt(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=P(()=>{"use strict";jr();O();ia()});import{homedir as fd}from"node:os";import aa from"node:path";function dS(e=fd()){return aa.join(e,".kynver",uS)}function hd(e,r=fd()){return aa.resolve(e)===aa.resolve(dS(r))}var uS,gd,la=P(()=>{"use strict";de();uS="workspace",gd="main"});import{existsSync as ua,readFileSync as yd}from"node:fs";import{homedir as pS}from"node:os";import ze from"node:path";import{fileURLToPath as mS}from"node:url";function gS(e){let r=ze.join(e,"package.json");if(!ua(r))return null;try{let t=JSON.parse(yd(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Rd(e){return gS(e)==="kynver"}function kd(e){let r=ze.resolve(e);if(!ua(r))return null;let t=ne(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?ze.resolve(n):null}function hS(e=import.meta.url){let r=ze.dirname(mS(e));for(let t=0;t<8;t+=1){let n=ze.join(r,"package.json");if(ua(n))try{if(JSON.parse(yd(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=ze.dirname(r);if(o===r)break;r=o}return null}function ca(e,r,t,n,o){if(!t)return;let s=ze.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Rd(s)||(e.add(s),r.push({repo:s,source:n}))}function kS(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ca(t,n,kd(r),"cwd_git",{requireMonorepo:!1});let o=hS(e?.runtimeModuleUrl??import.meta.url);o&&ca(t,n,kd(o),"runtime_checkout");let s=pS();for(let a of fS)ca(t,n,Me(ze.join(s,a)),"well_known_path");let i=ze.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Rd(a.repo))return!0;let l=ze.resolve(a.repo);return i===l||i.startsWith(`${l}${ze.sep}`)})}function Yo(e){return kS(e)[0]??null}var fS,Cn=P(()=>{"use strict";de();jr();la();fS=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sd,readFileSync as yS}from"node:fs";import at from"node:path";function vS(e){return e.includes("/")||e.includes("\\")}function bS(e){return(e.PATHEXT||RS).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function SS(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function wS(e,r={}){let t=r.env??process.env,n=r.exists??Sd,o=bS(t),s=at.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(vS(e)||at.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of SS(t).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(at.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function bd(e){return e.replace(/^[\\/]+/,"")}function _S(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=xS.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=vd.exec(n);if(o)return bd(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?vd.exec(i):null;if(a)return bd(a[1])}return null}function ES(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=wS(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=at.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(m=>yS(m,"utf8")),i=r.exists??Sd,a;try{a=s(n)}catch{throw new Pn(n)}let l=_S(a);if(!l)throw new Pn(n);let c=at.win32.dirname(n),u=at.win32.join(c,l);if(!i(u))throw new Pn(n);let d=at.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function pe(e,r,t={}){let n=ES(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Pn,RS,vd,xS,Rr=P(()=>{"use strict";Pn=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},RS=".COM;.EXE;.BAT;.CMD";vd=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,xS=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var wd=P(()=>{"use strict";Rr()});function Ed(e){let r=Ko(e);try{let t=new URL(r);return t.hostname.toLowerCase()===xd?(t.hostname=`www.${xd}`,Ko(t.toString())):r}catch{return r}}function An(e){if(e?.trim())return Ed(Ko(e.trim()))}async function In(e,r,t=fetch){let n=Ed(e),o=new Headers(r?.headers),s=0;for(;s<=_d;){let i=await t(n,{...r,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(r?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${_d} redirects for ${e}`)}var xd,_d,On=P(()=>{"use strict";O();xd="kynver.com";_d=10});function lt(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function qo(e,r){return e[r]?.trim()||null}function Cd(e){let r=e?.split(":")[0]?.trim();return r?lt(r):null}function vr(e=process.env,r={}){let t=[],n=Cd(r.boxId),o=Cd(qo(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==lt(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:lt(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=qo(e,"KYNVER_BOX_KIND");if(i)return o&&o!==lt(i)&&t.push(`KYNVER_BOX_ID=${qo(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:lt(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=qo(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}function br(e={},r=process.env){return vr(r,e).boxKind}var We=P(()=>{"use strict"});function da(e,r){return e==="forge"?4:Math.max(1,r)}function Tn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var Jo=P(()=>{"use strict"});import{readFileSync as CS}from"node:fs";import Pd from"node:os";function Ad(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Pd.freemem()}if(process.platform==="linux")try{let t=CS("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Pd.freemem()}var Id=P(()=>{"use strict"});import{existsSync as PS,readFileSync as AS,statfsSync as IS}from"node:fs";function pa(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!PS(e))continue;let r=AS(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Od(e={}){if(!(e.forceWsl===void 0?pa():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.wslHostFreeWarnBytes??OS,o=e.wslHostFreeCriticalBytes??TS,s=e.statfs??IS,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${NS()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function NS(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var OS,TS,Lt,ma=P(()=>{"use strict";OS=25*1024*1024*1024,TS=12*1024*1024*1024,Lt="/mnt/c"});import{execFileSync as Td}from"node:child_process";import{existsSync as Xo,readFileSync as Nd,readdirSync as DS,statSync as MS}from"node:fs";import fa from"node:path";function zo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Dd(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Td("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt;return r&&Xo(fa.join(t,"Users",r))?r:null}function FS(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.windowsUser??Dd();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function KS(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function HS(){try{if(Xo("/proc/sys/kernel/core_pattern"))return Nd("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Td("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function $S(e){return!!(e&&/wsl-capture-crash/i.test(e))}function jS(e,r=Lt){let t=fa.join(r,"Users",e,".wslconfig");if(!Xo(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Nd(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function VS(e){if(!Xo(e))return[];let r=DS(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=fa.join(e,n.name);try{let s=MS(o),i=KS(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Bt(e={}){if(!(e.forceWsl===void 0?pa():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Lt,n=e.windowsUser??Dd(),o=e.warnBelowBytes??zo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",WS),s=e.criticalBelowBytes??zo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",LS),i=e.warnCount??zo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",BS),a=e.criticalCount??zo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",US),l=(e.readCorePattern??HS)(),c=$S(l),u=null;n&&(u=(e.readWslConfig??jS)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=FS({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??VS)(m)}catch($){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${m}: ${$.message}`,probeError:$.message}}let y=f.reduce(($,C)=>$+C.bytes,0),k=f.length,b=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=y>=s,h=y>=o,w=k>=a,E=k>=i,_=!(g||w||h||E),K=null;if(!_){let $=g||w?"critical":"warning",C=(y/1024**3).toFixed(1),re=b.length>0?b.join(", "):"unknown";K=`WSL crash dumps ${$}: ${k} file(s), ${C} GiB at ${m} (executables: ${re}). `+GS({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:_,path:m,windowsUser:n,dumpCount:k,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:K,probeError:null}}function GS(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var WS,LS,BS,US,Qo=P(()=>{"use strict";ma();WS=5*1024*1024*1024,LS=10*1024*1024*1024,BS=2,US=4});import{statfsSync as YS}from"node:fs";function Vr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??qS,n=e.diskFreeCriticalBytes??JS,o=e.diskMaxUsedPercent??zS,s=e.diskHardMaxUsedPercent??XS,i=YS(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,p=a<t*2,m=p&&c>o,f=p&&c>s,y=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:Od(e.wslHost),b=e.skipWslCrashDumpCheck?null:Bt(e.wslCrashDumps),g=y&&(k?k.ok:!0)&&(b?b.ok:!0),h=null;return g||(h=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),QS({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function QS(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var qS,JS,zS,XS,Nn=P(()=>{"use strict";Qo();ma();qS=30*1024*1024*1024,JS=15*1024*1024*1024,zS=80,XS=90});import{existsSync as ZS,readdirSync as ew}from"node:fs";import rw from"node:path";function ir(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=rw.join(N(e.id),"workers");if(!ZS(t))return[...r];for(let n of ew(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var Dn=P(()=>{"use strict";B();O()});function ga(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Md(e){let r=e.trim();if(!r)return null;let t=ga(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=ga(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=ga(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Wd(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Md(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Md(t);return n||t}var Ld=P(()=>{"use strict"});import{existsSync as tw,readFileSync as nw}from"node:fs";function Bd(e){return e==="complete"}function Sr(e){return Bd(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!tw(e))return r;let t=Date.now()+ow,n=new Date(t).toISOString(),o=nw(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=xn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),Bd(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Wd(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var ow,ct=P(()=>{"use strict";Ld();O();ow=6e4});function Fd(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Zo(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function Kd(e){let r=Fd(e[0]);return!!(r&&sw.has(r))}function aw(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function lw(e){if(!e||e.includes("*"))return null;let r=aw(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Hd(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ha(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function cw(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function uw(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;Ud.has(n)&&(t+=1);continue}r.push(n)}}return r}function dw(e){let r=!1,t=e.map((o,s)=>{let i=cw(o),a=e[s-1];return a&&Ud.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=uw(t);if(n.length===2){let[o,s]=n;if(ha(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=lw(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function $d(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function es(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=Zo(r);if(!t.length)return{command:r,wrapped:!1};let n=Fd(t[0]);if(!n||!iw.has(n))return{command:r,wrapped:!1};let o=$d(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function pw(e,r){let t=e.trim(),n=Zo(t),o=$d(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function mw(e){let r=e.trim(),t=es(r),n=Zo(t.command);if(!n.length||!Kd(n))return{segment:r,changed:!1};let o=dw(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:pw(r,s),changed:!0}:{segment:s,changed:!0}}function ka(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=mw(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function jd(e){let r=es(e).command,t=Zo(r.trim());return t.length&&Kd(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Vd(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function fw(e){let{pattern:r,target:t}=Vd(e);return r?ha(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Hd(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function gw(e){let{pattern:r,target:t}=Vd(e);if(!r)return null;if(ha(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Hd(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function hw(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function kw(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function ya(e){let r=e.meta?.trim()||(e.command?kw(e.command):null)||null;if(r){let t=fw(r),n=hw(t);if(n)return n;let o=gw(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=ka(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var sw,iw,Ud,Gd=P(()=>{"use strict";sw=new Set(["rg","ripgrep","grep"]),iw=new Set(["bash","sh","dash","zsh"]),Ud=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Mn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function vw(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function Wn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function bw(e){let r=e.metadata;if(!Wn(r))return null;let t=r.vulnerabilities;if(!Wn(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function Sw(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function ww(e,r){let t=e.error;if(Wn(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?Mn(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function xw(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=vw(r);if(!t||!Wn(t)){let o=Mn(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Wn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${ww(t,e.stderr)}`};let n=bw(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Sw(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function _w(e){return yw.test(e)}function Ew(e){let r=es(e).command;return Yd.test(e)||Yd.test(r)||jd(e)}function Cw(e){let r=ya({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&Rw.test(n)){let i=Mn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ka(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Mn(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function qd(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(_w(e.command)){let i=r.trim()||n.trim()||t.trim();return xw({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ew(e.command))return Cw({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ya({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=Mn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var yw,Yd,Rw,Jd=P(()=>{"use strict";Gd();yw=/\bnpm\s+audit\b/i,Yd=/\b(rg|ripgrep)\b/i,Rw=/\b(error|invalid|unknown|panic|not found)\b/i});function Ln(e){return typeof e=="string"&&Pw.test(e.trim())}function rs(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var Pw,ts=P(()=>{"use strict";Pw=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function zd(e,r){if(!r.pinned)return Aw[e.trim()]}function Xd(e){return e?["--fallback-model",e]:[]}var Le,ut,Aw,Qd,Bn=P(()=>{"use strict";Le="claude-sonnet-5-5",ut="claude-opus-5-5",Aw={[Le]:"claude-sonnet-4-6",[ut]:"claude-opus-4-8"};Qd=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function Ra(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Iw(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function Zd(e){if(e.event==="step_update"&&Ra(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!Ra(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=Ra(r.usage)?Iw(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var ep=P(()=>{"use strict"});function va(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function rp(){return{assistantText:""}}function Ow(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Tw(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(va(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function Nw(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function tp(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Ow(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Nw(e))return null;let t=va(e.stats)?Tw(e.stats):void 0;if(e.status==="error"){let o=va(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var np=P(()=>{"use strict"});import{existsSync as Dw,readFileSync as Mw}from"node:fs";function Ww(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Lw(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Bw(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",rs(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ut(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Uw(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Fw(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function Kw(e,r){let t=Uw(r);if(!t)return;let n=Ut(t.input_tokens)??Ut(t.inputTokens)??Ut(t.prompt_tokens),o=Ut(t.output_tokens)??Ut(t.outputTokens)??Ut(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Fw(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Hw(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,c=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:c,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function $w(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function dt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Dw(e))return r;let t=Mw(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=rp();for(let s of t){let i=xn(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let m=p;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=Ww(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let m=p.find(f=>f?.type==="tool_use");m&&(r.currentTool=String(m.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=Lw(p);m&&(r.currentTool=m)}let l=Hw(i);l&&$w(r,qd({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=Zd(i),u=c?null:tp(i,o),d=c??u;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&Bw(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}Kw(r,i)}return r}var Un=P(()=>{"use strict";Jd();O();ts();Bn();ep();np()});import{accessSync as jw,constants as Vw,existsSync as Gw,readFileSync as Yw}from"node:fs";import ba from"node:path";function sp(e){return ba.join(e,qw)}function Jw(e=process.env,r=process.platform){if(r==="win32")return!1;let t=e.KYNVER_WORKER_EXIT_CAPTURE?.trim().toLowerCase();return!(t==="0"||t==="false"||t==="off")}function op(e){try{return jw(e,Vw.X_OK),!0}catch{return!1}}function zw(e,r=process.env){if(!e)return!1;if(e.includes("/"))return op(e);for(let t of(r.PATH??"").split(ba.delimiter))if(t&&op(ba.join(t,e)))return!0;return!1}function Pe(e,r,t,n={}){let o=n.env??process.env;return!t||!Jw(o,n.platform)?[e,r]:zw(e,o)?[n.nodeExecutable??process.execPath,["-e",Xw,sp(t),e,...r]]:[e,r]}function Qw(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ns(e){if(!e)return null;let r=sp(e);if(!Gw(r))return null;try{let t=JSON.parse(Yw(r,"utf8")),n=t.oomEvidence;return{exitCode:Qw(t.exitCode),signal:typeof t.signal=="string"&&t.signal?t.signal:null,...typeof t.startedAt=="string"?{startedAt:t.startedAt}:{},...typeof t.endedAt=="string"?{endedAt:t.endedAt}:{},...typeof t.childPid=="number"?{childPid:t.childPid}:{},...typeof t.spawnError=="string"?{spawnError:t.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function ip(e){if(!e)return null;let r=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${r}`:e.exitCode===null?null:`exited with code ${e.exitCode}${r}`}var qw,Xw,wr=P(()=>{"use strict";qw="exit.json";Xw=String.raw`"use strict";
|
|
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);
|
|
@@ -58,52 +58,56 @@ function finish(code, signal, spawnError) {
|
|
|
58
58
|
}
|
|
59
59
|
process.exit(code === null ? 1 : code);
|
|
60
60
|
}
|
|
61
|
+
// Handlers go in BEFORE the spawn: a worker that signals its parent right away
|
|
62
|
+
// must not catch this wrapper with the default action (dies, no exit.json).
|
|
63
|
+
for (const s of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(s, () => { try { child.kill(s); } catch {} });
|
|
61
64
|
try {
|
|
62
65
|
child = cp.spawn(cmd, args, { stdio: "inherit" });
|
|
63
66
|
} catch (e) {
|
|
64
67
|
process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
|
|
65
68
|
finish(127, null, String(e && e.message));
|
|
66
69
|
}
|
|
67
|
-
for (const s of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(s, () => { try { child.kill(s); } catch {} });
|
|
68
70
|
child.on("error", (e) => {
|
|
69
71
|
process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
|
|
70
72
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
71
73
|
});
|
|
72
74
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
73
|
-
`});import Qw from"node:path";function ba(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&ex.has(r)}function ns(e){return!!(e&&Zw.test(e))}function cp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!ba(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||ns(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":ap.test(r)||ap.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function up(e){let r=[rx(e.stopClass)],t=ip(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function rx(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function dp(e,r=process.env){if(e<=0)return null;let t=Number.parseInt(r.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(t)&&t>0?Math.max(t,lp/2):lp/2;return Math.min(tx,n*2**e)}function pp(e,r,t){let n=0,o;try{o=q(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(t&&s===t)continue;let i=I(Qw.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(ts(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&ns(Nt(i.stderrPath,20))&&(n+=1)}}return n}function mp(e,r){if(!e)return r();let t=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return r()}finally{t===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=t,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var Zw,ap,ex,lp,tx,Sa=P(()=>{"use strict";B();O();wr();Zw=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,ap=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,ex=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);lp=2048,tx=8192});function fp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Un(e){let r=(e??"").trim();if(!r)return null;if(Wn(r))return{blocked:!0,reason:`provider authentication failed: ${fp(r)}`};for(let t of nx)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fp(r)}`};return null}var nx,wa=P(()=>{"use strict";rs();Ln();nx=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:Qd,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function gp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ox(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function sx(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gp(e.head)}function ix(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Ut(e){if(e.alive||ox(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gp(e.headCommit)??sx(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:ix(s,r,t)}}var os=P(()=>{"use strict"});import{existsSync as ax,readFileSync as lx,statSync as yp}from"node:fs";import ss from"node:path";function px(e,r=process.env){let t=e?ux:cx,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function mx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function xa(e){try{return yp(e).mtimeMs}catch{return-1}}function fx(e){let r=ss.join(e,".git");try{if(yp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(lx(r,"utf8"));return t?ss.resolve(e,t[1].trim()):null}catch{return null}}function hp(e){let r=fx(e);return[xa(e),r?xa(ss.join(r,"HEAD")):-2,r?xa(ss.join(r,"index")):-2].join(":")}function kp(e,r){return{changedFiles:_n(e),gitAncestry:Vo(e,{base:r.base,baseCommit:r.baseCommit})}}function gx(e,r){for(Gr.delete(e),Gr.set(e,r);Gr.size>dx;){let t=Gr.keys().next().value;if(t===void 0)break;Gr.delete(t)}}function Rp(e,r,t){let n=mx(r);if(!e||!e.trim())return Fn.missingWorktree++,{changedFiles:[],gitAncestry:Mt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!ax(e))return Gr.delete(o),Fn.missingWorktree++,{changedFiles:[],gitAncestry:Mt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Gr.delete(o),Fn.liveProbes++,kp(e,r);let s=t.ttlMs??px(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=hp(e),l=Gr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Fn.hits++,l.probe;Fn.misses++;let c=kp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();gx(o,{fingerprint:hp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var cx,ux,dx,Gr,Fn,vp=P(()=>{"use strict";de();cx=10*6e4,ux=60*6e4,dx=2048,Gr=new Map,Fn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Kn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function hx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function kx(e){if(Kn(e.headCommit)||Kn(e.prUrl)||Kn(e.artifactBundlePath)||Kn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Kn(r.head))}function Ft(e){return hx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:kx(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function bp(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var is=P(()=>{"use strict"});function _a(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Sp(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Kt(e){let r=e.trim();if(!r)return null;let t=_a(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=_a(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=_a(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Sp(l);for(let u of n){let d=Sp(u);d>c&&(l=u,c=d)}return l}var as=P(()=>{"use strict"});function wp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function xp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function yx(e){return new Set(e.map(r=>xp(wp(r)??r)).filter(Boolean))}function _p(e,r,t){let n=wp(e)??e;if(!n)return"unrelated";let o=xp(n);return yx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ep=P(()=>{"use strict"});function Ht(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Rx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function dt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ht(e)}function ls(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Cp(e){let r=null;if(typeof e=="string"){let o=Kt(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=dt(String(s.prUrl??s.pr_url??"")),a=Ht(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ht(s.mergeCommit??s.merge_commit),reason:Ht(s.reason)})}return n}function Pp(e,r){let t=[],n=dt(Ht(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=dt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ap(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Rx(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?dt(Ht(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?dt(r.targetPrUrls[0]):null):null;if(s){let d=Pp(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Cp(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Cp(n),a=new Map(i.map(d=>[ls(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>ls(dt(d)??d)).filter(Boolean)),c=Pp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(ls(d)),m=_p(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=ls(dt(d)??d),m=a.get(p);if(!m){u.push(p);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(p)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Ip(e){if(e.blocked)return e.detail??e.reason}var Op=P(()=>{"use strict";as();Ep()});function bx(e){let r=Date.now();if(e.providerTerminalError||es(e.finalResult)||e.finalResult&&e.error?.trim()||Wn(e.error)||Wn(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Un(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Tp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&wx(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ft(o);if(s.blocked){let i=bp(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ap({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ip(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Sx(e))return{state:"done",reason:"empty abandoned worker record"};let o=Un(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ut({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=ns(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>vx)return{state:"needs_attention",reason:`no first stream event ${ra(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ea?{state:"stale",reason:`no log/event/heartbeat activity for ${ra(n)}s`}:{state:"ok",reason:"recent activity"}}function Tp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Sx(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function wx(e){let r=null;if(typeof e=="string"?r=Kt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Np(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Sr(t))}function Dp(e){let r=ut(e.stdoutPath),t=me(e.heartbeatPath);return Np(e,r.finalResult,t)}function J(e,r={}){let t=ut(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Np(e,t.finalResult,n),i=o?!1:Y(e.pid),a=Ko(e.stdoutPath),l=Ko(e.stderrPath),c=Ko(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=ed([t.lastEventAt,n.lastHeartbeatAt,Ho(e.stdoutPath),Ho(e.stderrPath),Ho(e.heartbeatPath)]),m=i?null:ts(e.workerDir),f=s&&!ba(s)?s:null,y=t.error||!i&&!s&&Nt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Nt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Tp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=bx({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:h,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),E=g||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",S=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,_=cp({alive:i,finalResult:s,error:k??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),K=S&&!i&&!f?S:_,$=K==="running"||K==="finished"?null:(S===K?e.stopReason:void 0)??up({stopClass:K,exit:m,error:k??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:E,stopClass:K,stopReason:$,exit:m,attention:w,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function we(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Mp(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Ca(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var vx,Ea,fe=P(()=>{"use strict";lt();Bn();Sa();wr();rs();wa();os();vp();is();Op();as();O();vx=18e4,Ea=6e5});import{readFileSync as xx}from"node:fs";function _x(e){if(!e||process.platform!=="linux")return null;try{return xx(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wp(e){if(!e.pid||process.platform!=="linux")return!0;let r=_x(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function Yr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!Wp(e)?!1:!Dp(e)}var cs=P(()=>{"use strict";fe();O()});import Bp from"node:os";import Up from"node:path";function Lp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ex(e=U(),r,t){let n=Lp(e.perWorkerMemBytes,us),o=Lp(e.memReserveBytes,ds),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ps)),i=fs({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Bp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Fp(e,r={}){let t=r.perWorkerMemBytes??us,n=r.memReserveBytes??ds,o=r.memUtilization??ps,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,ms)}function Cx(){return Ad()}function Px(e){let r=0;for(let t of ir(e)){let n=I(Up.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!Yr(n)||r++}return r}function Pa(){let e=0;for(let r of Xe())e+=Px(r);return e}function $t(){let e=[];for(let r of Xe())for(let t of ir(r)){let n=I(Up.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&Yr(n)&&e.push({runId:r.id,workerName:t})}return e}function Hn(e){let r=e.config??U(),t=e.totalMemBytes??Bp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Ex(r,e.configuredMaxWorkersOverride,t),c=br(r),u=e.freeMemBytes??Cx(),d=e.activeWorkers??Pa(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=On(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Vr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var us,ds,ps,ms,jt=P(()=>{"use strict";Id();H();We();qo();gs();Tn();B();Nn();cs();O();us=500*1024*1024,ds=4*1024*1024*1024,ps=.85,ms=64});function $n(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function fs(e){let r=e.config??{},t=e.env??process.env,n=$n(r.perWorkerMemBytes,us),o=$n(r.memReserveBytes,ds),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ps)),i=Fp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:$n(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=$n(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,ms),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&$n(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,ms),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var gs=P(()=>{"use strict";jt()});import{homedir as Ax}from"node:os";import Ix from"node:path";var Kp,Aa=P(()=>{"use strict";Kp=Ix.join(Ax(),".kynver",".env")});var Hp=P(()=>{"use strict"});var $p=P(()=>{"use strict";Hp()});var jp=P(()=>{"use strict"});var Ia=P(()=>{"use strict";$p();jp();xn()});import{existsSync as Ox,readFileSync as Tx}from"node:fs";function Oa(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Ox("/proc/version")){let e=Tx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ta=P(()=>{"use strict"});var Vp=P(()=>{"use strict";Ta()});var hs=P(()=>{"use strict";Aa();jr();H();Ia();Vp()});import Dx from"node:os";function Na(e,r){let t=(r??Dx.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function qp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Jp(e,r){let t=e.trim();if(!t)return Na(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=qp(t.slice(n+1));return s?`${o}:${s}`:Na(o)}return`${r}:${qp(t)}`}function ks(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jp(r,e.boxKind):Na(e.boxKind,e.hostLabel)}var ys=P(()=>{"use strict";We();We()});var zp=P(()=>{"use strict";Aa();Ia();hs()});function vs(){return Rs}function Qp(e){if(!Rs)return e;if(!Xp)throw new Da;return Xp}function Qe(e,r=process.env){if(Rs)return;let t=r[e]?.trim();return t||void 0}function Wa(){if(Rs)throw new Ma}var Da,Ma,Rs,Xp,jn=P(()=>{"use strict";Da=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Ma=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Rs=!1,Xp=null});import{existsSync as xr,mkdirSync as Mx,readdirSync as bs,renameSync as Zp,statSync as Wx}from"node:fs";import _r from"node:path";function rm(e){try{return Wx(e).isDirectory()}catch{return!1}}function Lx(e){if(!xr(e))return!0;for(let r of em){let t=_r.join(e,r);if(xr(t)&&(!rm(t)||bs(t).length>0))return!1}return!0}function Bx(e){let r=_r.join(e,"runs");if(!xr(r)||!rm(r))return!1;for(let t of bs(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=_r.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function Ux(e){let r=_r.join(e,"runs");if(!xr(r))return!1;for(let t of bs(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(_r.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Fx(e){let r=_r.join(e,"ghost");return xr(r)?!xr(_r.join(r,"runs")):Ux(e)}function tm(e){return Bx(e.sharedRoot)?Lx(e.forgeRoot)?Fx(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function nm(e,r){Mx(r,{recursive:!0});for(let t of em){let n=_r.join(e,t),o=_r.join(r,t);if(xr(n)){if(xr(o)&&bs(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(xr(o)){Zp(n,o);continue}Zp(n,o)}}}var em,om=P(()=>{"use strict";O();em=["runs","worktrees"]});import{existsSync as ve}from"node:fs";import{homedir as Kx}from"node:os";import ge from"node:path";function La(e=process.env){return e.HOME?.trim()||Kx()}function Ba(e=process.env){return ge.join(La(e),".kynver","harness")}function Ss(e){let r=ge.resolve(Me(e.trim()));for(;Hx.has(ge.basename(r));)r=ge.dirname(r);return r}function $x(e,r=process.env){return ge.join(Ba(r),e)}function jx(e=process.env){let r=Ba(e);if(ve(ge.join(r,"runs")))return!0;if(ve(r)&&!ve(ge.join(r,"ghost"))&&!ve(ge.join(r,"forge")))return ve(r);let t=ge.join(La(e),sm);return ve(t)}function ws(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Ss(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Ss(n),source:"config"};let o=$x(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!Vx(o))return{harnessRoot:o,source:"box_scoped"};let i=Ba(r);if(e.boxKind==="forge"){let a=tm({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&nm(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&jx(r)){if(ve(ge.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(ve(i)&&!ve(ge.join(i,"ghost"))&&!ve(ge.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=ge.join(La(r),sm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Vx(e){if(!ve(e))return!0;for(let r of["runs","worktrees"]){let t=ge.join(e,r);if(ve(t))return!1}return!0}var sm,Hx,Ua=P(()=>{"use strict";jr();om();sm=ge.join(".openclaw","harness");Hx=new Set(["runs","worktrees"])});import im from"node:os";function xs(e){return e?.trim()?e.trim():null}function Gx(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Yx(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Vt(e=U(),r=process.env,t={}){let n=vr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||xs(r.KYNVER_BOX_KIND)),a=t.strict===!0||Yx(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=xs(e.runnerId),c=xs(r.KYNVER_RUNTIME_ID)??xs(r.OPENCLAW_RUNTIME_ID),u=l??c??Gx(n.boxKind,im.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=fs({config:e,env:r,totalMemBytes:im.totalmem()}),m=On(n.boxKind,p.configuredMaxWorkers??ua(n.boxKind,p.autoCap)),f=ws({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Vn=P(()=>{"use strict";H();We();qo();gs();Ua()});var lm=P(()=>{"use strict";En();We();ys();H();hs();zp();In();jn();Vn()});function ar(e){let r=e.trim().toLowerCase();return zx[r]??r}var cm,Jx,zx,_s=P(()=>{"use strict";cm=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Jx=cm.join("|"),zx={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var um=P(()=>{"use strict";jr()});var dm=P(()=>{"use strict";um()});import{execFileSync as Xx}from"node:child_process";function Ha(e=process.env){let r=e[Qx]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function Zx(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return Xx(e,r,n)}function e_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Fa(e,r){let t=JSON.stringify(pt),n=JSON.stringify(r),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${t}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${t}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}`}function pm(e={}){if(Ha(e.env??process.env)==="file")return null;let t=e_(e.platform??process.platform);return t?new Ka(t,e.exec):null}var pt,Qx,Er,Ka,mm=P(()=>{"use strict";pt="kynver",Qx="KYNVER_CREDENTIAL_STORE";Er=5e3;Ka=class{constructor(r,t=Zx){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",pt,"-a",r,"-w"],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",pt,"account",r],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Fa("get",r)],{timeoutMs:Er}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(r,t){if(!t||/[\r\n]/.test(t))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",pt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",pt,"account",r],{input:`${t}
|
|
74
|
-
`,timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",
|
|
75
|
-
`,timeoutMs:Er})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",
|
|
76
|
-
`,{mode:384})}function
|
|
75
|
+
`});import Zw from"node:path";function Sa(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&rx.has(r)}function os(e){return!!(e&&ex.test(e))}function cp(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Sa(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||os(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":ap.test(r)||ap.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function up(e){let r=[tx(e.stopClass)],t=ip(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function tx(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function dp(e,r=process.env){if(e<=0)return null;let t=Number.parseInt(r.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(t)&&t>0?Math.max(t,lp/2):lp/2;return Math.min(nx,n*2**e)}function pp(e,r,t){let n=0,o;try{o=q(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(t&&s===t)continue;let i=I(Zw.join(N(o.id),"workers",x(s),"worker.json"),void 0);if(!(!i||i.taskId!==r)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(ns(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&os(Dt(i.stderrPath,20))&&(n+=1)}}return n}function mp(e,r){if(!e)return r();let t=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return r()}finally{t===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=t,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var ex,ap,rx,lp,nx,wa=P(()=>{"use strict";B();O();wr();ex=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,ap=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,rx=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);lp=2048,nx=8192});function fp(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Fn(e){let r=(e??"").trim();if(!r)return null;if(Ln(r))return{blocked:!0,reason:`provider authentication failed: ${fp(r)}`};for(let t of ox)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fp(r)}`};return null}var ox,xa=P(()=>{"use strict";ts();Bn();ox=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:Qd,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function gp(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function sx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ix(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gp(e.head)}function ax(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Ft(e){if(e.alive||sx(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gp(e.headCommit)??ix(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:ax(s,r,t)}}var ss=P(()=>{"use strict"});import{existsSync as lx,readFileSync as cx,statSync as yp}from"node:fs";import is from"node:path";function mx(e,r=process.env){let t=e?dx:ux,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function fx(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function _a(e){try{return yp(e).mtimeMs}catch{return-1}}function gx(e){let r=is.join(e,".git");try{if(yp(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(cx(r,"utf8"));return t?is.resolve(e,t[1].trim()):null}catch{return null}}function hp(e){let r=gx(e);return[_a(e),r?_a(is.join(r,"HEAD")):-2,r?_a(is.join(r,"index")):-2].join(":")}function kp(e,r){return{changedFiles:En(e),gitAncestry:Go(e,{base:r.base,baseCommit:r.baseCommit})}}function hx(e,r){for(Gr.delete(e),Gr.set(e,r);Gr.size>px;){let t=Gr.keys().next().value;if(t===void 0)break;Gr.delete(t)}}function Rp(e,r,t){let n=fx(r);if(!e||!e.trim())return Kn.missingWorktree++,{changedFiles:[],gitAncestry:Wt(n,"missing worktree path")};let o=`${e}\0${n}`;if(!lx(e))return Gr.delete(o),Kn.missingWorktree++,{changedFiles:[],gitAncestry:Wt(n,`worktree no longer exists: ${e}`)};if(t.alive)return Gr.delete(o),Kn.liveProbes++,kp(e,r);let s=t.ttlMs??mx(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=hp(e),l=Gr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Kn.hits++,l.probe;Kn.misses++;let c=kp(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();hx(o,{fingerprint:hp(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var ux,dx,px,Gr,Kn,vp=P(()=>{"use strict";de();ux=10*6e4,dx=60*6e4,px=2048,Gr=new Map,Kn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Hn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function yx(e){if(Hn(e.headCommit)||Hn(e.prUrl)||Hn(e.artifactBundlePath)||Hn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Hn(r.head))}function Kt(e){return kx(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:yx(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function bp(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var as=P(()=>{"use strict"});function Ea(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Sp(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Ht(e){let r=e.trim();if(!r)return null;let t=Ea(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ea(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ea(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Sp(l);for(let u of n){let d=Sp(u);d>c&&(l=u,c=d)}return l}var ls=P(()=>{"use strict"});function wp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function xp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Rx(e){return new Set(e.map(r=>xp(wp(r)??r)).filter(Boolean))}function _p(e,r,t){let n=wp(e)??e;if(!n)return"unrelated";let o=xp(n);return Rx(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ep=P(()=>{"use strict"});function $t(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function vx(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function pt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:$t(e)}function cs(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Cp(e){let r=null;if(typeof e=="string"){let o=Ht(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=pt(String(s.prUrl??s.pr_url??"")),a=$t(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:$t(s.mergeCommit??s.merge_commit),reason:$t(s.reason)})}return n}function Pp(e,r){let t=[],n=pt($t(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=pt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ap(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!vx(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?pt($t(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?pt(r.targetPrUrls[0]):null):null;if(s){let d=Pp(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Cp(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Cp(n),a=new Map(i.map(d=>[cs(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>cs(pt(d)??d)).filter(Boolean)),c=Pp(t,n);if(r.landingOnly)for(let d of c){let p=a.get(cs(d)),m=_p(d,r.targetPrUrls,p);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of r.targetPrUrls){let p=cs(pt(d)??d),m=a.get(p);if(!m){u.push(p);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(p)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Ip(e){if(e.blocked)return e.detail??e.reason}var Op=P(()=>{"use strict";ls();Ep()});function Sx(e){let r=Date.now();if(e.providerTerminalError||rs(e.finalResult)||e.finalResult&&e.error?.trim()||Ln(e.error)||Ln(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Fn(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Tp(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&xx(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Kt(o);if(s.blocked){let i=bp(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ap({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ip(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(wx(e))return{state:"done",reason:"empty abandoned worker record"};let o=Fn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ft({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=os(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>bx)return{state:"needs_attention",reason:`no first stream event ${ta(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ca?{state:"stale",reason:`no log/event/heartbeat activity for ${ta(n)}s`}:{state:"ok",reason:"recent activity"}}function Tp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function wx(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function xx(e){let r=null;if(typeof e=="string"?r=Ht(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Np(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Sr(t))}function Dp(e){let r=dt(e.stdoutPath),t=me(e.heartbeatPath);return Np(e,r.finalResult,t)}function J(e,r={}){let t=dt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Np(e,t.finalResult,n),i=o?!1:Y(e.pid),a=Ho(e.stdoutPath),l=Ho(e.stderrPath),c=Ho(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rp(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=ed([t.lastEventAt,n.lastHeartbeatAt,$o(e.stdoutPath),$o(e.stderrPath),$o(e.heartbeatPath)]),m=i?null:ns(e.workerDir),f=s&&!Sa(s)?s:null,y=t.error||!i&&!s&&Dt(e.stderrPath,10).trim()||void 0,k=y||!i&&s&&!f&&Dt(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Tp(b)?null:b,h=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Sx({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:h,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),E=g||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",S=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,_=cp({alive:i,finalResult:s,error:k??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),K=S&&!i&&!f?S:_,$=K==="running"||K==="finished"?null:(S===K?e.stopReason:void 0)??up({stopClass:K,exit:m,error:k??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:E,stopClass:K,stopReason:$,exit:m,attention:w,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function we(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Mp(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Pa(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var bx,Ca,fe=P(()=>{"use strict";ct();Un();wa();wr();ts();xa();ss();vp();as();Op();ls();O();bx=18e4,Ca=6e5});import{readFileSync as _x}from"node:fs";function Ex(e){if(!e||process.platform!=="linux")return null;try{return _x(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wp(e){if(!e.pid||process.platform!=="linux")return!0;let r=Ex(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function Yr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!Y(e.pid)||!Wp(e)?!1:!Dp(e)}var us=P(()=>{"use strict";fe();O()});import Bp from"node:os";import Up from"node:path";function Lp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Cx(e=U(),r,t){let n=Lp(e.perWorkerMemBytes,ds),o=Lp(e.memReserveBytes,ps),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ms)),i=gs({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Bp.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Fp(e,r={}){let t=r.perWorkerMemBytes??ds,n=r.memReserveBytes??ps,o=r.memUtilization??ms,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,fs)}function Px(){return Ad()}function Ax(e){let r=0;for(let t of ir(e)){let n=I(Up.join(N(e.id),"workers",x(t),"worker.json"),void 0);!n||!Yr(n)||r++}return r}function Aa(){let e=0;for(let r of Xe())e+=Ax(r);return e}function jt(){let e=[];for(let r of Xe())for(let t of ir(r)){let n=I(Up.join(N(r.id),"workers",x(t),"worker.json"),void 0);n&&Yr(n)&&e.push({runId:r.id,workerName:t})}return e}function $n(e){let r=e.config??U(),t=e.totalMemBytes??Bp.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Cx(r,e.configuredMaxWorkersOverride,t),c=br(r),u=e.freeMemBytes??Px(),d=e.activeWorkers??Aa(),p=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(p/n)),f=Math.max(0,Math.floor(Math.max(0,u-o)/n)),y=a,k=Tn(c,i??y),b=Math.max(0,Math.min(k,m)),g=Math.max(0,b-d),w=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Vr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(w=0);let _=null;return w<=0&&(S&&!S.ok?_=S.reason??"disk gate blocked worker admission":d>=b?_=`at worker limit (${d}/${b} running)`:f<=0?_="insufficient free memory \u2014 waiting for workers to finish":_="no worker slots available"),{ok:w>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:y,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:_,...S?{diskGate:S}:{}}}var ds,ps,ms,fs,Vt=P(()=>{"use strict";Id();H();We();Jo();hs();Nn();B();Dn();us();O();ds=500*1024*1024,ps=4*1024*1024*1024,ms=.85,fs=64});function jn(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function gs(e){let r=e.config??{},t=e.env??process.env,n=jn(r.perWorkerMemBytes,ds),o=jn(r.memReserveBytes,ps),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ms)),i=Fp(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:jn(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=jn(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,fs),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&jn(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,fs),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var hs=P(()=>{"use strict";Vt()});import{homedir as Ix}from"node:os";import Ox from"node:path";var Kp,Ia=P(()=>{"use strict";Kp=Ox.join(Ix(),".kynver",".env")});var Hp=P(()=>{"use strict"});var $p=P(()=>{"use strict";Hp()});var jp=P(()=>{"use strict"});var Oa=P(()=>{"use strict";$p();jp();_n()});import{existsSync as Tx,readFileSync as Nx}from"node:fs";function Ta(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(Tx("/proc/version")){let e=Nx("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Na=P(()=>{"use strict"});var Vp=P(()=>{"use strict";Na()});var ks=P(()=>{"use strict";Ia();jr();H();Oa();Vp()});import Mx from"node:os";function Da(e,r){let t=(r??Mx.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function qp(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Jp(e,r){let t=e.trim();if(!t)return Da(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=qp(t.slice(n+1));return s?`${o}:${s}`:Da(o)}return`${r}:${qp(t)}`}function ys(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jp(r,e.boxKind):Da(e.boxKind,e.hostLabel)}var Rs=P(()=>{"use strict";We();We()});var zp=P(()=>{"use strict";Ia();Oa();ks()});function bs(){return vs}function Qp(e){if(!vs)return e;if(!Xp)throw new Ma;return Xp}function Qe(e,r=process.env){if(vs)return;let t=r[e]?.trim();return t||void 0}function La(){if(vs)throw new Wa}var Ma,Wa,vs,Xp,Vn=P(()=>{"use strict";Ma=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Wa=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},vs=!1,Xp=null});import{existsSync as xr,mkdirSync as Wx,readdirSync as Ss,renameSync as Zp,statSync as Lx}from"node:fs";import _r from"node:path";function rm(e){try{return Lx(e).isDirectory()}catch{return!1}}function Bx(e){if(!xr(e))return!0;for(let r of em){let t=_r.join(e,r);if(xr(t)&&(!rm(t)||Ss(t).length>0))return!1}return!0}function Ux(e){let r=_r.join(e,"runs");if(!xr(r)||!rm(r))return!1;for(let t of Ss(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=_r.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function Fx(e){let r=_r.join(e,"runs");if(!xr(r))return!1;for(let t of Ss(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(_r.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Kx(e){let r=_r.join(e,"ghost");return xr(r)?!xr(_r.join(r,"runs")):Fx(e)}function tm(e){return Ux(e.sharedRoot)?Bx(e.forgeRoot)?Kx(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function nm(e,r){Wx(r,{recursive:!0});for(let t of em){let n=_r.join(e,t),o=_r.join(r,t);if(xr(n)){if(xr(o)&&Ss(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(xr(o)){Zp(n,o);continue}Zp(n,o)}}}var em,om=P(()=>{"use strict";O();em=["runs","worktrees"]});import{existsSync as ve}from"node:fs";import{homedir as Hx}from"node:os";import ge from"node:path";function Ba(e=process.env){return e.HOME?.trim()||Hx()}function Ua(e=process.env){return ge.join(Ba(e),".kynver","harness")}function ws(e){let r=ge.resolve(Me(e.trim()));for(;$x.has(ge.basename(r));)r=ge.dirname(r);return r}function jx(e,r=process.env){return ge.join(Ua(r),e)}function Vx(e=process.env){let r=Ua(e);if(ve(ge.join(r,"runs")))return!0;if(ve(r)&&!ve(ge.join(r,"ghost"))&&!ve(ge.join(r,"forge")))return ve(r);let t=ge.join(Ba(e),sm);return ve(t)}function xs(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:ws(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:ws(n),source:"config"};let o=jx(e.boxKind,r);if(ve(ge.join(o,"runs"))||ve(o)&&!Gx(o))return{harnessRoot:o,source:"box_scoped"};let i=Ua(r);if(e.boxKind==="forge"){let a=tm({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&nm(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Vx(r)){if(ve(ge.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(ve(i)&&!ve(ge.join(i,"ghost"))&&!ve(ge.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=ge.join(Ba(r),sm);if(ve(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Gx(e){if(!ve(e))return!0;for(let r of["runs","worktrees"]){let t=ge.join(e,r);if(ve(t))return!1}return!0}var sm,$x,Fa=P(()=>{"use strict";jr();om();sm=ge.join(".openclaw","harness");$x=new Set(["runs","worktrees"])});import im from"node:os";function _s(e){return e?.trim()?e.trim():null}function Yx(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function qx(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Gt(e=U(),r=process.env,t={}){let n=vr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||_s(r.KYNVER_BOX_KIND)),a=t.strict===!0||qx(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=_s(e.runnerId),c=_s(r.KYNVER_RUNTIME_ID)??_s(r.OPENCLAW_RUNTIME_ID),u=l??c??Yx(n.boxKind,im.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=gs({config:e,env:r,totalMemBytes:im.totalmem()}),m=Tn(n.boxKind,p.configuredMaxWorkers??da(n.boxKind,p.autoCap)),f=xs({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Gn=P(()=>{"use strict";H();We();Jo();hs();Fa()});var lm=P(()=>{"use strict";Cn();We();Rs();H();ks();zp();On();Vn();Gn()});function ar(e){let r=e.trim().toLowerCase();return Xx[r]??r}var cm,zx,Xx,Es=P(()=>{"use strict";cm=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],zx=cm.join("|"),Xx={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var um=P(()=>{"use strict";jr()});var dm=P(()=>{"use strict";um()});import{execFileSync as Qx}from"node:child_process";function $a(e=process.env){let r=e[Zx]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function e_(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return Qx(e,r,n)}function r_(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Ka(e,r){let t=JSON.stringify(mt),n=JSON.stringify(r),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${t}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${t}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${t}, ${n}); $v.Remove($old) } catch {}`}function pm(e={}){if($a(e.env??process.env)==="file")return null;let t=r_(e.platform??process.platform);return t?new Ha(t,e.exec):null}var mt,Zx,Er,Ha,mm=P(()=>{"use strict";mt="kynver",Zx="KYNVER_CREDENTIAL_STORE";Er=5e3;Ha=class{constructor(r,t=e_){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",mt,"-a",r,"-w"],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",mt,"account",r],{timeoutMs:Er}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("get",r)],{timeoutMs:Er}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(r,t){if(!t||/[\r\n]/.test(t))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",mt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",mt,"account",r],{input:`${t}
|
|
76
|
+
`,timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("set",r)],{input:`${t}
|
|
77
|
+
`,timeoutMs:Er})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",mt,"-a",r],{timeoutMs:Er}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",mt,"account",r],{timeoutMs:Er}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Ka("delete",r)],{timeoutMs:Er})}catch{}}}});function Yn(){return ja||(ja=new Va),ja}var Ga,t_,Cs,Va,ja,Ya=P(()=>{"use strict";mm();Ga="api-key",t_=6e4,Cs=class extends Error{constructor(r){super(`KYNVER_CREDENTIAL_STORE=keychain but the OS keychain could not store "${r}"; refusing to write the secret to disk`),this.name="KeychainUnavailableError"}},Va=class{cache=new Map;keychain;env;now;constructor(r={}){this.env=r.env??process.env,this.keychain=r.keychain===void 0?pm({env:this.env}):r.keychain,this.now=r.now??Date.now}get available(){return this.keychain!==null}get backend(){return this.keychain?.backend??null}read(r){if(!this.keychain)return null;let t=this.cache.get(r);if(t&&this.now()-t.at<t_)return t.value;let n=this.keychain.get(r);return this.cache.set(r,{value:n,at:this.now()}),n}write(r,t){let n=$a(this.env);if(!this.keychain){if(n==="keychain")throw new Cs(r);return!1}let o=this.keychain.set(r,t);if(o)this.cache.set(r,{value:t,at:this.now()});else if(this.cache.delete(r),n==="keychain")throw new Cs(r);return o}remove(r){this.cache.delete(r),this.keychain?.delete(r)}invalidate(r){r?this.cache.delete(r):this.cache.clear()}},ja=null});import{existsSync as gm,mkdirSync as o_,readFileSync as hm,writeFileSync as s_}from"node:fs";import{homedir as i_,totalmem as pF}from"node:os";import za from"node:path";function a_(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Me(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Me(e.defaultRepo.trim())}:{}}}function km(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!hd(Me(r))?e:{...e,defaultBase:gd}}function l_(){if(!gm(fm))return null;try{return JSON.parse(hm(fm,"utf8"))}catch{return null}}function U(){let e=l_();return e?km(a_(e)):{}}function Ps(){if(La(),!gm(qa))return{};try{return JSON.parse(hm(qa,"utf8"))}catch{return{}}}function Ja(e){La(),o_(Xa,{recursive:!0}),s_(qa,`${JSON.stringify(e,null,2)}
|
|
78
|
+
`,{mode:384})}function c_(e,r,t,n={}){let o=Ps();if(Yn().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),Ja(i);return}Ja({...o,...n,[r]:t})}function u_(e,r){let t=Yn().read(e);return t||Ps()[r]}function Qa(){return Qp(d_)}function Cr(){return Qa().getApiKey()}function Yt(e){return Qa().getRunnerToken(e)}function Za(e,r){Qa().persistRunnerToken(e,r)}function Q(e){let r=qn(e);return r||vm("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function el(e){return qn(e)}function qn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||U().apiBaseUrl;return An(r)}function p_(e,r){let t=e||Yt(r)||(r?void 0:Yt(U().agentOsId));if(t)return String(t);let n=Qe("KYNVER_RUNTIME_SECRET")||Qe("KYNVER_CRON_SECRET")||Qe("OPENCLAW_CRON_SECRET");if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function m_(e,r,t){let n=p_(e,r);if(n)return{ok:!0,secret:n};let o=Cr(),s=qn(t?.baseUrl);if(o&&r&&s)try{let i=await rl(r,{baseUrl:s,apiKey:o});return Za(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function ee(e,r,t){let n=await m_(e,r,t);if(n.ok)return n.secret;vm(n.reason)}async function ym(e,r){let t=Cr(),n=qn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await rl(e,{baseUrl:n,apiKey:t});return Za(e,o),o}catch{return null}}async function Rm(e,r,t){let n=Cr(),o=qn(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await rl(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Za(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function rl(e,r){let t=r?.apiKey||Cr();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${Q(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await In(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(r?.enableMcpUpdates?{enableMcpUpdates:!0}:{})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}function vm(e){console.error(e),process.exit(1)}var Xa,fm,qa,IF,OF,d_,H=P(()=>{"use strict";Cn();jr();la();wd();On();We();Jo();hs();Nn();ks();lm();Es();Gn();dm();Vn();Ya();Xa=za.join(i_(),".kynver"),fm=za.join(Xa,"config.json"),qa=za.join(Xa,"credentials");IF=500*1024*1024,OF=4*1024*1024*1024;d_={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:u_(Ga,"apiKey")},getRunnerToken(e){let r=Ps();if(!!r.runnerToken&&!!e&&r.runnerTokenAgentOsId===e)return r.runnerToken;let n=process.env.KYNVER_RUNNER_TOKEN?.trim();if(n)return n;if(r.runnerToken&&!(e&&r.runnerTokenAgentOsId&&r.runnerTokenAgentOsId!==e))return r.runnerToken},persistApiKey(e){c_(Ga,"apiKey",e)},persistRunnerToken(e,r){Ja({...Ps(),runnerToken:r,runnerTokenAgentOsId:e})}}});import tl from"node:path";function he(e){return ws(e)}function Be(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return he(e);let r=U(),t=r.harnessRoot?.trim();if(t)return he(t);let n=Gt(r,process.env);return n.identity?n.identity.harnessRoot:xs({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ae(e){return tl.join(he(e),"runs")}function qt(e){return tl.join(he(e),"worktrees")}function bm(){let e=Be();return{harnessRoot:e,runsDir:Ae(e),worktreesDir:qt(e)}}function Pr(e,r){return tl.join(e,x(r))}var Ze=P(()=>{"use strict";H();Fa();Gn();O()});import{existsSync as As,readdirSync as f_,statSync as g_}from"node:fs";import ft from"node:path";function le(){return bm()}function q(e){let{runsDir:r}=le(),t=ft.join(Pr(r,x(e)),"run.json");return As(t)||Je(`run '${e}' not found`),I(t)}function Xe(){let{runsDir:e}=le();return Sm(e)}function Is(e){return Sm(Ae(e))}function h_(e){try{return g_(e).isDirectory()}catch{return!1}}function Sm(e){if(!As(e))return[];let r=[];for(let t of f_(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ft.join(e,t.name);if(!h_(n))continue;let o=I(ft.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Jt(e,r){let{runsDir:t}=le(),n=ft.join(Pr(t,x(e)),"run.json"),o=ft.join(Pr(t,x(e)),"workers",x(r),"worker.json");return As(o)||(As(n)||Je(`run '${e}' not found`),Je(`worker '${r}' not found in run '${e}'`)),I(o)}function Ie(e){let{runsDir:r}=le();ue(ft.join(Pr(r,e.id),"run.json"),e)}function L(e,r){let{runsDir:t}=le();ue(ft.join(Pr(t,e),"workers",r.name,"worker.json"),r)}function N(e){let{harnessRoot:r}=le();return Jn(r,e)}function Jn(e,r){return Pr(Ae(e),x(r))}var B=P(()=>{"use strict";Ze();O()});import{parentPort as wb,workerData as KW}from"node:worker_threads";var bn=null,Vu=-1,Gu=0;function Yu(e){bn=e}function qu(e=Date.now()){return!bn||bn.stallCount===Vu&&e-Gu<9e5?null:(Vu=bn.stallCount,Gu=e,bn)}var Pb="embedded-1",Ab=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],Ib={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
77
79
|
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
78
80
|
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
79
81
|
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
|
80
|
-
`)},Ib={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Tt={version:Cb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Pb,instructions:Ab,policyThresholds:Ib};var bn=Tt,Ob="embedded";function Ju(){return bn.version}function zu(e,r){bn=e,Ob=r}function Sn(e){let r=bn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Tt.instructions[e];return typeof t=="string"?t:""}function Zi(e,r){let t=bn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Tt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Xu(e){if(!e)return null;let r=e.trim().toLowerCase();return bn.personas.find(t=>t.slug===r)??null}xn();import kb from"node:path";B();cs();O();import h_ from"node:path";function k_(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Is(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(h_.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!Yr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...k_(o)})}return t}H();function Jn(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}In();H();function xm(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}function wm(e){return new Error(`callback timeout after ${e}ms`)}async function _m(e,r){let t=xm(r),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(wm(t))},t)})])}catch(i){throw s?wm(t):i}finally{o&&clearTimeout(o)}}function Em(e,r){let t=xm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function ft(e,r,t,n){try{return await _m(async o=>{let s=await An(e,{method:"POST",headers:Jn(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Em(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await ft(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Rm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await ft(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function tl(e,r,t){try{return await _m(async n=>{let o=await An(e,{method:"GET",headers:Jn(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Em(n,t?.timeoutMs)}}H();jn();import{spawnSync as I_}from"node:child_process";import{randomBytes as O_}from"node:crypto";import{createPublicKey as w_,verify as x_}from"node:crypto";import{createHash as y_,createPublicKey as eK,verify as rK}from"node:crypto";function ol(e){return JSON.stringify(nl(e))}function nl(e){if(Array.isArray(e))return e.map(nl);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=nl(e[t]);return r}return e}function sl(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function Cm(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=sl(t);n&&r.push(n)}return r}function Pm(e=process.env){if(e.NODE_ENV==="production")return!1;let r=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var nK=Buffer.from("302a300506032b6570032100","hex"),Am="ca-6297fb8e1773",R_={[Am]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"};function v_(e){return`ca-${y_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Im(e,r=process.env){let t=Cm(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>v_(o)===e)??null;let n=R_[e];return!n||e===Am&&!Pm(r)?null:sl(n)}var b_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,S_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Os(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(b_)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(t))return"read_only";for(let s of r.matchAll(S_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var __=120,Om=["write","read_only","land_pr","verify_live"],E_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var C_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Tm(e){let r=e.trim();if(!r||r.includes("\0")||/\s/.test(r))return null;let t,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(r);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(r)){let a;try{a=new URL(r)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;t=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))t=o[1],n=o[2];else return null;t=t.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${t}/${s.join("/")}`;return C_.test(i)&&i.length<=512?i:null}function Nm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Os(r)==="read_only"?"read_only":"write"}function P_(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;if(Object.keys(r).sort().join(",")!=="payload,publicKeyId,signature"||typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.payload;if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).sort().join(",")!==[...E_].join(",")||t.v!==1||t.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof t[n]!="string"||!t[n])return!1;return!(typeof t.attempt!="number"||!Number.isInteger(t.attempt)||t.attempt<0||typeof t.exp!="number"||!Number.isFinite(t.exp)||!Om.includes(t.operationClass))}var A_=Buffer.from("302a300506032b6570032100","hex");function Dm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!P_(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(r))if(o[a]!==r[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+__+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Im(e.publicKeyId,t);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=w_({key:Buffer.concat([A_,Buffer.from(s)]),format:"der",type:"spki"});return x_(null,Buffer.from(ol(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}O();var il=class{constructor(r=4096){this.capacity=r}capacity;order=[];keys=new Set;consume(r){if(this.keys.has(r))return!1;for(this.keys.add(r),this.order.push(r);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};function T_(e){let r=(c,u)=>({allow:!1,code:c,reason:u}),{policy:t,identity:n}=e;if(!n)return r("no_identity","the desktop runtime has not been prepared");if(!t)return r("no_policy","no approved execution policy on this computer");if(t.accountId!==n.accountId||t.agentOsId!==n.agentOsId)return r("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return r("repo_identity_unavailable","the repository has no canonical remote identity");if(t.repoIdentity!==e.repoIdentity)return r("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return r("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=Nm(e.decision),a=Dm(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return r(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?t.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${t.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:t.repoIdentity,operationClass:i}}:r("replayed","this claim authorization was already used")}var N_=null,D_=null,M_=new il,W_=new Set;function Mm(){return vs()}function Wm(e){return{v:1,repoIdentity:e,requestNonce:O_(16).toString("base64url")}}function Lm(e){let r=I_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Tm(r.stdout.trim())}function Bm(e){let r=T_({...e,policy:N_,identity:D_,consumed:M_});if(!r.allow){let t=e.decision.task??{},n={taskId:typeof t.id=="string"?t.id:"",code:r.code,reason:r.reason,...r.consentRequired?{consentRequired:r.consentRequired}:{}};for(let o of W_)try{o(n)}catch{}}return r}function Um(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function zn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Fm(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeout===!0||r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}function al(e){if(!e||typeof e!="object")return!1;let r=e;return r.timeout===!0?!0:(typeof r.error=="string"?r.error.toLowerCase():"").includes("timeout")}var L_=["implementation","review","landing"],B_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function U_(e){return L_.includes(e)}function F_(e){return B_.includes(e)}function Km(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||U_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:F_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Hm=Tt.personas.map(Km),K_=new Map(Hm.map(e=>[e.slug,e]));function H_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=K_.get(r)??null,n=Xu(r);if(!n)return t;let o=Km(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function ll(e){return H_(e)?.defaultRoleLane??null}function $m(){return Hm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function jm(e){return(e??"").trim().toLowerCase()}function $_(e){switch(jm(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function j_(e){let r=jm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=$_(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Vm(e){return j_(e)??"any"}Tn();H();We();function V_(e=process.env){let r=U();return br(r,e)!=="forge"}function Ts(e,r=process.env){if(V_(r))return e?.maxConcurrentWorkers??void 0}async function Ns(e,r){let t=Q(r.baseUrl?String(r.baseUrl):void 0),n=await ee(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await tl(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}jt();var G_={fetchPreferences:Ns,configuredOverride:Ts,observe:Hn};async function Gm(e,r=G_){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}jt();B();B();function Ds(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function cl(e){return e.toLowerCase()}function Y_(e){let r=Ds(e,"roleLane");if(r)return r;let t=cl(Ds(e,"executorRef")),n=cl(Ds(e,"title")),o=cl(Ds(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=ll(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Ym(e){let r=Y_(e);return r?{...e,roleLane:r}:e}H();var q_=/^claude[-_]/i,J_=/^(?:opus|sonnet|haiku)\b/i;function qm(e){let r=e.trim();return q_.test(r)||J_.test(r)}function Jm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ul(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function zm(e){return e.trim().toLowerCase().startsWith("gemini-")}function z_(e){return Jm(e)?"codex":qm(e)?"claude":zm(e)?"gemini":(ul(e),"cursor")}function X_(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Q_(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?qm(n)||Jm(n)||ul(n)||zm(n)?{lane:t,model:n,provider:z_(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Ue(e){let r=typeof e=="string"?e.trim():"";return r?X_(r)??Q_(r):null}function Xm(e){let r=Ue(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ul(r.model)):!1}_s();_s();var Ir="cursor",Z_=new Set(["claude","opus","anthropic"]),eE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Xn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ar(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return Z_.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ms(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ar(r))return!0;let t=Xn(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ue(Xn(e,"executorRef"));if(n?.provider&&Ar(n.provider)||n?.model&&Ar(rE(n.model)))return!0;let o=Xn(e,"description");if(eE.some(i=>i.test(o)))return!0;let s=Xn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function rE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function tE(e,r){return{provider:Ir,model:Ws,rule:`policy:cursor_default${r}`,requestedModel:e}}var nE=["explicit:","executor_ref:","factory:","task:"];function oE(e){return nE.some(r=>e.startsWith(r))}function dl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ue(Xn(e,"executorRef"))?.provider?!0:Ms(e)}function Qm(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ar(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||oE(r.rule)||dl(t)||!Ar(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return tE(r.model,o)}function Zm(e,r=Ir){let t=e?.trim();return t?ar(t):r}var ef={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function Jt(e){return ef[e]}function rf(){return Object.values(ef)}import{existsSync as iE}from"node:fs";import{homedir as aE}from"node:os";import Qn from"node:path";Rr();import{createHash as tf}from"node:crypto";import{statSync as sE}from"node:fs";import{spawnSync as nf}from"node:child_process";function lr(e){try{let r=sE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function zt(e){return tf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Fe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function er(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r),i=nf(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Ls(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return nf(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var lE="codex";function cE(){let e=aE();return[process.env.CODEX_HOME?.trim()?Qn.join(Qn.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Qn.join(e,".codex","auth.json"),Qn.join(e,".config","codex","auth.json")].filter(t=>!!t)}function uE(e){return Qn.dirname(e)}function dE(e){let r,t;for(let n of cE()){if(!iE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:uE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function of(e=new Date().toISOString()){let r=Fe(lE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:zt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=dE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?lr(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as pE}from"node:fs";import{homedir as mE}from"node:os";import pl from"node:path";function fE(){let e=process.env.HERMES_HOME?.trim(),r=e?pl.resolve(e):pl.join(mE(),".hermes");return pl.join(r,"auth.json")}function Bs(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=fE(),o=pE(n),s=Ls(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?lr(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Xt(e=new Date().toISOString()){let r=of(e);if(r.ready)return{...r,path:"codex_cli"};let t=Bs(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var sf=["low","medium","high"],af={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function lf(e,r){let t=Jt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function gE(e,r){let t=Jt(e.providerId),n=Jt(r.providerId),o=sf.indexOf(t.costTier)-sf.indexOf(n.costTier);if(o!==0)return o;let s=af[e.binding.authSource]-af[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ml(e){let r=rf().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&lf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(gE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return lf(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as hE}from"node:fs";import{homedir as kE}from"node:os";import yE from"node:path";var RE="claude";function vE(){let e=kE();return[yE.join(e,".claude",".credentials.json")]}function cf(e=new Date().toISOString()){let r=Fe(RE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:zt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=vE().find(i=>hE(i)),o=Ls(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as VE}from"node:fs";import{homedir as jE}from"node:os";import en from"node:path";wr();O();import{closeSync as yl,existsSync as ff,mkdirSync as OE,openSync as Rl,statSync as TE,unlinkSync as pf}from"node:fs";import{spawn as NE}from"node:child_process";import DE from"node:os";import cr from"node:path";sa();var bE="KYNVER_NO_PROD_DB_CREDENTIALS",SE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=oa(e);if(!r.reviewWorker)return t;let n={...t,[bE]:"1"};for(let o of SE)delete n[o];return n}var wE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function uf(e){return e.replace(wE,"")}var df=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Us(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function xE(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var _E=new Set(["cursor"]);function EE(e){let r=e.trim().toLowerCase();return _E.has(r)?"auto":null}function fl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return df.test(o)||!Us(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function Qt(e,r){let t=(e??"").trim();return t?Us(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function gl(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function Zt(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return Us(o)||!xE(o)&&df.test(o)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function hl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=EE(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Us(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}import{existsSync as Zn,readdirSync as CE}from"node:fs";import gt from"node:path";var PE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function AE(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function IE(e){let r=gt.join(e,"versions");if(!Zn(r))return null;let t=null,n=-1;for(let o of CE(r,{withFileTypes:!0})){if(!o.isDirectory()||!PE.test(o.name))continue;let s=AE(o.name);s==null||s<=n||(n=s,t=gt.join(r,o.name))}return t}function Fs(e){let r=e?.trim()||gt.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=gt.join(r,"node.exe"),n=gt.join(r,"index.js");if(Zn(t)&&Zn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=IE(r);if(!o)return null;let s=gt.join(o,"node.exe"),i=gt.join(o,"index.js");return!Zn(s)||!Zn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var kl="composer-2.5",ME=15e3,WE=6e4,LE=3e4;function BE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function bl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&ff(cr.join(cr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Fs(cr.dirname(e)):t?{nodeExe:e,indexJs:cr.join(cr.dirname(e),"index.js"),versionDir:cr.dirname(e)}:Fs();if(o)return BE(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:ce()}}function UE(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:cr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function gf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function vl(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?Math.floor(n):r}function FE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||cr.join(DE.homedir(),".kynver","locks");return OE(e,{recursive:!0}),cr.join(e,"cursor-agent-start.lock")}function KE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=FE(),r=vl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",WE),t=vl("KYNVER_CURSOR_START_LOCK_STALE_MS",LE),n=Date.now();for(;;)try{let o=Rl(e,"wx");return yl(o),()=>{try{pf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-TE(e).mtimeMs>t){pf(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);gf(250)}}function hf(e=process.env){let r=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(r)return r;if(process.platform==="win32"){let t=Fs(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=cr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(ff(n))return n}return"agent"}function HE(){return hf(process.env)}var kf={name:"cursor",defaultModel:kl,preflightModel(e){return hl(e,kl)},start(e){let r=hl(e.model,kl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Rl(e.stdoutPath,"a"),o=Rl(e.stderrPath,"a"),s=["ignore",n,o],i=HE(),a=bl(i),l=KE(),c;try{let[u,d]=a.shell?[a.executable,mf(e,t,a.prefixArgs)]:Pe(a.executable,mf(e,t,a.prefixArgs),e.workerDir);c=NE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:UE(i,a,e.reviewWorker)})),gf(vl("KYNVER_CURSOR_START_LOCK_HOLD_MS",ME))}finally{l(),yl(n),yl(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:t}}};function mf(e,r,t=[]){return[...t,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",r,e.prompt]}import{spawnSync as $E}from"node:child_process";function Sl(e,r=process.env){try{let t;try{t=bl(e)}catch{t={executable:e,prefixArgs:[]}}let n=$E(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function wl(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(en.join(t,".config","cursor","auth.json")),r.push(en.join(t,".cursor-agent","auth.json")));let n=jE();if(r.push(en.join(n,".config","cursor","auth.json")),r.push(en.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(en.join(o,"cursor-agent","auth.json")),s&&r.push(en.join(s,"cursor","auth.json"))}return r}var GE="agent";function yf(e=new Date().toISOString()){let r=Fe(GE,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:zt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=wl().find(a=>VE(a)),o=Sl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as YE,readFileSync as qE}from"node:fs";import{homedir as JE}from"node:os";import xl from"node:path";var zE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function XE(){let e=process.env.HERMES_HOME?.trim(),r=e?xl.resolve(e):xl.join(JE(),".hermes");return xl.join(r,".env")}function QE(e){try{let r=qE(e,"utf8"),t=[];for(let n of zE)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rf(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=XE(),o=YE(n),s=o?QE(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?lr(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function vf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Xt(r),n={codex:t,cursor:yf(r),claude:cf(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rf(r),hermesOpenAiCodex:Bs(r),codexAdapterPath:t.path,readyCount:o}}var ZE=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],eC=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function _l(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function rC(e){let r=_l(e,"executorRef").toLowerCase(),t=_l(e,"title").toLowerCase(),n=_l(e,"description").toLowerCase(),o=`${r}
|
|
82
|
+
`)},Ob={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Nt={version:Pb,generatedAt:"1970-01-01T00:00:00.000Z",personas:Ab,instructions:Ib,policyThresholds:Ob};var Sn=Nt,Tb="embedded";function Ju(){return Sn.version}function zu(e,r){Sn=e,Tb=r}function wn(e){let r=Sn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Nt.instructions[e];return typeof t=="string"?t:""}function ea(e,r){let t=Sn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Nt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Xu(e){if(!e)return null;let r=e.trim().toLowerCase();return Sn.personas.find(t=>t.slug===r)??null}_n();import yb from"node:path";B();us();O();import k_ from"node:path";function y_(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Os(e){let r=q(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(k_.join(N(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!Yr(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...y_(o)})}return t}H();function zn(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}On();H();function xm(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}function wm(e){return new Error(`callback timeout after ${e}ms`)}async function _m(e,r){let t=xm(r),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(wm(t))},t)})])}catch(i){throw s?wm(t):i}finally{o&&clearTimeout(o)}}function Em(e,r){let t=xm(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function gt(e,r,t,n){try{return await _m(async o=>{let s=await In(e,{method:"POST",headers:zn(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Em(o,n?.timeoutMs)}}async function X(e,r,t,n){let o=await gt(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Rm(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await gt(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function nl(e,r,t){try{return await _m(async n=>{let o=await In(e,{method:"GET",headers:zn(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return Em(n,t?.timeoutMs)}}H();Vn();import{spawnSync as O_}from"node:child_process";import{randomBytes as T_}from"node:crypto";import{createPublicKey as x_,verify as __}from"node:crypto";import{createHash as R_,createPublicKey as tK,verify as nK}from"node:crypto";function sl(e){return JSON.stringify(ol(e))}function ol(e){if(Array.isArray(e))return e.map(ol);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=ol(e[t]);return r}return e}function il(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function Cm(e){if(!e)return[];let r=[];for(let t of e.split(/[,\s]+/)){let n=il(t);n&&r.push(n)}return r}function Pm(e=process.env){if(e.NODE_ENV==="production")return!1;let r=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var sK=Buffer.from("302a300506032b6570032100","hex"),Am="ca-6297fb8e1773",v_={[Am]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"};function b_(e){return`ca-${R_("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Im(e,r=process.env){let t=Cm(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t.length>0)return t.find(o=>b_(o)===e)??null;let n=v_[e];return!n||e===Am&&!Pm(r)?null:il(n)}var S_=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,w_=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function Ts(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(S_)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(t))return"read_only";for(let s of r.matchAll(w_))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var E_=120,Om=["write","read_only","land_pr","verify_live"],C_=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var P_=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Tm(e){let r=e.trim();if(!r||r.includes("\0")||/\s/.test(r))return null;let t,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(r);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(r)){let a;try{a=new URL(r)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;t=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))t=o[1],n=o[2];else return null;t=t.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${t}/${s.join("/")}`;return P_.test(i)&&i.length<=512?i:null}function Nm(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":Ts(r)==="read_only"?"read_only":"write"}function A_(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;if(Object.keys(r).sort().join(",")!=="payload,publicKeyId,signature"||typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.payload;if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).sort().join(",")!==[...C_].join(",")||t.v!==1||t.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof t[n]!="string"||!t[n])return!1;return!(typeof t.attempt!="number"||!Number.isInteger(t.attempt)||t.attempt<0||typeof t.exp!="number"||!Number.isFinite(t.exp)||!Om.includes(t.operationClass))}var I_=Buffer.from("302a300506032b6570032100","hex");function Dm(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!A_(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(r))if(o[a]!==r[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+E_+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Im(e.publicKeyId,t);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=x_({key:Buffer.concat([I_,Buffer.from(s)]),format:"der",type:"spki"});return __(null,Buffer.from(sl(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}O();var al=class{constructor(r=4096){this.capacity=r}capacity;order=[];keys=new Set;consume(r){if(this.keys.has(r))return!1;for(this.keys.add(r),this.order.push(r);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};function N_(e){let r=(c,u)=>({allow:!1,code:c,reason:u}),{policy:t,identity:n}=e;if(!n)return r("no_identity","the desktop runtime has not been prepared");if(!t)return r("no_policy","no approved execution policy on this computer");if(t.accountId!==n.accountId||t.agentOsId!==n.agentOsId)return r("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return r("repo_identity_unavailable","the repository has no canonical remote identity");if(t.repoIdentity!==e.repoIdentity)return r("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return r("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=Nm(e.decision),a=Dm(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return r(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?t.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${t.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:t.repoIdentity,operationClass:i}}:r("replayed","this claim authorization was already used")}var D_=null,M_=null,W_=new al,L_=new Set;function Mm(){return bs()}function Wm(e){return{v:1,repoIdentity:e,requestNonce:T_(16).toString("base64url")}}function Lm(e){let r=O_("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Tm(r.stdout.trim())}function Bm(e){let r=N_({...e,policy:D_,identity:M_,consumed:W_});if(!r.allow){let t=e.decision.task??{},n={taskId:typeof t.id=="string"?t.id:"",code:r.code,reason:r.reason,...r.consentRequired?{consentRequired:r.consentRequired}:{}};for(let o of L_)try{o(n)}catch{}}return r}function Um(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function Xn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Fm(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeout===!0||r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}function ll(e){if(!e||typeof e!="object")return!1;let r=e;return r.timeout===!0?!0:(typeof r.error=="string"?r.error.toLowerCase():"").includes("timeout")}var B_=["implementation","review","landing"],U_=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function F_(e){return B_.includes(e)}function K_(e){return U_.includes(e)}function Km(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||F_(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:K_(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Hm=Nt.personas.map(Km),H_=new Map(Hm.map(e=>[e.slug,e]));function $_(e){if(!e)return null;let r=e.trim().toLowerCase(),t=H_.get(r)??null,n=Xu(r);if(!n)return t;let o=Km(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function cl(e){return $_(e)?.defaultRoleLane??null}function $m(){return Hm.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function jm(e){return(e??"").trim().toLowerCase()}function j_(e){switch(jm(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function V_(e){let r=jm(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=j_(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Vm(e){return V_(e)??"any"}Nn();H();We();function G_(e=process.env){let r=U();return br(r,e)!=="forge"}function Ns(e,r=process.env){if(G_(r))return e?.maxConcurrentWorkers??void 0}async function Ds(e,r){let t=Q(r.baseUrl?String(r.baseUrl):void 0),n=await ee(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await nl(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}Vt();var Y_={fetchPreferences:Ds,configuredOverride:Ns,observe:$n};async function Gm(e,r=Y_){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Vt();B();B();function Ms(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function ul(e){return e.toLowerCase()}function q_(e){let r=Ms(e,"roleLane");if(r)return r;let t=ul(Ms(e,"executorRef")),n=ul(Ms(e,"title")),o=ul(Ms(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=cl(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Ym(e){let r=q_(e);return r?{...e,roleLane:r}:e}H();var J_=/^claude[-_]/i,z_=/^(?:opus|sonnet|haiku)\b/i;function qm(e){let r=e.trim();return J_.test(r)||z_.test(r)}function Jm(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function dl(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function zm(e){return e.trim().toLowerCase().startsWith("gemini-")}function X_(e){return Jm(e)?"codex":qm(e)?"claude":zm(e)?"gemini":(dl(e),"cursor")}function Q_(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Z_(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?qm(n)||Jm(n)||dl(n)||zm(n)?{lane:t,model:n,provider:X_(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Ue(e){let r=typeof e=="string"?e.trim():"";return r?Q_(r)??Z_(r):null}function Xm(e){let r=Ue(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!dl(r.model)):!1}Es();Es();var Ir="cursor",eE=new Set(["claude","opus","anthropic"]),rE=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Qn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ar(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return eE.has(r)?!0:r.includes("claude")||r.includes("opus")}function Ws(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ar(r))return!0;let t=Qn(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ue(Qn(e,"executorRef"));if(n?.provider&&Ar(n.provider)||n?.model&&Ar(tE(n.model)))return!0;let o=Qn(e,"description");if(rE.some(i=>i.test(o)))return!0;let s=Qn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function tE(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function nE(e,r){return{provider:Ir,model:Ls,rule:`policy:cursor_default${r}`,requestedModel:e}}var oE=["explicit:","executor_ref:","factory:","task:"];function sE(e){return oE.some(r=>e.startsWith(r))}function pl(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ue(Qn(e,"executorRef"))?.provider?!0:Ws(e)}function Qm(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ar(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||sE(r.rule)||pl(t)||!Ar(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return nE(r.model,o)}function Zm(e,r=Ir){let t=e?.trim();return t?ar(t):r}var ef={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function zt(e){return ef[e]}function rf(){return Object.values(ef)}import{existsSync as aE}from"node:fs";import{homedir as lE}from"node:os";import Zn from"node:path";Rr();import{createHash as tf}from"node:crypto";import{statSync as iE}from"node:fs";import{spawnSync as nf}from"node:child_process";function lr(e){try{let r=iE(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tf("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Xt(e){return tf("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Fe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function er(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r),i=nf(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Bs(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=pe(e,r);return nf(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var cE="codex";function uE(){let e=lE();return[process.env.CODEX_HOME?.trim()?Zn.join(Zn.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Zn.join(e,".codex","auth.json"),Zn.join(e,".config","codex","auth.json")].filter(t=>!!t)}function dE(e){return Zn.dirname(e)}function pE(e){let r,t;for(let n of uE()){if(!aE(n))continue;r??=n;let o=er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:dE(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??er(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function of(e=new Date().toISOString()){let r=Fe(cE,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Xt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=pE(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?lr(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as mE}from"node:fs";import{homedir as fE}from"node:os";import ml from"node:path";function gE(){let e=process.env.HERMES_HOME?.trim(),r=e?ml.resolve(e):ml.join(fE(),".hermes");return ml.join(r,"auth.json")}function Us(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=gE(),o=mE(n),s=Bs(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?lr(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Qt(e=new Date().toISOString()){let r=of(e);if(r.ready)return{...r,path:"codex_cli"};let t=Us(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var sf=["low","medium","high"],af={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function lf(e,r){let t=zt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function hE(e,r){let t=zt(e.providerId),n=zt(r.providerId),o=sf.indexOf(t.costTier)-sf.indexOf(n.costTier);if(o!==0)return o;let s=af[e.binding.authSource]-af[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function fl(e){let r=rf().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&lf(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(hE)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return lf(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as kE}from"node:fs";import{homedir as yE}from"node:os";import RE from"node:path";var vE="claude";function bE(){let e=yE();return[RE.join(e,".claude",".credentials.json")]}function cf(e=new Date().toISOString()){let r=Fe(vE,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Xt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=bE().find(i=>kE(i)),o=Bs(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as GE}from"node:fs";import{homedir as VE}from"node:os";import rn from"node:path";wr();O();import{closeSync as Rl,existsSync as ff,mkdirSync as TE,openSync as vl,statSync as NE,unlinkSync as pf}from"node:fs";import{spawn as DE}from"node:child_process";import ME from"node:os";import cr from"node:path";ia();var SE="KYNVER_NO_PROD_DB_CREDENTIALS",wE=["KYNVER_ENV_FILE"];function Ke(e,r={}){let t=sa(e);if(!r.reviewWorker)return t;let n={...t,[SE]:"1"};for(let o of wE)delete n[o];return n}var xE=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function uf(e){return e.replace(xE,"")}var df=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Fs(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function _E(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var EE=new Set(["cursor"]);function CE(e){let r=e.trim().toLowerCase();return EE.has(r)?"auto":null}function gl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return df.test(o)||!Fs(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function Zt(e,r){let t=(e??"").trim();return t?Fs(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function hl(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function en(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=uf(t).trim()||r;return Fs(o)||!_E(o)&&df.test(o)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function kl(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=CE(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Fs(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}import{existsSync as eo,readdirSync as PE}from"node:fs";import ht from"node:path";var AE=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function IE(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function OE(e){let r=ht.join(e,"versions");if(!eo(r))return null;let t=null,n=-1;for(let o of PE(r,{withFileTypes:!0})){if(!o.isDirectory()||!AE.test(o.name))continue;let s=IE(o.name);s==null||s<=n||(n=s,t=ht.join(r,o.name))}return t}function Ks(e){let r=e?.trim()||ht.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=ht.join(r,"node.exe"),n=ht.join(r,"index.js");if(eo(t)&&eo(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=OE(r);if(!o)return null;let s=ht.join(o,"node.exe"),i=ht.join(o,"index.js");return!eo(s)||!eo(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var yl="composer-2.5",WE=15e3,LE=6e4,BE=3e4;function UE(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function Sl(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&ff(cr.join(cr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ks(cr.dirname(e)):t?{nodeExe:e,indexJs:cr.join(cr.dirname(e),"index.js"),versionDir:cr.dirname(e)}:Ks();if(o)return UE(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:ce()}}function FE(e,r,t){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:cr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function gf(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function bl(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?Math.floor(n):r}function KE(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||cr.join(ME.homedir(),".kynver","locks");return TE(e,{recursive:!0}),cr.join(e,"cursor-agent-start.lock")}function HE(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=KE(),r=bl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",LE),t=bl("KYNVER_CURSOR_START_LOCK_STALE_MS",BE),n=Date.now();for(;;)try{let o=vl(e,"wx");return Rl(o),()=>{try{pf(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-NE(e).mtimeMs>t){pf(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);gf(250)}}function hf(e=process.env){let r=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(r)return r;if(process.platform==="win32"){let t=Ks(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=cr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(ff(n))return n}return"agent"}function $E(){return hf(process.env)}var kf={name:"cursor",defaultModel:yl,preflightModel(e){return kl(e,yl)},start(e){let r=kl(e.model,yl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=vl(e.stdoutPath,"a"),o=vl(e.stderrPath,"a"),s=["ignore",n,o],i=$E(),a=Sl(i),l=HE(),c;try{let[u,d]=a.shell?[a.executable,mf(e,t,a.prefixArgs)]:Pe(a.executable,mf(e,t,a.prefixArgs),e.workerDir);c=DE(u,d,ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:FE(i,a,e.reviewWorker)})),gf(bl("KYNVER_CURSOR_START_LOCK_HOLD_MS",WE))}finally{l(),Rl(n),Rl(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:t}}};function mf(e,r,t=[]){return[...t,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",r,e.prompt]}import{spawnSync as jE}from"node:child_process";function wl(e,r=process.env){try{let t;try{t=Sl(e)}catch{t={executable:e,prefixArgs:[]}}let n=jE(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function xl(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(rn.join(t,".config","cursor","auth.json")),r.push(rn.join(t,".cursor-agent","auth.json")));let n=VE();if(r.push(rn.join(n,".config","cursor","auth.json")),r.push(rn.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(rn.join(o,"cursor-agent","auth.json")),s&&r.push(rn.join(s,"cursor","auth.json"))}return r}var YE="agent";function yf(e=new Date().toISOString()){let r=Fe(YE,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Xt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=er(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=xl().find(a=>GE(a)),o=wl(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?lr(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as qE,readFileSync as JE}from"node:fs";import{homedir as zE}from"node:os";import _l from"node:path";var XE=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function QE(){let e=process.env.HERMES_HOME?.trim(),r=e?_l.resolve(e):_l.join(zE(),".hermes");return _l.join(r,".env")}function ZE(e){try{let r=JE(e,"utf8"),t=[];for(let n of XE)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rf(e=new Date().toISOString()){let r=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=er(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=QE(),o=qE(n),s=o?ZE(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?lr(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function vf(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Qt(r),n={codex:t,cursor:yf(r),claude:cf(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rf(r),hermesOpenAiCodex:Us(r),codexAdapterPath:t.path,readyCount:o}}var eC=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],rC=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function El(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function tC(e){let r=El(e,"executorRef").toLowerCase(),t=El(e,"title").toLowerCase(),n=El(e,"description").toLowerCase(),o=`${r}
|
|
81
83
|
${t}
|
|
82
|
-
${n}`;return
|
|
83
|
-
`}function
|
|
84
|
-
`,{mode:384}),r}function Ks(e){try{return oC(_f(e)),!0}catch{return!1}}Ln();function fC(e,r){let n=If(e,r).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}var Af={name:"claude",defaultModel:Le,preflightModel(e){return fl(e,Le)},start(e){let r=fl(e.model,Le);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;fC(e,t);let n=zd(t,{pinned:e.modelPinned===!0}),[o,s]=pe("claude",If(e,t,n)),i=Pf(e.stdoutPath,"a"),a=Pf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=mC(c,u,ae({cwd:e.worktreePath,detached:ce(),stdio:l,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Cf(i),Cf(a),!d.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return d.unref(),{pid:d.pid,model:t}}};function If(e,r,t){return["--model",r,...Xd(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Sf).join(",")}`]:[],"--",e.prompt]}wr();import{closeSync as Mf,existsSync as bC,openSync as Wf}from"node:fs";import{spawn as Il}from"node:child_process";O();Rr();wr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as gC}from"node:child_process";O();Rr();var Hs="gpt-5.6-sol";var Al=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Hs;function hC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function kC(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Nf={name:"hermes-codex",defaultModel:Al,preflightModel(e){return Qt(e,Al)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=Qt(e.model,Al);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=pe(n,kC(t,e.prompt)),i=Tf(e.stdoutPath,"a"),a=Tf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=gC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:hC(e.reviewWorker,e.codexHome)}));if(Of(i),Of(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:t}}};var yC="KYNVER_CODEX_WINDOWS_SANDBOX",RC="unelevated";function vC(e=process.env){return e[yC]?.trim().toLowerCase()==="elevated"?"elevated":RC}function Df(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${vC(r)}"`]}function SC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Hs}var Or=SC();function Ol(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function wC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function xC(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Df(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function _C(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Il(l,c,t)}if(!bC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Il(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Il(i,a,t)}var Lf={name:"codex",defaultModel:Or,preflightModel(e){return Qt(e,Or)},start(e){if(Xt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Nf.start(e);let t=Qt(e.model,Or);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Wf(e.stdoutPath,"a"),s=Wf(e.stderrPath,"a"),i=["ignore",o,s],a=Ol(),l=xC(n,e.prompt,e.executionMode),c;try{c=_C(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:wC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Mf(o),Mf(s)}if(!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};wr();import{closeSync as Bf,openSync as Uf}from"node:fs";import OC from"node:path";import{fileURLToPath as TC}from"node:url";import{spawn as NC}from"node:child_process";O();import{existsSync as $s}from"node:fs";import kt from"node:path";import{fileURLToPath as EC}from"node:url";function CC(e,r){let t=kt.resolve(e);for(;;){let n=kt.join(t,r);if($s(n))return n;let o=kt.dirname(t);if(o===t)return null;t=o}}function PC(e){return CC(e,kt.join("node_modules",".bin","tsx"))??"npx"}function Tl(e,r){if(e.endsWith(".ts")){let t=PC(kt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function js(e){if(e.explicitCliPath)return $s(e.explicitCliPath)?Tl(e.explicitCliPath,e.nodeExecutable):null;let r=EC(new URL(".",e.importMetaUrl)),t=kt.join(r,"cli.js");if($s(t))return Tl(t,e.nodeExecutable);let n=kt.join(r,"cli.ts");return $s(n)?Tl(n,e.nodeExecutable):null}var AC="X-Kynver-Job-Token",so={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function IC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function no(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[AC]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function oo(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Vs(e,r,t){let n=IC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=oo(t.memoryQuery);s&&o.set("memoryQuery",s);let i=oo(t.mode);return i&&o.set("mode",i),no(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),no(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=oo(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return no(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return no(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return no(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...oo(t.eventKey)?{eventKey:oo(t.eventKey)}:{}}})}}function rn(e){return eo.includes(e)}function Gs(e){return ro(e).filter(rn).map(r=>{let t=so[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var yt="openai-compatible",DC=600*1e3;function Nl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var io=class extends Error{};function MC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new io(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new io(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new io(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):DC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var WC="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function Dl(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:WC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function LC(){let e=TC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=OC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=js({importMetaUrl:import.meta.url,explicitCliPath:t,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${t} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function BC(e,r,t){let n=e.workerToolGrant,o=n?Gs(n.capabilities):void 0;return{provider:yt,model:t,request:Dl(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Ml(e,r,t){let n=LC(),o=Uf(e.stdoutPath,"a"),s=Uf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=NC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Bf(o),Bf(s),!c.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(r)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${r.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:t}}var Ff={name:yt,get defaultModel(){return Nl()},preflightModel(e){return gl(e,Nl())},start(e){let r=gl(e.model,Nl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=MC(process.env),o=BC(e,n,t);return Ml(e,o,t)}};wr();import{closeSync as Vf,openSync as Gf}from"node:fs";import{spawn as KC}from"node:child_process";O();Rr();import UC from"node:path";var FC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function Ys(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function qs(e){let r=UC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Kf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Hf(e){let r=e.trim().toLowerCase();return!r||FC.has(r)?[]:["--model",e.trim()]}function $f(e,r){return[...Hf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function jf(e,r){return["--model",r,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",oe]:[],"--prompt",e.prompt]}var ur="gemini";function Oe(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function HC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Yf={name:ur,get defaultModel(){return Oe()},preflightModel(e){return Zt(e,Oe())},start(e){let r=Zt(e.model,Oe());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=Ys(),n=qs(t),o=n==="antigravity"?Kf(r):r.model,s=n==="antigravity"?$f(e,o):jf(e,o),[i,a]=pe(t,s),l=Gf(e.stdoutPath,"a"),c=Gf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=KC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:HC(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Vf(l),Vf(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${t}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}};var dr="gemini-api",qf="https://generativelanguage.googleapis.com/v1beta/openai",$C=600*1e3,ao=class extends Error{};function jC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function VC(e=process.env){let r=jC(e);if(!r)throw new ao('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||qf,n;try{n=new URL(t)}catch{throw new ao(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ao(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):$C;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function GC(e,r,t){let n=e.workerToolGrant,o=n?Gs(n.capabilities):void 0,s=Dl(r,t,e.prompt,o);return{provider:dr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Jf={name:dr,get defaultModel(){return Oe()},preflightModel(e){return Zt(e,Oe())},start(e){let r=Zt(e.model,Oe());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=VC(process.env),o=GC(e,n,t);return Ml(e,o,t)}};var YC=Le,Ws="composer-2.5";function xe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function qC(e){if(!e)return;let r=xe(e,"workerModelOverride")||xe(e,"modelOverride");return r||`${xe(e,"title")}
|
|
84
|
+
${n}`;return eC.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":rC.some(s=>s.test(o))?"low":"elevated"}function nC(e){let r=zt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function oC(e){let r=e.inventory??vf();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function kt(e){let r=nC({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function bf(e){let r=e.task??{},t=tC(r),n=oC({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Qt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ir;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=fl({inventory:n,riskClass:t});return kt(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return kt({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return kt({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return kt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=fl({inventory:n,riskClass:t});if(a)return kt({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return kt({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}wr();import{closeSync as Cf,openSync as Pf}from"node:fs";import{spawn as fC}from"node:child_process";O();Rr();Bn();import{unlinkSync as sC,writeFileSync as iC}from"node:fs";import aC from"node:path";var rr="KYNVER_WORKER_BROKER_SOCKET";function Cl(e){return`${JSON.stringify(e)}
|
|
85
|
+
`}function Pl(e){let r;try{r=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!r||typeof r!="object"||Array.isArray(r))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let t=r,n=typeof t.id=="string"?t.id:"";if(t.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(t.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(t.op==="call_tool"){if(typeof t.name!="string"||!t.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:t.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var lC="KYNVER_WORKER_MCP_TOOLS",cC="mcp-config.json",oe="kynver",ro=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Sf=ro.map(e=>`mcp__${oe}__${e}`),uC={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};function to(e){if(!e||e.length===0)return[...ro];let r=new Set;for(let t of e)for(let n of uC[t]??[])r.add(n);return ro.filter(t=>r.has(t))}function wf(e){return to(e).map(r=>`mcp__${oe}__${r}`)}var dC=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],pC=["openai-compatible","gemini-api"];function mC(e){return dC.includes(e)}function Al(e){return pC.includes(e)}function xf(e){return mC(e)&&!Al(e)}function no(e=process.env){let r=e[lC]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function _f(e){return aC.join(e,cC)}function Ef(e){let r=_f(e.workerDir),t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return iC(r,`${JSON.stringify(t,null,2)}
|
|
86
|
+
`,{mode:384}),r}function Hs(e){try{return sC(_f(e)),!0}catch{return!1}}Bn();function gC(e,r){let n=If(e,r).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}var Af={name:"claude",defaultModel:Le,preflightModel(e){return gl(e,Le)},start(e){let r=gl(e.model,Le);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;gC(e,t);let n=zd(t,{pinned:e.modelPinned===!0}),[o,s]=pe("claude",If(e,t,n)),i=Pf(e.stdoutPath,"a"),a=Pf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=fC(c,u,ae({cwd:e.worktreePath,detached:ce(),stdio:l,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Cf(i),Cf(a),!d.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return d.unref(),{pid:d.pid,model:t}}};function If(e,r,t){return["--model",r,...Xd(t),"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Sf).join(",")}`]:[],"--",e.prompt]}wr();import{closeSync as Mf,existsSync as SC,openSync as Wf}from"node:fs";import{spawn as Ol}from"node:child_process";O();Rr();wr();import{closeSync as Of,openSync as Tf}from"node:fs";import{spawn as hC}from"node:child_process";O();Rr();var $s="gpt-5.6-sol";var Il=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||$s;function kC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function yC(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Nf={name:"hermes-codex",defaultModel:Il,preflightModel(e){return Zt(e,Il)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let r=Zt(e.model,Il);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Fe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=pe(n,yC(t,e.prompt)),i=Tf(e.stdoutPath,"a"),a=Tf(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=Pe(o,s,e.workerDir),d=hC(c,u,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:kC(e.reviewWorker,e.codexHome)}));if(Of(i),Of(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:t}}};var RC="KYNVER_CODEX_WINDOWS_SANDBOX",vC="unelevated";function bC(e=process.env){return e[RC]?.trim().toLowerCase()==="elevated"?"elevated":vC}function Df(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${bC(r)}"`]}function wC(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||$s}var Or=wC();function Tl(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function xC(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function _C(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Df(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function EC(e,r,t,n){if(process.platform==="win32"){let[l,c]=pe(e,r);return Ol(l,c,t)}if(!SC("/usr/bin/script")){let[l,c]=Pe(e,r,n);return Ol(l,c,t)}let s=[e,...r].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=Pe("script",["-qfc",s,"/dev/null"],n);return Ol(i,a,t)}var Lf={name:"codex",defaultModel:Or,preflightModel(e){return Zt(e,Or)},start(e){if(Qt().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Nf.start(e);let t=Zt(e.model,Or);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Wf(e.stdoutPath,"a"),s=Wf(e.stderrPath,"a"),i=["ignore",o,s],a=Tl(),l=_C(n,e.prompt,e.executionMode),c;try{c=EC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:xC(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{Mf(o),Mf(s)}if(!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};wr();import{closeSync as Bf,openSync as Uf}from"node:fs";import TC from"node:path";import{fileURLToPath as NC}from"node:url";import{spawn as DC}from"node:child_process";O();import{existsSync as js}from"node:fs";import yt from"node:path";import{fileURLToPath as CC}from"node:url";function PC(e,r){let t=yt.resolve(e);for(;;){let n=yt.join(t,r);if(js(n))return n;let o=yt.dirname(t);if(o===t)return null;t=o}}function AC(e){return PC(e,yt.join("node_modules",".bin","tsx"))??"npx"}function Nl(e,r){if(e.endsWith(".ts")){let t=AC(yt.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Vs(e){if(e.explicitCliPath)return js(e.explicitCliPath)?Nl(e.explicitCliPath,e.nodeExecutable):null;let r=CC(new URL(".",e.importMetaUrl)),t=yt.join(r,"cli.js");if(js(t))return Nl(t,e.nodeExecutable);let n=yt.join(r,"cli.ts");return js(n)?Nl(n,e.nodeExecutable):null}var IC="X-Kynver-Job-Token",io={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function OC(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function oo(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[IC]:e.token,...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function so(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Gs(e,r,t){let n=OC(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=so(t.memoryQuery);s&&o.set("memoryQuery",s);let i=so(t.mode);return i&&o.set("mode",i),oo(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),oo(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=so(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return oo(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return oo(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return oo(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...so(t.eventKey)?{eventKey:so(t.eventKey)}:{}}})}}function tn(e){return ro.includes(e)}function Ys(e){return to(e).filter(tn).map(r=>{let t=io[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var Rt="openai-compatible",MC=600*1e3;function Dl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var ao=class extends Error{};function WC(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new ao(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let t;try{t=new URL(r)}catch{throw new ao(`KYNVER_WORKER_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. http://localhost:11434/v1`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new ao(`KYNVER_WORKER_BASE_URL must be http(s), got "${t.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):MC;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var LC="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";function Ml(e,r,t,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:r,temperature:0,stream:!1,messages:[{role:"system",content:LC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function BC(){let e=NC(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=TC.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Vs({importMetaUrl:import.meta.url,explicitCliPath:t,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${t} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function UC(e,r,t){let n=e.workerToolGrant,o=n?Ys(n.capabilities):void 0;return{provider:Rt,model:t,request:Ml(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Wl(e,r,t){let n=BC(),o=Uf(e.stdoutPath,"a"),s=Uf(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=Pe(n.command,n.argsPrefix,e.workerDir),c=DC(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:Ke(process.env,{reviewWorker:e.reviewWorker})}));if(Bf(o),Bf(s),!c.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(r)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${r.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:t}}var Ff={name:Rt,get defaultModel(){return Dl()},preflightModel(e){return hl(e,Dl())},start(e){let r=hl(e.model,Dl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=WC(process.env),o=UC(e,n,t);return Wl(e,o,t)}};wr();import{closeSync as Vf,openSync as Gf}from"node:fs";import{spawn as HC}from"node:child_process";O();Rr();import FC from"node:path";var KC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function qs(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function Js(e){let r=FC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Kf(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Hf(e){let r=e.trim().toLowerCase();return!r||KC.has(r)?[]:["--model",e.trim()]}function $f(e,r){return[...Hf(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function jf(e,r){return["--model",r,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",oe]:[],"--prompt",e.prompt]}var ur="gemini";function Oe(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function $C(e,r){return Ke({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Yf={name:ur,get defaultModel(){return Oe()},preflightModel(e){return en(e,Oe())},start(e){let r=en(e.model,Oe());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=qs(),n=Js(t),o=n==="antigravity"?Kf(r):r.model,s=n==="antigravity"?$f(e,o):jf(e,o),[i,a]=pe(t,s),l=Gf(e.stdoutPath,"a"),c=Gf(e.stderrPath,"a"),u=["ignore",l,c],[d,p]=Pe(i,a,e.workerDir),m=HC(d,p,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:$C(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Vf(l),Vf(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${t}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}};var dr="gemini-api",qf="https://generativelanguage.googleapis.com/v1beta/openai",jC=600*1e3,lo=class extends Error{};function VC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function GC(e=process.env){let r=VC(e);if(!r)throw new lo('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let t=e.KYNVER_GEMINI_BASE_URL?.trim()||qf,n;try{n=new URL(t)}catch{throw new lo(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${qf}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new lo(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):jC;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function YC(e,r,t){let n=e.workerToolGrant,o=n?Ys(n.capabilities):void 0,s=Ml(r,t,e.prompt,o);return{provider:dr,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Jf={name:dr,get defaultModel(){return Oe()},preflightModel(e){return en(e,Oe())},start(e){let r=en(e.model,Oe());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=GC(process.env),o=YC(e,n,t);return Wl(e,o,t)}};var qC=Le,Ls="composer-2.5";function xe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function JC(e){if(!e)return;let r=xe(e,"workerModelOverride")||xe(e,"modelOverride");return r||`${xe(e,"title")}
|
|
85
87
|
${xe(e,"description")}
|
|
86
|
-
${xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function zf(e){return e.toLowerCase()}function Qf(e,r=U(),t=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(r.defaultModel?.trim()||t.KYNVER_DEFAULT_MODEL?.trim()):!1}function Ll(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||YC}function Js(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?ur:"cursor"}function JC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ws,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Le,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Oe(),provider:ur,rule:n&&n!==ur?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Oe(),provider:dr,rule:n&&n!==dr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Xf(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var zC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Zf(e,r,t){return zC.has(e)?ct:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?ct:Le}function XC(e){let r=zf(xe(e,"executorRef")),t=xe(e,"title").toLowerCase(),n=xe(e,"priority")||"normal",o=zf(xe(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Zf(o,r,t);return{provider:"claude",model:i,rule:i===ct?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Ue(xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Or},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Ue(xe(e,"executorRef"));return{provider:yt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Ue(xe(e,"executorRef"));return{provider:dr,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Ue(xe(e,"executorRef"));return{provider:ur,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Xf(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Xf(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Ll();return{model:s,provider:Js(s),rule:"default:global"}}function QC(e){return e?Ue(xe(e,"executorRef")):null}function ZC(e){switch(ar(e)){case ur:case dr:return Oe();case"claude":return Le;case"codex":return Or;case"cursor":return Ws;default:return}}var Wl="explicit:cli_provider",eg="config:worker_provider";function rg(e,r,t){let n=ar(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:ZC(n)??e.model,rule:t}}function eP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Wl?e:rg(e,t,Wl)}function rP(e,r){if(r.explicitProvider?.trim()||dl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=ar(t);return n===Ir||n===e.provider?e:rg(e,n,eg)}function zs(e){let r,t=QC(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=JC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||Js(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||Js(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Ms(e.task)){let l=qC(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",p=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Zf(d,p,m),u=c===ct?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=XC(e.task);r={...l,requestedModel:l.model}}else{let l=Ll();r={model:l,provider:e.explicitProvider?.trim()||Js(l),rule:"default:global",requestedModel:l}}r=eP(r,e.explicitProvider),r=rP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&ar(e.configuredProvider)!==Ir&&r.rule==="config:worker_provider",i=Qm({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Wl||i.rule===eg||Ar(i.provider)&&(e.explicitProviderIsOperatorOverride||Ms(e.task))||i.provider===yt||i.provider===ur||i.provider===dr||i.provider==="codex")return i;let a=bf({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??Or:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function tg(e,r,t){return e||r||t||Ll()||Le}function tP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ng(e){return e?.trim()||void 0}function og(e){let r=tP(e.task),t=Ue(r),n=e.explicitProvider?.trim().toLowerCase(),o=ng(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,a=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=ng(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&Xm(r)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Ar(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}function sg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ig(){return{maxTaskAttempts:sg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Zi("harness.maxTaskAttempts",4))),dispatchCooldownMs:sg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Zi("harness.dispatchCooldownMs",5e3)))}}H();import sP from"node:path";B();fe();O();var Bl="kynver-harness:",ag="@runner:";function Ul(e){return e?.trim()?e.trim():null}function nP(e){let r=Ul(e);if(!r?.startsWith(Bl))return null;let t=r.slice(Bl.length),n=t.indexOf(ag);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function lo(e,r){let t=e.trim(),n=r.trim();return`${Bl}${t}${ag}${n}`}function oP(e,r){let t=Ul(r);return t?nP(e)===t:!1}function Xs(e){let r=Ul(e.workerLeaseOwner);return r&&oP(r,e.runId)?r:lo(e.runId,e.runnerId)}H();import lg from"node:os";We();function Tr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Tr(t.runnerId)??Tr(r.KYNVER_RUNTIME_ID)??Tr(r.OPENCLAW_RUNTIME_ID)??Tr(r.HOSTNAME)??lg.hostname(),hostname:Tr(r.HOSTNAME)??lg.hostname(),profile:Tr(r.KYNVER_RUNNER_PROFILE)??Tr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Tr(r.KYNVER_HARNESS_REPO)??Tr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Ju()}}H();async function Qs(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Q(e.baseUrl);try{let o=await ee(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}B();async function Zs(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await Qs({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&L(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function cg(e,r){return I(sP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function ug(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Q(r.baseUrl?String(r.baseUrl):void 0),s=await ee(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Fl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=cg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(J(p).status==="done"){u.push(d);continue}let f=Xs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await Zs({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,b=await X(k,s,{leaseOwner:y.leaseOwner??f,leaseDurationMs:i,...y.leaseToken?{leaseToken:y.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let g=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function dg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=cg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as MO,mkdirSync as WO}from"node:fs";import un from"node:path";B();O();import iP from"node:path";function pg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function mg(e,r,t,n){return pg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ei(e,r={}){let t=r.isAlive??Y,n=r.kill??De,o=r.sleep??$o;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Kl(e,r,t,n,o={}){mg(e,r,t,n);let s=ei(r.pid,o),i=ei(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function fg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(iP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ei(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function aP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function gg(e,r,t,n={}){if(!aP(n.env))throw Kl(e,r,"watcher_attach_failed",t,n.deps),r.status="failed",L(e,r),new Error(`watcher_attach_failed: ${t}; worker stopped instead of running unwatched`)}Sa();de();B();B();var hg="unknown";function kg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==hg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==hg&&t.push({ref:n,source:"base"}),t.push({ref:"origin/main",source:"origin/main"}),t.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of t)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${r||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var lP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,cP="next-action-fix:";function ri(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ri(e)}function uP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(cP)||t.includes("repair")||t.includes("unblock"))}function dP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(lP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ri(String(n.targetPrUrl??n.target_pr_url??"")),s=ri(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?yg(o):null,targetPrBranch:s}}catch{return r}}function Rg(e){if(!uP(e))return null;let r=dP(e.description),t=e.prUrl?yg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ri(e.branch)}:null}function vg(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function bg(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...Sn(`worker.prompt.progress.${n}`).split(`
|
|
87
|
-
`),o],i=
|
|
88
|
-
`),a=
|
|
89
|
-
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...
|
|
88
|
+
${xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function zf(e){return e.toLowerCase()}function Qf(e,r=U(),t=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(r.defaultModel?.trim()||t.KYNVER_DEFAULT_MODEL?.trim()):!1}function Bl(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||qC}function zs(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?ur:"cursor"}function zC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ls,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Le,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Oe(),provider:ur,rule:n&&n!==ur?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Oe(),provider:dr,rule:n&&n!==dr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Xf(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var XC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Zf(e,r,t){return XC.has(e)?ut:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?ut:Le}function QC(e){let r=zf(xe(e,"executorRef")),t=xe(e,"title").toLowerCase(),n=xe(e,"priority")||"normal",o=zf(xe(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Zf(o,r,t);return{provider:"claude",model:i,rule:i===ut?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Ue(xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Or},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Ue(xe(e,"executorRef"));return{provider:Rt,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Ue(xe(e,"executorRef"));return{provider:dr,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Ue(xe(e,"executorRef"));return{provider:ur,...i?.model?{model:i.model}:{model:Oe()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Xf(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Xf(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Bl();return{model:s,provider:zs(s),rule:"default:global"}}function ZC(e){return e?Ue(xe(e,"executorRef")):null}function eP(e){switch(ar(e)){case ur:case dr:return Oe();case"claude":return Le;case"codex":return Or;case"cursor":return Ls;default:return}}var Ll="explicit:cli_provider",eg="config:worker_provider";function rg(e,r,t){let n=ar(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:eP(n)??e.model,rule:t}}function rP(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Ll?e:rg(e,t,Ll)}function tP(e,r){if(r.explicitProvider?.trim()||pl(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=ar(t);return n===Ir||n===e.provider?e:rg(e,n,eg)}function Xs(e){let r,t=ZC(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=zC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||zs(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||zs(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Ws(e.task)){let l=JC(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",p=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Zf(d,p,m),u=c===ut?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=QC(e.task);r={...l,requestedModel:l.model}}else{let l=Bl();r={model:l,provider:e.explicitProvider?.trim()||zs(l),rule:"default:global",requestedModel:l}}r=rP(r,e.explicitProvider),r=tP(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&ar(e.configuredProvider)!==Ir&&r.rule==="config:worker_provider",i=Qm({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Ll||i.rule===eg||Ar(i.provider)&&(e.explicitProviderIsOperatorOverride||Ws(e.task))||i.provider===Rt||i.provider===ur||i.provider===dr||i.provider==="codex")return i;let a=bf({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??Or:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function tg(e,r,t){return e||r||t||Bl()||Le}function nP(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function ng(e){return e?.trim()||void 0}function og(e){let r=nP(e.task),t=Ue(r),n=e.explicitProvider?.trim().toLowerCase(),o=ng(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,a=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=ng(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&Xm(r)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Ar(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}function sg(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ig(){return{maxTaskAttempts:sg(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(ea("harness.maxTaskAttempts",4))),dispatchCooldownMs:sg(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(ea("harness.dispatchCooldownMs",5e3)))}}H();import iP from"node:path";B();fe();O();var Ul="kynver-harness:",ag="@runner:";function Fl(e){return e?.trim()?e.trim():null}function oP(e){let r=Fl(e);if(!r?.startsWith(Ul))return null;let t=r.slice(Ul.length),n=t.indexOf(ag);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function co(e,r){let t=e.trim(),n=r.trim();return`${Ul}${t}${ag}${n}`}function sP(e,r){let t=Fl(r);return t?oP(e)===t:!1}function Qs(e){let r=Fl(e.workerLeaseOwner);return r&&sP(r,e.runId)?r:co(e.runId,e.runnerId)}H();import lg from"node:os";We();function Tr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env,t=U();return{runnerId:Tr(t.runnerId)??Tr(r.KYNVER_RUNTIME_ID)??Tr(r.OPENCLAW_RUNTIME_ID)??Tr(r.HOSTNAME)??lg.hostname(),hostname:Tr(r.HOSTNAME)??lg.hostname(),profile:Tr(r.KYNVER_RUNNER_PROFILE)??Tr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Tr(r.KYNVER_HARNESS_REPO)??Tr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Ju()}}H();async function Zs(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=Q(e.baseUrl);try{let o=await ee(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await X(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}B();async function ei(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await Zs({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&L(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function cg(e,r){return I(iP.join(N(e),"workers",x(r),"worker.json"),void 0)}async function ug(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=Q(r.baseUrl?String(r.baseUrl):void 0),s=await ee(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Kl,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=cg(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!Y(p.pid)){u.push(d);continue}if(J(p).status==="done"){u.push(d);continue}let f=Qs({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),y=await ei({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,b=await X(k,s,{leaseOwner:y.leaseOwner??f,leaseDurationMs:i,...y.leaseToken?{leaseToken:y.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let g=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function dg(e,r){let t=q(e);for(let n of Object.keys(t.workers||{})){let o=cg(e,n);if(!(!o||o.taskId!==r||!Y(o.pid)||J(o).status==="done"))return!0}return!1}import{existsSync as LO,mkdirSync as BO}from"node:fs";import dn from"node:path";B();O();import aP from"node:path";function pg(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function mg(e,r,t,n){return pg(r)||(r.noRestartAt=new Date().toISOString(),r.noRestartSource=t,n&&(r.noRestartReason=n),r.steerRestartRequired=!1,L(e,r)),r}function ri(e,r={}){let t=r.isAlive??Y,n=r.kill??De,o=r.sleep??jo;return!e||!t(e)?null:(n(e,"SIGTERM"),o(1e3),t(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function Hl(e,r,t,n,o={}){mg(e,r,t,n);let s=ri(r.pid,o),i=ri(r.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function fg(e,r,t={}){let n=t.isAlive??Y,o=q(e),s=[];for(let i of Object.keys(o.workers||{})){if(t.except&&i===t.except)continue;let a=I(aP.join(N(o.id),"workers",x(i),"worker.json"),void 0);!a||a.taskId!==r||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(ri(a.completionSidecarPid,t),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),L(o.id,a),s.push(i))}return s}function lP(e=process.env){let r=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"}function gg(e,r,t,n={}){if(!lP(n.env))throw Hl(e,r,"watcher_attach_failed",t,n.deps),r.status="failed",L(e,r),new Error(`watcher_attach_failed: ${t}; worker stopped instead of running unwatched`)}wa();de();B();B();var hg="unknown";function kg(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==hg&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==hg&&t.push({ref:n,source:"base"}),t.push({ref:"origin/main",source:"origin/main"}),t.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of t)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${r||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var cP=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,uP="next-action-fix:";function ti(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function yg(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ti(e)}function dP(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(uP)||t.includes("repair")||t.includes("unblock"))}function pP(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(cP);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ti(String(n.targetPrUrl??n.target_pr_url??"")),s=ti(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?yg(o):null,targetPrBranch:s}}catch{return r}}function Rg(e){if(!dP(e))return null;let r=pP(e.description),t=e.prUrl?yg(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ti(e.branch)}:null}function vg(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function bg(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...wn(`worker.prompt.progress.${n}`).split(`
|
|
89
|
+
`),o],i=wn(`worker.prompt.merge_gate.${n}`).split(`
|
|
90
|
+
`),a=wn(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
91
|
+
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...wn("worker.prompt.core_rules").split(`
|
|
90
92
|
`),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...vg({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
91
|
-
`)}O();H();var
|
|
92
|
-
${n}`,s=
|
|
93
|
-
`).map(r=>r.trim()).find(Boolean)??""}function
|
|
94
|
-
|
|
93
|
+
`)}O();H();var ni={claude:Af,codex:Lf,cursor:kf,[ur]:Yf,[dr]:Jf,[Rt]:Ff},Sg=null;function wg(e){if(Sg)return Sg;let r=e?.trim();if(r){let o=ni[ar(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(ni).join(", ")}`);return o}let t=Zm(U().workerProvider),n=ni[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(ni).join(", ")}`);return n}O();import{spawn as xO}from"node:child_process";import{existsSync as _O,openSync as EO,closeSync as Ek}from"node:fs";import CO from"node:path";B();function xg(e){return!!e.completionReportedAt?.trim()}function oi(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),L(r,e)}function mP(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function $l(e){return!!(mP(e.completionBlocker)||e.completionOutcome==="rejected")}function uo(e){return xg(e)&&!$l(e)}B();fe();H();import Ai from"node:path";function jl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function po(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var fP=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),_g=new Set(["done","failed","cancelled"]);function Eg(e){let r=jl(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=po(r.outcome),n=po(r.detail)??po(r.error),o=jl(r.task),s=jl(r.closedTask),i=o?po(o.status):null,a=s?po(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&_g.has(i)||a!==null&&_g.has(a))||t!==null&&fP.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function Cg(e){return e.taskAdvanced}B();ss();var gP="expert-lane-pr-review:",hP="plan-review-task",kP="scheduledjob:",si=new Set(["lorentz","dalton","rhea","sentinel"]);function yP(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Vl(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function RP(e,r){return e.startsWith("factory:")?e.includes("lb")||Vl(r):!1}function ii(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
|
|
94
|
+
${n}`,s=yP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock:")||r==="lane:over_attempt_recovery"||r.startsWith("next-action-fix:")||r.startsWith("next-action-landing:")||r.startsWith("code-work-lane-chain:release:")?!1:!!(r.startsWith(gP)||r===hP||r.startsWith("daemon-review:")||s&&si.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||RP(r,o)||Vl(o))||r.startsWith(kP)&&e.parentTaskId&&s&&si.has(s)||e.planId&&!e.parentTaskId&&s&&si.has(s)&&Vl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&si.has(s))}var Pg=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,vP=new Set($m()),bP=/no commits between/i;function Ag(e){return!!(e&&bP.test(e))}function be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ig(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:be(e.head)}function Og(e){if(e==null)return null;let t=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return t?be(t[0]):null}function SP(e,r,t){let n=r.trim();if(!n)return null;let o=t.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function wP(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&vP.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&Pg.test(n))}function xP(e,r){if(e.changedFiles.length>0)return!0;let t=be(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=SP(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(be(e.headCommit)||Ig(e.gitAncestry))}function Tg(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(ii({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=be(e.routingRule)??"";if(r&&Pg.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(wP(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(be(e.patchPath)||be(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(be(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(be(e.prUrl)??be(e.taskPrUrl)??be(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return xP(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Ng(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:be(r?.headCommit)??Ig(e.gitAncestry),prUrl:be(r?.prUrl)??null}}import{spawnSync as _P}from"node:child_process";function Mg(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Dg(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Dg(n[1]);try{let o=new URL(r.includes("://")?r:`https://${r}`);if(o.hostname.toLowerCase()!=="github.com")return null;let s=o.pathname.replace(/^\/+|\/+$/g,"").split("/");if(s.length<2)return null;let[i,a]=s;return!i||!a?null:`${i}/${a.replace(/\.git$/i,"")}`}catch{return null}}function Dg(e){let r=e.split("/").filter(Boolean);if(r.length<2)return null;let t=r[0],n=r[1].replace(/\.git$/i,"");return t&&n?`${t}/${n}`:null}de();function EP(e,r,t){try{let n=_P(e,t,{windowsHide:!0,cwd:r,encoding:"utf8"});return{status:n.status,stdout:(n.stdout||"").trim(),stderr:(n.stderr||"").trim(),error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}var li={git:(e,r)=>ne(e,r),gh:(e,r)=>EP("gh",e,r)};function CP(e){return e.split(`
|
|
95
|
+
`).map(r=>r.trim()).find(Boolean)??""}function Lg(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Mg(t.stdout)}function vt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function ai(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}var Wg="Kynver-Task";function PP(e,r){let t=r?.trim();return!t||!/^[\w.-]{1,128}$/.test(t)||new RegExp(`^${Wg}:`,"m").test(e)?e:`${e.trimEnd()}
|
|
96
|
+
|
|
97
|
+
${Wg}: ${t}`}function mo(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",PP(n,e.taskId)]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=vt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Bg(e){let r=e.remoteBranch.trim();if(!r)return{ok:!1,detail:"missing remote branch"};let t=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${r}`]);return t.status!==0&&!/already up to date/i.test(t.stderr||t.stdout)?{ok:!1,detail:t.stderr||t.stdout||t.error||"git push to PR branch failed"}:{ok:!0}}function Ug(e){let r=ai(e.worktreePath,e.repo,e.branch,e.exec);if(r)return{ok:!0,prUrl:r,created:!1};let t=e.exec.gh(e.worktreePath,["pr","create","--repo",e.repo,"--base",e.base,"--head",e.branch,"--title",e.title,"--body",e.body,"--draft"]);if(t.status!==0)return{ok:!1,detail:t.stderr||t.stdout||t.error||"gh pr create failed"};let n=AP(t.stdout)??ai(e.worktreePath,e.repo,e.branch,e.exec);return n?{ok:!0,prUrl:n,created:!0}:{ok:!1,detail:"gh pr create succeeded but no PR URL was parsed"}}function AP(e){let t=CP(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function Fg(e){return`t-${x(e)}-a`}function Kg(e,r){let t=Fg(r);if(e.headRefName.toLowerCase().includes(t))return!0;let n=r.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function fo(e){return e.trim().toLowerCase()}function Hg(e,r){if(!e.length)return null;if(r){let t=fo(r),n=e.find(o=>fo(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function $g(e,r){let t=fo(r);return e.filter(n=>fo(n.url)!==t).map(n=>n.url)}function jg(e){try{let r=JSON.parse(e);return Array.isArray(r)?r.map(t=>({url:t.url?.trim()??"",number:Number(t.number)||0,headRefName:t.headRefName?.trim()??"",createdAt:t.createdAt?.trim()??"",body:t.body,title:t.title})).filter(t=>t.url&&t.number>0&&t.headRefName):[]}catch{return[]}}function IP(e){let r=new Set,t=[];for(let n of e){let o=fo(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function OP(e,r,t,n){let o=n.gh(e,["search","prs",t,"--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:jg(o.stdout).filter(s=>Kg(s,t))}function TP(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=Fg(t);return jg(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Kg(i,t))}function Gl(e,r,t,n){let o=t.trim();if(!o)return[];let s=OP(e,r,o,n),i=TP(e,r,o,n);return IP([...s,...i])}function NP(e){let r=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Yl(e){let r=$g(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=NP(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?t.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:t,failed:n}}function Vg(e,r,t,n){let o=t.trim();if(!o||!r.trim())return null;let s=n.gh(e,["api",`repos/${r}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}function DP(e){return e.gh(process.cwd(),["--version"]).status===0}function MP(e,r){return`AgentOS harness: ${e} (${r})`}function WP(e,r,t){return["Automated PR-ready handoff from the Kynver harness runtime.","",e?`AgentOS task: \`${e}\``:"",`Harness worker: \`${r}\` \xB7 run \`${t}\``,"","Opened by orchestrator completion enforcement so production review receives a reviewable artifact."].filter(Boolean).join(`
|
|
98
|
+
`)}function qr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function LP(e){return qr(e.prUrlHint)??Og(e.status.finalResult)??qr(e.worker.taskPrUrl)??null}function BP(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??vt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=mo({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,taskId:e.taskId,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Bg({worktreePath:r.worktreePath,remoteBranch:t.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=vt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function ql(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??vt(e.snapshot.worktreePath,e.exec)??void 0};let r=mo({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,taskId:e.taskId,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Jl(e,r=li){let t=LP(e),n=Ng(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Tg({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),exec:r}):{ok:!0};if(t)return ql({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),exec:r});if(!DP(r)){let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=Lg(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let h=!1,w=!1,E=n.headCommit??vt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=mo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,taskId:qr(e.worker.taskId),hasDirtyFiles:!0,exec:r});if(!S.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${S.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};h=S.committed,w=S.pushed,E=S.headCommit??E}else{let S=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(S.status!==0&&!/already up to date/i.test(S.stderr||S.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${S.stderr||S.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};w=S.status===0}return{ok:!0,prUrl:a,headCommit:E,committed:h,pushed:w}}let l=qr(e.worker.taskId),c=[];if(l){c=Gl(n.worktreePath,i,l,r);let h=Hg(c);if(h){let w=BP({snapshot:n,canonical:h,workerName:e.worker.name,taskId:l,exec:r});return w.ok&&w.prUrl&&Yl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:r}),w}}let u=ai(n.worktreePath,i,n.branch,r);if(u)return ql({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,y=mo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,taskId:qr(e.worker.taskId),hasDirtyFiles:d,exec:r});if(d&&!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=y.committed,m=y.pushed,!y.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${y.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let h=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(h.status!==0&&!/already up to date/i.test(h.stderr||h.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${h.stderr||h.stdout||h.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=h.status===0}f=y.headCommit??f??vt(n.worktreePath,r)??void 0;let k=f?Vg(n.worktreePath,i,f,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:f,committed:p,pushed:m,created:!1};let b=e.run.base?.trim()||"main",g=Ug({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:MP(e.worker.name,e.worker.runId),body:WP(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Ag(g.detail))return{ok:!0,headCommit:f??void 0,committed:p,pushed:m};let h=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${h?`${h} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${g.detail?` (${g.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}if(l&&g.prUrl){let w=[...c.length>0?c:Gl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Yl({worktreePath:n.worktreePath,repo:i,rows:w,canonicalPrUrl:g.prUrl,exec:r})}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:p,pushed:m,created:g.created}}fe();ct();xa();B();fe();O();import xA from"node:path";O();import UP from"node:path";var go=new Map,zl=new Map;function Xl(e){clearInterval(zl.get(e)),zl.delete(e)}function Ql(e,r){if(Xl(e),!go.has(e))return;let t=setInterval(()=>{(I(UP.join(e,"worker.json"),null)?.completionReportedAt||!Y(r))&&nn(e)},1e3);t.unref(),zl.set(e,t)}function Zl(e,r){Xl(e);let t=go.get(e);t&&t.close(),go.set(e,r)}async function Jr(e){Xl(e);let r=go.get(e);return r?(go.delete(e),await r.close(),!0):!1}function nn(e){Jr(e).catch(()=>{})}de();import{appendFileSync as FP,existsSync as Yg,mkdirSync as qg,readFileSync as KP,rmSync as Gg,writeFileSync as HP}from"node:fs";import Nr from"node:path";var Jg=Nr.join(".cursor","mcp.json");function zg(e){return Nr.join(e,Jg)}function $P(e){return Z(e,["ls-files","--error-unmatch",Jg.split(Nr.sep).join("/")],{allowFailure:!0}).trim().length>0}function jP(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Nr.isAbsolute(r)?r:Nr.join(e,r),n=Nr.join(t,"info","exclude"),o=".cursor/mcp.json";try{qg(Nr.dirname(n),{recursive:!0});let s=Yg(n)?KP(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;FP(n,`${s.endsWith(`
|
|
95
99
|
`)||!s?"":`
|
|
96
100
|
`}${o}
|
|
97
|
-
`)}catch{}}function
|
|
98
|
-
`,{mode:384}),
|
|
99
|
-
`)}function
|
|
101
|
+
`)}catch{}}function Xg(e){if($P(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .cursor/mcp.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=zg(e.worktreePath);qg(Nr.dirname(r),{recursive:!0});let t={mcpServers:{[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return HP(r,`${JSON.stringify(t,null,2)}
|
|
102
|
+
`,{mode:384}),jP(e.worktreePath),{ok:!0,configPath:r}}function ci(e){let r=zg(e);if(!Yg(r))return!1;try{Gg(r,{force:!0});let t=Nr.dirname(r);return Gg(t,{recursive:!1}),!0}catch{return!0}}Rr();import{copyFileSync as VP,existsSync as ui,mkdirSync as GP,readFileSync as YP,rmSync as qP,symlinkSync as JP,writeFileSync as zP}from"node:fs";import{spawnSync as XP}from"node:child_process";import{homedir as QP}from"node:os";import zr from"node:path";var ZP="codex-home";function Qg(e){return zr.join(e,ZP)}function eA(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return zr.resolve(r);let t=QP();for(let n of[zr.join(t,".codex"),zr.join(t,".config","codex")])if(ui(n))return n;return null}function rA(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${oe}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${oe}.env]`,`${rr} = ${JSON.stringify(e)}`,""].join(`
|
|
103
|
+
`)}function tA(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${oe}"?\s*[\].]`,"m").test(e)}function Zg(e){let r=eA(e.env??process.env),t=r?zr.join(r,"config.toml"):null,n=t&&ui(t)?YP(t,"utf8"):"";if(n&&tA(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=Qg(e.workerDir);GP(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
|
|
100
104
|
`)?"":`
|
|
101
|
-
`;return
|
|
105
|
+
`;return zP(zr.join(o,"config.toml"),`${n}${s}${rA(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:nA(r,o)}}function nA(e,r){let t=e?zr.join(e,"auth.json"):null;if(!t||!ui(t))return"none";let n=zr.join(r,"auth.json");try{return JP(t,n,"file"),"symlink"}catch{try{return VP(t,n),"copy"}catch{return"none"}}}function ho(e){let r=Qg(e);if(!ui(r))return!1;try{return qP(r,{recursive:!0,force:!0}),!0}catch{return!1}}function eh(e,r,t=1e4){try{let[n,o]=pe(r,["--version"]),s=XP(n,o,{env:{...process.env,CODEX_HOME:e},encoding:"utf8",timeout:t,windowsHide:!0});return s.error&&s.error.code==="ENOENT"?{ok:!0}:s.status===0?{ok:!0}:{ok:!1,detail:(s.stderr||s.stdout||`exit ${s.status??"unknown"}`).toString().replace(/\s+/g," ").trim().slice(0,200)}}catch{return{ok:!0}}}de();import{appendFileSync as oA,existsSync as ec,mkdirSync as th,readFileSync as nh,rmSync as rh,writeFileSync as sA}from"node:fs";import Dr from"node:path";var oh=Dr.join(".agents","mcp_config.json");function sh(e){return Dr.join(e,oh)}function iA(e){return Z(e,["ls-files","--error-unmatch",oh.split(Dr.sep).join("/")],{allowFailure:!0}).trim().length>0}function aA(e){if(!ec(e))return{};try{let r=JSON.parse(nh(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t=r.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return{}}}function lA(e){let r=Z(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Dr.isAbsolute(r)?r:Dr.join(e,r),n=Dr.join(t,"info","exclude"),o=".agents/mcp_config.json";try{th(Dr.dirname(n),{recursive:!0});let s=ec(n)?nh(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;oA(n,`${s.endsWith(`
|
|
102
106
|
`)||!s?"":`
|
|
103
107
|
`}${o}
|
|
104
|
-
`)}catch{}}function
|
|
105
|
-
`,{mode:384}),
|
|
106
|
-
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:
|
|
108
|
+
`)}catch{}}function ih(e){if(iA(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let r=sh(e.worktreePath),t=aA(r);if(oe in t)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${oe}" server \u2014 refusing to overwrite it`};th(Dr.dirname(r),{recursive:!0});let n={mcpServers:{...t,[oe]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e.brokerSocketPath}}}};return sA(r,`${JSON.stringify(n,null,2)}
|
|
109
|
+
`,{mode:384}),lA(e.worktreePath),{ok:!0,configPath:r}}function di(e){let r=sh(e);if(!ec(r))return!1;try{return rh(r,{force:!0}),rh(Dr.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as cA,existsSync as rc,mkdirSync as uA,readFileSync as dA,rmSync as pA,symlinkSync as mA,writeFileSync as fA}from"node:fs";import{homedir as gA}from"node:os";import Mr from"node:path";var hA="gemini-home";function ah(e){return Mr.join(e,hA)}function kA(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||gA()}function yA(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Mr.join(Mr.resolve(r),".gemini"):Mr.join(kA(e),".gemini")}function RA(e){if(!rc(e))return{};try{let r=JSON.parse(dA(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function vA(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:oe in r}function bA(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function SA(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[rr]:e},trust:!0}}function lh(e){let r=e.env??process.env,t=yA(r),n=RA(Mr.join(t,"settings.json"));if(vA(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${oe}" MCP server \u2014 refusing to write a duplicate stanza`};let o=ah(e.workerDir),s=Mr.join(o,".gemini");uA(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...bA(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[oe]:SA(e.brokerSocketPath)}};return fA(Mr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
|
|
110
|
+
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:wA(t,s)}}function wA(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Mr.join(e,o);if(!rc(s))continue;let i=Mr.join(r,o);try{mA(s,i,"file"),n==="none"&&(n="symlink")}catch{try{cA(s,i),n="copy"}catch{}}}return n}function pi(e){let r=ah(e);if(!rc(r))return!1;try{return pA(r,{recursive:!0,force:!0}),!0}catch{return!1}}var _A=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function ch(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function EA(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Xr(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:EA(r);return{finalResult:r??t??"completed",summary:t}}function mi(e,r,t){if(ch(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Xr(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),L(e.runId,e),e.workerDir&&(nn(e.workerDir),Hs(e.workerDir),ho(e.workerDir),pi(e.workerDir)),e.worktreePath&&(ci(e.worktreePath),di(e.worktreePath))}function CA(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function uh(e,r,t={}){let n=CA(r);if(n.size===0)return[];let o=q(e),s=[];for(let i of Object.keys(o.workers||{})){let a=I(xA.join(N(o.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||ch(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!_A.has(l))continue;let c=J(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=Hl(o.id,a,"board_task_cancelled","board task cancelled",t);u=!!(d.workerSignal||d.sidecarSignal)}mi(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}Un();function fi(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function PA(e){let r=e.lastHeartbeatPhase?.trim();if(!r||r==="complete")return null;let t=e.lastHeartbeatSummary?.trim();return t?{summary:t,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:r,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function AA(e){let r=Fn(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function IA(e){let r=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${r}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:r,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function gi(e){let{worker:r,status:t}=e;if(fi(t.finalResult)){let u=me(r.heartbeatPath),d=Sr(u),p=fi(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:Xr(t)}}if(t.alive)return null;let n=dt(r.stdoutPath);if(fi(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Xr(u)}}let o=me(r.heartbeatPath),s=Sr(o);if(fi(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Xr(u)}}let i=AA(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Xr(u)}}let a=PA(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Xr(u)}}let l=IA({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Xr(c)}}function hi(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}Un();function ki(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return n!=="node_modules"&&!n.startsWith("node_modules/")})}function dh(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function ph(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function mh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function gh(e){let r=mh(e);if(!r)return[];let t=mh(r.worktreeHandoff),n=ph(t?.disposableArtifactsRemoved);return n.length?n:ph(r.disposableArtifactsRemoved)}function fh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function hh(e,r){let t=ki(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>fh(o)));return t.every(o=>{let s=fh(dh(o));return n.has(s)})}function yi(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kh(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function OA(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function TA(e){let r=kh(e.disposableArtifactsRemoved),t=gh(e.finalResult);return[...new Set([...r,...t])]}function yh(e){let r=kh(e.changedFiles),t=ki(r),n=TA(e),o=t.length===0||hh(r,n);return yi(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:yi(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:yi(e.artifactBundlePath)||yi(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:OA(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}Ze();import{existsSync as XA,renameSync as QA}from"node:fs";import{mkdirSync as GA}from"node:fs";import YA from"node:path";import{DatabaseSync as qA}from"node:sqlite";var tc=class extends Error{constructor(r,t){super(`local-run-store schema version ${r} is newer than this runtime supports (${t}); refusing to open. Upgrade the runtime or quarantine the database deliberately.`),this.name="SchemaDowngradeRefusedError"}},NA=[`CREATE TABLE IF NOT EXISTS local_meta (
|
|
107
111
|
key TEXT PRIMARY KEY,
|
|
108
112
|
value TEXT NOT NULL
|
|
109
113
|
) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
|
|
@@ -129,8 +133,8 @@ ${n}`,s=kP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock
|
|
|
129
133
|
payload_json TEXT NOT NULL,
|
|
130
134
|
created_at TEXT NOT NULL,
|
|
131
135
|
PRIMARY KEY (scope, seq)
|
|
132
|
-
) STRICT`];function
|
|
133
|
-
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:
|
|
136
|
+
) STRICT`];function DA(e){if(!e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'local_meta'").get())return null;let t=e.prepare("SELECT value FROM local_meta WHERE key = 'schema_version'").get();if(!t?.value)return null;let n=Number.parseInt(t.value,10);return Number.isFinite(n)?n:null}function Rh(e,r){let t=DA(e);if(t!==null&&t>1)throw new tc(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of NA)e.exec(n);e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(1)),e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_applied_at', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(r),e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}import{existsSync as MA,realpathSync as WA,readFileSync as LA}from"node:fs";import vh from"node:path";var BA=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),UA=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function FA(){try{return LA("/proc/self/mounts","utf8")}catch{return null}}function KA(e){let r=vh.resolve(e);for(let t=0;t<64;t+=1){if(MA(r))try{return WA.native(r)}catch{return r}let n=vh.dirname(r);if(n===r)return r;r=n}return r}function HA(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function $A(e){let r=[];for(let t of e.split(`
|
|
137
|
+
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:HA(n[1]),fsType:n[2]})}return r}function bh(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function jA(e,r){let t=null,n=bh(e);for(let o of r){let s=bh(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function Sh(e,r){let n=(r?.resolveRealPath??KA)(e),o=(r?.mountsSource??FA)();if(o===null)return{verdict:"rejected",reason:"Mount information unavailable \u2014 the filesystem type cannot be established safely, so WAL mode is refused (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let s=jA(n,$A(o));if(!s)return{verdict:"rejected",reason:"No mount entry covers the resolved database path \u2014 refusing WAL mode (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let i=s.fsType.toLowerCase();return UA.has(i)||i.startsWith("fuse.")?{verdict:"rejected",reason:`Filesystem '${i}' is network-like or crosses an OS boundary; SQLite WAL locking is not safe there.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:BA.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var Ri=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},JA="local-run-store.sqlite",zA=5e3,ko=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=Sh(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new Ri(t.reason);GA(r.directory,{recursive:!0,mode:448});let n=YA.join(r.directory,r.filename??JA),o=new qA(n,{timeout:r.busyTimeoutMs??zA}),s=r.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new Ri(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Rh(o,s().toISOString())}catch(i){throw o.close(),i}return new e(o,n,s)}inImmediateTransaction(r){this.db.exec("BEGIN IMMEDIATE");try{let t=r();return this.db.exec("COMMIT"),t}catch(t){throw this.db.exec("ROLLBACK"),t}}registerProcessIdentity(r){let t=this.now().toISOString();return this.inImmediateTransaction(()=>{this.db.prepare(`INSERT INTO process_identity
|
|
134
138
|
(process_key, pid, runtime_version, node_version, started_at, registered_at)
|
|
135
139
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
136
140
|
ON CONFLICT(process_key) DO UPDATE SET
|
|
@@ -154,26 +158,26 @@ ${n}`,s=kP(e.personaSlug);return r.startsWith("harness-lane:blocked-lane-unblock
|
|
|
154
158
|
LIMIT ?`).all(...s,n).map(l=>({idempotencyKey:l.idempotency_key,operation:l.operation,resultJson:l.result_json,recordedAt:l.recorded_at}))}deleteOperationReceiptsByKeys(r){return r.length===0?0:this.inImmediateTransaction(()=>{let t=this.db.prepare("DELETE FROM operation_receipts WHERE idempotency_key = ?"),n=0;for(let o of r)n+=Number(t.run(o).changes);return n})}getOperationReceipt(r){let t=this.db.prepare(`SELECT idempotency_key, operation, result_json, recorded_at
|
|
155
159
|
FROM operation_receipts WHERE idempotency_key = ?`).get(r);return t?{idempotencyKey:t.idempotency_key,operation:t.operation,resultJson:t.result_json,recordedAt:t.recorded_at}:null}saveRecoveryCheckpoint(r){return this.inImmediateTransaction(()=>{let t=this.db.prepare("SELECT COALESCE(MAX(seq), 0) AS max_seq FROM recovery_checkpoints WHERE scope = ?").get(r.scope),n=Number(t.max_seq)+1;return this.db.prepare(`INSERT INTO recovery_checkpoints (scope, seq, payload_json, created_at)
|
|
156
160
|
VALUES (?, ?, ?, ?)`).run(r.scope,n,r.payloadJson,this.now().toISOString()),{seq:n}})}latestRecoveryCheckpoint(r){let t=this.db.prepare(`SELECT scope, seq, payload_json, created_at FROM recovery_checkpoints
|
|
157
|
-
WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(r);return t?{scope:t.scope,seq:t.seq,payloadJson:t.payload_json,createdAt:t.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(r){let t=this.db.prepare(`PRAGMA ${r}`).get();return String(Object.values(t)[0])}close(){this.db.close()}};function XA(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;JA(o)&&zA(o,`${t}${n}`)}return t}function Sh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ho.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=XA(n,r);try{return{store:ho.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function QA(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function ZA(){return eI.classifyOptions??QA()}var eI={};var rI=300*1e3,Wr=null,Ri=0;function tI(e){Ri+=1;try{let r=ZA(),t=Sh({directory:e,...r?{classifyOptions:r}:{}});return{store:t.store,status:{state:"open",harnessRoot:e,databasePath:t.store.databasePath,schemaVersion:t.store.localSchemaVersion(),recovered:t.recovered,quarantinedTo:t.quarantinedTo,reason:null,openAttempts:Ri},failedAtMs:null,permanentRefusal:!1}}catch(r){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${r.name}: ${r.message}`,openAttempts:Ri},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function nI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=rI}function z(e=Date.now()){let r=Be();return(!Wr||Wr.status.harnessRoot!==r||nI(Wr,e))&&(sI(),Wr=tI(r)),Wr.store}function oI(){return Wr?Wr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Ri}}function wh(){return z(),oI()}function sI(){try{Wr?.store?.close()}catch{}Wr=null}H();O();import{existsSync as iI,readFileSync as aI}from"node:fs";import{homedir as lI}from"node:os";import cI from"node:path";var uI=3e4,tr=null;function xh(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return cI.join(lI(),".kynver",`local-run-store-flags-${r}.json`)}function nc(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function _h(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.localRunStoreFlags;return t===void 0?null:nc(t)}function Eh(e,r){try{let t=xh(e),n={contractVersion:1,agentOsId:e,flags:nc(r),deliveredAt:new Date().toISOString()};ue(t,n),tr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Ch(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(tr&&e-tr.loadedAtMs<uI)return tr.flags;try{let r=U().agentOsId?.trim();if(!r)return tr={flags:{},loadedAtMs:e,file:null},tr.flags;let t=xh(r);if(!iI(t))return tr={flags:{},loadedAtMs:e,file:t},tr.flags;let n=JSON.parse(aI(t,"utf8")),o=n?.contractVersion===1?nc(n.flags):{};return tr={flags:o,loadedAtMs:e,file:t},o}catch{return tr={flags:{},loadedAtMs:e,file:null},tr.flags}}var dI=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}];function pI(e){let r=e?.trim().toLowerCase()??"";return r===""?{mode:"off",unknown:!1}:r==="off"||r==="shadow"||r==="enforce"?{mode:r,unknown:!1}:{mode:"off",unknown:!0}}function Lr(e=process.env){let r={},t={},n=[],o=Ch();for(let s of dI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=pI(i);r[s.key]=c.mode,t[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){r[s.key]=l,t[s.key]="server";continue}r[s.key]="off",t[s.key]="default"}return{flags:r,sources:t,warnings:n}}var Te={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Br(e=process.env){return Lr(e).flags.dispatchReceipts}function oc(e){return Br(e)!=="off"}function sc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function yo(e,r,t){if(!oc())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:sc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Te.storeFailures+=1}}function Ah(e){yo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function vi(e){yo("spawned",e)}function nn(e,r){yo("released",e,{reasonClass:r})}function Ih(e){yo("completion-sent",e)}function ic(e,r){yo("completion-acked",e,{outcome:r})}function Oh(e){if(!oc())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(t){let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return Te.completionReplaysObserved+=1,!0}}catch{Te.storeFailures+=1}return!1}function ac(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Th(e){if(Br()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(!t)return!1;let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(Te.completionReplaysShortCircuited+=1,!0):!1}catch{return Te.storeFailures+=1,!1}}var mI=600*1e3;function Nh(e,r){if(Br()!=="enforce")return;let t=z();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Te.storeFailures+=1}}function Dh(e,r){if(Br()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??mI;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Te.storeFailures+=1,[]}}function ko(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var fI=900*1e3,Ph=10080*60*1e3,gI=1440*60*1e3,hI=500,kI=300;function Mh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!oc())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??fI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Ph).toISOString(),limit:hI}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let p=t.getOperationReceipt(`dispatch:spawned:${u}`),m=t.getOperationReceipt(`dispatch:released:${u}`);if(p||m){n-d>=gI&&a.length+5<=kI&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=ko(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=ko(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Br()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Ph}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Te.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Te.storeFailures+=1,r}}function Wh(){return{"dispatchReceipts.storeFailures":Te.storeFailures,"dispatchReceipts.completionReplaysObserved":Te.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Te.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Te.agedReceiptsPruned}}var on=900*1e3,uc="admission-shadow",lc="worker-slot:",Xr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},cc=!1;function Lh(){cc=!1}function Ur(e=process.env){return Lr(e).flags.admission}function bi(e,r){return`${lc}${e}:${r}`}function Bh(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(bi(e,r),uc,on)}catch{Xr.storeFailures+=1}}function Ro(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.releaseAdmission(bi(e,r),uc)}catch{Xr.storeFailures+=1}}function Uh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Ur()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>bi(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:lc,limit:500}),s=new Set(o.map(p=>p.key)),i=[...n].filter(p=>!s.has(p)).length,a=o.filter(p=>!n.has(p.key)).length,l=!cc;cc=!0,!l&&i>0&&(Xr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(bi(p.runId,p.workerName),uc,on),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,Xr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:lc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return Xr.storeFailures+=1,r}}function Fh(){return{"admission.storeFailures":Xr.storeFailures,"admission.missingForLive":Xr.missingForLive,"admission.deadSlotsReleased":Xr.deadSlotsReleased}}var dc="worker-slot-n:",Si=64;function Kh(e){return`${dc}${e}`}function wi(e,r){return`${e}:${r}`}var Qr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function Hh(e){if(Ur()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(Si,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Qr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=wi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Kh(o),n,on).acquired)return{admitted:!0,slot:o};return Qr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Qr.enforceStoreFailures+=1,{admitted:!0}}}function Zr(e,r){if(Ur()==="off")return;let t=z();if(t)try{let n=wi(e,r),o=t.listAdmissionReservations({keyPrefix:dc,limit:Si});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Qr.enforceStoreFailures+=1}}function $h(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Ur()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>wi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:dc,limit:Si}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,on),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=wi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Si;d+=1)if(t.tryReserveAdmission(Kh(d),u,on).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Qr.enforceStoreFailures+=1,r}}function jh(){return{"admission.enforceStoreFailures":Qr.enforceStoreFailures,"admission.refusedSlotsExhausted":Qr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Qr.admissionsRefusedDiskBackstop}}O();O();var yI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,RI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Vh=new Set(["undefined","null"]),Gh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function vI(e){let r=e.trim();if(!yI.test(r))throw new Error(`invalid run id: ${e}`);return r}function bI(e){let r=e.trim();if(!RI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Yh(e){return typeof e=="string"?e.trim():""}function pc(e){let r=Yh(e.run),t=Yh(e.name);return(!r||Vh.has(r))&&Je(`missing --run RUN_ID (${Gh})`),(!t||Vh.has(t))&&Je(`missing --name WORKER_NAME (${Gh})`),{runId:vI(r),workerName:bI(t)}}import{existsSync as SI,mkdirSync as wI,readFileSync as xI,writeFileSync as _I}from"node:fs";import{homedir as EI}from"node:os";import rk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function vo(e){return Lr(process.env).flags[e]}var YG=1800*1e3;function mc(e){return`mesh-cron-lease:${e}`}function qh(e,r){if(vo("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(mc(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(r.leaseToken??null)&&(o.holderBoxId??null)===(r.holderBoxId??null)&&o.authorized===r.authorized)return}t.saveRecoveryCheckpoint({scope:mc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function Jh(e,r){let t=vo("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(mc(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(_e.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(_e.meshEnforceStaleInversions+=1,null):s}catch{return _e.meshStoreFailures+=1,null}}function xi(e){return`quota-cooldown:${e}`}var zh="quota-preflight";function Xh(e,r){if(vo("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(xi(e),zh,r)}catch{_e.quotaStoreFailures+=1}}function Qh(e){if(vo("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(xi(e),zh)}catch{_e.quotaStoreFailures+=1}}function Zh(e,r){let t=vo("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:xi(e),limit:50}).find(i=>i.key===xi(e)),s=!!o;return s!==r&&(_e.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return _e.quotaStoreFailures+=1,null}}function ek(){return{"keeper.storeFailures":_e.keeperStoreFailures,"meshLease.storeFailures":_e.meshStoreFailures,"meshLease.divergences":_e.meshLeaseDivergences,"meshLease.enforceStaleInversions":_e.meshEnforceStaleInversions,"quota.storeFailures":_e.quotaStoreFailures,"quota.verdictDivergences":_e.quotaVerdictDivergences}}var CI=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,PI=30,AI=5,II=240;function OI(e){let r=e?.trim();return!!(r&&CI.test(r))}function TI(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function fc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(II,Math.max(AI,e)):PI}function tk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||rk.join(EI(),".kynver","provider-quota-cooldowns.json")}function bo(e){return(e??"").trim().toLowerCase()}function gc(){let e=tk();if(!SI(e))return{};try{let r=JSON.parse(xI(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[bo(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function hc(e){let r=tk();try{wI(rk.dirname(r),{recursive:!0}),_I(r,`${JSON.stringify(e,null,2)}
|
|
158
|
-
`,"utf8")}catch{}}function
|
|
159
|
-
`),
|
|
161
|
+
WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(r);return t?{scope:t.scope,seq:t.seq,payloadJson:t.payload_json,createdAt:t.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(r){let t=this.db.prepare(`PRAGMA ${r}`).get();return String(Object.values(t)[0])}close(){this.db.close()}};function ZA(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;XA(o)&&QA(o,`${t}${n}`)}return t}function wh(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=ko.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;t=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=ZA(n,r);try{return{store:ko.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function eI(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function rI(){return tI.classifyOptions??eI()}var tI={};var nI=300*1e3,Wr=null,vi=0;function oI(e){vi+=1;try{let r=rI(),t=wh({directory:e,...r?{classifyOptions:r}:{}});return{store:t.store,status:{state:"open",harnessRoot:e,databasePath:t.store.databasePath,schemaVersion:t.store.localSchemaVersion(),recovered:t.recovered,quarantinedTo:t.quarantinedTo,reason:null,openAttempts:vi},failedAtMs:null,permanentRefusal:!1}}catch(r){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${r.name}: ${r.message}`,openAttempts:vi},failedAtMs:Date.now(),permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function sI(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=nI}function z(e=Date.now()){let r=Be();return(!Wr||Wr.status.harnessRoot!==r||sI(Wr,e))&&(aI(),Wr=oI(r)),Wr.store}function iI(){return Wr?Wr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:vi}}function xh(){return z(),iI()}function aI(){try{Wr?.store?.close()}catch{}Wr=null}H();O();import{existsSync as lI,readFileSync as cI}from"node:fs";import{homedir as uI}from"node:os";import dI from"node:path";var pI=3e4,tr=null;function _h(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return dI.join(uI(),".kynver",`local-run-store-flags-${r}.json`)}function nc(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let r=e,t={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=r[o];(s==="off"||s==="shadow"||s==="enforce")&&(t[o]=s)}return t}function Eh(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.localRunStoreFlags;return t===void 0?null:nc(t)}function Ch(e,r){try{let t=_h(e),n={contractVersion:1,agentOsId:e,flags:nc(r),deliveredAt:new Date().toISOString()};ue(t,n),tr={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function Ph(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(tr&&e-tr.loadedAtMs<pI)return tr.flags;try{let r=U().agentOsId?.trim();if(!r)return tr={flags:{},loadedAtMs:e,file:null},tr.flags;let t=_h(r);if(!lI(t))return tr={flags:{},loadedAtMs:e,file:t},tr.flags;let n=JSON.parse(cI(t,"utf8")),o=n?.contractVersion===1?nc(n.flags):{};return tr={flags:o,loadedAtMs:e,file:t},o}catch{return tr={flags:{},loadedAtMs:e,file:null},tr.flags}}var mI=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}];function fI(e){let r=e?.trim().toLowerCase()??"";return r===""?{mode:"off",unknown:!1}:r==="off"||r==="shadow"||r==="enforce"?{mode:r,unknown:!1}:{mode:"off",unknown:!0}}function Lr(e=process.env){let r={},t={},n=[],o=Ph();for(let s of mI){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=fI(i);r[s.key]=c.mode,t[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){r[s.key]=l,t[s.key]="server";continue}r[s.key]="off",t[s.key]="default"}return{flags:r,sources:t,warnings:n}}var Te={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Br(e=process.env){return Lr(e).flags.dispatchReceipts}function oc(e){return Br(e)!=="off"}function sc(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function Ro(e,r,t){if(!oc())return;let n=z();if(n)try{n.recordOperationReceipt({idempotencyKey:sc(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Te.storeFailures+=1}}function Ih(e){Ro("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function bi(e){Ro("spawned",e)}function on(e,r){Ro("released",e,{reasonClass:r})}function Oh(e){Ro("completion-sent",e)}function ic(e,r){Ro("completion-acked",e,{outcome:r})}function Th(e){if(!oc())return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(t){let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return Te.completionReplaysObserved+=1,!0}}catch{Te.storeFailures+=1}return!1}function ac(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Nh(e){if(Br()!=="enforce")return!1;let r=z();if(!r)return!1;try{let t=r.getOperationReceipt(sc("completion-acked",e));if(!t)return!1;let n=null;try{n=t.resultJson?JSON.parse(t.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(Te.completionReplaysShortCircuited+=1,!0):!1}catch{return Te.storeFailures+=1,!1}}var gI=600*1e3;function Dh(e,r){if(Br()!=="enforce")return;let t=z();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Te.storeFailures+=1}}function Mh(e,r){if(Br()!=="enforce")return[];let t=z();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??gI;try{return t.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return Te.storeFailures+=1,[]}}function yo(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var hI=900*1e3,Ah=10080*60*1e3,kI=1440*60*1e3,yI=500,RI=300;function Wh(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!oc())return r;let t=z();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??hI;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-Ah).toISOString(),limit:yI}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let p=t.getOperationReceipt(`dispatch:spawned:${u}`),m=t.getOperationReceipt(`dispatch:released:${u}`);if(p||m){n-d>=kI&&a.length+5<=RI&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",y=yo(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(y===null)return!0;let w=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),E=yo(w);return E===null||E>=y}))continue;let g=!1;if(e?.hasLiveWorker&&c.resultJson)try{let h=JSON.parse(c.resultJson);h.runId&&h.workerName&&(g=e.hasLiveWorker({runId:h.runId,workerName:h.workerName}))}catch{g=!1}g||(i+=1)}let l=a.length>0?t.deleteOperationReceiptsByKeys(a):0;if(Br()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=Ah}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Te.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Te.storeFailures+=1,r}}function Lh(){return{"dispatchReceipts.storeFailures":Te.storeFailures,"dispatchReceipts.completionReplaysObserved":Te.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Te.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Te.agedReceiptsPruned}}var sn=900*1e3,uc="admission-shadow",lc="worker-slot:",Qr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},cc=!1;function Bh(){cc=!1}function Ur(e=process.env){return Lr(e).flags.admission}function Si(e,r){return`${lc}${e}:${r}`}function Uh(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.tryReserveAdmission(Si(e,r),uc,sn)}catch{Qr.storeFailures+=1}}function vo(e,r){if(Ur()==="off")return;let t=z();if(t)try{t.releaseAdmission(Si(e,r),uc)}catch{Qr.storeFailures+=1}}function Fh(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Ur()==="off")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>Si(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:lc,limit:500}),s=new Set(o.map(p=>p.key)),i=[...n].filter(p=>!s.has(p)).length,a=o.filter(p=>!n.has(p.key)).length,l=!cc;cc=!0,!l&&i>0&&(Qr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(Si(p.runId,p.workerName),uc,sn),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,Qr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:lc,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return Qr.storeFailures+=1,r}}function Kh(){return{"admission.storeFailures":Qr.storeFailures,"admission.missingForLive":Qr.missingForLive,"admission.deadSlotsReleased":Qr.deadSlotsReleased}}var dc="worker-slot-n:",wi=64;function Hh(e){return`${dc}${e}`}function xi(e,r){return`${e}:${r}`}var Zr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function $h(e){if(Ur()!=="enforce")return{admitted:!0};let r=z();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(wi,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Zr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=xi(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Hh(o),n,sn).acquired)return{admitted:!0,slot:o};return Zr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Zr.enforceStoreFailures+=1,{admitted:!0}}}function et(e,r){if(Ur()==="off")return;let t=z();if(t)try{let n=xi(e,r),o=t.listAdmissionReservations({keyPrefix:dc,limit:wi});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Zr.enforceStoreFailures+=1}}function jh(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Ur()!=="enforce")return r;let t=z();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>xi(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:dc,limit:wi}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,sn),a.add(c.owner),s+=1):t.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=xi(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<wi;d+=1)if(t.tryReserveAdmission(Hh(d),u,sn).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Zr.enforceStoreFailures+=1,r}}function Vh(){return{"admission.enforceStoreFailures":Zr.enforceStoreFailures,"admission.refusedSlotsExhausted":Zr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Zr.admissionsRefusedDiskBackstop}}O();O();var vI=/^[a-z0-9][a-z0-9._-]{0,127}$/i,bI=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Gh=new Set(["undefined","null"]),Yh="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function SI(e){let r=e.trim();if(!vI.test(r))throw new Error(`invalid run id: ${e}`);return r}function wI(e){let r=e.trim();if(!bI.test(r))throw new Error(`invalid worker name: ${e}`);return r}function qh(e){return typeof e=="string"?e.trim():""}function pc(e){let r=qh(e.run),t=qh(e.name);return(!r||Gh.has(r))&&Je(`missing --run RUN_ID (${Yh})`),(!t||Gh.has(t))&&Je(`missing --name WORKER_NAME (${Yh})`),{runId:SI(r),workerName:wI(t)}}import{existsSync as xI,mkdirSync as _I,readFileSync as EI,writeFileSync as CI}from"node:fs";import{homedir as PI}from"node:os";import tk from"node:path";var _e={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function bo(e){return Lr(process.env).flags[e]}var JG=1800*1e3;function mc(e){return`mesh-cron-lease:${e}`}function Jh(e,r){if(bo("meshLease")==="off")return;let t=z();if(t)try{let n=t.latestRecoveryCheckpoint(mc(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(r.leaseToken??null)&&(o.holderBoxId??null)===(r.holderBoxId??null)&&o.authorized===r.authorized)return}t.saveRecoveryCheckpoint({scope:mc(e),payloadJson:JSON.stringify(r)})}catch{_e.meshStoreFailures+=1}}function zh(e,r){let t=bo("meshLease");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(mc(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(_e.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(_e.meshEnforceStaleInversions+=1,null):s}catch{return _e.meshStoreFailures+=1,null}}function _i(e){return`quota-cooldown:${e}`}var Xh="quota-preflight";function Qh(e,r){if(bo("quota")==="off")return;let t=z();if(t)try{t.tryReserveAdmission(_i(e),Xh,r)}catch{_e.quotaStoreFailures+=1}}function Zh(e){if(bo("quota")==="off")return;let r=z();if(r)try{r.releaseAdmission(_i(e),Xh)}catch{_e.quotaStoreFailures+=1}}function ek(e,r){let t=bo("quota");if(t==="off")return null;let n=z();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:_i(e),limit:50}).find(i=>i.key===_i(e)),s=!!o;return s!==r&&(_e.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return _e.quotaStoreFailures+=1,null}}function rk(){return{"keeper.storeFailures":_e.keeperStoreFailures,"meshLease.storeFailures":_e.meshStoreFailures,"meshLease.divergences":_e.meshLeaseDivergences,"meshLease.enforceStaleInversions":_e.meshEnforceStaleInversions,"quota.storeFailures":_e.quotaStoreFailures,"quota.verdictDivergences":_e.quotaVerdictDivergences}}var AI=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,II=30,OI=5,TI=240;function NI(e){let r=e?.trim();return!!(r&&AI.test(r))}function DI(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function fc(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(TI,Math.max(OI,e)):II}function nk(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||tk.join(PI(),".kynver","provider-quota-cooldowns.json")}function So(e){return(e??"").trim().toLowerCase()}function gc(){let e=nk();if(!xI(e))return{};try{let r=JSON.parse(EI(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[So(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function hc(e){let r=nk();try{_I(tk.dirname(r),{recursive:!0}),CI(r,`${JSON.stringify(e,null,2)}
|
|
162
|
+
`,"utf8")}catch{}}function MI(e,r,t=Date.now()){let n=So(e);if(!n)return;let o=gc();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},hc(o),Qh(n,fc()*6e4)}function WI(e){let r=So(e);if(!r)return!1;Zh(r);let t=gc();return r in t?(delete t[r],hc(t),!0):!1}function ok(e,r=Date.now()){if(!DI())return{ok:!0};let t=So(e);if(!t)return{ok:!0};let n=gc(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+fc()*6e4>r),i=ek(t,s);if(i)return i.blocked?{ok:!1,provider:t,reason:`provider "${t}" is inside its local quota cooldown`+(i.retryAtIso?` \u2014 preflight declines spawn until ${i.retryAtIso}`:""),retryAtIso:i.retryAtIso??new Date(r).toISOString()}:{ok:!0};if(!o)return{ok:!0};let a=Date.parse(o.lastExhaustedAt),l=a+fc()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],hc(n),{ok:!0};let c=new Date(l).toISOString();return{ok:!1,provider:t,reason:`provider "${t}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${c}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:c}}function LI(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;for(let t of["result","summary","error"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function sk(e){let r=So(e.provider);if(!r)return"none";let t=LI(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?NI(t)?(MI(r,t,e.nowMs??Date.now()),"recorded"):WI(r)?"cleared":"none":"none"}function ik(e){let r=e.usage;return!r||r.inputTokens===void 0&&r.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:r.model?.trim()||e.model?.trim()||null,inputTokens:r.inputTokens??null,outputTokens:r.outputTokens??null}}import{statSync as lO}from"node:fs";import cO from"node:path";Ya();import{createECDH as pk,randomBytes as KI}from"node:crypto";import{chmodSync as mk,existsSync as ck,mkdirSync as HI,readFileSync as $I,readdirSync as jI,renameSync as VI,writeFileSync as GI}from"node:fs";import{homedir as YI}from"node:os";import fk from"node:path";import{createCipheriv as sY,createDecipheriv as iY,createECDH as aY,createHash as FI,hkdfSync as lY,randomBytes as cY}from"node:crypto";var BI=/^[A-Z][A-Z0-9_]{1,63}$/;var nr={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},UI=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"]);function ak(e){return typeof e=="string"&&BI.test(e)&&!UI.has(e)&&!e.startsWith("KYNVER_")}function lk(e){return FI("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}var uk="secret-store-keys";function an(){return fk.join(YI(),".kynver","secrets")}function yc(e){HI(e,{recursive:!0,mode:448});try{mk(e,448)}catch{}}function Rc(e,r){let t=`${e}.${process.pid}.tmp`;GI(t,r,{mode:384});try{mk(t,384)}catch{}VI(t,e)}function dk(e){if(!e)return null;try{let r=JSON.parse(e);if(r.v===1&&typeof r.ecdh=="string"&&typeof r.vault=="string")return{v:1,ecdh:r.ecdh,vault:r.vault}}catch{}return null}function Ei(e,r){let t=Buffer.from(e.ecdh,"base64"),n=Buffer.from(e.vault,"base64");if(t.length!==32||n.length!==32)throw new Error("secret store keys are corrupt");let o=pk("prime256v1");o.setPrivateKey(t);let s=o.getPublicKey();return{ecdhPrivateKey:t,publicKeyRaw:s,fingerprint:lk(s),vaultKey:n,keyStore:r}}var qI=e=>fk.join(e,"keys.json"),kc=class extends Error{constructor(){super("Saved secrets exist on this computer but their key can't be read (is the OS keyring locked?). Unlock it and try again."),this.name="SecretKeysUnavailableError"}};function gk(e={}){let r=e.root??an(),t=e.keychain??Yn(),n=t.available?dk(t.read(uk)):null;if(n)return Ei(n,"keychain");let o=qI(r),s=ck(o)?dk($I(o,"utf8")):null;if(s)return Ei(s,"file");if(ck(r)&&jI(r).some(d=>d.endsWith(".vault.json")))throw new kc;let i=pk("prime256v1");i.generateKeys();let a=Buffer.alloc(32),l=i.getPrivateKey();l.copy(a,32-l.length);let c={v:1,ecdh:a.toString("base64"),vault:KI(32).toString("base64")},u=JSON.stringify(c);return t.write(uk,u)?Ei(c,"keychain"):(yc(r),Rc(o,`${u}
|
|
163
|
+
`),Ei(c,"file"))}function JI(e){let r=new Set([e]),t=Buffer.from(e,"utf8").toString("base64");r.add(t),r.add(t.replace(/=+$/,"")),r.add(t.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""));let n=encodeURIComponent(e);n!==e&&r.add(n);let o=e.trim();return o&&o!==e&&r.add(o),[...r].filter(s=>s.length>=nr.minRedactChars)}function zI(e){return e.length>=nr.minValueChars&&e.length<nr.minRedactChars}function XI(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function hk(e){let r=[];for(let o of e){let s=`[redacted ${o.name}]`;zI(o.value)&&r.push({needle:o.value,label:s,token:!0});for(let i of JI(o.value))r.push({needle:i,label:s,token:!1})}r.sort((o,s)=>s.needle.length-o.needle.length||Number(o.token)-Number(s.token));let t=new Set,n=r.filter(o=>{let s=`${o.token?"t":"s"}:${o.needle}`;return t.has(s)?!1:(t.add(s),!0)});return{empty:n.length===0,maxLength:n.reduce((o,s)=>Math.max(o,s.needle.length),0),partialSuffixLength(o){let s=0;for(let i of n){let a=i.needle[0];for(let l=Math.min(i.needle.length-1,o.length);l>s;l--)if(o[o.length-l]===a&&o.endsWith(i.needle.slice(0,l))){s=l;break}}return s},redact(o){if(!o||n.length===0)return o;let s=o;for(let i of n)if(i.token){let a=new RegExp(`(^|[^A-Za-z0-9_])${XI(i.needle)}(?=$|[^A-Za-z0-9_])`,"g");s=s.replace(a,`$1${i.label}`)}else s.includes(i.needle)&&(s=s.split(i.needle).join(i.label));return s}}}import{createHash as tO,randomBytes as nO}from"node:crypto";import{existsSync as oO,readFileSync as sO,rmSync as iO}from"node:fs";import aO from"node:path";import{createCipheriv as QI,createDecipheriv as ZI,randomBytes as eO,scrypt as SY,timingSafeEqual as wY}from"node:crypto";var rO=32,kk=12,vc=16,xY={N:2**17,r:8,p:1},_Y=2**14;var ln=class extends Error{constructor(r="the saved-login vault could not be decrypted"){super(r),this.name="VaultCryptoError"}};function bc(e,r,t){if(e.length!==rO)throw new ln("bad key length");let n=eO(kk),o=QI("aes-256-gcm",e,n);o.setAAD(Buffer.from(t,"utf8"));let s=Buffer.concat([o.update(r),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Sc(e,r,t){try{let n=Buffer.from(r.n,"base64"),o=Buffer.from(r.c,"base64");if(n.length!==kk||o.length<vc)throw new ln;let s=ZI("aes-256-gcm",e,n);return s.setAAD(Buffer.from(t,"utf8")),s.setAuthTag(o.subarray(o.length-vc)),Buffer.concat([s.update(o.subarray(0,o.length-vc)),s.final()])}catch(n){throw n instanceof ln?n:new ln}}var EY=Buffer.from("kynver-site-login-key-check-v1","utf8");var Se=class extends Error{constructor(t,n){super(t);this.code=n;this.name="SecretStoreError"}code};function wc(e){return`${tO("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ci=(e,r,t)=>{for(let n of[e,r,t])if(n.includes(`
|
|
160
164
|
`))throw new Se("invalid field","invalid");return["kynver-secret/v1/value",e,r,t].join(`
|
|
161
|
-
`)},
|
|
162
|
-
`)}list(){return this.read().secrets.map(ln)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?ln(t):null}put(r){if(!ik(r.name))throw new Se("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new Se("The secret is empty.","invalid");if(r.value.trim().length<nr.minValueChars)throw new Se(`The secret is too short \u2014 use at least ${nr.minValueChars} characters.`,"invalid");if(t>nr.maxValueBytes)throw new Se("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,nr.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===r.name);if(i)return i.value=bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ei(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:ln(i),replaced:!0};if(o.secrets.length>=nr.maxSecrets)throw new Se("This computer already holds the most secrets allowed.","full");let a=`sec_${rO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ei(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:ln(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new Se("No saved secret by that name.","not_found");try{let n=Sc(this.opts.vaultKey,t.value,Ei(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:ln(t),value:n}}catch{throw new Se(`The saved value for ${t.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let r=[];for(let t of this.read().secrets)try{r.push({name:t.name,value:Sc(this.opts.vaultKey,t.value,Ei(this.opts.agentOsId,t.handle,t.name)).toString("utf8")})}catch{}return r}touch(r){if(r.length===0)return;let t=this.read(),n=this.now().toISOString();for(let o of t.secrets)r.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(t)}remove(r){let t=this.read(),n=t.secrets.findIndex(s=>r.handle?s.handle===r.handle:s.name===r.name);if(n<0)throw new Se("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?oO(this.file,{force:!0}):this.write(t),ln(o)}};var lO=64,xc=new Map;function cO(e,r){return`${r}\0${e}`}function uO(e){try{let r=iO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function dO(e,r=sn()){if(!e)return null;let t=aO.join(r,wc(e)),n=uO(t),o=cO(e,r);if(!n)return xc.delete(o),null;let s=xc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=fk({root:r}),a=gk(new Ci({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return xc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function _c(e,r,t){if(typeof e=="string")return r.redact(e);if(t>lO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>_c(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=_c(s,r,t+1);return n}function kk(e,r,t=sn()){let n=dO(e,t);return!n||n.empty?r:_c(r,n,0)}async function yk(e,r,t){let n=await fetch(e,{method:"POST",headers:Jn(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function pO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Rk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function So(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function fO(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function bk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function gO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function cn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function hO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ec(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function kO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function xo(e){let{runId:r,workerName:t}=pc(e),n=qt(r,t),o=q(n.runId),s=J(n,Ec(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!we(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&co(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Hl(n)&&hO(n),!s.finalResult&&s.alive===!1){let _=fi({worker:n,status:s});_&&gi(n,_)&&(L(n.runId,n),n=qt(r,t),s=J(n,Ec(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Jl({worker:n,run:o,status:s});if(!_.ok)return cn(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ec(o)),s=kO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=kh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return cn(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{ok({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Q(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await ee(p,i,{baseUrl:d});a&&(await Zs({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=qt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=sk({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=kk(i,{source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),...k?{workerUsage:k}:{},status:n.leaseToken?{...y,leaseToken:n.leaseToken}:y,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}}),g=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(g){if(Oh(g),Th(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return ni(n,n.runId,_),pi(n,s,{source:"harness-completion"}),cn(n,void 0),Ro(n.runId,n.name),Zr(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Ih(g)}let h=await yk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await ym(i,{baseUrl:d});_&&_!==m&&(m=_,h=await yk(f,m,b))}if(h.ok){let _=Eg(h.parsed);if(!Cg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;cn(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return ni(n,n.runId,Ye),g&&ic(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}cn(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};ni(n,n.runId,$),pi(n,s,{source:"harness-completion"}),g&&ic(g,"acknowledged"),Ro(n.runId,n.name),Zr(n.runId,n.name);let C=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:K,...C?{prHandoff:{prUrl:C}}:{}}}let w=h.status===401||h.status===403,E=pO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return cn(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function Sk(e){let{run:r,workerName:t,worker:n}=e,o=J(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ut({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=bk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=Rk(n.completionResponse),m=Rk(p?.task),f=So(p?.outcome),y=So(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=So(m?.prUrl)??So(p?.prUrl),g=So(n.completionReportedAt),h=mO({finished:we(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=fO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:we(o)}),E=gO({changedFiles:o.changedFiles,headCommit:s,prUrl:b??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let S=n.instructionPolicyEvidence;if(!S||typeof S!="object")return null;let _=S.ruleSlugs;return Array.isArray(_)?_.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:b,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:y,completionRouteOutcome:f,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function yO(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!bk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function RO(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function wo(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function vk(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function vO(e){let r=e.filter(vk),t=e.filter(n=>{if(vk(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function wk(e,r,t){let n={runId:e.id,name:e.name,status:Ca(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:wo(r,"status"),attentionCounts:wo(r,"attention"),lifecycleCounts:wo(r,"lifecycleStage")},n.controller=vO(r)),n}function bO(e){return e.status==="done"&&e.attention==="done"}function Cc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Pi.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?Sk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=wk(r,n,!1);return ue(Pi.join(N(r.id),"last-board.json"),o),o}function Pc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Pi.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?yO(a)?RO(i,a):Sk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!bO(i)),s=wk(r,o,!0);return s.status=Ca(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:wo(n,"status"),allAttentionCounts:wo(n,"attention")},ue(Pi.join(N(r.id),"last-board-compact.json"),s),s}async function xk(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Cc(t),s=Q(e.baseUrl?String(e.baseUrl):void 0),i=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}O();H();B();O();var Tq=360*60*1e3;function Ek(e){let r=e.nodeExecutable??process.execPath,t=js({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!wO(n))return;let o=_O.join(e.workerDir,"auto-complete.log"),s;try{s=xO(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=SO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&_k(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{_k(s)}catch{}return}}de();function Ck(e,r,t){Z(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}We();ys();H();import TO from"node:net";import{chmodSync as NO,unlinkSync as DO}from"node:fs";import{createHash as EO}from"node:crypto";import{chmodSync as CO,mkdirSync as PO}from"node:fs";import Pk from"node:os";import AO from"node:path";var IO=100,OO="\\\\.\\pipe\\";function Ak(e,r){return EO("sha256").update(e).digest("hex").slice(0,r)}function Ac(e){let r=e.platform??process.platform,t=Ak(e.agentOsId,12),n=Ak(e.workerKey,16);if(r==="win32")return{socketPath:`${OO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=AO.posix,s=e.homeDir??Pk.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=IO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Pk.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Ic(e){e.socketDir&&(PO(e.socketDir,{recursive:!0,mode:448}),CO(e.socketDir,448))}var _o=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=ro(r.capabilities),this.server=TO.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Ic(r.address),await new Promise((n,o)=>{t.server.once("error",o),t.server.listen(r.address.socketPath,()=>{t.server.removeListener("error",o),n()})}),!r.address.isNamedPipe)try{NO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(rn).map(r=>so[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{DO(this.opts.address.socketPath)}catch{}}}refuse(r,t){this.opts.onRefusal?.(r,t)}async handleConnection(r){this.sockets.add(r),r.on("close",()=>{this.sockets.delete(r),this.connections.delete(r)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(r,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),r.end();return}this.connections.add(r);let t=await this.opts.identity.verify({socket:r,workerPid:this.opts.workerPid});if(!t.ok){this.refuse("identity_refused",t.detail),this.write(r,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),r.end();return}let n="";r.setEncoding("utf8"),r.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(r,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),r.end();return}let s=n.indexOf(`
|
|
165
|
+
`)},cn=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),Pi=class{constructor(r){this.opts=r;if(!r.agentOsId.trim())throw new Se("workspace is required","invalid");this.root=r.root??an(),this.file=aO.join(this.root,wc(r.agentOsId)),this.now=r.now??(()=>new Date)}opts;file;root;now;read(){if(!oO(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let r;try{r=JSON.parse(sO(this.file,"utf8"))}catch{throw new Se("The saved-secrets file is damaged.","corrupt")}if(r.v!==1||!Array.isArray(r.secrets))throw new Se("The saved-secrets file is damaged.","corrupt");if(r.agentOsId!==this.opts.agentOsId)throw new Se("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:r.agentOsId,secrets:r.secrets}}write(r){yc(this.root),Rc(this.file,`${JSON.stringify(r)}
|
|
166
|
+
`)}list(){return this.read().secrets.map(cn)}find(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);return t?cn(t):null}put(r){if(!ak(r.name))throw new Se("That secret name isn't allowed.","invalid");let t=Buffer.byteLength(r.value,"utf8");if(t===0)throw new Se("The secret is empty.","invalid");if(r.value.trim().length<nr.minValueChars)throw new Se(`The secret is too short \u2014 use at least ${nr.minValueChars} characters.`,"invalid");if(t>nr.maxValueBytes)throw new Se("The secret is too long.","invalid");let n=(r.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,nr.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===r.name);if(i)return i.value=bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ci(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:cn(i),replaced:!0};if(o.secrets.length>=nr.maxSecrets)throw new Se("This computer already holds the most secrets allowed.","full");let a=`sec_${nO(10).toString("hex")}`,l={handle:a,name:r.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:bc(this.opts.vaultKey,Buffer.from(r.value,"utf8"),Ci(this.opts.agentOsId,a,r.name))};return o.secrets.push(l),this.write(o),{summary:cn(l),replaced:!1}}reveal(r){let t=this.read().secrets.find(n=>r.handle?n.handle===r.handle:n.name===r.name);if(!t)throw new Se("No saved secret by that name.","not_found");try{let n=Sc(this.opts.vaultKey,t.value,Ci(this.opts.agentOsId,t.handle,t.name)).toString("utf8");return{summary:cn(t),value:n}}catch{throw new Se(`The saved value for ${t.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let r=[];for(let t of this.read().secrets)try{r.push({name:t.name,value:Sc(this.opts.vaultKey,t.value,Ci(this.opts.agentOsId,t.handle,t.name)).toString("utf8")})}catch{}return r}touch(r){if(r.length===0)return;let t=this.read(),n=this.now().toISOString();for(let o of t.secrets)r.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(t)}remove(r){let t=this.read(),n=t.secrets.findIndex(s=>r.handle?s.handle===r.handle:s.name===r.name);if(n<0)throw new Se("No saved secret by that name.","not_found");let[o]=t.secrets.splice(n,1);return t.secrets.length===0?iO(this.file,{force:!0}):this.write(t),cn(o)}};var uO=64,xc=new Map;function dO(e,r){return`${r}\0${e}`}function pO(e){try{let r=lO(e);return r.isFile()?`${r.mtimeMs}:${r.size}`:null}catch{return null}}function mO(e,r=an()){if(!e)return null;let t=cO.join(r,wc(e)),n=pO(t),o=dO(e,r);if(!n)return xc.delete(o),null;let s=xc.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=gk({root:r}),a=hk(new Pi({agentOsId:e,vaultKey:i.vaultKey,root:r}).revealAllForRedaction());return xc.set(o,{stamp:n,redactor:a}),a}catch{return null}}function _c(e,r,t){if(typeof e=="string")return r.redact(e);if(t>uO||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>_c(o,r,t+1));let n={};for(let[o,s]of Object.entries(e))n[o]=_c(s,r,t+1);return n}function yk(e,r,t=an()){let n=mO(e,t);return!n||n.empty?r:_c(r,n,0)}async function Rk(e,r,t){let n=await fetch(e,{method:"POST",headers:zn(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function fO(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function vk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function wo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gO(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function hO(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function Sk(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function kO(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function un(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,L(e.runId,e))}function yO(e){e.completionBlocker&&(delete e.completionBlocker,L(e.runId,e))}function Ec(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function RO(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function _o(e){let{runId:r,workerName:t}=pc(e),n=Jt(r,t),o=q(n.runId),s=J(n,Ec(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!we(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&uo(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&$l(n)&&yO(n),!s.finalResult&&s.alive===!1){let _=gi({worker:n,status:s});_&&hi(n,_)&&(L(n.runId,n),n=Jt(r,t),s=J(n,Ec(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let _=Jl({worker:n,run:o,status:s});if(!_.ok)return un(n,_.reason),{ok:!1,reason:_.reason,nextAction:_.nextAction,completionBlocked:!0};(_.prUrl||_.headCommit)&&(s=J(n,Ec(o)),s=RO(s,_))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let _=yh({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!_.allowed){let K=_.detail??`worktree completion blocked (${_.state})`;return un(n,K),{ok:!1,reason:K,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{sk({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=Q(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await ee(p,i,{baseUrl:d});a&&(await ei({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Jt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,y={...s};n.disposableArtifactsRemoved?.length&&(y.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(y.steerRestartRequired=!0,y.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(y.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=ik({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=yk(i,{source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),...k?{workerUsage:k}:{},status:n.leaseToken?{...y,leaseToken:n.leaseToken}:y,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}}),g=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(g){if(Th(g),Nh(g)){let _={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return oi(n,n.runId,_),mi(n,s,{source:"harness-completion"}),un(n,void 0),vo(n.runId,n.name),et(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Oh(g)}let h=await Rk(f,m,b);if((h.status===401||h.status===403)&&!p){let _=await ym(i,{baseUrl:d});_&&_!==m&&(m=_,h=await Rk(f,m,b))}if(h.ok){let _=Eg(h.parsed);if(!Cg(_)){let ke=`completion acknowledged but board not advanced: ${_.detail??(_.routeOutcome?`harness completion returned ${_.routeOutcome}`:"harness completion did not advance the linked task")}`;un(n,ke);let Ye={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return oi(n,n.runId,Ye),g&&ic(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:ke,completionBlocked:!0}}un(n,void 0);let K=_.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};oi(n,n.runId,$),mi(n,s,{source:"harness-completion"}),g&&ic(g,"acknowledged"),vo(n.runId,n.name),et(n.runId,n.name);let C=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:K,...C?{prHandoff:{prUrl:C}}:{}}}let w=h.status===401||h.status===403,E=fO(h.parsed)??(w?"runner token unauthorized":"non-2xx response"),S=w?`completion replay rejected (${h.status}): ${E}`:`completion replay failed (${h.status}): ${E}`;return un(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function wk(e){let{run:r,workerName:t,worker:n}=e,o=J(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ft({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=Sk(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=vk(n.completionResponse),m=vk(p?.task),f=wo(p?.outcome),y=wo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],b=wo(m?.prUrl)??wo(p?.prUrl),g=wo(n.completionReportedAt),h=gO({finished:we(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),w=hO({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:we(o)}),E=kO({changedFiles:o.changedFiles,headCommit:s,prUrl:b??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let S=n.instructionPolicyEvidence;if(!S||typeof S!="object")return null;let _=S.ruleSlugs;return Array.isArray(_)?_.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:b,handoffState:E,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:y,completionRouteOutcome:f,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function vO(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!Sk(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function bO(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function xo(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function bk(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function SO(e){let r=e.filter(bk),t=e.filter(n=>{if(bk(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function xk(e,r,t){let n={runId:e.id,name:e.name,status:Pa(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:xo(r,"status"),attentionCounts:xo(r,"attention"),lifecycleCounts:xo(r,"lifecycleStage")},n.controller=SO(r)),n}function wO(e){return e.status==="done"&&e.attention==="done"}function Cc(e){let r=q(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(Ai.join(N(r.id),"workers",x(s),"worker.json"),void 0);return i?wk({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=xk(r,n,!1);return ue(Ai.join(N(r.id),"last-board.json"),o),o}function Pc(e){let r=q(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(Ai.join(N(r.id),"workers",x(i),"worker.json"),void 0);return a?vO(a)?bO(i,a):wk({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!wO(i)),s=xk(r,o,!0);return s.status=Pa(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:xo(n,"status"),allAttentionCounts:xo(n,"attention")},ue(Ai.join(N(r.id),"last-board-compact.json"),s),s}async function _k(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Cc(t),s=Q(e.baseUrl?String(e.baseUrl):void 0),i=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await X(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}O();H();B();O();var Dq=360*60*1e3;function Ck(e){let r=e.nodeExecutable??process.execPath,t=Vs({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!_O(n))return;let o=CO.join(e.workerDir,"auto-complete.log"),s;try{s=EO(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...t.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=xO(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&Ek(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{Ek(s)}catch{}return}}de();function Pk(e,r,t){Z(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=ne(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=ne(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}We();Rs();H();import DO from"node:net";import{chmodSync as MO,unlinkSync as WO}from"node:fs";import{createHash as PO}from"node:crypto";import{chmodSync as AO,mkdirSync as IO}from"node:fs";import Ak from"node:os";import OO from"node:path";var TO=100,NO="\\\\.\\pipe\\";function Ik(e,r){return PO("sha256").update(e).digest("hex").slice(0,r)}function Ac(e){let r=e.platform??process.platform,t=Ik(e.agentOsId,12),n=Ik(e.workerKey,16);if(r==="win32")return{socketPath:`${NO}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=OO.posix,s=e.homeDir??Ak.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=TO)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??Ak.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Ic(e){e.socketDir&&(IO(e.socketDir,{recursive:!0,mode:448}),AO(e.socketDir,448))}var Eo=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(r){if(typeof r.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=r,this.now=r.now??Date.now,this.fetchImpl=r.fetchImpl??fetch,this.grantedTools=to(r.capabilities),this.server=DO.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Ic(r.address),await new Promise((n,o)=>{t.server.once("error",o),t.server.listen(r.address.socketPath,()=>{t.server.removeListener("error",o),n()})}),!r.address.isNamedPipe)try{MO(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(tn).map(r=>io[r])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let r of this.sockets)r.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(r=>this.server.close(()=>r())),!this.opts.address.isNamedPipe)try{WO(this.opts.address.socketPath)}catch{}}}refuse(r,t){this.opts.onRefusal?.(r,t)}async handleConnection(r){this.sockets.add(r),r.on("close",()=>{this.sockets.delete(r),this.connections.delete(r)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(r,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),r.end();return}this.connections.add(r);let t=await this.opts.identity.verify({socket:r,workerPid:this.opts.workerPid});if(!t.ok){this.refuse("identity_refused",t.detail),this.write(r,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),r.end();return}let n="";r.setEncoding("utf8"),r.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(r,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),r.end();return}let s=n.indexOf(`
|
|
163
167
|
`);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
|
|
164
|
-
`)}})}write(r,t){if(!r.destroyed)try{r.write(El(t))}catch{}}async handleLine(r,t){let n=Cl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!rn(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Vs({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(r,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(r,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}};var Nk={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function Oc(){return Nk}var LO=7200*1e3;async function Dk(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=x(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||Ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:zs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=wg(o.provider),i=o.model;if(s.preflightModel){let T=s.preflightModel(r.model);if(!T.ok)throw new Error(`model preflight failed for provider "${s.name}": ${T.note??"invalid model/provider combination"}`);T.normalized&&console.error(`[supervisor] ${n}: ${T.note}`),i=T.model}let{worktreesDir:a}=le(),l=un.join(N(e.id),"workers",n);WO(l,{recursive:!0});let c=un.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(MO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Ck(e.repo,c,u);else{let T=kg({baseCommit:e.baseCommit,base:e.base,verifyRef:te=>Z(e.repo,["rev-parse","--verify","--quiet",`${te}^{commit}`],{allowFailure:!0}).trim().length>0});T.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${T.ref} (${T.source})`),e.baseCommit=Z(e.repo,["rev-parse",T.ref],{allowFailure:!0}).trim()||T.ref,Ie(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=un.join(l,"stdout.jsonl"),m=un.join(l,"stderr.log"),f=un.join(l,"heartbeat.jsonl"),y=bg({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:f,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:r.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,b=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let g=si({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Pl(s.name)&&to()){let T=Za();T&&r.agentOsId&&r.taskId?(w={apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let K=xf(s.name);if(_&&K&&to()){let T=Za();if(T&&r.agentOsId&&r.taskId){let te=Ac({agentOsId:String(r.agentOsId),workerKey:l}),F=await _o.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+LO,workerPid:process.pid,identity:Oc(),onRefusal:D=>console.error(`[supervisor] ${n}: worker tools refused a call (${D})`)});if(Zl(l,F),s.name==="codex"){let D=Qg({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=Zg(D.codexHome,Ol());M.ok?(E=D.codexHome,h=E):(go(l),await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=zg({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&qs(Ys())==="antigravity"){let D=sh({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=ah({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await qr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=Ef({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${F.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?dp(pp(e.id,String(r.taskId),n)):null,C;try{C=mp($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:Qf(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:y,reviewWorker:g,executionMode:r.executionMode??"write",...w?{workerToolGrant:w}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:wf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Ks(l),li(c),go(l),di(l),ui(c),tn(l)),Z(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Z(e.repo,["branch","-D",d],{allowFailure:!0}),T}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let re=tg(C.model,i,s.defaultModel),ke=U(),Ye=vr(process.env,ke),gr=He().runnerId,Hr=ks({boxKind:Ye.boxKind,config:ke,env:process.env}),j={name:n,runId:e.id,status:"running",pid:C.pid,model:re,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:r.runtimeEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},executionMode:r.executionMode??"write",boxKind:Ye.boxKind,boxId:Hr,runtimeId:gr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),Ql(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:un.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Ek({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let F=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=F,L(e.id,j)}if(T)T.pid&&(j.completionSidecarPid=T.pid,L(e.id,j));else{let te=j.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";j.completionBlocker=te,j.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,j),gg(e.id,j,te)}}return j}H();jn();function BO(e,r){let t=Gt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function UO(e){let r=Cr()?.trim();return r||Qe("KYNVER_API_KEY",e)||Qe("KYNVER_RUNTIME_SECRET",e)||Qe("KYNVER_CRON_SECRET",e)||Qe("OPENCLAW_CRON_SECRET",e)||null}async function Mk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.timeoutMs??8e3,s=new Date(n).toISOString(),i=r.fetcher??fetch,a=BO(t,e.agentOsId),l=UO(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}In();function FO(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?Pn(t)??null:null}function KO(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function HO(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Wk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=FO(t,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(t.KYNVER_AGENT_OS_ID??t.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=KO(t,o),l=HO(t,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}O();H();import{mkdirSync as Bk}from"node:fs";import{homedir as $O,tmpdir as l2}from"node:os";import Ai from"node:path";function Uk(){let e=process.env.KYNVER_STATE_ROOT;return e?Ai.resolve(e):Ai.join($O(),".kynver","state")}function Ii(){return Ai.join(Uk(),"plan-outbox")}function jO(){return Ai.join(Uk(),"plan-outbox-archive")}function Fk(){let e=Ii(),r=jO();return Bk(e,{recursive:!0}),Bk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var m2=600*1e3,Eo={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Kk(){return{"planOutbox.storeFailures":Eo.storeFailures,"planOutbox.corruptItemsSeen":Eo.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Eo.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Eo.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Eo.halfArchivesCompleted}}import{existsSync as YO,readFileSync as qO,renameSync as k2,readdirSync as y2,rmSync as R2,writeFileSync as v2,unlinkSync as b2}from"node:fs";import Hk from"node:path";function $k(e){if(!YO(e))return null;try{return JSON.parse(qO(e,"utf8"))}catch{return null}}function Oi(e){let{outboxDir:r}=Fk();return{jsonPath:Hk.join(r,`${e.id}.json`),bodyPath:Hk.join(r,e.bodyPath)}}import eT from"node:path";function Dc(e){let r=eT.join(Ii(),`${e}.json`);return $k(r)}function Mc(e){let r=Oi(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
165
|
-
`)}function Wc(e){let r=e.metadata&&typeof e.metadata=="object"?e.metadata:null,t=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(r&&typeof r.planPersistenceOutboxId=="string"?r.planPersistenceOutboxId:void 0);return t?{outboxId:t,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:r&&typeof r.planPersistenceOutboxPath=="string"?r.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:r&&typeof r.planPersistenceBodyPath=="string"?r.planPersistenceBodyPath:void 0}:null}B();function Lc(e){return e?.trim()?e.trim():null}function
|
|
166
|
-
`),
|
|
167
|
-
`)}var
|
|
168
|
-
`)}function AT(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Ti(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){zn({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},hr=function(){return F.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Lu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ye,n=Re,o=hr,s=Lu;let i=Vk();if(!i.ok||!i.identity){let v=Gk(i);if(r)return{ok:!1,error:v,boundary:i};console.error(`run dispatch failed: ${v}`),process.exit(1)}let a=i.identity;for(let v of i.warnings)console.error(`[dispatch] runner-boundary warning: ${v}`);let l=q(String(yr(String(e.run||""),"--run"))),c=jk(l,a);if(!c.ok){let v=c.reason??"run does not belong to this runner boundary";if(r)return{ok:!1,error:v,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${v}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(yr(String(e.agentOsId||""),"--agent-os-id")),d=Q(e.baseUrl?String(e.baseUrl):void 0),p=await ee(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=He({runId:l.id}),k=lo(l.id,y.runnerId),b=Mm(),g=b?Lm(l.repo):null,h=new WeakMap;if(b&&m&&!g){let v="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(r)return{ok:!1,error:v,runId:l.id};console.error(`run dispatch failed: ${v}`),process.exit(1)}let w=e.diskPath?Vr({diskPath:String(e.diskPath)}):Vr({diskPath:l.repo}),E=await Gm({runId:l.id,agentOsId:u,args:e}),S=AT(e),_=S.size>0,K=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,$=_?Math.min(K,S.size):K;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let v=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await X(v,p,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let C=f?$:Math.min($,E.slotsAvailable);if(!f&&C<=0){let v={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:E.reason??"no resource slots",resourceGate:E};if(r)return{ok:!0,...v};console.log(JSON.stringify(v,null,2));return}let re=Is(l.id),ke=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ye=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Fl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Cc(l.id),...e.lane?{lane:Vm(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(A=>A.trim()).filter(Boolean)}:{}}),gr=Um(),Hr=async v=>{let R=b&&g?Wm(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:gr})??{ok:!1,status:0,response:null},W=A.response;if(R&&Array.isArray(W?.result?.started))for(let G of W.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:W?.result}};f||zn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:gr});let j=await Hr(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=al(j.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:j.dispatch.status,response:j.dispatch.response,authRefreshed:j.dispatch.refreshedAuth===!0,authRefreshFailure:j.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&zn({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:j.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let T=j.result;if(f){let v=yy(T),R=Ry(T),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:T.started.map(W=>({taskId:W.task.id,title:W.task.title,reason:W.reason})),skipped:T.skipped.map(W=>({taskId:W.task.id,skipReason:W.skipReason,reason:W.reason})),diskGate:T.diskGate,resourceGate:T.resourceGate,inspected:T.inspected,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let te=ig(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Co({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&nn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...A};return F.push(G),Re("outcome",{lastOutcome:G}),!1}async function wb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return V(R,"land_pr task missing prUrl");try{let G=await dy({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:A,runId:l.id,workerName:`land-pr-${A}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),qe=await py({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(F.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):V(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function xb(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Co({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&nn({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return F.push(W),Re("outcome",{lastOutcome:W}),!1}async function _b(v){let R=v.task,A=_T(v),W=String(R.id);if(_&&!S.has(W))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=ET(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(dg(l.id,W))return xb(R);let qe=Number(R.attempt)||1;if(qe>te.maxTaskAttempts)return V(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let ot=R.leaseToken?String(R.leaseToken).trim():"";if(!ot)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let st=x(`t-${R.id}-a${R.attempt}`),kr=zs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Ym(R)});Ah({taskId:W,leaseToken:ot,runId:l.id,workerName:st,provider:kr.provider??null});let Xi=og({task:R,routing:kr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Xi.ok)return V(R,Xi.error??"model_routing_mismatch",{modelRoutingGuard:Xi});if(hy(R)){let Ce=await ky({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let Wo=nk(kr.provider);if(!Wo.ok)return V(R,`provider_quota_exhausted: ${Wo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Wo.provider,retryAt:Wo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Lo=Rg({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),$u=Hh({runId:l.id,workerName:st,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Pa()});if(!$u.admitted)return V(R,`admission_refused: ${$u.reason}`,{nonFatal:!0});let Bo=A?.workerMcpToken??null;if(Bo&&to()){let Ot=Wk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Ot.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Ot.code}: ${Ot.detail}) \u2014 spawning without tools`),Bo=null;else{let Qi=await Mk(Ot.context);Qi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Qi.error??`HTTP ${Qi.httpStatus}`}) \u2014 spawning without tools`),Bo=null)}}fg(l.id,String(R.id),{except:st});let sr=await Dk(l,{name:st,task:PT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Ot=>Ot.trim()).filter(Boolean):[],model:kr.model,provider:kr.provider,routingRule:kr.rule,requestedModel:kr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Lo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Lo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Lo?.targetPrUrl,repairTargetBranch:Lo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Bo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:ot,dispatched:!0,executionMode:Os(R)}),Uo=await fy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:ot,worker:sr,baseUrl:d,secret:p});if(!Uo.ok)return gy(l.id,sr,Uo.error??"dispatch_start_readback_failed"),Zr(l.id,st),V(R,Uo.error??"dispatch_start_readback_failed",{readback:Uo.detail??null});sr.leaseToken!==ot&&(sr.leaseToken=ot,sr.leaseOwner=k,L(l.id,sr)),vi({taskId:W,leaseToken:ot}),Bh(l.id,st);let ju={taskId:R.id,started:!0,worker:sr.name,pid:sr.pid,branch:sr.branch,model:sr.model,provider:kr.provider,routingRule:kr.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??G,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return F.push(ju),Re("worker_started",{lastOutcome:ju}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??W}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return Zr(l.id,st),V(R,Ce.message)}}let zi=new Set;for(let v of Dh(l.id))zi.add(v);async function Bu(v){let R=v.task,A=String(R.id);if(zi.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?Bm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=W&&!W.allow?await V(R,`desktop_execution_policy_denied:${W.code}: ${W.reason}`,{desktopPolicyDenied:W.code,...W.code==="operation_not_approved"?{nonFatal:!0}:{}}):Lu(v)?await wb(v):await _b(v);return G||(zi.add(A),Nh(A,l.id)),G}for(let v of T.started)await Bu(v);if(D.push(...T.skipped??[]),_)for(let v of D){let R=String(v.task.id);S.has(R)&&F.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&F.length<C;){if(hr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};F.push(A),Re("circuit_breaker",{lastOutcome:A});break}let v=await Hr(1);if(!v.dispatch.ok||!v.result){let A=Fm(v.dispatch.response),W=ye();ie=A&&W>0;let G=al(v.dispatch.response),qe={started:!1,error:G?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...G?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};F.push(qe),Re("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:qe});break}M+=Number(v.result.inspected)||0,D.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(F.length>=C)break;await Bu(A)}}let Mo=F.filter(v=>v.started).length,$r=yy(T),It=Ry(T),Uu=Mo===0&&($r?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if(Uu&&$r?.summary){let v=$r.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??$r.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=It?`; dispatch_skip_drain scanned=${It.scanned??0} advanced=${It.advanced??0}`:"",G=$r.progressionReport?.summary?`; ${$r.progressionReport.summary}`:"",qe=It?.prLifecycleAttempt?.summary?`; ${It.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${$r.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let Fu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Mo,capacityIdle:Uu,admissionExhaustion:$r,dispatchSkipDrain:It,outcomes:F,skipped:D.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:M,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:gr},Ku=v=>!v.started&&v.nonFatal!==!0,Eb=F.some(Ku),Hu=ie&&Mo>0?!0:!Eb;if(zn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Mo,ok:Hu}),r)return{ok:Hu,...Fu};console.log(JSON.stringify(Fu,null,2)),F.some(Ku)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var IT=1;function pn(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function OT(e){let{maxStarts:r,...t}=e;return t}async function Kc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=OT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ti({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:pn(u)}}let n=Math.min(r,IT),o=Math.max(0,r-n),s=await Ti({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=pn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ti({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=pn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function vy(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function TT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Po(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function NT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function by(e,r){let t=TT(r),n=Po(t?.recommendedMaxStarts),o=Po(t?.actionableReady),s=Po(t?.queuedTasks),i=Po(t?.boardAdvancedThisTick)??0,a=Po(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=NT("KYNVER_DAEMON_MAX_DISPATCH_STARTS");p!==null&&(u=Math.min(u,p));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import EN from"node:path";B();Nn();fe();O();import DT from"node:path";var MT=new Set(["running","dispatching","pending","queued","needs_attention"]),bt=new Set(["completed","failed","cancelled","done"]);function St(e){let r=ir(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(DT.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=J(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Mp(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Ao(){let e=[];for(let r of Xe()){if(!MT.has(r.status))continue;let t=St(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Nn();fe();O();lt();Bn();import{existsSync as nt,lstatSync as iN,readdirSync as aN,readlinkSync as lN,renameSync as Xc,unlinkSync as cN}from"node:fs";import pr from"node:path";Ze();O();import or from"node:path";var WT=`${or.sep}runs${or.sep}runs${or.sep}`;function Ni(e){return e.includes(WT)}function Hc(e,r){return or.join(Ae(he(e)),x(r))}function rt(e,r,t){return or.join(Hc(e,r),"workers",x(t))}function Sy(e,r,t){let n=he(e);return or.join(n,"runs","runs",x(r),"workers",x(t))}function $c(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function wt(e){return{workerJsonPath:or.join(e,"worker.json"),stdoutPath:or.join(e,"stdout.jsonl"),stderrPath:or.join(e,"stderr.log"),heartbeatPath:or.join(e,"heartbeat.jsonl"),lastStatusPath:or.join(e,"last-status.json")}}function wy(e){let r=wt(rt(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Ni(e.statusPath)?e.statusPath:r}import{existsSync as tt,mkdirSync as QT,readdirSync as Ay,renameSync as ZT,statSync as Gc}from"node:fs";import se from"node:path";H();En();jr();import LT from"node:path";function BT(e){return LT.resolve(Me(e.trim()))}function jc(e,r,t){let n=e?.trim();return n?{repo:BT(n),source:r,persistedInConfig:t}:null}function UT(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function xy(e={}){let r=e.env??process.env,t=e.config??U(),n=jc(t.defaultRepo,"config",!0);if(n)return n;let o=jc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=jc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||UT(Go({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();lt();Ze();B();O();H();import{existsSync as FT,readFileSync as KT,readdirSync as HT,statSync as $T,writeFileSync as jT}from"node:fs";import VT from"node:path";var Ne="<redacted>",Vc=`[^\\s"'\\\\,}\\]]`,GT=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Vc}+`,"gi"),Ne],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Vc}+`,"gi"),Ne],[/\bkynver_u_[A-Za-z0-9_-]+/g,Ne],[/\bkyn_[A-Za-z0-9]{12,}/g,Ne],[/\bsk-ant-[A-Za-z0-9_-]+/g,Ne],[/\bsk-[A-Za-z0-9_-]{8,}/g,Ne],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,Ne],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,Ne],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,Ne],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${Ne}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Vc}+`,"g"),`$1${Ne}`]],YT=12,qT=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,JT=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,zT=256*1024*1024;function XT(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=YT))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(Ne));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(Ne))}for(let[o,s]of GT)t=t.replace(o,s);return t}function _y(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&qT.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Ey(e,r=0){if(r>3||!FT(e))return[];let t=[];for(let n of HT(e,{withFileTypes:!0})){let o=VT.join(e,n.name);n.isDirectory()?t.push(...Ey(o,r+1)):n.isFile()&&JT.test(n.name)&&t.push(o)}return t}function Cy(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Ey(e)}catch{return t}for(let o of n)try{if($T(o).size>zT){t.failed.push(o);continue}let s=KT(o,"utf8"),i=XT(s,r);if(i===s){t.clean+=1;continue}jT(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Io=900*1e3,eN=3600*1e3;function Iy(e,r){let t=se.resolve(e),n=se.resolve(Ae(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function Yc(e){if(!tt(e))return[];try{return Ay(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function qc(e){let r=se.join(e,"workers");if(!tt(r))return[];try{return Ay(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Oy(e){return se.join(e,"archived-workers")}function rN(e,r){let t=se.join(Oy(e),x(r));return tt(t)?`${t}-${Date.now()}`:t}function Py(e,r,t){if(!tt(e))return!1;try{let n=r-Gc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ty(e,r=Date.now(),t=Io){if(!tt(e))return!1;let n=wt(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Py(n.stdoutPath,r,t)||Py(n.heartbeatPath,r,t))}function tN(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-Gc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function nN(e,r,t,n){if(Ty(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=tN(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function mn(e,r=Date.now(),t=Io){for(let n of qc(e))if(Ty(se.join(e,"workers",n),r,t))return!0;return!1}function oN(){let r=xy()?.repo??"",t="unknown";if(r)try{let n=Z(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function sN(e,r){let t=se.join(Ae(e),x(r));if(!tt(t))return null;let n=qc(t);if(n.length===0)return null;let o;try{o=Gc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=rt(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=mn(t);return{id:r,name:r,...oN(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Jc(e){let r=he(e??Be()),t=Ae(r),n=[];for(let o of Yc(t)){let s=se.join(t,o,"run.json");if(tt(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=sN(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:mn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function zc(e,r={}){let t=he(e??Be()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??eN,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>_y(process.env,[Cr,()=>Gt()])))();Jc(t);for(let c of Yc(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=I(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...qc(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=I(b,void 0);if(!g){let E=se.join(Oy(u),x(y));if(tt(E)&&(p.workers[x(y)]||p.workers[y])){delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:E});continue}i.push({runId:p.id,worker:y,action:"skipped",reason:"worker.json missing"});continue}let h=nN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=rN(u,y);QT(se.dirname(w),{recursive:!0}),ZT(k,w),Cy(w,l()),delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:h.reason,archivePath:w})}f&&Ie(p)}return{workers:i}}function Ny(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Yc(n)){let s=se.join(n,o);mn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function uN(e,r){let t=Hc(e,r),n;try{n=iN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=pr.resolve(pr.dirname(t),lN(t));if(mn(o)||mn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Xc(o,s),cN(t),Xc(s,t),o}function dN(e){let r=[];for(let t of $c()){let n=pr.join(e.fromDir,t),o=pr.join(e.toDir,t);!nt(n)||nt(o)||(Xc(n,o),r.push(t))}return r}function Dy(e,r){let t=wt(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function pN(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function mN(e){let r=wt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=nt(r.stdoutPath),o=nt(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?ut(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=Sr(a),c=pN({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:pr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Dy(u,e.canonicalDir),u}function fN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=rt(r,e.id,o),a=pr.join(i,"worker.json");(Ni(s.workerDir)||Ni(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ie(e)),t}function gN(e){let r=[],t=rt(e.harnessRoot,e.run.id,e.workerName),n=Sy(e.harnessRoot,e.run.id,e.workerName),o=wt(t),s=dN({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=wy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&nt(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=mN({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return L(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=nt(t),u=$c().some(d=>nt(pr.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:pr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return L(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return Dy(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",L(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function hN(e,r){let t=pr.join(N(e.id),"workers");if(!nt(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of aN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function My(){let{harnessRoot:e}=le(),r=Jc(e),t=[];for(let n of Xe()){let o=uN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),fN(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of hN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:rt(e,n.id,i),statusPath:pr.join(rt(e,n.id,i),"worker.json")}},Ie(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...gN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}lt();as();fe();B();Nn();O();import{execFileSync as Wy}from"node:child_process";import Ly from"node:path";function Qc(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function kN(e){let r=Qc(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function yN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function RN(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function vN(e){let r=null;if(typeof e=="string"?r=Kt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Qc(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function bN(e){try{let n=Wy("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Wy("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:Qc(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function SN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??Sr(r)}function wN(e){let r=new Map,t=N(e.id);for(let n of ir(e)){let o=I(Ly.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of vN(SN(o))){let i=kN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function xN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,yN(r)].filter(Boolean).join(`
|
|
169
|
-
`);return
|
|
170
|
-
`,{mode:384}),
|
|
171
|
-
`);a.trim()&&(
|
|
168
|
+
`)}})}write(r,t){if(!r.destroyed)try{r.write(Cl(t))}catch{}}async handleLine(r,t){let n=Pl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!tn(o.name)){this.refuse("unknown_tool",o.name),this.write(r,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(r,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Gs({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(r,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(r,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}};var Dk={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function Oc(){return Dk}var UO=7200*1e3;async function Mk(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=x(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||Ir,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Xs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=wg(o.provider),i=o.model;if(s.preflightModel){let T=s.preflightModel(r.model);if(!T.ok)throw new Error(`model preflight failed for provider "${s.name}": ${T.note??"invalid model/provider combination"}`);T.normalized&&console.error(`[supervisor] ${n}: ${T.note}`),i=T.model}let{worktreesDir:a}=le(),l=dn.join(N(e.id),"workers",n);BO(l,{recursive:!0});let c=dn.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(LO(c))throw new Error(`worktree path already exists: ${c}`);if(Z(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)Pk(e.repo,c,u);else{let T=kg({baseCommit:e.baseCommit,base:e.base,verifyRef:te=>Z(e.repo,["rev-parse","--verify","--quiet",`${te}^{commit}`],{allowFailure:!0}).trim().length>0});T.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${T.ref} (${T.source})`),e.baseCommit=Z(e.repo,["rev-parse",T.ref],{allowFailure:!0}).trim()||T.ref,Ie(e)),Z(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=dn.join(l,"stdout.jsonl"),m=dn.join(l,"stderr.log"),f=dn.join(l,"heartbeat.jsonl"),y=bg({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:f,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:r.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,b=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let g=ii({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,w,E,S,_=r.workerMcpToken?.trim();if(_&&Al(s.name)&&no()){let T=el();T&&r.agentOsId&&r.taskId?(w={apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let K=xf(s.name);if(_&&K&&no()){let T=el();if(T&&r.agentOsId&&r.taskId){let te=Ac({agentOsId:String(r.agentOsId),workerKey:l}),F=await Eo.start({address:te,apiBaseUrl:T,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:_,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+UO,workerPid:process.pid,identity:Oc(),onRefusal:D=>console.error(`[supervisor] ${n}: worker tools refused a call (${D})`)});if(Zl(l,F),s.name==="codex"){let D=Zg({workerDir:l,brokerSocketPath:te.socketPath});if(D.ok){let M=eh(D.codexHome,Tl());M.ok?(E=D.codexHome,h=E):(ho(l),await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`)}else if(s.name==="cursor"){let D=Xg({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"&&Js(qs())==="antigravity"){let D=ih({worktreePath:c,brokerSocketPath:te.socketPath});D.ok?h=D.configPath:(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else if(s.name==="gemini"){let D=lh({workerDir:l,brokerSocketPath:te.socketPath});D.ok?(S=D.geminiCliHome,h=S):(await Jr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${D.detail}`))}else h=Ef({workerDir:l,brokerSocketPath:te.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${F.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $=r.taskId?dp(pp(e.id,String(r.taskId),n)):null,C;try{C=mp($,()=>s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,modelPinned:Qf(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:y,reviewWorker:g,executionMode:r.executionMode??"write",...w?{workerToolGrant:w}:{},...E?{codexHome:E}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:wf(r.workerMcpCapabilities)}:{}}))}catch(T){throw h&&(Hs(l),ci(c),ho(l),pi(l),di(c),nn(l)),Z(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Z(e.repo,["branch","-D",d],{allowFailure:!0}),T}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let re=tg(C.model,i,s.defaultModel),ke=U(),Ye=vr(process.env,ke),gr=He().runnerId,Hr=ys({boxKind:Ye.boxKind,config:ke,env:process.env}),j={name:n,runId:e.id,status:"running",pid:C.pid,model:re,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:r.runtimeEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},executionMode:r.executionMode??"write",boxKind:Ye.boxKind,boxId:Hr,runtimeId:gr,startedAt:new Date().toISOString(),...$?{oomRetryHeapMb:$}:{}};if(L(e.id,j),Ql(l,C.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:dn.join(l,"worker.json")}},e.status="running",Ie(e),j.agentOsId&&j.taskId){let T;try{T=Ck({runId:e.id,workerName:n,workerDir:l,agentOsId:j.agentOsId})}catch(te){let F=`completion sidecar failed to spawn: ${te.message}`;j.completionBlocker=F,L(e.id,j)}if(T)T.pid&&(j.completionSidecarPid=T.pid,L(e.id,j));else{let te=j.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";j.completionBlocker=te,j.completionSidecarSpawnFailedAt=new Date().toISOString(),L(e.id,j),gg(e.id,j,te)}}return j}H();Vn();function FO(e,r){let t=Yt(r)?.trim();return t||Qe("KYNVER_RUNNER_TOKEN",e)||Qe("OPENCLAW_RUNNER_TOKEN",e)||null}function KO(e){let r=Cr()?.trim();return r||Qe("KYNVER_API_KEY",e)||Qe("KYNVER_RUNTIME_SECRET",e)||Qe("KYNVER_CRON_SECRET",e)||Qe("OPENCLAW_CRON_SECRET",e)||null}async function Wk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.timeoutMs??8e3,s=new Date(n).toISOString(),i=r.fetcher??fetch,a=FO(t,e.agentOsId),l=KO(t),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,p=Date.now();try{let m=AbortSignal.timeout(o),f=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),y=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:y,probedAt:s,error:k?null:`MCP endpoint returned HTTP ${f.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let f=Date.now()-p,y=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${y}`}}}On();function HO(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?An(t)??null:null}function $O(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function jO(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function Lk(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=HO(t,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(t.KYNVER_AGENT_OS_ID??t.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=$O(t,o),l=jO(t,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}O();H();import{mkdirSync as Uk}from"node:fs";import{homedir as VO,tmpdir as u2}from"node:os";import Ii from"node:path";function Fk(){let e=process.env.KYNVER_STATE_ROOT;return e?Ii.resolve(e):Ii.join(VO(),".kynver","state")}function Oi(){return Ii.join(Fk(),"plan-outbox")}function GO(){return Ii.join(Fk(),"plan-outbox-archive")}function Kk(){let e=Oi(),r=GO();return Uk(e,{recursive:!0}),Uk(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var g2=600*1e3,Co={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function Hk(){return{"planOutbox.storeFailures":Co.storeFailures,"planOutbox.corruptItemsSeen":Co.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Co.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Co.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Co.halfArchivesCompleted}}import{existsSync as JO,readFileSync as zO,renameSync as R2,readdirSync as v2,rmSync as b2,writeFileSync as S2,unlinkSync as w2}from"node:fs";import $k from"node:path";function jk(e){if(!JO(e))return null;try{return JSON.parse(zO(e,"utf8"))}catch{return null}}function Ti(e){let{outboxDir:r}=Kk();return{jsonPath:$k.join(r,`${e.id}.json`),bodyPath:$k.join(r,e.bodyPath)}}import tT from"node:path";function Dc(e){let r=tT.join(Oi(),`${e}.json`);return jk(r)}function Mc(e){let r=Ti(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
169
|
+
`)}function Wc(e){let r=e.metadata&&typeof e.metadata=="object"?e.metadata:null,t=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(r&&typeof r.planPersistenceOutboxId=="string"?r.planPersistenceOutboxId:void 0);return t?{outboxId:t,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:r&&typeof r.planPersistenceOutboxPath=="string"?r.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:r&&typeof r.planPersistenceBodyPath=="string"?r.planPersistenceBodyPath:void 0}:null}B();function Lc(e){return e?.trim()?e.trim():null}function Vk(e,r){let t=Lc(e.boxKind),n=Lc(e.runnerId),o=Lc(e.harnessRoot);return t&&t!==r.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${t}" but this host is "${r.boxKind}" \u2014 use a run under ${r.harnessRoot}`}:n&&n!==r.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${r.runnerId}"`}:o&&o!==r.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${r.harnessRoot}"`}:!t||!n||!o?(e.boxKind=r.boxKind,e.runnerId=r.runnerId,e.harnessRoot=r.harnessRoot,Ie(e),{ok:!0,stamped:!0}):{ok:!0}}H();Gn();function Gk(e=process.env){return Gt(U(),e,{requireExplicitBoxKind:!0})}function Yk(e){return[...e.errors,...e.warnings].join("; ")}async function Po(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await X(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,transportError:!1,releaseResponse:t.response??t}}function pn(e){if(!e||typeof e!="object")return!1;let r=e;return[r.agentOsId,r.subjectTaskId,r.reviewTaskId,r.signature].every(t=>typeof t=="string"&&!!t)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(r.prUrl)&&/^[a-f0-9]{40}$/.test(r.headSha)&&/^[a-f0-9]{64}$/.test(r.reviewGenerationSha256)&&Number.isSafeInteger(r.reviewAttempt)&&r.reviewAttempt>0&&typeof r.acceptedAt=="string"&&Number.isFinite(Date.parse(r.acceptedAt))}function qk(e,r){return e.signature===r.signature&&e.agentOsId===r.agentOsId&&e.subjectTaskId===r.subjectTaskId&&e.prUrl===r.prUrl&&e.reviewTaskId===r.reviewTaskId&&e.reviewAttempt===r.reviewAttempt&&e.reviewGenerationSha256===r.reviewGenerationSha256&&e.headSha===r.headSha&&e.acceptedAt===r.acceptedAt}import{spawnSync as ly}from"node:child_process";var Jk=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function rt(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function zk(e){let r=typeof e.completedAt=="string"&&e.completedAt||typeof e.startedAt=="string"&&e.startedAt;if(!r)return 0;let t=Date.parse(r);return Number.isFinite(t)?t:0}function Xk(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=rt(o),i=t.get(s);(!i||zk(o)>=zk(i))&&t.set(s,o)}return[...t.values()]}function nT(e){let r=typeof e.detailsUrl=="string"&&e.detailsUrl||typeof e.details_url=="string"&&e.details_url||typeof e.html_url=="string"&&e.html_url||"",t=typeof e.workflowName=="string"?e.workflowName.trim():"",n=e.app&&typeof e.app=="object"?e.app:null,o=typeof n?.slug=="string"?n.slug:"";return t.length>0||o==="github-actions"||/^https:\/\/github\.com\/[^/]+\/[^/]+\/actions\//i.test(r)}function Qk(e){let r=Xk(e),t=[],n=[],o=[];for(let s of r){if(nT(s)){o.push(rt(s));continue}let i=typeof s.conclusion=="string"?s.conclusion.toUpperCase():"",a=typeof s.status=="string"?s.status.toUpperCase():"",l=typeof s.state=="string"?s.state.toUpperCase():"";if(!(i&&Jk.has(i))){if(i){n.push(`${rt(s)}=${i}`);continue}if(!(l&&Jk.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${rt(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${rt(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${rt(s)}=${a}`);continue}t.push(`${rt(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function Zk(e){return Xk(e).some(t=>{let n=rt(t),o=typeof t.conclusion=="string"?t.conclusion.toUpperCase():"",s=typeof t.state=="string"?t.state.toUpperCase():"";return/^vercel/i.test(n)&&(o==="SUCCESS"||s==="SUCCESS")})}var oT=new Set(["CLEAN","HAS_HOOKS"]);function ey(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!oT.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as sT}from"node:child_process";function ry(){if(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim())return{source:"env",configured:!0,reason:"GitHub token already configured in environment"};let e=sT("gh",["auth","token"],{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(e.status!==0)return{source:"missing",configured:!1,reason:typeof e.stderr=="string"&&e.stderr.trim()?e.stderr.trim():"gh auth token failed; run `gh auth login` on this machine"};let r=typeof e.stdout=="string"?e.stdout.trim():"";return r?(process.env.GH_TOKEN=r,{source:"gh-cli",configured:!0,reason:"Using local GitHub CLI auth for daemon land_pr merge"}):{source:"missing",configured:!1,reason:"gh auth token returned an empty token; run `gh auth login` on this machine"}}import{createHash as iT,randomUUID as aT}from"node:crypto";import{closeSync as ty,fsyncSync as ny,mkdirSync as lT,openSync as oy,realpathSync as cT,writeFileSync as uT}from"node:fs";import Bc from"node:path";function iy(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(r=>typeof r=="string"&&!!r.trim())}function sy(e,r,t,n){lT(e,{recursive:!0,mode:448});let o=cT(e),s=oy(Bc.join(o,`${r}.${t}.json`),"wx",384);try{uT(s,JSON.stringify({...n,phase:t},null,2)+`
|
|
170
|
+
`),ny(s)}finally{ty(s)}for(let i=o;;i=Bc.dirname(i)){let a=oy(i,"r");try{ny(a)}catch(l){if(!dT(l))throw l}finally{ty(a)}if(i===Bc.dirname(i))break}}function dT(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function ay(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:iT("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:aT(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return sy(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return sy(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function Fc(e){return e?.trim()?["--repo",e.trim()]:[]}function cy(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function uy(e,r,t){let n=e.gh(r,t);if(n.status!==0)throw new Error(n.stderr||n.stdout||`gh ${t.join(" ")} failed`);return JSON.parse(n.stdout||"{}")}var pT=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,mT=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,fT=/^docs[(:]/i,gT=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function hT(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=fT.test(r)||gT.test(t),o=pT.test(t),s=mT.test(t);return n||o||s||e.vercelCheckSuccess===!0}function kT(e){if(!hT({title:e.title,body:e.body,vercelCheckSuccess:Zk(e.statusCheckRollup)}))throw new Error(`PR #${e.number} lacks landing verification evidence \u2014 add ## Test plan / ## Verification with local commands, Vercel preview, or docs/no-code rationale`)}function yT(e){if(e.state!=="OPEN")throw new Error(`PR #${e.number} is ${e.state}, not OPEN`);if(e.isDraft)throw new Error(`PR #${e.number} is still a draft`);let r=Qk(e.statusCheckRollup);if(r.failed.length>0)throw new Error(`PR #${e.number} has failing checks: ${r.failed.join(", ")}`);if(r.pending.length>0)throw new Error(`PR #${e.number} has pending checks: ${r.pending.join(", ")}`);let t=ey(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function RT(e){yT(e),kT(e)}function vT(e){try{return RT(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function bT(e,r,t,n){if(!n?.trim())return;let o=encodeURI(`heads/${n}`);e.gh(r,["api","-X","DELETE",`repos/${t}/git/refs/${o}`])}function ST(e,r,t){if(t?.trim())return t.trim();let n=e.gh(r,["repo","view","--json","nameWithOwner"]);if(n.status!==0)throw new Error(n.stderr||"Could not resolve GitHub repo");let o=JSON.parse(n.stdout||"{}");if(!o.nameWithOwner)throw new Error("Could not resolve GitHub repo");return o.nameWithOwner}function wT(e,r){if(!r?.trim())return;let t=ly("git",["worktree","list","--porcelain"],{windowsHide:!0,cwd:e,encoding:"utf8"});if(t.status!==0)return;let n=String(t.stdout||"").split(/\r?\n/),o=null,s=null;for(let i of n){if(i.startsWith("worktree ")){o=i.slice(9).trim(),s=null;continue}i.startsWith("branch ")&&o&&(s=i.slice(7).trim(),s.endsWith(`/${r}`)&&ly("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function dy(e){let r=e.cwd??process.cwd(),t=e.exec??li,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!pn(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=ry();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=uy(t,r,["pr","view",n,...Fc(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","headRefOid","mergedAt","mergeCommit"].join(",")]);if(a.state==="MERGED")return{prUrl:a.url||n,outcome:"skipped",mergeCommit:a.mergeCommit?.oid??null,provenance:{attribution:"preexisting_merge",mergeInvoked:!1,headSha:a.headRefOid??null,mergedAt:a.mergedAt??null,mergeCommit:a.mergeCommit?.oid??null},reason:`PR #${a.number} is already merged \u2014 land_pr no-op (redelivery)`};if(a.headRefOid?.toLowerCase()!==o.headSha)return s();let l=vT(a);if(l)return e.skipNotReady?{prUrl:a.url||n,outcome:"skipped",reason:l}:{prUrl:a.url||n,outcome:"blocked",reason:l};if(e.dryRun)return{prUrl:a.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};if(!a.headRefOid||!/^[a-f0-9]{40}$/i.test(a.headRefOid)||!iy(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!pn(u)||!qk(o,u))return s();let d=ay(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...Fc(e.repo),"--squash","--match-head-commit",o.headSha])}catch{let k=d.finish({attribution:"unconfirmed",mergeInvoked:!0,headSha:a.headRefOid,mergedAt:null,mergeCommit:null,mergeExitCode:null});return{prUrl:n,outcome:"blocked",reason:"merge invocation threw; outcome unconfirmed",provenance:k}}let m=(k,b)=>d.finish({attribution:b,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:k?.mergedAt??null,mergeCommit:k?.mergeCommit?.oid??null,mergeExitCode:p.status});if(p.status!==0){let k=Uc(t,r,c,e.repo);return k?{prUrl:k.url||a.url||n,outcome:"skipped",mergeCommit:k.mergeCommit?.oid??null,provenance:m(k,"external_merge_observed"),reason:`PR #${a.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:a.url||n,outcome:"blocked",reason:p.stderr||p.stdout||"gh pr merge failed",provenance:m(null,"unconfirmed")}}let f=Uc(t,r,c,e.repo);if(f||(f=Uc(t,r,c,e.repo)),!f)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:m(null,"unconfirmed")};let y=m(f,"invoked_merge_observed");try{let k=ST(t,r,e.repo);bT(t,r,k,a.headRefName),wT(r,a.headRefName)}catch{}return{prUrl:f?.url||a.url||n,outcome:"merged",provenance:y,mergeCommit:f?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function Uc(e,r,t,n){try{let o=uy(e,r,["pr","view",t,...Fc(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function py(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return dy({prUrl:n,cwd:e.cwd,repo:cy(n),exec:e.exec,operation:e.operation,acceptedReview:pn(t)?t:void 0,revalidateAcceptedReview:async()=>{let o=await X(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(r.id))}/landing-review`,e.secret,{leaseToken:r.leaseToken,leaseOwner:r.leaseOwner,attempt:r.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&pn(s.acceptedReview)?s.acceptedReview:null}})}H();async function my(e){let r=await ee(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),t=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=e.report.provenance?.finishedAt??new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${t}`,taskId:t,leaseToken:e.task.leaseToken??null,startedAt:e.report.provenance?.startedAt??o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await X(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function fy(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "liveReadback": "<prod readback string from acceptance.liveReadbackQuery>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface.","When the subject carries an acceptance snapshot, include liveReadback \u2014 the server oracle rejects passed if the original symptom still appears."].join(`
|
|
171
|
+
`)}var xT="dispatch_start_readback_failed:";function bt(e){return`${xT} ${e.trim()}`}function _T(e){return e.branch?.trim()?e.worktreePath?.trim()?e.heartbeatPath?.trim()?e.startedAt?.trim()?null:"missing local worker startedAt":"missing local worker heartbeatPath":"missing local worker worktreePath":"missing local worker branch"}function ET(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:bt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:bt(`AgentOS task status=${r.status} (expected running)`),detail:{taskId:r.taskId,status:r.status,leaseOwner:r.leaseOwner,blocker:r.blocker},snapshot:r};let s=r.leaseOwner?.trim()??"";if(!s||s!==t.trim())return{ok:!1,error:bt(`leaseOwner mismatch (board=${s||"null"}, expected=${t})`),detail:{taskId:r.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:t},snapshot:r};let i=r.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:bt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=_T(o);return a?{ok:!1,error:bt(a),detail:{taskId:o.taskId,worker:o.name},snapshot:r}:r.heartbeatAt?.trim()?o.executorRef?.trim()&&r.executorRef?.trim()&&o.executorRef.trim()!==r.executorRef.trim()?{ok:!1,error:bt(`executorRef mismatch (board=${r.executorRef}, worker=${o.executorRef})`),detail:{taskId:r.taskId,boardExecutorRef:r.executorRef,workerExecutorRef:o.executorRef},snapshot:r}:{ok:!0,snapshot:r}:{ok:!1,error:bt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function gy(e){let r=await Zs({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return ET({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function hy(e,r,t){r.pid&&Y(r.pid)&&(De(r.pid,"SIGTERM"),Y(r.pid)&&De(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return L(e,n),n}B();function ky(e){let r=typeof e.personaSlug=="string"?e.personaSlug.trim().toLowerCase():"";if(r==="dalton"||r==="lorentz")return!0;let t=typeof e.executorRef=="string"?e.executorRef.trim().toLowerCase():"";if(t.startsWith("expert-lane-pr-review:")||t.startsWith("scheduledjob:")&&e.parentTaskId)return!0;let n=typeof e.title=="string"?e.title.toLowerCase():"";return n.includes("expert pr review")||n.startsWith("[dalton] review")||n.startsWith("[lorentz] review")}async function yy(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,t=await X(r,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!t.ok)return null;let n=t.response;return n&&typeof n=="object"?n:null}var Kl=3600*1e3;function Ry(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function vy(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function CT(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,p=t.contextEnvelopeReady===!0,m=typeof t.runtimeEnvelopeMarkdown=="string"?t.runtimeEnvelopeMarkdown:null,f=AT(t.runtimeEnvelopeReceipt),y=t.runtimeEnvelopeReady===!0,k=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,b=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof k?.promptMarkdown=="string"?k.promptMarkdown:null,g=t.workerMcpToolGrant&&typeof t.workerMcpToolGrant=="object"?t.workerMcpToolGrant:null,h=g&&typeof g.token=="string"&&g.token.trim()?g.token.trim():null,w=h&&Array.isArray(g?.capabilities)?g.capabilities.filter(S=>typeof S=="string"&&S.trim().length>0):null,E=h&&typeof g?.exp=="number"&&Number.isFinite(g.exp)?g.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:k,memoryQualityPromptMarkdown:b,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:p,runtimeEnvelopeMarkdown:m,runtimeEnvelopeEvidence:f,runtimeEnvelopeReady:y,workerMcpToken:h,workerMcpCapabilities:w,workerMcpExpiresAt:E}}function PT(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function AT(e){if(!e||typeof e!="object")return null;let r=e;return typeof r.envelopeId!="string"||!r.envelopeId.trim()?null:{envelopeId:r.envelopeId,envelopeSchemaVersion:typeof r.envelopeSchemaVersion=="string"?r.envelopeSchemaVersion:void 0,generatedAt:typeof r.generatedAt=="string"?r.generatedAt:void 0,injectedAt:typeof r.injectedAt=="string"?r.injectedAt:void 0,mode:typeof r.mode=="string"?r.mode:void 0,memoryIncludedCount:typeof r.memoryIncludedCount=="number"?r.memoryIncludedCount:void 0,memoryOmittedCount:typeof r.memoryOmittedCount=="number"?r.memoryOmittedCount:void 0,degraded:typeof r.degraded=="boolean"?r.degraded:void 0,degradedReason:typeof r.degradedReason=="string"?r.degradedReason:r.degradedReason===null?null:void 0,auditFingerprint:typeof r.auditFingerprint=="string"?r.auditFingerprint:void 0,promptMarkdownChars:typeof r.promptMarkdownChars=="number"?r.promptMarkdownChars:void 0}}function IT(e,r){let t=[`[AgentOS task ${e.id}] ${e.title}`,"",e.description?String(e.description):"(no description on the board task)","",`Board linkage: agentOsId=${r}, taskId=${e.id}, attempt=${e.attempt}, executor=${e.executor}${e.executorRef?`, executorRef=${e.executorRef}`:""}.`,"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish."];e.executor==="verify_live"&&t.push("",fy());let n=Wc(e);if(n?.outboxId){let o=Dc(n.outboxId);o?t.push("",Mc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
172
|
+
`)}function OT(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Ni(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ye=function(){return F.filter(v=>v.started).length},Re=function(v,R){Xn({runId:l.id,agentOsId:u,phase:v,startedCount:ye(),outcomeCount:F.length,cappedStarts:C,...R})},hr=function(){return F.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},Lu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ye,n=Re,o=hr,s=Lu;let i=Gk();if(!i.ok||!i.identity){let v=Yk(i);if(r)return{ok:!1,error:v,boundary:i};console.error(`run dispatch failed: ${v}`),process.exit(1)}let a=i.identity;for(let v of i.warnings)console.error(`[dispatch] runner-boundary warning: ${v}`);let l=q(String(yr(String(e.run||""),"--run"))),c=Vk(l,a);if(!c.ok){let v=c.reason??"run does not belong to this runner boundary";if(r)return{ok:!1,error:v,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${v}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(yr(String(e.agentOsId||""),"--agent-os-id")),d=Q(e.baseUrl?String(e.baseUrl):void 0),p=await ee(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,y=He({runId:l.id}),k=co(l.id,y.runnerId),b=Mm(),g=b?Lm(l.repo):null,h=new WeakMap;if(b&&m&&!g){let v="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(r)return{ok:!1,error:v,runId:l.id};console.error(`run dispatch failed: ${v}`),process.exit(1)}let w=e.diskPath?Vr({diskPath:String(e.diskPath)}):Vr({diskPath:l.repo}),E=await Gm({runId:l.id,agentOsId:u,args:e}),S=OT(e),_=S.size>0,K=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,$=_?Math.min(K,S.size):K;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let v=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await X(v,p,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(R){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${R.message}`)}}let C=f?$:Math.min($,E.slotsAvailable);if(!f&&C<=0){let v={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:E.reason??"no resource slots",resourceGate:E};if(r)return{ok:!0,...v};console.log(JSON.stringify(v,null,2));return}let re=Os(l.id),ke=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ye=(v,R)=>({agentOsId:u,...R?{claimAuthorization:R}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Kl,runnerDiskGate:w,runnerResourceGate:E,activeHarnessWorkers:re,runnerPresence:y,harnessBoardSnapshot:Cc(l.id),...e.lane?{lane:Vm(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(A=>A.trim()).filter(Boolean)}:{}}),gr=Um(),Hr=async v=>{let R=b&&g?Wm(g):void 0,A=await X(ke,p,Ye(v,R),{agentOsId:u,baseUrl:d,timeoutMs:gr})??{ok:!1,status:0,response:null},W=A.response;if(R&&Array.isArray(W?.result?.started))for(let G of W.result.started)G&&typeof G=="object"&&h.set(G,R.requestNonce);return{dispatch:A,result:W?.result}};f||Xn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:gr});let j=await Hr(_||f?C:1);if(!j.dispatch.ok||!j.result){let v=ll(j.dispatch.response),R={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:j.dispatch.status,response:j.dispatch.response,authRefreshed:j.dispatch.refreshedAuth===!0,authRefreshFailure:j.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&Xn({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:j.dispatch.status}),r)return{ok:!1,...R};console.log(JSON.stringify(R,null,2)),process.exit(1)}let T=j.result;if(f){let v=Ry(T),R=vy(T),A={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:T.started.map(W=>({taskId:W.task.id,title:W.task.title,reason:W.reason})),skipped:T.skipped.map(W=>({taskId:W.task.id,skipReason:W.skipReason,reason:W.reason})),diskGate:T.diskGate,resourceGate:T.resourceGate,inspected:T.inspected,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:R};if(r)return{ok:!0,...A};console.log(JSON.stringify(A,null,2));return}let te=ig(),F=[],D=[],M=Number(T.inspected)||0,ie=!1;async function V(v,R,A){let W=await Po({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&on({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let G={taskId:v.id,started:!1,error:R,released:W.released,releaseResponse:W.releaseResponse,...A};return F.push(G),Re("outcome",{lastOutcome:G}),!1}async function xb(v){let R=v.task,A=String(R.id);if(_&&!S.has(A))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(R.prUrl?String(R.prUrl):""))return V(R,"land_pr task missing prUrl");try{let G=await py({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:A,runId:l.id,workerName:`land-pr-${A}`,leaseOwner:k,leaseToken:typeof R.leaseToken=="string"?R.leaseToken:"",receiptDir:`${N(l.id)}/land-pr-operations`}}),qe=await my({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:R,report:G});return qe.ok?(F.push({taskId:A,started:!0,landPr:!0,outcome:G.outcome,completionStatus:qe.status}),!0):V(R,`land_pr completion POST failed (HTTP ${qe.status})`,{landPr:!0,outcome:G.outcome})}catch(G){return V(R,G.message)}}async function _b(v){let R="duplicate_dispatch_prevented: live local worker already owns this task",A=await Po({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:R});v.leaseToken&&on({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},ac(R));let W={taskId:v.id,started:!1,error:R,alreadyRunning:!0,nonFatal:!0,released:A.released,releaseResponse:A.releaseResponse};return F.push(W),Re("outcome",{lastOutcome:W}),!1}async function Eb(v){let R=v.task,A=CT(v),W=String(R.id);if(_&&!S.has(W))return V(R,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let G=PT(R.personaSlug);if(G&&(!A?.personaInjectionReady||!A.personaMarkdown))return V(R,`persona_injection_required: missing anchored context-envelope persona block for "${G}"`);if(G&&!A?.runtimeEnvelopeReady)return V(R,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${G}"`);if(dg(l.id,W))return _b(R);let qe=Number(R.attempt)||1;if(qe>te.maxTaskAttempts)return V(R,`task attempt ${qe} exceeds KYNVER_MAX_TASK_ATTEMPTS (${te.maxTaskAttempts})`);let st=R.leaseToken?String(R.leaseToken).trim():"";if(!st)return V(R,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let it=x(`t-${R.id}-a${R.attempt}`),kr=Xs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Ym(R)});Ih({taskId:W,leaseToken:st,runId:l.id,workerName:it,provider:kr.provider??null});let Qi=og({task:R,routing:kr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Qi.ok)return V(R,Qi.error??"model_routing_mismatch",{modelRoutingGuard:Qi});if(ky(R)){let Ce=await yy({agentOsId:u,taskId:W,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return V(R,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==W)return V(R,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let Lo=ok(kr.provider);if(!Lo.ok)return V(R,`provider_quota_exhausted: ${Lo.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Lo.provider,retryAt:Lo.retryAtIso}});try{let Ce=R.planId?String(R.planId):void 0,Bo=Rg({title:R.title?String(R.title):void 0,description:R.description?String(R.description):null,executorRef:R.executorRef?String(R.executorRef):null,prUrl:R.prUrl?String(R.prUrl):null,branch:R.branch?String(R.branch):null}),$u=$h({runId:l.id,workerName:it,maxSlots:E.maxConcurrentWorkers,diskActiveWorkers:Aa()});if(!$u.admitted)return V(R,`admission_refused: ${$u.reason}`,{nonFatal:!0});let Uo=A?.workerMcpToken??null;if(Uo&&no()){let Tt=Lk({jobId:`dispatch:${String(R.id)}`,agentOsId:u,taskId:String(R.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Tt.ok)console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: context hydration failed (${Tt.code}: ${Tt.detail}) \u2014 spawning without tools`),Uo=null;else{let Zi=await Wk(Tt.context);Zi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(R.id)}: tool endpoint probe failed (${Zi.error??`HTTP ${Zi.httpStatus}`}) \u2014 spawning without tools`),Uo=null)}}fg(l.id,String(R.id),{except:it});let sr=await Mk(l,{name:it,task:IT(R,u),ownedPaths:e.owned?String(e.owned).split(",").map(Tt=>Tt.trim()).filter(Boolean):[],model:kr.model,provider:kr.provider,routingRule:kr.rule,requestedModel:kr.requestedModel,agentOsId:u,taskId:String(R.id),planId:Ce,branch:Bo?.targetPrBranch??void 0,executorRef:R.executorRef?String(R.executorRef):void 0,parentTaskId:R.parentTaskId?String(R.parentTaskId):void 0,taskTitle:R.title?String(R.title):void 0,taskPrUrl:Bo?.targetPrUrl??(R.prUrl?String(R.prUrl):void 0),repairTargetPrUrl:Bo?.targetPrUrl,repairTargetBranch:Bo?.targetPrBranch??void 0,instructionPolicyMarkdown:A?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyEvidence:A?.instructionPolicyEvidence??null,memoryQualityCapture:A?.memoryQualityCapture??null,memoryQualityPromptMarkdown:A?.memoryQualityPromptMarkdown??null,personaMarkdown:A?.personaMarkdown??null,personaSlug:A?.personaSlug??G,personaEvidence:A?.personaEvidence??null,contextEnvelopeMarkdown:A?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:A?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:A?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:A?.runtimeEnvelopeEvidence??null,workerMcpToken:Uo,workerMcpCapabilities:A?.workerMcpCapabilities??null,workerMcpExpiresAt:A?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:st,dispatched:!0,executionMode:Ts(R)}),Fo=await gy({agentOsId:u,taskId:String(R.id),leaseOwner:k,expectedLeaseToken:st,worker:sr,baseUrl:d,secret:p});if(!Fo.ok)return hy(l.id,sr,Fo.error??"dispatch_start_readback_failed"),et(l.id,it),V(R,Fo.error??"dispatch_start_readback_failed",{readback:Fo.detail??null});sr.leaseToken!==st&&(sr.leaseToken=st,sr.leaseOwner=k,L(l.id,sr)),bi({taskId:W,leaseToken:st}),Uh(l.id,it);let ju={taskId:R.id,started:!0,worker:sr.name,pid:sr.pid,branch:sr.branch,model:sr.model,provider:kr.provider,routingRule:kr.rule,instructionPolicyFingerprint:A?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(A?.instructionPolicyEvidence?.ruleSlugs)?A.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:A?.personaSlug??G,personaOperatingRuleCount:A?.personaEvidence?.operatingRuleCount??null};return F.push(ju),Re("worker_started",{lastOutcome:ju}),A?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${W}: instruction policy injected fingerprint=${A.instructionPolicyFingerprint}`),A?.personaSlug&&console.error(`[dispatch] task ${W}: persona context injected slug=${A.personaSlug}`),A?.contextEnvelopeReady&&console.error(`[dispatch] task ${W}: context envelope injected anchor=${A.contextEnvelopeEvidence?.anchorTaskId??W}`),A?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${W}: runtime envelope injected id=${A.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return et(l.id,it),V(R,Ce.message)}}let Xi=new Set;for(let v of Mh(l.id))Xi.add(v);async function Bu(v){let R=v.task,A=String(R.id);if(Xi.has(A))return V(R,"dispatch_retry_loop_prevented: task already failed to start this tick");let W=b?Bm({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,G=W&&!W.allow?await V(R,`desktop_execution_policy_denied:${W.code}: ${W.reason}`,{desktopPolicyDenied:W.code,...W.code==="operation_not_approved"?{nonFatal:!0}:{}}):Lu(v)?await xb(v):await Eb(v);return G||(Xi.add(A),Dh(A,l.id)),G}for(let v of T.started)await Bu(v);if(D.push(...T.skipped??[]),_)for(let v of D){let R=String(v.task.id);S.has(R)&&F.push({taskId:R,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!_&&F.length<C;){if(hr()){let A={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};F.push(A),Re("circuit_breaker",{lastOutcome:A});break}let v=await Hr(1);if(!v.dispatch.ok||!v.result){let A=Fm(v.dispatch.response),W=ye();ie=A&&W>0;let G=ll(v.dispatch.response),qe={started:!1,error:G?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...G?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};F.push(qe),Re("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:qe});break}M+=Number(v.result.inspected)||0,D.push(...v.result.skipped??[]);let R=v.result.started??[];if(R.length===0)break;for(let A of R){if(F.length>=C)break;await Bu(A)}}let Wo=F.filter(v=>v.started).length,$r=Ry(T),Ot=vy(T),Uu=Wo===0&&($r?.capacityIdle===!0||Number(T.resourceGate?.slotsAvailable)>0);if(Uu&&$r?.summary){let v=$r.skipReasonCounts?.retry_ceiling_exceeded??0,R=T.overAttemptIdleRecovery??$r.overAttemptIdleRecovery,A=R?.attempted===!0?`; over_attempt_recovery minted=${R.minted??0} started=${R.started??0}`:v>0?"; over_attempt_recovery not attempted":"",W=Ot?`; dispatch_skip_drain scanned=${Ot.scanned??0} advanced=${Ot.advanced??0}`:"",G=$r.progressionReport?.summary?`; ${$r.progressionReport.summary}`:"",qe=Ot?.prLifecycleAttempt?.summary?`; ${Ot.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${$r.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${A}${W}${G}${qe}`)}let Fu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:Wo,capacityIdle:Uu,admissionExhaustion:$r,dispatchSkipDrain:Ot,outcomes:F,skipped:D.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:M,pagesScanned:T.pagesScanned??null,candidatesExhausted:T.candidatesExhausted??null,diskGate:T.diskGate,resourceGate:T.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:gr},Ku=v=>!v.started&&v.nonFatal!==!0,Cb=F.some(Ku),Hu=ie&&Wo>0?!0:!Cb;if(Xn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:Wo,ok:Hu}),r)return{ok:Hu,...Fu};console.log(JSON.stringify(Fu,null,2)),F.some(Ku)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var TT=1;function mn(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function NT(e){let{maxStarts:r,...t}=e;return t}async function Kc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=NT(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ni({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:mn(u)}}let n=Math.min(r,TT),o=Math.max(0,r-n),s=await Ni({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=mn(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ni({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=mn(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function by(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function DT(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Ao(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function MT(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Sy(e,r){let t=DT(r),n=Ao(t?.recommendedMaxStarts),o=Ao(t?.actionableReady),s=Ao(t?.queuedTasks),i=Ao(t?.boardAdvancedThisTick)??0,a=Ao(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let f=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,f))}let p=MT("KYNVER_DAEMON_MAX_DISPATCH_STARTS");p!==null&&(u=Math.min(u,p));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import PN from"node:path";B();Dn();fe();O();import WT from"node:path";var LT=new Set(["running","dispatching","pending","queued","needs_attention"]),St=new Set(["completed","failed","cancelled","done"]);function wt(e){let r=ir(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(WT.join(N(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=J(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Mp(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Io(){let e=[];for(let r of Xe()){if(!LT.has(r.status))continue;let t=wt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ie(r),e.push({runId:r.id,from:n,to:t})}return e}B();Dn();fe();O();ct();Un();import{existsSync as ot,lstatSync as lN,readdirSync as cN,readlinkSync as uN,renameSync as Xc,unlinkSync as dN}from"node:fs";import pr from"node:path";Ze();O();import or from"node:path";var BT=`${or.sep}runs${or.sep}runs${or.sep}`;function Di(e){return e.includes(BT)}function Hc(e,r){return or.join(Ae(he(e)),x(r))}function tt(e,r,t){return or.join(Hc(e,r),"workers",x(t))}function wy(e,r,t){let n=he(e);return or.join(n,"runs","runs",x(r),"workers",x(t))}function $c(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function xt(e){return{workerJsonPath:or.join(e,"worker.json"),stdoutPath:or.join(e,"stdout.jsonl"),stderrPath:or.join(e,"stderr.log"),heartbeatPath:or.join(e,"heartbeat.jsonl"),lastStatusPath:or.join(e,"last-status.json")}}function xy(e){let r=xt(tt(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Di(e.statusPath)?e.statusPath:r}import{existsSync as nt,mkdirSync as eN,readdirSync as Iy,renameSync as rN,statSync as Gc}from"node:fs";import se from"node:path";H();Cn();jr();import UT from"node:path";function FT(e){return UT.resolve(Me(e.trim()))}function jc(e,r,t){let n=e?.trim();return n?{repo:FT(n),source:r,persistedInConfig:t}:null}function KT(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function _y(e={}){let r=e.env??process.env,t=e.config??U(),n=jc(t.defaultRepo,"config",!0);if(n)return n;let o=jc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=jc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||KT(Yo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();ct();Ze();B();O();H();import{existsSync as HT,readFileSync as $T,readdirSync as jT,statSync as VT,writeFileSync as GT}from"node:fs";import YT from"node:path";var Ne="<redacted>",Vc=`[^\\s"'\\\\,}\\]]`,qT=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Vc}+`,"gi"),Ne],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Vc}+`,"gi"),Ne],[/\bkynver_u_[A-Za-z0-9_-]+/g,Ne],[/\bkyn_[A-Za-z0-9]{12,}/g,Ne],[/\bsk-ant-[A-Za-z0-9_-]+/g,Ne],[/\bsk-[A-Za-z0-9_-]{8,}/g,Ne],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,Ne],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,Ne],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,Ne],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${Ne}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Vc}+`,"g"),`$1${Ne}`]],JT=12,zT=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,XT=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,QT=256*1024*1024;function ZT(e,r=[]){if(!e)return e;let t=e,n=[...new Set(r.map(o=>o?.trim()).filter(o=>!!o&&o.length>=JT))].sort((o,s)=>s.length-o.length);for(let o of n){t.includes(o)&&(t=t.split(o).join(Ne));let s=JSON.stringify(o).slice(1,-1);s!==o&&t.includes(s)&&(t=t.split(s).join(Ne))}for(let[o,s]of qT)t=t.replace(o,s);return t}function Ey(e=process.env,r=[]){let t=[];for(let[n,o]of Object.entries(e))o&&zT.test(n)&&t.push(o);for(let n of r)try{let o=n();o&&t.push(o)}catch{}return t}function Cy(e,r=0){if(r>3||!HT(e))return[];let t=[];for(let n of jT(e,{withFileTypes:!0})){let o=YT.join(e,n.name);n.isDirectory()?t.push(...Cy(o,r+1)):n.isFile()&&XT.test(n.name)&&t.push(o)}return t}function Py(e,r=[]){let t={masked:[],clean:0,failed:[]},n;try{n=Cy(e)}catch{return t}for(let o of n)try{if(VT(o).size>QT){t.failed.push(o);continue}let s=$T(o,"utf8"),i=ZT(s,r);if(i===s){t.clean+=1;continue}GT(o,i,"utf8"),t.masked.push(o)}catch{t.failed.push(o)}return t}var Oo=900*1e3,tN=3600*1e3;function Oy(e,r){let t=se.resolve(e),n=se.resolve(Ae(r)),o=se.relative(n,t);return o!==".."&&!o.startsWith("..")&&!se.isAbsolute(o)}function Yc(e){if(!nt(e))return[];try{return Iy(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function qc(e){let r=se.join(e,"workers");if(!nt(r))return[];try{return Iy(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Ty(e){return se.join(e,"archived-workers")}function nN(e,r){let t=se.join(Ty(e),x(r));return nt(t)?`${t}-${Date.now()}`:t}function Ay(e,r,t){if(!nt(e))return!1;try{let n=r-Gc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ny(e,r=Date.now(),t=Oo){if(!nt(e))return!1;let n=xt(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Ay(n.stdoutPath,r,t)||Ay(n.heartbeatPath,r,t))}function oN(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-Gc(se.join(e,"worker.json")).mtimeMs}catch{return 0}}function sN(e,r,t,n){if(Ny(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=oN(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function fn(e,r=Date.now(),t=Oo){for(let n of qc(e))if(Ny(se.join(e,"workers",n),r,t))return!0;return!1}function iN(){let r=_y()?.repo??"",t="unknown";if(r)try{let n=Z(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function aN(e,r){let t=se.join(Ae(e),x(r));if(!nt(t))return null;let n=qc(t);if(n.length===0)return null;let o;try{o=Gc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=tt(e,r,a);s[a]={workerDir:l,statusPath:se.join(l,"worker.json")}}let i=fn(t);return{id:r,name:r,...iN(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Jc(e){let r=he(e??Be()),t=Ae(r),n=[];for(let o of Yc(t)){let s=se.join(t,o,"run.json");if(nt(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=aN(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ie(i),n.push({runId:o,action:"repaired_run_json",reason:fn(se.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function zc(e,r={}){let t=he(e??Be()),n=Ae(t),o=r.now??Date.now(),s=r.archiveAgeMs??tN,i=[],a=null,l=()=>a??=(r.knownSecrets??(()=>Ey(process.env,[Cr,()=>Yt()])))();Jc(t);for(let c of Yc(n)){let u=se.join(n,c),d=se.join(u,"run.json"),p=I(d,void 0);if(!p?.id)continue;let m=new Set([...Object.keys(p.workers||{}),...qc(u)]),f=!1;for(let y of m){let k=se.join(u,"workers",x(y)),b=se.join(k,"worker.json"),g=I(b,void 0);if(!g){let E=se.join(Ty(u),x(y));if(nt(E)&&(p.workers[x(y)]||p.workers[y])){delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:E});continue}i.push({runId:p.id,worker:y,action:"skipped",reason:"worker.json missing"});continue}let h=sN(k,g,o,s);if(!h.eligible){i.push({runId:p.id,worker:y,action:"skipped",reason:h.reason});continue}let w=nN(u,y);eN(se.dirname(w),{recursive:!0}),rN(k,w),Py(w,l()),delete p.workers[x(y)],delete p.workers[y],f=!0,i.push({runId:p.id,worker:y,action:"archived",reason:h.reason,archivePath:w})}f&&Ie(p)}return{workers:i}}function Dy(e,r=Date.now()){let t=new Set,n=Ae(e);for(let o of Yc(n)){let s=se.join(n,o);fn(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function pN(e,r){let t=Hc(e,r),n;try{n=lN(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=pr.resolve(pr.dirname(t),uN(t));if(fn(o)||fn(t))return null;let s=`${t}.materialize-${Date.now()}`;return Xc(o,s),dN(t),Xc(s,t),o}function mN(e){let r=[];for(let t of $c()){let n=pr.join(e.fromDir,t),o=pr.join(e.toDir,t);!ot(n)||ot(o)||(Xc(n,o),r.push(t))}return r}function My(e,r){let t=xt(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function fN(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function gN(e){let r=xt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=ot(r.stdoutPath),o=ot(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?dt(r.stdoutPath):{finalResult:null},a=o?me(r.heartbeatPath):me(""),l=Sr(a),c=fN({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:pr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),My(u,e.canonicalDir),u}function hN(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=tt(r,e.id,o),a=pr.join(i,"worker.json");(Di(s.workerDir)||Di(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ie(e)),t}function kN(e){let r=[],t=tt(e.harnessRoot,e.run.id,e.workerName),n=wy(e.harnessRoot,e.run.id,e.workerName),o=xt(t),s=mN({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=xy({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&ot(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=gN({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return L(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=ot(t),u=$c().some(d=>ot(pr.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:pr.join(le().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return L(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return My(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",L(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function yN(e,r){let t=pr.join(N(e.id),"workers");if(!ot(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of cN(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function Wy(){let{harnessRoot:e}=le(),r=Jc(e),t=[];for(let n of Xe()){let o=pN(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),hN(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of yN(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:tt(e,n.id,i),statusPath:pr.join(tt(e,n.id,i),"worker.json")}},Ie(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...kN({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}ct();ls();fe();B();Dn();O();import{execFileSync as Ly}from"node:child_process";import By from"node:path";function Qc(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function RN(e){let r=Qc(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function vN(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function bN(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function SN(e){let r=null;if(typeof e=="string"?r=Ht(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=Qc(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function wN(e){try{let n=Ly("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Ly("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:Qc(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function xN(e){let r=me(e.heartbeatPath);return e.completionSnapshot?.finalResult??Sr(r)}function _N(e){let r=new Map,t=N(e.id);for(let n of ir(e)){let o=I(By.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of SN(xN(o))){let i=RN(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function EN(e,r){let t=me(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,vN(r)].filter(Boolean).join(`
|
|
173
|
+
`);return bN(n)}function CN(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Zc(e={}){let r=e.lookupPr??wN,t=[],n=new Map;for(let o of Xe()){let s=_N(o),i=N(o.id);for(let a of ir(o)){let l=By.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!CN(c))continue;let u=J(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of EN(c,u.finalResult)){if(d=s.get(m)??null,!d){let f=o.repo||c.worktreePath,y=`${f}#${m}`,k=n.has(y)?n.get(y)??null:r({repoDir:f,prNumber:m});n.has(y)||n.set(y,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let p=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=p,c.reconcileReason="local-only needs_attention superseded by merged PR",L(o.id,c),t.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:t}}var AN=900*1e3;function IN(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Uy(e,r){let t=gi({worker:e,status:r}),n=t?hi(e,t):!1,o=r.attention.state==="blocked"?"blocked":r.attention.state==="done"||r.status==="done"||t?"done":"exited",s=t&&n?`captured exited-worker handoff (${t.source})`:t?"synced finished worker record after terminal stdout/heartbeat":r.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function ON(e,r){r.stopClass&&(e.stopClass=r.stopClass),r.stopReason&&(e.stopReason=r.stopReason),r.exit&&(e.exitCode=r.exit.exitCode,e.exitSignal=r.exit.signal,e.oomEvidence=r.exit.oomEvidence??null);let t=r.error?.trim();t&&(e.exitStderrTail=t.slice(-1e3))}function Fy(){let e=Wy();if(IN()){let s=Zc(),i=zc();return{workers:[],finalizedRuns:Io(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Xe())for(let i of ir(s)){let a=PN.join(N(s.id),"workers",x(i),"worker.json"),l=I(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=J(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Uy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",L(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=Uy(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,ON(l,c),L(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&Y(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,p=!Number.isFinite(u)||t-u>AN,m=Number.isFinite(d)&&t-d>Ca;if(p&&m){De(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,l.stopClass="stuck",l.stopReason=`stuck (no progress) \u2014 ${c.attention.reason}`,L(s.id,l),r.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}r.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=Zc(),o=zc();return{workers:r,finalizedRuns:Io(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Vt();B();import UN from"node:path";import{readdirSync as TN,readFileSync as NN}from"node:fs";var DN="dispatch:claim:",MN=900*1e3,WN=10080*60*1e3,LN=200,_t={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function BN(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=TN("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(NN(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function Ky(e){let r=Br(),t={mode:r,scanned:0,outcomes:[]};if(r!=="enforce")return t;let n=z();if(!n)return t;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??MN,i=e.findOrphanPid??BN,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-WN).toISOString(),limit:LN})}catch{return _t.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(DN.length),d=u.split(":")[0]??"",p=u.slice(d.length+1);if(!(!d||!p))try{let m=Date.parse(c.recordedAt);if(!Number.isFinite(m)||o-m<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let f=yo(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(E=>{if(f===null)return!0;let S=yo(E.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return S===null||S>=f}))continue;let b={};try{b=c.resultJson?JSON.parse(c.resultJson):{}}catch{b={}}let g=b.runId??null,h=b.workerName??null;if(g&&h&&e.hasLiveWorker({runId:g,workerName:h})){bi({taskId:d,leaseToken:p}),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"finalized_late"});continue}if(g&&h){let E=e.worktreePathFor({runId:g,workerName:h}),S=E?i(E):null;if(S!==null){_t.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_orphan",detail:`live pid ${S} references ${E}`});continue}}if(!g){a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let w=await e.releaseClaim({taskId:d,leaseToken:p,runId:g});w.released?(on({taskId:d,leaseToken:p},"restart_recovery"),h&&(vo(g,h),et(g,h)),_t.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"released"})):w.transportError?a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_transport",detail:w.detail}):(on({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:w.detail}))}catch{_t.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function Hy(){return{"dispatchReceipts.recoveredStrandedClaims":_t.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":_t.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":_t.recoveryStoreFailures}}var $y=!1;async function jy(e){if($y||Br()!=="enforce")return null;$y=!0;try{let r=He().runnerId,t=await Ky({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>UN.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Po({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:co(s,r),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return t.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${t.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),t}catch{return null}}H();We();Rs();import ZN from"node:os";Na();import{mkdirSync as jN,readFileSync as VN,renameSync as GN,writeFileSync as YN}from"node:fs";import{homedir as qN}from"node:os";import Mi from"node:path";import{existsSync as FN,readFileSync as KN}from"node:fs";import{dirname as eu,join as Gy}from"node:path";import{fileURLToPath as Vy}from"node:url";function HN(e){let r=eu(Vy(e));for(let t=0;t<6;t+=1){if(FN(Gy(r,"package.json")))return r;let n=eu(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${eu(Vy(e))}`)}function $N(e=import.meta.url){let r=Gy(HN(e),"package.json"),t=JSON.parse(KN(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Yy=$N();function qy(){return Mi.join(qN(),".kynver")}function JN(e=qy()){return Mi.join(e,"doctor-native-windows.json")}function Jy(e=qy()){return Mi.join(e,"native-windows-state.json")}function zN(e,r){jN(Mi.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;YN(t,`${JSON.stringify(r,null,2)}
|
|
174
|
+
`,{mode:384}),GN(t,e)}function tu(e){try{return JSON.parse(VN(e,"utf8"))}catch{return null}}function XN(e){let r=tu(JN(e));return!r||typeof r.checkedAt!="string"||typeof r.verdict!="string"?null:{checkedAt:r.checkedAt,runtimeVersion:typeof r.runtimeVersion=="string"?r.runtimeVersion:"unknown",verdict:r.verdict,failing:Array.isArray(r.failing)?r.failing.filter(t=>typeof t=="string"):[],warnings:Array.isArray(r.warnings)?r.warnings.filter(t=>typeof t=="string"):[],providers:r.providers&&typeof r.providers=="object"?Object.fromEntries(Object.entries(r.providers).filter(t=>typeof t[1]=="string")):{},orphanedProcesses:typeof r.orphanedProcesses=="number"?r.orphanedProcesses:0}}function zy(e=new Date,r){try{let t=Jy(r),n=tu(t)??{};zN(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function QN(e){let r=tu(Jy(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var ru=null,Xy=null;function Qy(e){ru=e.admission,Xy=e.ownerKind}function Zy(e={}){let r=e.platform??process.platform,t=e.hostKind??Ta(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:Yy,ownerKind:Xy,nativeWindows:n?{admission:ru?.basis??null,hostCapability:ru?.hostCapability??null,lastDoctor:XN(e.root),lastWorkerCompletedAt:QN(e.root)}:null}}function eR(e,r={}){let t=U(),n=(r.boxKind??br(t)).trim().toLowerCase()||"forge",o=r.hostLabel??ZN.hostname();return{boxId:ys({boxKind:n,hostLabel:o,explicitBoxId:r.boxId,config:t,env:process.env}),boxKind:n,displayName:r.displayName??null,hostLabel:o,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{},host:Zy()}}B();Ze();ss();fe();H();import eD from"node:path";B();fe();O();async function rR(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=q(String(yr(String(e.run||""),"--run"))),n=String(yr(String(e.agentOsId||""),"--agent-os-id")),o=Q(e.baseUrl?String(e.baseUrl):void 0),s=await ee(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=He({runId:t.id}).runnerId,a=await _k({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(eD.join(N(t.id),"workers",x(p),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let f=J(m);if(f.alive||f.finalResult||m.completionReportedAt)continue;try{let g=await _o({run:t.id,name:p,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(g.ok&&!g.skipped){l.push({worker:p,taskId:m.taskId,pid:m.pid,released:!1,deathReported:!0,stopClass:f.stopClass??null});continue}}catch{}let y=Qs({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,b;try{b=await X(k,s,{agentOsId:n,leaseOwner:y,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(g){b={ok:!1,error:g.message}}l.push({worker:p,taskId:m.taskId,pid:m.pid,released:b.ok===!0||b.response?.ok===!0,response:b.response??b})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await X(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(p){u={ok:!1,error:p.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}O();fe();B();O();import rD from"node:path";H();async function tR(e){let r=Q(e.baseUrl),t=await ee(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await X(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function nR(e,r){let t=q(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=I(rD.join(N(t.id),"workers",x(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=J(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await tR({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,L(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}us();H();We();Ze();import Ge from"node:path";as();import Li from"node:path";de();fe();var nu=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function oR(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of nu)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function $e(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!oR(n)})}function Et(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function To(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?$e(e.changedFiles).length>0:!!(Et(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function No(e){return e.status||(e.status=J(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function ou(e,r){if(e.status)return $e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):En(e.worktreePath);return $e(t).length>0}function tD(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function su(e,r){if(e.status)return e.status;let t=e.worker,n=typeof t.completionReportedAt=="string"&&t.completionReportedAt.trim().length>0,o=!!(t.status&&["done","exited","blocked","failed","abandoned"].includes(t.status))||n,s=tD(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):En(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:Go(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:c,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??Et(s)};return e.status=u,u}return No(e)}fe();fe();ct();O();function nD(e,r=Date.now(),t=Oo){let n=me(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function gn(e,r=Date.now(),t=Oo){return Y(e.pid)?!0:nD(e,r,t)}function oD(e,r){return r?r.runTerminalCache.derive(e.run):wt(e.run)}function Fr(e,r=Date.now()){return gn(e.worker,r)}function iu(e,r){return St.has(e.run.status)?!1:oD(e,r)!==null}function sR(e,r,t=Date.now()){if(Fr(e,t))return!0;if(St.has(e.run.status)||iu(e,r))return!1;let n=No(e);return we(n)?!1:!!Fr(e,t)}as();fe();function iR(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Fr(e))return!0;let n=r??No(e);return!!(!we(n)||To(n)||$e(n.changedFiles).length>0||Kt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Et(n.finalResult)}).blocked)}de();O();import{existsSync as lR,mkdirSync as sD,writeFileSync as aR}from"node:fs";import Wi from"node:path";function cR(e,r,t){return Wi.join(e,"salvage",x(r),x(t))}function uR(e){return lR(Wi.join(cR(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function dR(e){let r=cR(e.harnessRoot,e.indexed.runId,e.indexed.workerName);sD(r,{recursive:!0});let t=Wi.join(r,"salvage.patch"),n=!1;if(lR(e.indexed.worktreePath)){let s=ne(e.indexed.worktreePath,["diff","HEAD"]),i=ne(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
175
|
+
`);a.trim()&&(aR(t,a.endsWith(`
|
|
172
176
|
`)?a:`${a}
|
|
173
|
-
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return
|
|
174
|
-
`),o}var oD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function sD(e){e.writeSalvageEvidence&&oD.has(e.skipReason)&&(Fr(e.indexed,e.now)||cR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||uR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function iD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(bt.has(r.run.status)||e.liveness&&iu(r,e.liveness)||e.liveness&&we(su(r,e.liveness))&&!Fr(r))?n:t}function aD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:iD(e)}function lD(e,r){if(e.harnessRoot?.trim())return Wi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Wi.sep}runs${Wi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function dR(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=aD(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Fr(r,a))return"active_worker";let c=su(r,e.liveness),u=lD(e,r),d=f=>{if(u)try{sD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(sR(r,c)){let f=d("completion_blocked");if(f)return f}if(ou(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(oR(r,e.liveness,a)||!we(c))return"run_still_active";if(Oo(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if($e(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Ft({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:_t(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function au(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has(Wi.resolve(o))||r&&Fr(r)?"active_worker":r&&ou(r,e.gitStatusCache)?"dirty_worktree":null}function pR(e){return au(e)}var mR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function fR(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)mR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||mR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as yR,readdirSync as RR,statSync as dD}from"node:fs";import vR from"node:path";B();Ze();import gR from"node:path";O();function uD(e,r){return fn(e,r)}function hR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of As(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(gR.join(qn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=gR.resolve(l.worktreePath);uD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Ny(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function kR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function pD(e,r){try{let t=dD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function mD(e,r){let t=vR.join(e,"runs",r,"run.json");return yR(t)?I(t,null):null}function bR(e){try{return RR(e).length===0}catch{return!1}}function SR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(kR(n,r,t,i.liveRunKeys)||!bR(n))return"run_still_active";let a=mD(r,t);return a&&!bt.has(a.status)&&!St(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function wR(e){if(!yR(e.worktreesDir))return[];let r=[],t;try{t=RR(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=vR.join(e.worktreesDir,o);bR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:pD(s,e.now)})}return r}de();import{existsSync as cu,rmSync as DR}from"node:fs";import{execFileSync as fD}from"node:child_process";import{existsSync as xR,readdirSync as gD,statSync as hD}from"node:fs";import kD from"node:path";var yD=2500;function RD(e,r=yD){if(!xR(e))return 0;try{let n=fD("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function Kr(e,r=5e4){if(!xR(e))return 0;let t=RD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=gD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=kD.join(i,l),u;try{u=hD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as wD,rmSync as xD}from"node:fs";Ze();import{lstatSync as vD,readdirSync as bD}from"node:fs";function _R(e){try{let r=vD(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function ER(e,r=32){let t=_R(e);if(!t)return!1;if(t.foreign)return!0;try{let n=bD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=_R(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as SD}from"node:child_process";import AR from"node:path";import je from"node:path";function CR(e,r,t,n){let o=je.resolve(e),s=`${je.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=je.relative(t,i);if(a.startsWith("..")||je.isAbsolute(a))return"path_outside_harness";let l=a.split(je.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(je.resolve(r))?"path_outside_harness":null}function Li(e,r,t){return CR(e,r,t,"node_modules")}function Bi(e,r,t){return CR(e,r,t,".next")}function Ui(e,r,t){let n=je.resolve(e),o=je.relative(t,n);return o.startsWith("..")||je.isAbsolute(o)||o.split(je.sep).length<3||!n.startsWith(je.resolve(r))?"path_outside_harness":null}function PR(e,r,t){let n=je.resolve(e);return Li(n,r,t)===null||Bi(n,r,t)===null||Ui(n,r,t)===null}function OR(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function IR(e){let r=SD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function TR(e,r,t){if(!PR(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=IR(["chown","-R",`${n}:${o}`,AR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=IR(["rm","-rf",AR.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var lu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function _D(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function NR(e,r,t={}){if(!wD(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?Yt(n):null,i=e.bytes??Kr(e.path)??void 0,a=t.removePath??xD,l=t.hasForeignOwnedEntry??ER;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!_D(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=OR();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${lu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=TR(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${lu}`}}}function uu(e){let r=e.harnessRoot;return!r||!Iy(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function du(e,r){let t=uu(e);if(t)return t;let n=NR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function MR(e,r){return du(e,r)}function WR(e,r){return du(e,r)}function LR(e,r){return du(e,r)}function BR(e,r){let t=uu(e);if(t)return t;if(!cu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??Kr(e.path);return DR(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function UR(e,r){let t=uu(e);if(t)return t;if(!cu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??Kr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),cu(e.path)&&DR(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as Fi,readdirSync as Ki,statSync as ED}from"node:fs";import mr from"node:path";function pu(e,r){try{let t=ED(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function KR(e,r){let t=mr.relative(r,e);return t===""||!t.startsWith("..")&&!mr.isAbsolute(t)}function FR(e,r,t,n){let o=[];for(let s of nu){if(s===".next")continue;let i=mr.join(e,s);if(!Fi(i))continue;let a=mr.resolve(i);t.has(a)||KR(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:pu(a,r.now)}))}return o}function HR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...FR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Fi(e.worktreesDir))return r;for(let n of Ki(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=mr.join(e.worktreesDir,n.name);for(let s of Ki(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=mr.join(o,s.name);r.push(...FR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function $R(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Fi(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:pu(a,e.now)})))}if(!t||!Fi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(mr.resolve(i.worktreePath));for(let i of Ki(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=mr.join(e.worktreesDir,i.name),l;try{l=Ki(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=mr.resolve(mr.join(a,c.name));o.has(u)||s.has(u)||KR(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:pu(u,e.now)}))}}return n}import{existsSync as GR,readdirSync as jR,statSync as CD}from"node:fs";import gn from"node:path";var PD=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function AD(e,r){try{let t=CD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ID(e,r){let t=gn.relative(r,e);return t===""||!t.startsWith("..")&&!gn.isAbsolute(t)}function OD(e,r,t,n,o,s){if(!GR(n))return;let i=gn.resolve(n);r.has(i)||ID(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:AD(i,t.now)}))}function VR(e,r,t,n,o){for(let s of PD)OD(e,r,t,gn.join(n,s.dirName),s.kind,o)}function YR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||VR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!GR(e.worktreesDir))return r;for(let n of jR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=gn.join(e.worktreesDir,n.name),s;try{s=jR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=gn.join(o,i.name);VR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as qR,statSync as TD}from"node:fs";import fr from"node:path";function ND(e,r){try{let t=TD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function DD(e){let r=[],t=null;for(let n of e.split(`
|
|
175
|
-
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function
|
|
176
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if($e(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ze();import{existsSync as
|
|
177
|
-
`).map(t=>t.trim()).filter(Boolean)}var ji=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=mv(t)??[];return this.cache.set(t,o),o}};var Vi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=St(r);return this.cache.set(r.id,n),n}};function nM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function fv(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:nM(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function oM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Be(),t=av({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function sM(e){return typeof e=="string"?{reason:e}:e}function hn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Gi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Kr(e.path,t)}}function gv(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function iM(e,r){return e.kind==="remove_next_cache"?WR(e,r):MR(e,r)}function aM(e,r,t){return e.kind==="remove_next_cache"?Bi(e.path,r,t):Li(e.path,r,t)}function lM(e){let r=new Map;for(let t of e)for(let[n,o]of XR(t))r.set(n,o);return r}function hv(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function kv(e){return e.indexed?!1:hu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function cM(e={}){let r=fu(e),t=lv();r=cv(r,t);let n=oM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=hR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Ao().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ve("finalize",`${s.length} stale run(s) marked terminal`),Ve("index","building worktree index");let i=lM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Vi,gitStatusCache:new ji,gitRevCache:new $i},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ve("root",C);let re=Ge.join(C,"worktrees"),ke=zR(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},gr=r.scanDependencyCaches?YR(Ye):[];Ve("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Hr=0;for(let F of gr){if(p())break;Hr+=1,Hr%50===0&&Ve("dependency",`${Hr}/${gr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=aM(M,C,re);if(ie){hn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=hv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=kv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=au({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){hn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(iM(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of HR(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Ui(M.path,C,re);if(ie){hn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=hv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=kv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=pR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){hn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(LR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...$R(Ye),...JR(Ye)];Ve("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let F of j){if(p())break;te+=1,te%50===0&&Ve("worktrees",`${te}/${j.length} evaluated`);let D=Ge.resolve(F.path);if(T.has(D))continue;T.add(D);let M={...F,path:D},ie=ke.get(Ge.resolve(M.path))??null,ye=ie?null:nv({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=dR({indexed:ie,worktreePath:Ge.resolve(M.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(Re){let{reason:hr,detail:V}=sM(Re);hn(l,M.path,hr,V),c.push({...M,executed:!1,skipped:!0,skipReason:hr});continue}c.push(UR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of wR({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=M.runId??Ge.basename(D),ye=SR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){hn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(BR(Gi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,y=0,k=0,b=0,g=0;for(let C of c)C.bytes&&(m+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(y+=C.bytes),C.executed?(b+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(f+=1)):C.skipped&&(g+=1,C.skipReason==="dry_run"&&C.bytes&&(y+=C.bytes));let h=r.accountBytes?sv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Lt(),E=r.execute&&pv(w),S=E?dv({execute:!0}):null,_=w?{observed:!0,execute:E,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,b+=S.removed.length,Ve("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ve("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=fR(c,l),$=fv({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:gv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:gv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function yv(e){let r=rv(e);return cM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Rv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as dM}from"node:fs/promises";import{homedir as pM}from"node:os";import Pt from"node:path";En();var uM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},nQ=Object.keys(uM);function vv(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function bv(e,r){let t=vv(e),n=vv(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}var mM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function kn(e){let r=e?.trim();return r||null}function fM(e){return[...new Set(e.filter(r=>!!r))]}function gM(){let e=pM(),r=kn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??kn(process.env.OPENCLAW_NPM_ROOT)??Pt.join(e,".openclaw","npm"),t=kn(process.env.KYNVER_NPM_GLOBAL_ROOT)??kn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(kn(process.env.NPM_CONFIG_PREFIX)?Pt.join(kn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Pt.join(e,".npm-global","lib","node_modules"));return fM([Pt.join(r,"lib","node_modules"),Pt.join(r,"node_modules"),t.endsWith("node_modules")?t:Pt.join(t,"lib","node_modules")])}async function hM(e){try{let r=JSON.parse(await dM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function kM(e){let r=gM(),t=new Set,n=[];for(let o of r){let s=Pt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Sv(e=new Date().toISOString()){let r={};for(let t of mM){let n=null;for(let o of kM(t)){let s=await hM(o);s&&(!n||bv(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as yM}from"node:child_process";var RM=1e4,vM=4*1024*1024,wv=(e,r,t)=>{try{let n=yM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??RM,maxBuffer:vM});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function Yi(e,r,t){return`${e} ${r} ${t}`}function yu(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function xv(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var bM=8e3,SM=30,wM=100,xM=400,_M=3600*1e3,Ru=0;function bu(){return Date.now()<Ru}function EM(e){let r=`${e.stdout}
|
|
178
|
-
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function _v(e){EM(e)&&(Ru=Math.max(Ru,Date.now()+_M))}function vu(e,r){if(bu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return _v(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function CM(e,r,t,n){if(bu())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return _v(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Su(e){return bu()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function yn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function PM(e){return Array.isArray(e)?e.map(r=>yn(r)).filter(r=>r!==null).slice(0,SM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function AM(e,r,t){let n=vu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:PM(n.statuses)}:null}var Ev={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Su,collect(e,r){let t=xv(e);if(!t)return null;let n=CM(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=yn(n.author),s=yn(n.mergeCommit),i=yn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,bM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>yn(u)).filter(u=>u!==null).slice(0,wM).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>yn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,xM):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Cv={provider:"github",kind:"commit_status",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);return t?AM(r,t.repo,t.sha):null}},Pv={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);if(!t)return null;let n=vu(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=vu(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var xu=[];function wu(e){xu.some(r=>r.provider===e.provider&&r.kind===e.kind)||xu.push(e)}function Av(e,r){return xu.find(t=>t.provider===e&&t.kind===r)??null}function Iv(){wu(Ev),wu(Cv),wu(Pv)}var IM=1,OM=25e3;function Ov(e,r={}){Iv();let t=r.run??wv,n=r.now??(()=>new Date),o=r.maxSubjects??IM,s=Date.now()+(r.deadlineMs??OM),i=new Set,a=e.filter(m=>{let f=Yi(m.provider,m.kind,m.subject);return i.has(f)?!1:(i.add(f),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,f)=>a[(l+f)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let m of u){let f=Yi(m.provider,m.kind,m.subject),y=n(),k=r.cache?.get(f,y)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=Av(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${b.provider} ${b.kind}`,h=p.get(g);if(h===void 0&&(h=b.isAvailable(t),p.set(g,h)),!h){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,f,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let w=b.collect(m.subject,t);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(E),r.cache?.set(f,E,n())}return d}B();O();import WM from"node:path";B();O();import Tv from"node:path";var TM="provider-evidence-wanted.json",NM="provider-evidence-cache.json",DM=600*1e3;function Nv(e){return Tv.join(N(e),TM)}function MM(e){return Tv.join(N(e),NM)}function Dv(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Mv(e){let r=I(Nv(e),null);return Dv(r?.wanted)}function Wv(e,r){ue(Nv(e),{savedAt:new Date().toISOString(),wanted:r})}function Lv(e,r={}){let t=r.ttlMs??DM,n=MM(e),s={...I(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ue(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Bv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Dv(r):null}var LM="provider-evidence-shared-cache.json",BM=6e4,UM=1,FM=1;function _u(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function KM(){return WM.join(le().harnessRoot,LM)}function HM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?UM:FM;return _u(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,_u("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Uv(){return _u("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",BM)}function $M(e){return Math.floor(e.getTime()/6e4)*6e4}function jM(e){return`${e.provider}:${e.kind}`}function Fv(e,r={}){let t=Lv(e,{ttlMs:r.ttlMs??Uv()}),n=r.file??KM(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Uv(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let m=s[u];if(!m)return null;let f=Date.parse(m.observedAt);return!Number.isFinite(f)||d.getTime()-f>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let m=HM(u.provider);if(m===0)return!0;let f=jM(u),y=$M(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();B();import Kv from"node:path";var Hv="mesh-cron-lease.json";function $v(e){let r=I(Kv.join(N(e),Hv),null);return Jh(e,r)??r}function jv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(Kv.join(N(e),Hv),t),qh(e,t)}function Vv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}function Gv(e){let r=wh(),t=Lr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Wh());let s=Mh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Ky())}return t.flags.planOutbox!=="off"&&Object.assign(o,Kk()),t.flags.admission!=="off"&&(Object.assign(o,Fh()),t.flags.admission==="enforce"&&Object.assign(o,jh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,ek()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:r.state,schemaVersion:r.schemaVersion,recovered:r.recovered,unavailableClass:r.reason?r.reason.split(":")[0]??null:null,flags:t.flags,flagSources:t.sources,flagWarningCount:t.warnings.length,divergenceCounters:o}}H();import{createHash as Yv}from"node:crypto";import{access as VM,mkdir as YQ,readFile as qv,rename as qQ,writeFile as JQ}from"node:fs/promises";import{constants as GM}from"node:fs";import{homedir as Eu}from"node:os";import Ee from"node:path";var YM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,qM=/^[A-Za-z0-9._:-]{8,128}$/;function JM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Eu(),".kynver","mcp-installations.json")}function zM(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Eu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Eu(),".npm-global")}function XM(e){let r=Ee.resolve(e);if(Ee.basename(r)!=="node_modules")return r;let t=Ee.dirname(r);return Ee.basename(t)==="lib"?Ee.dirname(t):t}function QM(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function ZM(e){try{return await VM(e,GM.R_OK),!0}catch{return!1}}async function eW(e=JM()){let r;try{r=JSON.parse(await qv(e,"utf8"))}catch{return[]}if(r.version!==1||!Array.isArray(r.installations)||r.installations.length>100)throw new Error("invalid MCP installation inventory");return r.installations.map(t=>{if(!t||!qM.test(t.inventoryKey)||!YM.test(t.packageName)||!["kynver","openclaw"].includes(t.prefix))throw new Error("invalid adopted MCP installation");if(t.packageName.includes("..")||t.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(t.connectionId&&t.connectionId.length>128)throw new Error("invalid connection identity");if(t.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(t.binName))throw new Error("invalid MCP bin name");let n=t.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...t,envAllowlist:[...new Set(n)],lifecycle:t.lifecycle??"runtime_stdio"}})}function rW(e,r,t){if(typeof e.bin=="string")return Ee.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Ee.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Ee.join(t,s):null}function tW(e){return Yv("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function nW(e){let r=[];for(let t of e){let n=XM(zM(t.prefix)),o=(await Promise.all(QM(n,t.packageName).map(async m=>({candidate:m,ok:await ZM(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await qv(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Ee.dirname(o),a=rW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=Yv("sha256").update(JSON.stringify({prefix:n,binName:t.binName??null,envAllowlist:[...t.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],p={inventoryKey:t.inventoryKey,connectionId:t.connectionId??null,packageName:t.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};r.push({report:{...p,displayName:t.displayName?.trim()||t.packageName,inventoryFingerprint:tW(p),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:t.envAllowlist??[],lifecycle:c}})}return r}async function Jv(){return nW(await eW())}import{createHash as oW,createHmac as sW,timingSafeEqual as iW}from"node:crypto";function Cu(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:oW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function zv(e,r,t){let n=Cu(r);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==t||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=sW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&iW(i,s)}ea();Rr();import{createHash as aW}from"node:crypto";import{access as Pu,mkdtemp as lW,readFile as rb,rm as cW}from"node:fs/promises";import{constants as Au}from"node:fs";import{tmpdir as uW}from"node:os";import Rn from"node:path";import{spawn as dW}from"node:child_process";import{Client as pW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as mW}from"@modelcontextprotocol/sdk/client/stdio.js";var Iu="https://registry.npmjs.org",Xv=512*1024,Ou=2*6e4,fW=2e4;function tb(){return"npm"}function Qv(e,r){return Buffer.byteLength(e)>=Xv?e:(e+r.toString("utf8")).slice(0,Xv)}function gW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&Rn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Iu,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function nb(e,r,t=Ou,n){return new Promise((o,s)=>{let i,a;try{[i,a]=pe(e,r)}catch(m){s(m);return}let l=dW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:gW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Qv(c,m)}),l.stderr.on("data",m=>{u=Qv(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&De(l.pid,"SIGKILL")},t);l.once("error",m=>{clearTimeout(p),s(m)}),l.once("close",m=>{clearTimeout(p),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function hW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:aW(t).update(e).digest("base64")===n}async function kW(e,r,t,n){let o=await nb(tb(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Iu}`,"--ignore-scripts"],Ou,Rn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||Rn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Rn.join(n,i);if(!hW(await rb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function yW(e,r,t){if((await nb(tb(),["install","--global","--prefix",e,r,`--registry=${Iu}`,"--no-audit","--fund=false"],Ou,t)).code!==0)throw new Error("package_install_failed")}async function ob(e){let r=JSON.parse(await rb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function RW(e){let r={};for(let t of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[t];n!==void 0&&(r[t]=n)}return r}async function Zv(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Pu(e.local.binPath,Au.X_OK).catch(async()=>Pu(e.local.binPath,Au.R_OK));let r=new mW({command:e.local.binPath,args:[],env:RW(e.local.envAllowlist),stderr:"pipe"}),t=new pW({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([t.connect(r),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),fW)})]);let o=await t.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await t.close().catch(()=>{})}}async function eb(e,r,t,n,o){let s=await lW(Rn.join(uW(),"kynver-mcp-update-"));try{let i=await kW(r,t,n,s);if(await o(),await yW(e.local.prefix,i,Rn.join(s,"npm-cache")),await ob(e)!==t)throw new Error("installed_version_mismatch")}finally{await cW(s,{recursive:!0,force:!0})}}async function sb(e,r,t,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==r.inventoryKey||e.report.inventoryFingerprint!==r.inventoryFingerprint||e.report.packageName!==r.packageName)throw new Error("local_inventory_mismatch");if(r.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await t("preflight"),await Pu(e.local.prefix,Au.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await ob(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await eb(e,r.packageName,r.targetVersion,r.targetIntegrity,async()=>{await t("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:r.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await t("restarting"),await t("verifying");let a=await Zv(e);return{outcome:"succeeded",observedVersion:r.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!r.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await eb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await Zv(e);return{outcome:"rollback_succeeded",observedVersion:r.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:r.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}import{randomBytes as Du}from"node:crypto";import{mkdir as Mu,readFile as Wu,rename as CW,rm as qi,stat as PW,writeFile as ub}from"node:fs/promises";import At from"node:path";import{createHmac as vW,timingSafeEqual as bW}from"node:crypto";import{mkdir as SW,readFile as wW,rename as xW,writeFile as _W}from"node:fs/promises";import{homedir as EW}from"node:os";import Tu from"node:path";function Nu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Tu.join(EW(),".kynver","state","mcp-updates")}function ib(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Tu.join(Nu(),`${e}.json`)}function ab(e,r){let t=Cu(r);return t?vW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function lb(e,r){try{let t=JSON.parse(await wW(ib(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=ab(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!bW(i,a)?null:t}catch{return null}}async function cb(e,r){let t=ab(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=ib(e.operationId);await SW(Tu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await _W(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
179
|
-
`,{mode:384}),await xW(o,n)}var AW="host-mutation.lock";function db(){return At.join(Nu(),AW)}async function pb(){try{let e=JSON.parse(await Wu(At.join(db(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:mb(e.pid)}}catch{return null}}function mb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function IW(e){try{return await PW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function fb(){return OW("mcp_update")}async function OW(e){let r=db(),t=`${r}.reclaiming`;await Mu(At.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await IW(t))return null;for(let o=0;o<2;o+=1)try{await Mu(r,{mode:448});let s={pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await ub(At.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await qi(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Wu(At.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await qi(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Mu(t,{mode:448}),n=!0,await ub(At.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Wu(At.join(r,"owner.json"),"utf8"))}catch{return null}if(mb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Du(8).toString("hex")}`;await CW(r,a),await qi(a,{recursive:!0,force:!0})}return null}finally{n&&await qi(t,{recursive:!0,force:!0})}}function Ji(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function TW(e){if(!e||typeof e!="object")return null;let r=e.claim;if(!r||typeof r!="object"||r.waitingForIdle!==!1)return null;let t=r.command;return t&&typeof t=="object"?t:null}function gb(e,r){let t=r.claims;return e.inventoryKey===t.inventoryKey&&e.packageName===t.packageName&&e.installedVersion===t.installedVersion&&e.targetVersion===t.targetVersion&&e.targetIntegrity===t.targetIntegrity&&e.rollbackIntegrity===t.rollbackIntegrity&&e.item.report.inventoryKey===t.inventoryKey&&e.item.report.packageName===t.packageName}function NW(e,r){return{inventoryKey:r.claims.inventoryKey,packageName:r.claims.packageName,installedVersion:r.claims.installedVersion,targetVersion:r.claims.targetVersion,targetIntegrity:r.claims.targetIntegrity,rollbackIntegrity:r.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function hb(e){let r=Q(e.baseUrl),t=await Jv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await ft(Ji(r,e.agentOsId,"inventory"),e.secret,{items:t.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await fb();if(!o){let s=await pb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await ft(Ji(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=TW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!zv(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await lb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!gb(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let g=t.find(h=>h.report.inventoryKey===i.claims.inventoryKey);if(!g||g.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=g,c=a&&gb(a.recovery,i)?a.recovery:NW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await cb({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await ft(Ji(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:g})).ok)throw new Error("progress_rejected");p=g,await d(g,!1)},f=g=>m(g),y=()=>m(p),k;try{k=await sb(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await ft(Ji(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return b.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:k.outcome}}finally{await o.release()}}function DW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function MW(e,r){let t=q(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=I(kb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Yr(a))continue;if(co(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!we(l))continue;let c=Ut({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await xo({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function WW(e,r,t,n,o){let s=Q(n.baseUrl?String(n.baseUrl):void 0),i=await ee(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await Sv(),c=Is(r),u=null;try{let E=Mv(r);if(E.length>0){let S=Fv(r);u=Ov(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Ur()!=="off"){let E=$t();Uh({liveWorkers:E}),$h({liveWorkers:E})}else Lh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=kb.join(Pr(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?Yr($):!1}catch{return!1}};await $y({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Gv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=sd({control:Dt(e),supervisor:cd(),inFlightWorkers:$t().length})}catch{m=null}let f=$v(r),y=qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Pc(r),resourceGate:t,boxResourceSnapshot:Zy(t,{harnessRunId:r,boxKind:br(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...y?{daemonEventLoop:y}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=Bv(k.response);if(b)try{Wv(r,b)}catch{}let g=Vv(k);if(g)try{jv(r,g)}catch{}let h=_h(k);h&&Eh(e,h);let w=td(k);return w&&od(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function yb(e){let r=String(yr(String(e.run||""),"--run")),t=String(yr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Pc(r);let o=await Ns(t,e),s=Ts(o),i=Hn({runId:r,configuredMaxWorkersOverride:s}),a=Rv()?yv(r):void 0,l=await WW(t,r,i,e,a),c;if(n)try{let C=Q(e.baseUrl?String(e.baseUrl):void 0),re=await ee(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await hb({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:$t().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=ch(r,l),d=await ug(r,e),p=await MW(r,e);p.some(C=>C.ok&&!C.skipped)&&Jy();let m=Hn({runId:r,configuredMaxWorkersOverride:s}),f=Uy(),y=await tR(r,e),k=by(m,l),b=k.maxStarts,g=Dt(t),h=id(g);h&&(b=0);let w=DW()?await eR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=vy(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Kc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),ke=pn(re);S+=ke,K=Math.max(0,K-ke),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Kc({...e,run:r,agentOsId:t},K),re=pn(C);S+=re,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}xn();jt();xn();function Rb(e){return jo(Dt(e))!=="stopped"?null:$t().length}function vb(e){if(!e||typeof e!="object")return!1;let r=e;return r.type==="tick"&&typeof r.id=="number"&&typeof r.agentOsId=="string"&&!!r.args&&typeof r.args=="object"}function LW(e){e&&(Xy({admission:e.admission,ownerKind:e.ownerKind}),ld(e.ownerKind))}async function BW(e,r={}){try{e.instructionBundle&&zu(e.instructionBundle.bundle,e.instructionBundle.source),Yu(e.eventLoopReport);let t=await(r.runTick??yb)(e.args),n=(r.countInFlightWorkers??Rb)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function bb(e,r,t={}){LW(r);let n=Promise.resolve();e.on("message",o=>{vb(o)&&(n=n.then(async()=>{e.postMessage(await BW(o,t))}))})}Sb?bb(Sb,UW):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|
|
177
|
+
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return aR(Wi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
178
|
+
`),o}var iD=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function aD(e){e.writeSalvageEvidence&&iD.has(e.skipReason)&&(Fr(e.indexed,e.now)||uR({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||dR({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function lD(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(St.has(r.run.status)||e.liveness&&iu(r,e.liveness)||e.liveness&&we(su(r,e.liveness))&&!Fr(r))?n:t}function cD(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:lD(e)}function uD(e,r){if(e.harnessRoot?.trim())return Li.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Li.sep}runs${Li.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function pR(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=cD(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Fr(r,a))return"active_worker";let c=su(r,e.liveness),u=uD(e,r),d=f=>{if(u)try{aD({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(iR(r,c)){let f=d("completion_blocked");if(f)return f}if(ou(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(sR(r,e.liveness,a)||!we(c))return"run_still_active";if(To(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if($e(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Kt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Et(c.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function au(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has(Li.resolve(o))||r&&Fr(r)?"active_worker":r&&ou(r,e.gitStatusCache)?"dirty_worktree":null}function mR(e){return au(e)}var fR=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function gR(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)fR.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||fR.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as RR,readdirSync as vR,statSync as mD}from"node:fs";import bR from"node:path";B();Ze();import hR from"node:path";O();function pD(e,r){return gn(e,r)}function kR(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Is(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(hR.join(Jn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=hR.resolve(l.worktreePath);pD(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Dy(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function yR(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function fD(e,r){try{let t=mD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gD(e,r){let t=bR.join(e,"runs",r,"run.json");return RR(t)?I(t,null):null}function SR(e){try{return vR(e).length===0}catch{return!1}}function wR(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(yR(n,r,t,i.liveRunKeys)||!SR(n))return"run_still_active";let a=gD(r,t);return a&&!St.has(a.status)&&!wt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function xR(e){if(!RR(e.worktreesDir))return[];let r=[],t;try{t=vR(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=bR.join(e.worktreesDir,o);SR(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:fD(s,e.now)})}return r}de();import{existsSync as cu,rmSync as MR}from"node:fs";import{execFileSync as hD}from"node:child_process";import{existsSync as _R,readdirSync as kD,statSync as yD}from"node:fs";import RD from"node:path";var vD=2500;function bD(e,r=vD){if(!_R(e))return 0;try{let n=hD("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function Kr(e,r=5e4){if(!_R(e))return 0;let t=bD(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=kD(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=RD.join(i,l),u;try{u=yD(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as _D,rmSync as ED}from"node:fs";Ze();import{lstatSync as SD,readdirSync as wD}from"node:fs";function ER(e){try{let r=SD(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function CR(e,r=32){let t=ER(e);if(!t)return!1;if(t.foreign)return!0;try{let n=wD(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=ER(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as xD}from"node:child_process";import IR from"node:path";import je from"node:path";function PR(e,r,t,n){let o=je.resolve(e),s=`${je.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=je.relative(t,i);if(a.startsWith("..")||je.isAbsolute(a))return"path_outside_harness";let l=a.split(je.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(je.resolve(r))?"path_outside_harness":null}function Bi(e,r,t){return PR(e,r,t,"node_modules")}function Ui(e,r,t){return PR(e,r,t,".next")}function Fi(e,r,t){let n=je.resolve(e),o=je.relative(t,n);return o.startsWith("..")||je.isAbsolute(o)||o.split(je.sep).length<3||!n.startsWith(je.resolve(r))?"path_outside_harness":null}function AR(e,r,t){let n=je.resolve(e);return Bi(n,r,t)===null||Ui(n,r,t)===null||Fi(n,r,t)===null}function TR(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function OR(e){let r=xD("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function NR(e,r,t){if(!AR(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=OR(["chown","-R",`${n}:${o}`,IR.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=OR(["rm","-rf",IR.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var lu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function CD(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function DR(e,r,t={}){if(!_D(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?qt(n):null,i=e.bytes??Kr(e.path)??void 0,a=t.removePath??ED,l=t.hasForeignOwnedEntry??CR;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!CD(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=TR();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${lu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=NR(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${lu}`}}}function uu(e){let r=e.harnessRoot;return!r||!Oy(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function du(e,r){let t=uu(e);if(t)return t;let n=DR(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function WR(e,r){return du(e,r)}function LR(e,r){return du(e,r)}function BR(e,r){return du(e,r)}function UR(e,r){let t=uu(e);if(t)return t;if(!cu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??Kr(e.path);return MR(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function FR(e,r){let t=uu(e);if(t)return t;if(!cu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??Kr(e.path);return n&&Z(n,["worktree","remove","--force",e.path],{allowFailure:!0}),cu(e.path)&&MR(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as Ki,readdirSync as Hi,statSync as PD}from"node:fs";import mr from"node:path";function pu(e,r){try{let t=PD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function HR(e,r){let t=mr.relative(r,e);return t===""||!t.startsWith("..")&&!mr.isAbsolute(t)}function KR(e,r,t,n){let o=[];for(let s of nu){if(s===".next")continue;let i=mr.join(e,s);if(!Ki(i))continue;let a=mr.resolve(i);t.has(a)||HR(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:pu(a,r.now)}))}return o}function $R(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...KR(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ki(e.worktreesDir))return r;for(let n of Hi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=mr.join(e.worktreesDir,n.name);for(let s of Hi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=mr.join(o,s.name);r.push(...KR(i,e,t,{runId:n.name,worker:s.name}))}}return r}function jR(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Ki(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:pu(a,e.now)})))}if(!t||!Ki(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(mr.resolve(i.worktreePath));for(let i of Hi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=mr.join(e.worktreesDir,i.name),l;try{l=Hi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=mr.resolve(mr.join(a,c.name));o.has(u)||s.has(u)||HR(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:pu(u,e.now)}))}}return n}import{existsSync as YR,readdirSync as VR,statSync as AD}from"node:fs";import hn from"node:path";var ID=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function OD(e,r){try{let t=AD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function TD(e,r){let t=hn.relative(r,e);return t===""||!t.startsWith("..")&&!hn.isAbsolute(t)}function ND(e,r,t,n,o,s){if(!YR(n))return;let i=hn.resolve(n);r.has(i)||TD(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:OD(i,t.now)}))}function GR(e,r,t,n,o){for(let s of ID)ND(e,r,t,hn.join(n,s.dirName),s.kind,o)}function qR(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||GR(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!YR(e.worktreesDir))return r;for(let n of VR(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=hn.join(e.worktreesDir,n.name),s;try{s=VR(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=hn.join(o,i.name);GR(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as JR,statSync as DD}from"node:fs";import fr from"node:path";function MD(e,r){try{let t=DD(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function WD(e){let r=[],t=null;for(let n of e.split(`
|
|
179
|
+
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function LD(e,r){let t=fr.relative(fr.resolve(r),fr.resolve(e));return t!==""&&!t.startsWith("..")&&!fr.isAbsolute(t)}var BD=200;function zR(e){if(!e.includeOrphans||!JR(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(fr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(fr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Z(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=WD(a);for(let c of l){if(i>=BD)break;let u=fr.resolve(c.path);if(u===fr.resolve(s)||!LD(u,e.worktreesDir)||t.has(u)||o.has(u)||!JR(u))continue;let p=fr.relative(e.worktreesDir,u).split(fr.sep),m=p[0],f=p[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:f,repo:s,ageMs:MD(u,e.now)})}}return n}B();O();import Do from"node:path";function XR(e,r){let t=Do.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Do.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function QR(e){let r=new Map;for(let t of Is(e))for(let n of Object.keys(t.workers||{})){let o=Do.join(Jn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(Do.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Do.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Mo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Ct(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function fu(e={}){let r=e.execute===!0||e.execute!==!1&&Mo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Mo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Ct("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??Ct("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Ct("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Ct("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Ct("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Mo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Mo("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),p=e.accountBytes!==!1&&!Mo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Ct("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,y=Ct("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:k}}function tv(e){let r=process.env.KYNVER_CLEANUP_SCOPE==="all",t=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=r?Number.isFinite(t)&&t>0?t:6048e5:Number.isFinite(t)&&t>0?t:0;return fu({runIdFilter:r?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:r?216e5:void 0,runDirectoriesAgeMs:r?36e5:void 0,includeOrphans:r?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}de();import{existsSync as gu,statSync as FD}from"node:fs";import Pt from"node:path";O();var nv=1800*1e3;function KD(e,r){let t=Pt.relative(r,e);return t===""||!t.startsWith("..")&&!Pt.isAbsolute(t)}function HD(e,r,t){if(!gu(e))return!1;try{let n=r-FD(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function hu(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??nv,n=Pt.resolve(e.harnessRoot,"runs"),o=Pt.resolve(n,e.runId,"workers",e.workerName);if(!KD(o,n))return!1;let s=I(Pt.join(o,"worker.json"),void 0);return s&&gn(s,r,t)?!0:s?!1:HD(Pt.join(o,"heartbeat.jsonl"),r,t)}function ov(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??nv;if(!gu(e.worktreePath))return null;if(e.runId&&e.workerName&&hu(e))return"active_worker";let n=Pt.join(e.worktreePath,".git");if(!gu(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
180
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if($e(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ze();import{existsSync as $D,readdirSync as sv,statSync as jD}from"node:fs";import VD from"node:path";function iv(e={}){let r=he(e.harnessRoot??Be()),t=qt(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!$D(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=sv(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=VD.join(t,u.name);try{let p=jD(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of sv(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let m=Kr(d,p);m===null?s=null:s+=m}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}Ze();import{existsSync as GD}from"node:fs";import{homedir as YD}from"node:os";import av from"node:path";var qD=["/var/tmp/kynver-harness",av.join(YD(),".openclaw","harness")];function ku(e,r,t){if(!t?.trim())return;let n=he(t.trim());e.has(n)||(e.add(n),r.push(n))}function JD(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function lv(e={}){let r=new Set,t=[];ku(r,t,e.harnessRoot??Be());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])ku(r,t,o);if(JD(e))for(let o of qD){let s=av.resolve(o);!r.has(s)&&GD(s)&&ku(r,t,s)}return t}Nn();function zD(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function XD(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function cv(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=XD("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Vr({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function uv(e,r){if(!r.pressured)return e;let t=e.execute||!zD("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:t,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:r.diskGate}}Qo();import{unlinkSync as QD}from"node:fs";function $i(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function dv(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function ZD(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function pv(e={}){let r=e.execute===!0||$i("KYNVER_WSL_CRASH_DUMP_EXECUTE")||$i("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||$i("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??dv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Bt({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=ZD(o.dumps,n,t),i=[],a=[],l=0;for(let c of s){if(!r){a.push({path:c.path,reason:"dry_run"});continue}try{QD(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function mv(e){return e?$i("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>dv("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Qo();function Ve(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var ji=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ne(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as eM}from"node:child_process";import{existsSync as rM}from"node:fs";import tM from"node:path";var nM=5e3;function oM(e,r){if(!rM(tM.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=eM("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:nM}),n=t.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:n?"git_timeout":t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function fv(e){let r=oM(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
181
|
+
`).map(t=>t.trim()).filter(Boolean)}var Vi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=fv(t)??[];return this.cache.set(t,o),o}};var Gi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=wt(r);return this.cache.set(r.id,n),n}};function sM(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function gv(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:sM(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function iM(e={}){let r=e.harnessRoot?he(e.harnessRoot):Be(),t=lv({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function aM(e){return typeof e=="string"?{reason:e}:e}function kn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Yi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Kr(e.path,t)}}function hv(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function lM(e,r){return e.kind==="remove_next_cache"?LR(e,r):WR(e,r)}function cM(e,r,t){return e.kind==="remove_next_cache"?Ui(e.path,r,t):Bi(e.path,r,t)}function uM(e){let r=new Map;for(let t of e)for(let[n,o]of QR(t))r.set(n,o);return r}function kv(e,r){return e.runId&&e.worker?Ge.join(r,e.runId,e.worker):Ge.resolve(e.path,"..")}function yv(e){return e.indexed?!1:hu({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function dM(e={}){let r=fu(e),t=cv();r=uv(r,t);let n=iM(e);Ve("scan",`${n.scanRoots.length} harness root(s)`);let o=kR(n.scanRoots,n.now),s=r.finalizeStaleRuns?Io().map(C=>({runId:C.runId,from:C.from,to:C.to})):[];s.length>0&&Ve("finalize",`${s.length} stale run(s) marked terminal`),Ve("index","building worktree index");let i=uM(n.scanRoots);Ve("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Gi,gitStatusCache:new Vi,gitRevCache:new ji},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let C of n.scanRoots){if(p())break;Ve("root",C);let re=Ge.join(C,"worktrees"),ke=XR(i,C),Ye={harnessRoot:C,worktreesDir:re,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ke,now:n.now},gr=r.scanDependencyCaches?qR(Ye):[];Ve("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${C}`:"skipped (worktree-only sweep)");let Hr=0;for(let F of gr){if(p())break;Hr+=1,Hr%50===0&&Ve("dependency",`${Hr}/${gr.length} evaluated`);let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=cM(M,C,re);if(ie){kn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=kv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=yv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=au({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){kn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(lM(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of $R(Ye)){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=Fi(M.path,C,re);if(ie){kn(l,M.path,ie),c.push({...M,executed:!1,skipped:!0,skipReason:ie});continue}let ye=kv(M,re),Re=ke.get(Ge.resolve(ye))??null,hr=yv({candidate:M,indexed:Re,harnessRoot:C,now:n.now}),V=mR({indexed:Re,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:ye,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:hr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){kn(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(BR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let j=[...jR(Ye),...zR(Ye)];Ve("worktrees",`${j.length} candidate(s) at ${C}`);let T=new Set,te=0;for(let F of j){if(p())break;te+=1,te%50===0&&Ve("worktrees",`${te}/${j.length} evaluated`);let D=Ge.resolve(F.path);if(T.has(D))continue;T.add(D);let M={...F,path:D},ie=ke.get(Ge.resolve(M.path))??null,ye=ie?null:ov({worktreePath:M.path,harnessRoot:C,runId:M.runId,workerName:M.worker,now:n.now}),Re=pR({indexed:ie,worktreePath:Ge.resolve(M.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:ye,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:C,writeSalvageEvidence:r.execute});if(Re){let{reason:hr,detail:V}=aM(Re);kn(l,M.path,hr,V),c.push({...M,executed:!1,skipped:!0,skipReason:hr});continue}c.push(FR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of xR({harnessRoot:C,worktreesDir:re,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let D=Ge.resolve(F.path);if(u.has(D))continue;u.add(D);let M={...F,path:D},ie=M.runId??Ge.basename(D),ye=wR({harnessRoot:C,runId:ie,runPath:D,ageMs:M.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ye){kn(l,M.path,ye),c.push({...M,executed:!1,skipped:!0,skipReason:ye});continue}c.push(UR(Yi(M,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,y=0,k=0,b=0,g=0;for(let C of c)C.bytes&&(m+=C.bytes),!C.skipped&&!C.executed&&C.bytes&&(y+=C.bytes),C.executed?(b+=1,k+=C.bytes??0,C.kind==="remove_run_directory"&&(f+=1)):C.skipped&&(g+=1,C.skipReason==="dry_run"&&C.bytes&&(y+=C.bytes));let h=r.accountBytes?iv({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,w=Bt(),E=r.execute&&mv(w),S=E?pv({execute:!0}):null,_=w?{observed:!0,execute:E,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,b+=S.removed.length,Ve("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Ve("complete",`${c.length} action(s), ${g} skipped, ${b} removed`);let K=gR(c,l),$=gv({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:hv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:y,removedBytes:k,removedPaths:b,skippedPaths:g,skipReasons:hv(c,l)},...h?{storage:h}:{},...K.length>0?{preservedLivePaths:K}:{},...f>0?{removedRunDirectories:f}:{},..._?{wslCrashDumps:_}:{},compactSummary:$}}function Rv(e){let r=tv(e);return dM({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function vv(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as mM}from"node:fs/promises";import{homedir as fM}from"node:os";import At from"node:path";Cn();var pM={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},s9=Object.keys(pM);function bv(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function Sv(e,r){let t=bv(e),n=bv(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}var gM=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function yn(e){let r=e?.trim();return r||null}function hM(e){return[...new Set(e.filter(r=>!!r))]}function kM(){let e=fM(),r=yn(process.env.KYNVER_OPENCLAW_NPM_ROOT)??yn(process.env.OPENCLAW_NPM_ROOT)??At.join(e,".openclaw","npm"),t=yn(process.env.KYNVER_NPM_GLOBAL_ROOT)??yn(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(yn(process.env.NPM_CONFIG_PREFIX)?At.join(yn(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):At.join(e,".npm-global","lib","node_modules"));return hM([At.join(r,"lib","node_modules"),At.join(r,"node_modules"),t.endsWith("node_modules")?t:At.join(t,"lib","node_modules")])}async function yM(e){try{let r=JSON.parse(await mM(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function RM(e){let r=kM(),t=new Set,n=[];for(let o of r){let s=At.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function wv(e=new Date().toISOString()){let r={};for(let t of gM){let n=null;for(let o of RM(t)){let s=await yM(o);s&&(!n||Sv(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as vM}from"node:child_process";var bM=1e4,SM=4*1024*1024,xv=(e,r,t)=>{try{let n=vM(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??bM,maxBuffer:SM});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function qi(e,r,t){return`${e} ${r} ${t}`}function yu(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function _v(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var wM=8e3,xM=30,_M=100,EM=400,CM=3600*1e3,Ru=0;function bu(){return Date.now()<Ru}function PM(e){let r=`${e.stdout}
|
|
182
|
+
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function Ev(e){PM(e)&&(Ru=Math.max(Ru,Date.now()+CM))}function vu(e,r){if(bu())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return Ev(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function AM(e,r,t,n){if(bu())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return Ev(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Su(e){return bu()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function IM(e){return Array.isArray(e)?e.map(r=>Rn(r)).filter(r=>r!==null).slice(0,xM).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function OM(e,r,t){let n=vu(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:IM(n.statuses)}:null}var Cv={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Su,collect(e,r){let t=_v(e);if(!t)return null;let n=AM(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=Rn(n.author),s=Rn(n.mergeCommit),i=Rn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,wM):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Rn(u)).filter(u=>u!==null).slice(0,_M).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>Rn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,EM):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Pv={provider:"github",kind:"commit_status",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);return t?OM(r,t.repo,t.sha):null}},Av={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Su,collect(e,r){let t=yu(e);if(!t)return null;let n=vu(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=vu(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var xu=[];function wu(e){xu.some(r=>r.provider===e.provider&&r.kind===e.kind)||xu.push(e)}function Iv(e,r){return xu.find(t=>t.provider===e&&t.kind===r)??null}function Ov(){wu(Cv),wu(Pv),wu(Av)}var TM=1,NM=25e3;function Tv(e,r={}){Ov();let t=r.run??xv,n=r.now??(()=>new Date),o=r.maxSubjects??TM,s=Date.now()+(r.deadlineMs??NM),i=new Set,a=e.filter(m=>{let f=qi(m.provider,m.kind,m.subject);return i.has(f)?!1:(i.add(f),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,f)=>a[(l+f)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},p=new Map;for(let m of u){let f=qi(m.provider,m.kind,m.subject),y=n(),k=r.cache?.get(f,y)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=Iv(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${b.provider} ${b.kind}`,h=p.get(g);if(h===void 0&&(h=b.isAvailable(t),p.set(g,h)),!h){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(m,f,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let w=b.collect(m.subject,t);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let E={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(E),r.cache?.set(f,E,n())}return d}B();O();import BM from"node:path";B();O();import Nv from"node:path";var DM="provider-evidence-wanted.json",MM="provider-evidence-cache.json",WM=600*1e3;function Dv(e){return Nv.join(N(e),DM)}function LM(e){return Nv.join(N(e),MM)}function Mv(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Wv(e){let r=I(Dv(e),null);return Mv(r?.wanted)}function Lv(e,r){ue(Dv(e),{savedAt:new Date().toISOString(),wanted:r})}function Bv(e,r={}){let t=r.ttlMs??WM,n=LM(e),s={...I(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ue(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Uv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Mv(r):null}var UM="provider-evidence-shared-cache.json",FM=6e4,KM=1,HM=1;function _u(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function $M(){return BM.join(le().harnessRoot,UM)}function jM(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?KM:HM;return _u(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,_u("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Fv(){return _u("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",FM)}function VM(e){return Math.floor(e.getTime()/6e4)*6e4}function GM(e){return`${e.provider}:${e.kind}`}function Kv(e,r={}){let t=Bv(e,{ttlMs:r.ttlMs??Fv()}),n=r.file??$M(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Fv(),l=!1;return{get(u,d){let p=t.get(u,d);if(p)return p;let m=s[u];if(!m)return null;let f=Date.parse(m.observedAt);return!Number.isFinite(f)||d.getTime()-f>a?(delete s[u],l=!0,null):(t.set(u,m,d),m)},set(u,d,p){t.set(u,d,p),s[u]=d,l=!0},reserve(u,d,p){let m=jM(u.provider);if(m===0)return!0;let f=GM(u),y=VM(p),k=i[f];return!k||k.windowStartMs!==y?(i[f]={windowStartMs:y,used:1},l=!0,!0):k.used>=m?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ue(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}O();B();import Hv from"node:path";var $v="mesh-cron-lease.json";function jv(e){let r=I(Hv.join(N(e),$v),null);return zh(e,r)??r}function Vv(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(Hv.join(N(e),$v),t),Jh(e,t)}function Gv(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}function Yv(e){let r=xh(),t=Lr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Lh());let s=Wh({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Hy())}return t.flags.planOutbox!=="off"&&Object.assign(o,Hk()),t.flags.admission!=="off"&&(Object.assign(o,Kh()),t.flags.admission==="enforce"&&Object.assign(o,Vh())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,rk()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:r.state,schemaVersion:r.schemaVersion,recovered:r.recovered,unavailableClass:r.reason?r.reason.split(":")[0]??null:null,flags:t.flags,flagSources:t.sources,flagWarningCount:t.warnings.length,divergenceCounters:o}}H();import{createHash as qv}from"node:crypto";import{access as YM,mkdir as J9,readFile as Jv,rename as z9,writeFile as X9}from"node:fs/promises";import{constants as qM}from"node:fs";import{homedir as Eu}from"node:os";import Ee from"node:path";var JM=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,zM=/^[A-Za-z0-9._:-]{8,128}$/;function XM(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Ee.join(Eu(),".kynver","mcp-installations.json")}function QM(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Ee.join(Eu(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Ee.join(Eu(),".npm-global")}function ZM(e){let r=Ee.resolve(e);if(Ee.basename(r)!=="node_modules")return r;let t=Ee.dirname(r);return Ee.basename(t)==="lib"?Ee.dirname(t):t}function eW(e,r){return[Ee.join(e,"lib","node_modules",r,"package.json"),Ee.join(e,"node_modules",r,"package.json")]}async function rW(e){try{return await YM(e,qM.R_OK),!0}catch{return!1}}async function tW(e=XM()){let r;try{r=JSON.parse(await Jv(e,"utf8"))}catch{return[]}if(r.version!==1||!Array.isArray(r.installations)||r.installations.length>100)throw new Error("invalid MCP installation inventory");return r.installations.map(t=>{if(!t||!zM.test(t.inventoryKey)||!JM.test(t.packageName)||!["kynver","openclaw"].includes(t.prefix))throw new Error("invalid adopted MCP installation");if(t.packageName.includes("..")||t.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(t.connectionId&&t.connectionId.length>128)throw new Error("invalid connection identity");if(t.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(t.binName))throw new Error("invalid MCP bin name");let n=t.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...t,envAllowlist:[...new Set(n)],lifecycle:t.lifecycle??"runtime_stdio"}})}function nW(e,r,t){if(typeof e.bin=="string")return Ee.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Ee.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Ee.join(t,s):null}function oW(e){return qv("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function sW(e){let r=[];for(let t of e){let n=ZM(QM(t.prefix)),o=(await Promise.all(eW(n,t.packageName).map(async m=>({candidate:m,ok:await rW(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await Jv(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Ee.dirname(o),a=nW(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=qv("sha256").update(JSON.stringify({prefix:n,binName:t.binName??null,envAllowlist:[...t.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],p={inventoryKey:t.inventoryKey,connectionId:t.connectionId??null,packageName:t.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};r.push({report:{...p,displayName:t.displayName?.trim()||t.packageName,inventoryFingerprint:oW(p),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:t.envAllowlist??[],lifecycle:c}})}return r}async function zv(){return sW(await tW())}import{createHash as iW,createHmac as aW,timingSafeEqual as lW}from"node:crypto";function Cu(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:iW("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function Xv(e,r,t){let n=Cu(r);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==t||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=aW("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&lW(i,s)}ra();Rr();import{createHash as cW}from"node:crypto";import{access as Pu,mkdtemp as uW,readFile as tb,rm as dW}from"node:fs/promises";import{constants as Au}from"node:fs";import{tmpdir as pW}from"node:os";import vn from"node:path";import{spawn as mW}from"node:child_process";import{Client as fW}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as gW}from"@modelcontextprotocol/sdk/client/stdio.js";var Iu="https://registry.npmjs.org",Qv=512*1024,Ou=2*6e4,hW=2e4;function nb(){return"npm"}function Zv(e,r){return Buffer.byteLength(e)>=Qv?e:(e+r.toString("utf8")).slice(0,Qv)}function kW(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&vn.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Iu,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:t};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function ob(e,r,t=Ou,n){return new Promise((o,s)=>{let i,a;try{[i,a]=pe(e,r)}catch(m){s(m);return}let l=mW(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:kW(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=Zv(c,m)}),l.stderr.on("data",m=>{u=Zv(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&De(l.pid,"SIGKILL")},t);l.once("error",m=>{clearTimeout(p),s(m)}),l.once("close",m=>{clearTimeout(p),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function yW(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:cW(t).update(e).digest("base64")===n}async function RW(e,r,t,n){let o=await ob(nb(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${Iu}`,"--ignore-scripts"],Ou,vn.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||vn.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=vn.join(n,i);if(!yW(await tb(a),t))throw new Error("artifact_integrity_mismatch");return a}async function vW(e,r,t){if((await ob(nb(),["install","--global","--prefix",e,r,`--registry=${Iu}`,"--no-audit","--fund=false"],Ou,t)).code!==0)throw new Error("package_install_failed")}async function sb(e){let r=JSON.parse(await tb(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function bW(e){let r={};for(let t of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[t];n!==void 0&&(r[t]=n)}return r}async function eb(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Pu(e.local.binPath,Au.X_OK).catch(async()=>Pu(e.local.binPath,Au.R_OK));let r=new gW({command:e.local.binPath,args:[],env:bW(e.local.envAllowlist),stderr:"pipe"}),t=new fW({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([t.connect(r),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),hW)})]);let o=await t.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await t.close().catch(()=>{})}}async function rb(e,r,t,n,o){let s=await uW(vn.join(pW(),"kynver-mcp-update-"));try{let i=await RW(r,t,n,s);if(await o(),await vW(e.local.prefix,i,vn.join(s,"npm-cache")),await sb(e)!==t)throw new Error("installed_version_mismatch")}finally{await dW(s,{recursive:!0,force:!0})}}async function ib(e,r,t,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==r.inventoryKey||e.report.inventoryFingerprint!==r.inventoryFingerprint||e.report.packageName!==r.packageName)throw new Error("local_inventory_mismatch");if(r.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await t("preflight"),await Pu(e.local.prefix,Au.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await sb(e),s=r.resumePhase!==null&&o===r.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==r.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await t("installing"):(await rb(e,r.packageName,r.targetVersion,r.targetIntegrity,async()=>{await t("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:r.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await t("restarting"),await t("verifying");let a=await eb(e);return{outcome:"succeeded",observedVersion:r.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!r.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await rb(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await eb(e);return{outcome:"rollback_succeeded",observedVersion:r.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:r.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}import{randomBytes as Du}from"node:crypto";import{mkdir as Mu,readFile as Wu,rename as AW,rm as Ji,stat as IW,writeFile as db}from"node:fs/promises";import It from"node:path";import{createHmac as SW,timingSafeEqual as wW}from"node:crypto";import{mkdir as xW,readFile as _W,rename as EW,writeFile as CW}from"node:fs/promises";import{homedir as PW}from"node:os";import Tu from"node:path";function Nu(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Tu.join(PW(),".kynver","state","mcp-updates")}function ab(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Tu.join(Nu(),`${e}.json`)}function lb(e,r){let t=Cu(r);return t?SW("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function cb(e,r){try{let t=JSON.parse(await _W(ab(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=lb(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!wW(i,a)?null:t}catch{return null}}async function ub(e,r){let t=lb(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=ab(e.operationId);await xW(Tu.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await CW(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
183
|
+
`,{mode:384}),await EW(o,n)}var OW="host-mutation.lock";function pb(){return It.join(Nu(),OW)}async function mb(){try{let e=JSON.parse(await Wu(It.join(pb(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:fb(e.pid)}}catch{return null}}function fb(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function TW(e){try{return await IW(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function gb(){return NW("mcp_update")}async function NW(e){let r=pb(),t=`${r}.reclaiming`;await Mu(It.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await TW(t))return null;for(let o=0;o<2;o+=1)try{await Mu(r,{mode:448});let s={pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await db(It.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Ji(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Wu(It.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Ji(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Mu(t,{mode:448}),n=!0,await db(It.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:Du(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Wu(It.join(r,"owner.json"),"utf8"))}catch{return null}if(fb(i.pid))return null;let a=`${r}.stale-${process.pid}-${Du(8).toString("hex")}`;await AW(r,a),await Ji(a,{recursive:!0,force:!0})}return null}finally{n&&await Ji(t,{recursive:!0,force:!0})}}function zi(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function DW(e){if(!e||typeof e!="object")return null;let r=e.claim;if(!r||typeof r!="object"||r.waitingForIdle!==!1)return null;let t=r.command;return t&&typeof t=="object"?t:null}function hb(e,r){let t=r.claims;return e.inventoryKey===t.inventoryKey&&e.packageName===t.packageName&&e.installedVersion===t.installedVersion&&e.targetVersion===t.targetVersion&&e.targetIntegrity===t.targetIntegrity&&e.rollbackIntegrity===t.rollbackIntegrity&&e.item.report.inventoryKey===t.inventoryKey&&e.item.report.packageName===t.packageName}function MW(e,r){return{inventoryKey:r.claims.inventoryKey,packageName:r.claims.packageName,installedVersion:r.claims.installedVersion,targetVersion:r.claims.targetVersion,targetIntegrity:r.claims.targetIntegrity,rollbackIntegrity:r.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function kb(e){let r=Q(e.baseUrl),t=await zv();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await gt(zi(r,e.agentOsId,"inventory"),e.secret,{items:t.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await gb();if(!o){let s=await mb();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await gt(zi(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=DW(s.response);if(!i)return{ok:!0,stage:"idle"};if(!Xv(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await cb(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!hb(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let g=t.find(h=>h.report.inventoryKey===i.claims.inventoryKey);if(!g||g.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=g,c=a&&hb(a.recovery,i)?a.recovery:MW(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,w)=>{await ub({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await gt(zi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:g})).ok)throw new Error("progress_rejected");p=g,await d(g,!1)},f=g=>m(g),y=()=>m(p),k;try{k=await ib(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:y,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(g){k={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:g instanceof Error?g.message:"update_failed"}}let b=await gt(zi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return b.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:k.outcome}}finally{await o.release()}}function WW(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function LW(e,r){let t=q(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=I(yb.join(N(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Yr(a))continue;if(uo(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=J(a);if(!we(l))continue;let c=Ft({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await _o({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function BW(e,r,t,n,o){let s=Q(n.baseUrl?String(n.baseUrl):void 0),i=await ee(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await wv(),c=Os(r),u=null;try{let E=Wv(r);if(E.length>0){let S=Kv(r);u=Tv(E,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Ur()!=="off"){let E=jt();Fh({liveWorkers:E}),jh({liveWorkers:E})}else Bh()}catch{}let d=({runId:E,workerName:S})=>{try{let{runsDir:_}=le(),K=yb.join(Pr(_,x(E)),"workers",x(S),"worker.json"),$=I(K,null);return $?Yr($):!1}catch{return!1}};await jy({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=Yv({hasLiveWorker:d})}catch{p=null}let m=null;try{m=sd({control:Mt(e),supervisor:cd(),inFlightWorkers:jt().length})}catch{m=null}let f=jv(r),y=qu(),k=await X(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Pc(r),resourceGate:t,boxResourceSnapshot:eR(t,{harnessRunId:r,boxKind:br(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:He({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...y?{daemonEventLoop:y}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=Uv(k.response);if(b)try{Lv(r,b)}catch{}let g=Gv(k);if(g)try{Vv(r,g)}catch{}let h=Eh(k);h&&Ch(e,h);let w=td(k);return w&&od(e,w),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Rb(e){let r=String(yr(String(e.run||""),"--run")),t=String(yr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Pc(r);let o=await Ds(t,e),s=Ns(o),i=$n({runId:r,configuredMaxWorkersOverride:s}),a=vv()?Rv(r):void 0,l=await BW(t,r,i,e,a),c;if(n)try{let C=Q(e.baseUrl?String(e.baseUrl):void 0),re=await ee(e.secret?String(e.secret):void 0,t,{baseUrl:C});c=await kb({agentOsId:t,secret:re,baseUrl:C,activeOwnedSessions:jt().length})}catch(C){c={ok:!1,stage:"cycle",error:C instanceof Error?C.message:"update cycle failed"}}let u=uh(r,l),d=await ug(r,e),p=await LW(r,e);p.some(C=>C.ok&&!C.skipped)&&zy();let m=$n({runId:r,configuredMaxWorkersOverride:s}),f=Fy(),y=await nR(r,e),k=Sy(m,l),b=k.maxStarts,g=Mt(t),h=id(g);h&&(b=0);let w=WW()?await rR({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},E=null,S=0,_=by(l),K=b;if(n&&K>0&&_.length>0){let C=Math.min(K,_.length),re=await Kc({...e,run:r,agentOsId:t,targetTaskIds:_.join(",")},C),ke=mn(re);S+=ke,K=Math.max(0,K-ke),E={exactTargetTaskIds:_,exact:re,startedCount:S}}if(n&&K>0){let C=await Kc({...e,run:r,agentOsId:t},K),re=mn(C);S+=re,E=E&&typeof E=="object"?{...E,broad:C,startedCount:S}:C}else!n||b<=0?E||(E={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,..._.length?{exactTargetTaskIds:_,exactOnly:!0}:{}}):E&&typeof E=="object"&&(E={...E,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&b===0&&p.length===0&&S===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:p,staleReconcile:f,harnessCleanup:a,planProgressSync:y,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:w,dispatchAdvice:k,dispatch:E,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}_n();Vt();_n();function vb(e){return Vo(Mt(e))!=="stopped"?null:jt().length}function bb(e){if(!e||typeof e!="object")return!1;let r=e;return r.type==="tick"&&typeof r.id=="number"&&typeof r.agentOsId=="string"&&!!r.args&&typeof r.args=="object"}function UW(e){e&&(Qy({admission:e.admission,ownerKind:e.ownerKind}),ld(e.ownerKind))}async function FW(e,r={}){try{e.instructionBundle&&zu(e.instructionBundle.bundle,e.instructionBundle.source),Yu(e.eventLoopReport);let t=await(r.runTick??Rb)(e.args),n=(r.countInFlightWorkers??vb)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function Sb(e,r,t={}){UW(r);let n=Promise.resolve();e.on("message",o=>{bb(o)&&(n=n.then(async()=>{e.postMessage(await FW(o,t))}))})}wb?Sb(wb,KW):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|