@kynver-app/runtime 0.2.118 → 0.2.122
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/dist/cli.js +192 -185
- package/dist/daemon-tick-thread.js +111 -0
- package/dist/desktop-entry.js +148 -141
- package/dist/index.js +215 -208
- package/dist/local-run-store/index.js +9 -9
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +3 -3
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/model-routing.js +3 -3
- package/dist/server/monitor.js +7 -7
- package/dist/server/worker-policy.js +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
var A=(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 mv}from"node:child_process";function hv(e){return["/PID",String(e),"/T","/F"]}function kv(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===fv||/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 yv(e){let r=mv("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:gv});return{status:r.status,stderr:r.stderr??"",...r.error?{error:r.error}:{}}}function Rv(e){return Number.isInteger(e)&&e>0}function rr(e,r="SIGTERM",t={}){if(!Rv(e))return{method:"none",outcome:"not_found"};if((t.platform??process.platform)==="win32"){let s=t.runTaskkill??yv;return kv(s(hv(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 fv,gv,Ni=A(()=>{"use strict";fv=128,gv=15e3});import{existsSync as vv,mkdirSync as bv,readFileSync as yu,readdirSync as wM,renameSync as Sv,rmSync as wv,statSync as Ru,writeFileSync as xv}from"node:fs";import{randomBytes as _v}from"node:crypto";import Cv from"node:path";function $e(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function fr(e,r){return e||$e(`missing ${r}`),e}function dn(e){try{return JSON.parse(e)}catch{return null}}function I(e,r){try{return JSON.parse(yu(e,"utf8"))}catch(t){if(arguments.length>1)return r;$e(`failed to read ${e}: ${t.message}`)}}function ue(e,r){bv(Cv.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${_v(4).toString("hex")}.tmp`;try{xv(t,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`),Sv(t,e)}catch(n){try{wv(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Co(e){return String(e).replace(/\/+$/,"")}function Eo(e){try{return Ru(e).size}catch{return 0}}function Po(e){try{return Ru(e).mtime.toISOString()}catch{return null}}function Mi(e,r){return vv(e)?yu(e,"utf8").split(`
|
|
3
|
+
`).slice(-r).join(`
|
|
4
|
+
`):""}function z(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function vu(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 Di(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var O=A(()=>{"use strict";Ni()});import{existsSync as Ev,readFileSync as Pv}from"node:fs";import{homedir as Av}from"node:os";import Iv from"node:path";function Li(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function Wi(e){return typeof e=="string"&&e.trim()?e:null}function bu(e){let r=Li(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=Wi(r.requestedAt);return o?{desiredState:t,policyVersion:n,requestedAt:o,requestedByLabel:Wi(r.requestedByLabel),reason:Wi(r.reason)}:null}function Su(e){let r=Li(Li(e)?.response);return!r||r.runtimeControl===void 0?null:bu(r.runtimeControl)}function wu(e,r=Av()){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return Iv.join(r,".kynver",`runtime-control-${t}.json`)}function xu(e,r,t){try{let n=Ct(e,t);if(n&&n.policyVersion>r.policyVersion)return;ue(wu(e,t),{contractVersion:1,agentOsId:e,control:r,deliveredAt:new Date().toISOString()})}catch{}}function Ct(e,r){try{let t=wu(e,r);if(!Ev(t))return null;let n=JSON.parse(Pv(t,"utf8"));return n.agentOsId!==e?null:bu(n.control)}catch{return null}}function Ao(e){return e?.desiredState??"running"}function Ov(e){return e==="keeper"||e==="desktop"}function Tv(e,r,t=!1){let n=Ao(e);return n==="paused"?"paused":n==="stopped"?t&&r===0?"stopped":"stopping":"running"}function _u(e){return e.control?{policyVersion:e.control.policyVersion,state:Tv(e.control,e.inFlightWorkers,e.exiting),supervised:Ov(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function Cu(e){let r=Ao(e);return r==="paused"?"runtime_paused":r==="stopped"?"runtime_stopped":null}function Pu(e){Eu=e}function Au(){return Eu}var Eu,pn=A(()=>{"use strict";O();Eu=null});import{homedir as Iu}from"node:os";import Ou from"node:path";function Nv(e){return e==="~"?Iu():e.startsWith("~/")||e.startsWith("~\\")?Ou.join(Iu(),e.slice(2)):e}function je(e){return Ou.resolve(Nv(e))}var Wr=A(()=>{"use strict"});function Kv(e){let r=e[Fv];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function Hv(e,r={}){return Dv.has(e)?!0:Uv.has(e)||r.operatorAllow?.has(e)||Bv.some(t=>e.endsWith(t))?!1:Wv.some(t=>e.endsWith(t))}function Ui(e){let r=Kv(e),t={...e};for(let n of Object.keys(t))Hv(n,{operatorAllow:r})&&delete t[n];return t}var Mv,Dv,Wv,Lv,Uv,Bv,Fv,Bi=A(()=>{"use strict";Mv=["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"],Dv=new Set(Mv),Wv=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],Lv=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Uv=new Set(Lv),Bv=["_PUBLIC_KEY"],Fv="KYNVER_WORKER_ENV_ALLOW"});import{spawnSync as Nu}from"node:child_process";function Q(e,r,t={}){let n=Nu("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=$v(e,r,n);if(t.throwError)throw new Error(o);$e(o)}return n.stdout||""}function $v(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 mn(e){return Q(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function te(e,r){try{let t=Nu("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 Tu(e,r,t){let n=te(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 Io(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 Et(n,"missing worktree path");let s=te(e,["rev-parse","HEAD"]);if(s.status!==0)return Et(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=te(e,["rev-parse",n]);if(p.status!==0)return Et(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=Tu(e,i,a),c=Tu(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 Et(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var de=A(()=>{"use strict";Wr();O();Bi()});var Fi=A(()=>{"use strict";de()});import{existsSync as Hi,readFileSync as Du}from"node:fs";import{homedir as jv}from"node:os";import Ve from"node:path";import{fileURLToPath as Vv}from"node:url";function Yv(e){let r=Ve.join(e,"package.json");if(!Hi(r))return null;try{let t=JSON.parse(Du(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Wu(e){return Yv(e)==="kynver"}function Mu(e){let r=Ve.resolve(e);if(!Hi(r))return null;let t=te(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?Ve.resolve(n):null}function qv(e=import.meta.url){let r=Ve.dirname(Vv(e));for(let t=0;t<8;t+=1){let n=Ve.join(r,"package.json");if(Hi(n))try{if(JSON.parse(Du(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=Ve.dirname(r);if(o===r)break;r=o}return null}function Ki(e,r,t,n,o){if(!t)return;let s=Ve.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!Wu(s)||(e.add(s),r.push({repo:s,source:n}))}function Jv(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Ki(t,n,Mu(r),"cwd_git",{requireMonorepo:!1});let o=qv(e?.runtimeModuleUrl??import.meta.url);o&&Ki(t,n,Mu(o),"runtime_checkout");let s=jv();for(let a of Gv)Ki(t,n,je(Ve.join(s,a)),"well_known_path");let i=Ve.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!Wu(a.repo))return!0;let l=Ve.resolve(a.repo);return i===l||i.startsWith(`${l}${Ve.sep}`)})}function Oo(e){return Jv(e)[0]??null}var Gv,fn=A(()=>{"use strict";de();Wr();Fi();Gv=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function Bu(e){let r=Co(e);try{let t=new URL(r);return t.hostname.toLowerCase()===Lu?(t.hostname=`www.${Lu}`,Co(t.toString())):r}catch{return r}}function gn(e){if(e?.trim())return Bu(Co(e.trim()))}async function hn(e,r,t=fetch){let n=Bu(e),o=new Headers(r?.headers),s=0;for(;s<=Uu;){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 ${Uu} redirects for ${e}`)}var Lu,Uu,kn=A(()=>{"use strict";O();Lu="kynver.com";Uu=10});function Qr(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 To(e,r){return e[r]?.trim()||null}function Fu(e){let r=e?.split(":")[0]?.trim();return r?Qr(r):null}function gr(e=process.env,r={}){let t=[],n=Fu(r.boxId),o=Fu(To(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==Qr(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:Qr(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=To(e,"KYNVER_BOX_KIND");if(i)return o&&o!==Qr(i)&&t.push(`KYNVER_BOX_ID=${To(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:Qr(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=To(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 hr(e={},r=process.env){return gr(r,e).boxKind}var Oe=A(()=>{"use strict"});function $i(e,r){return e==="forge"?4:Math.max(1,r)}function yn(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var No=A(()=>{"use strict"});import{readFileSync as zv}from"node:fs";import Ku from"node:os";function Hu(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Ku.freemem()}if(process.platform==="linux")try{let t=zv("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Ku.freemem()}var $u=A(()=>{"use strict"});import{existsSync as Xv,readFileSync as Qv,statfsSync as Zv}from"node:fs";function ji(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Xv(e))continue;let r=Qv(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function ju(e={}){if(!(e.forceWsl===void 0?ji():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Pt,n=e.wslHostFreeWarnBytes??eb,o=e.wslHostFreeCriticalBytes??rb,s=e.statfs??Zv,i;try{i=s(t)}catch(b){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${b.message}`,probeError:b.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,p=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${tb()}`),{ok:p,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function tb(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var eb,rb,Pt,Vi=A(()=>{"use strict";eb=25*1024*1024*1024,rb=12*1024*1024*1024,Pt="/mnt/c"});import{execFileSync as Vu}from"node:child_process";import{existsSync as Do,readFileSync as Gu,readdirSync as nb,statSync as ob}from"node:fs";import Gi from"node:path";function Mo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Yu(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Vu("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()||Pt;return r&&Do(Gi.join(t,"Users",r))?r:null}function cb(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()||Pt,n=e.windowsUser??Yu();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function ub(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 db(){try{if(Do("/proc/sys/kernel/core_pattern"))return Gu("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Vu("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function pb(e){return!!(e&&/wsl-capture-crash/i.test(e))}function mb(e,r=Pt){let t=Gi.join(r,"Users",e,".wslconfig");if(!Do(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Gu(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 fb(e){if(!Do(e))return[];let r=nb(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Gi.join(e,n.name);try{let s=ob(o),i=ub(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 At(e={}){if(!(e.forceWsl===void 0?ji():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Pt,n=e.windowsUser??Yu(),o=e.warnBelowBytes??Mo("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",sb),s=e.criticalBelowBytes??Mo("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",ib),i=e.warnCount??Mo("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",ab),a=e.criticalCount??Mo("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",lb),l=(e.readCorePattern??db)(),c=pb(l),u=null;n&&(u=(e.readWslConfig??mb)(n,t));let d=u?.maxCrashDumpCount??null,p=d===-1,m=cb({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??fb)(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 b=f.reduce(($,_)=>$+_.bytes,0),k=f.length,R=[...new Set(f.map($=>$.executableHint).filter($=>!!$))],g=b>=s,h=b>=o,E=k>=a,P=k>=i,w=!(g||E||h||P),V=null;if(!w){let $=g||E?"critical":"warning",_=(b/1024**3).toFixed(1),Z=R.length>0?R.join(", "):"unknown";V=`WSL crash dumps ${$}: ${k} file(s), ${_} GiB at ${m} (executables: ${Z}). `+gb({wslCaptureEnabled:c,dumpsDisabledInWslConfig:p})}return{ok:w,path:m,windowsUser:n,dumpCount:k,totalBytes:b,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:R,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:V,probeError:null}}function gb(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 sb,ib,ab,lb,Wo=A(()=>{"use strict";Vi();sb=5*1024*1024*1024,ib=10*1024*1024*1024,ab=2,lb=4});import{statfsSync as hb}from"node:fs";function Lr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??kb,n=e.diskFreeCriticalBytes??yb,o=e.diskMaxUsedPercent??Rb,s=e.diskHardMaxUsedPercent??vb,i=hb(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,b=!u&&!d&&!m&&!f,k=e.skipWslHostCheck?null:ju(e.wslHost),R=e.skipWslCrashDumpCheck?null:At(e.wslCrashDumps),g=b&&(k?k.ok:!0)&&(R?R.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,R&&!R.ok?R.reason:null].filter(Boolean).join("; ")),bb({ok:g,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:h,wslHost:k,wslCrashDumps:R?{ok:R.ok,path:R.path,dumpCount:R.dumpCount,totalBytes:R.totalBytes,executables:R.executables,wslCaptureEnabled:R.wslCaptureEnabled,dumpsDisabledInWslConfig:R.dumpsDisabledInWslConfig,reason:R.reason,probeError:R.probeError}:null})}function bb(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 kb,yb,Rb,vb,Rn=A(()=>{"use strict";Wo();Vi();kb=30*1024*1024*1024,yb=15*1024*1024*1024,Rb=80,vb=90});import{existsSync as Sb,readdirSync as wb}from"node:fs";import xb from"node:path";function tr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=xb.join(M(e.id),"workers");if(!Sb(t))return[...r];for(let n of wb(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var vn=A(()=>{"use strict";B();O()});function Yi(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 qu(e){let r=e.trim();if(!r)return null;let t=Yi(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Yi(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Yi(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Ju(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?qu(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=qu(t);return n||t}var zu=A(()=>{"use strict"});import{existsSync as _b,readFileSync as Cb}from"node:fs";function Xu(e){return e==="complete"}function kr(e){return Xu(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function pe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!_b(e))return r;let t=Date.now()+Eb,n=new Date(t).toISOString(),o=Cb(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=dn(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)),Xu(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Ju(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 Eb,Zr=A(()=>{"use strict";zu();O();Eb=6e4});function Zu(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Lo(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 ed(e){let r=Zu(e[0]);return!!(r&&Pb.has(r))}function Ib(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Ob(e){if(!e||e.includes("*"))return null;let r=Ib(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function rd(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function qi(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Tb(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Nb(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;Qu.has(n)&&(t+=1);continue}r.push(n)}}return r}function Mb(e){let r=!1,t=e.map((o,s)=>{let i=Tb(o),a=e[s-1];return a&&Qu.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Nb(t);if(n.length===2){let[o,s]=n;if(qi(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Ob(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 td(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 Uo(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=Lo(r);if(!t.length)return{command:r,wrapped:!1};let n=Zu(t[0]);if(!n||!Ab.has(n))return{command:r,wrapped:!1};let o=td(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 Db(e,r){let t=e.trim(),n=Lo(t),o=td(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Wb(e){let r=e.trim(),t=Uo(r),n=Lo(t.command);if(!n.length||!ed(n))return{segment:r,changed:!1};let o=Mb(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:Db(r,s),changed:!0}:{segment:s,changed:!0}}function Ji(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=Wb(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function nd(e){let r=Uo(e).command,t=Lo(r.trim());return t.length&&ed(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function od(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 Lb(e){let{pattern:r,target:t}=od(e);return r?qi(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:rd(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Ub(e){let{pattern:r,target:t}=od(e);if(!r)return null;if(qi(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&rd(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Bb(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 Fb(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 zi(e){let r=e.meta?.trim()||(e.command?Fb(e.command):null)||null;if(r){let t=Lb(r),n=Bb(t);if(n)return n;let o=Ub(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=Ji(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 Pb,Ab,Qu,sd=A(()=>{"use strict";Pb=new Set(["rg","ripgrep","grep"]),Ab=new Set(["bash","sh","dash","zsh"]),Qu=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function bn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function $b(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 Sn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function jb(e){let r=e.metadata;if(!Sn(r))return null;let t=r.vulnerabilities;if(!Sn(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 Vb(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 Gb(e,r){let t=e.error;if(Sn(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?bn(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function Yb(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=$b(r);if(!t||!Sn(t)){let o=bn(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Sn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Gb(t,e.stderr)}`};let n=jb(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:Vb(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function qb(e){return Kb.test(e)}function Jb(e){let r=Uo(e).command;return id.test(e)||id.test(r)||nd(e)}function zb(e){let r=zi({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&&Hb.test(n)){let i=bn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Ji(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=bn(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function ad(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(qb(e.command)){let i=r.trim()||n.trim()||t.trim();return Yb({exitCode:e.exitCode,stdout:i,stderr:t})}if(Jb(e.command))return zb({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=zi({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=bn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Kb,id,Hb,ld=A(()=>{"use strict";sd();Kb=/\bnpm\s+audit\b/i,id=/\b(rg|ripgrep)\b/i,Hb=/\b(error|invalid|unknown|panic|not found)\b/i});function wn(e){return typeof e=="string"&&Xb.test(e.trim())}function Bo(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 Xb,Fo=A(()=>{"use strict";Xb=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function Xi(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Qb(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 cd(e){if(e.event==="step_update"&&Xi(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"||!Xi(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=Xi(r.usage)?Qb(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 ud=A(()=>{"use strict"});function Qi(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function dd(){return{assistantText:""}}function Zb(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function eS(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=(Qi(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 rS(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function pd(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Zb(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!rS(e))return null;let t=Qi(e.stats)?eS(e.stats):void 0;if(e.status==="error"){let o=Qi(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 md=A(()=>{"use strict"});import{existsSync as tS,readFileSync as nS}from"node:fs";function oS(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function sS(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 iS(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",Bo(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function It(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function aS(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function lS(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 cS(e,r){let t=aS(r);if(!t)return;let n=It(t.input_tokens)??It(t.inputTokens)??It(t.prompt_tokens),o=It(t.output_tokens)??It(t.outputTokens)??It(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=lS(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function uS(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 dS(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function et(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!tS(e))return r;let t=nS(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=dd();for(let s of t){let i=dn(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=oS(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=sS(p);m&&(r.currentTool=m)}let l=uS(i);l&&dS(r,ad({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=cd(i),u=c?null:pd(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"&&iS(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"}cS(r,i)}return r}var xn=A(()=>{"use strict";ld();O();Fo();ud();md()});function fd(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function _n(e){let r=(e??"").trim();if(!r)return null;if(wn(r))return{blocked:!0,reason:`provider authentication failed: ${fd(r)}`};for(let t of pS)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${fd(r)}`};return null}var pS,Zi=A(()=>{"use strict";Fo();pS=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function gd(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mS(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 fS(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:gd(e.head)}function gS(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 Ot(e){if(e.alive||mS(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=gd(e.headCommit)??fS(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:gS(s,r,t)}}var Ko=A(()=>{"use strict"});import{existsSync as hS,readFileSync as kS,statSync as yd}from"node:fs";import Ho from"node:path";function bS(e,r=process.env){let t=e?RS:yS,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 SS(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function ea(e){try{return yd(e).mtimeMs}catch{return-1}}function wS(e){let r=Ho.join(e,".git");try{if(yd(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(kS(r,"utf8"));return t?Ho.resolve(e,t[1].trim()):null}catch{return null}}function hd(e){let r=wS(e);return[ea(e),r?ea(Ho.join(r,"HEAD")):-2,r?ea(Ho.join(r,"index")):-2].join(":")}function kd(e,r){return{changedFiles:mn(e),gitAncestry:Io(e,{base:r.base,baseCommit:r.baseCommit})}}function xS(e,r){for(Ur.delete(e),Ur.set(e,r);Ur.size>vS;){let t=Ur.keys().next().value;if(t===void 0)break;Ur.delete(t)}}function Rd(e,r,t){let n=SS(r);if(!e||!e.trim())return Cn.missingWorktree++,{changedFiles:[],gitAncestry:Et(n,"missing worktree path")};let o=`${e}\0${n}`;if(!hS(e))return Ur.delete(o),Cn.missingWorktree++,{changedFiles:[],gitAncestry:Et(n,`worktree no longer exists: ${e}`)};if(t.alive)return Ur.delete(o),Cn.liveProbes++,kd(e,r);let s=t.ttlMs??bS(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=hd(e),l=Ur.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Cn.hits++,l.probe;Cn.misses++;let c=kd(e,r);if(s>0){let u=.8+.4*(t.random??Math.random)();xS(o,{fingerprint:hd(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var yS,RS,vS,Ur,Cn,vd=A(()=>{"use strict";de();yS=10*6e4,RS=60*6e4,vS=2048,Ur=new Map,Cn={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function En(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function _S(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 CS(e){if(En(e.headCommit)||En(e.prUrl)||En(e.artifactBundlePath)||En(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&En(r.head))}function Tt(e){return _S(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:CS(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 bd(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var $o=A(()=>{"use strict"});function ra(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Sd(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Nt(e){let r=e.trim();if(!r)return null;let t=ra(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ra(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ra(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Sd(l);for(let u of n){let d=Sd(u);d>c&&(l=u,c=d)}return l}var jo=A(()=>{"use strict"});function wd(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 xd(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function ES(e){return new Set(e.map(r=>xd(wd(r)??r)).filter(Boolean))}function _d(e,r,t){let n=wd(e)??e;if(!n)return"unrelated";let o=xd(n);return ES(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Cd=A(()=>{"use strict"});function Mt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function PS(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function rt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Mt(e)}function Vo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Ed(e){let r=null;if(typeof e=="string"){let o=Nt(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=rt(String(s.prUrl??s.pr_url??"")),a=Mt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Mt(s.mergeCommit??s.merge_commit),reason:Mt(s.reason)})}return n}function Pd(e,r){let t=[],n=rt(Mt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=rt(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ad(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(!PS(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?rt(Mt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?rt(r.targetPrUrls[0]):null):null;if(s){let d=Pd(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let b of d)if(b!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${b} instead of canonical target ${s}`}}let f=Ed(n).find(b=>b.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=Ed(n),a=new Map(i.map(d=>[Vo(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Vo(rt(d)??d)).filter(Boolean)),c=Pd(t,n);if(r.landingOnly)for(let d of c){let p=a.get(Vo(d)),m=_d(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=Vo(rt(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 Id(e){if(e.blocked)return e.detail??e.reason}var Od=A(()=>{"use strict";jo();Cd()});function IS(e){let r=Date.now();if(e.providerTerminalError||Bo(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:_n(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Td(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&TS(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=Tt(o);if(s.blocked){let i=bd(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ad({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Id(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(OS(e))return{state:"done",reason:"empty abandoned worker record"};let o=_n(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ot({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${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>AS)return{state:"needs_attention",reason:`no first stream event ${Di(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ta?{state:"stale",reason:`no log/event/heartbeat activity for ${Di(n)}s`}:{state:"ok",reason:"recent activity"}}function Td(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function OS(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 TS(e){let r=null;if(typeof e=="string"?r=Nt(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 Nd(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??kr(t))}function Md(e){let r=et(e.stdoutPath),t=pe(e.heartbeatPath);return Nd(e,r.finalResult,t)}function Y(e,r={}){let t=et(e.stdoutPath),n=pe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Nd(e,t.finalResult,n),i=o?!1:z(e.pid),a=Eo(e.stdoutPath),l=Eo(e.stderrPath),c=Eo(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Rd(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=vu([t.lastEventAt,n.lastHeartbeatAt,Po(e.stdoutPath),Po(e.stderrPath),Po(e.heartbeatPath)]),m=t.error||!i&&!s&&Mi(e.stderrPath,10).trim()||void 0,f=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,b=Td(f)?null:f,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,R=IS({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:m,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:b,landingContract:k,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),g=b||R.state==="blocked"?"blocked":o||R.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:g,attention:R,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:m,providerTerminalError:t.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function Se(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Dd(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function na(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 AS,ta,me=A(()=>{"use strict";Zr();xn();Fo();Zi();Ko();vd();$o();Od();jo();O();AS=18e4,ta=6e5});import{readFileSync as NS}from"node:fs";function MS(e){if(!e||process.platform!=="linux")return null;try{return NS(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Wd(e){if(!e.pid||process.platform!=="linux")return!0;let r=MS(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 Br(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!z(e.pid)||!Wd(e)?!1:!Md(e)}var Go=A(()=>{"use strict";me();O()});import Ud from"node:os";import Bd from"node:path";function Ld(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function DS(e=U(),r,t){let n=Ld(e.perWorkerMemBytes,Yo),o=Ld(e.memReserveBytes,qo),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Jo)),i=Xo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Ud.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Fd(e,r={}){let t=r.perWorkerMemBytes??Yo,n=r.memReserveBytes??qo,o=r.memUtilization??Jo,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,zo)}function WS(){return Hu()}function LS(e){let r=0;for(let t of tr(e)){let n=I(Bd.join(M(e.id),"workers",x(t),"worker.json"),void 0);!n||!Br(n)||r++}return r}function oa(){let e=0;for(let r of Ge())e+=LS(r);return e}function Dt(){let e=[];for(let r of Ge())for(let t of tr(r)){let n=I(Bd.join(M(r.id),"workers",x(t),"worker.json"),void 0);n&&Br(n)&&e.push({runId:r.id,workerName:t})}return e}function Pn(e){let r=e.config??U(),t=e.totalMemBytes??Ud.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=DS(r,e.configuredMaxWorkersOverride,t),c=hr(r),u=e.freeMemBytes??WS(),d=e.activeWorkers??oa(),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)),b=a,k=yn(c,i??b),R=Math.max(0,Math.min(k,m)),g=Math.max(0,R-d),E=Math.min(g,f),S=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Lr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});S&&!S.ok&&(E=0);let w=null;return E<=0&&(S&&!S.ok?w=S.reason??"disk gate blocked worker admission":d>=R?w=`at worker limit (${d}/${R} running)`:f<=0?w="insufficient free memory \u2014 waiting for workers to finish":w="no worker slots available"),{ok:E>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:b,capacityWorkers:m,maxConcurrentWorkers:R,activeWorkers:d,slotsAvailable:E,reason:w,...S?{diskGate:S}:{}}}var Yo,qo,Jo,zo,Wt=A(()=>{"use strict";$u();K();Oe();No();Qo();Rn();B();vn();Go();O();Yo=500*1024*1024,qo=4*1024*1024*1024,Jo=.85,zo=64});function An(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Xo(e){let r=e.config??{},t=e.env??process.env,n=An(r.perWorkerMemBytes,Yo),o=An(r.memReserveBytes,qo),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Jo)),i=Fd(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:An(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=An(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,zo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&An(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,zo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Qo=A(()=>{"use strict";Wt()});import{homedir as US}from"node:os";import BS from"node:path";var Kd,sa=A(()=>{"use strict";Kd=BS.join(US(),".kynver",".env")});var Hd=A(()=>{"use strict"});var $d=A(()=>{"use strict";Hd()});var jd=A(()=>{"use strict"});var ia=A(()=>{"use strict";$d();jd();pn()});import{existsSync as FS,readFileSync as KS}from"node:fs";function aa(){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(FS("/proc/version")){let e=KS("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var la=A(()=>{"use strict"});var Vd=A(()=>{"use strict";la()});var Zo=A(()=>{"use strict";sa();Wr();K();ia();Vd()});import $S from"node:os";function ca(e,r){let t=(r??$S.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function qd(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Jd(e,r){let t=e.trim();if(!t)return ca(r);let n=t.indexOf(":");if(n>=0){let o=t.slice(0,n).trim().toLowerCase()||r,s=qd(t.slice(n+1));return s?`${o}:${s}`:ca(o)}return`${r}:${qd(t)}`}function es(e){let r=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return r?Jd(r,e.boxKind):ca(e.boxKind,e.hostLabel)}var rs=A(()=>{"use strict";Oe();Oe()});var zd=A(()=>{"use strict";sa();ia();Zo()});function ns(){return ts}function Qd(e){if(!ts)return e;if(!Xd)throw new ua;return Xd}function Ye(e,r=process.env){if(ts)return;let t=r[e]?.trim();return t||void 0}function pa(){if(ts)throw new da}var ua,da,ts,Xd,In=A(()=>{"use strict";ua=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},da=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},ts=!1,Xd=null});import{existsSync as yr,mkdirSync as jS,readdirSync as os,renameSync as Zd,statSync as VS}from"node:fs";import Rr from"node:path";function rp(e){try{return VS(e).isDirectory()}catch{return!1}}function GS(e){if(!yr(e))return!0;for(let r of ep){let t=Rr.join(e,r);if(yr(t)&&(!rp(t)||os(t).length>0))return!1}return!0}function YS(e){let r=Rr.join(e,"runs");if(!yr(r)||!rp(r))return!1;for(let t of os(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Rr.join(r,t.name,"run.json");if(I(n,void 0)?.id)return!0}return!1}function qS(e){let r=Rr.join(e,"runs");if(!yr(r))return!1;for(let t of os(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(I(Rr.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function JS(e){let r=Rr.join(e,"ghost");return yr(r)?!yr(Rr.join(r,"runs")):qS(e)}function tp(e){return YS(e.sharedRoot)?GS(e.forgeRoot)?JS(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 np(e,r){jS(r,{recursive:!0});for(let t of ep){let n=Rr.join(e,t),o=Rr.join(r,t);if(yr(n)){if(yr(o)&&os(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(yr(o)){Zd(n,o);continue}Zd(n,o)}}}var ep,op=A(()=>{"use strict";O();ep=["runs","worktrees"]});import{existsSync as Re}from"node:fs";import{homedir as zS}from"node:os";import fe from"node:path";function ma(e=process.env){return e.HOME?.trim()||zS()}function fa(e=process.env){return fe.join(ma(e),".kynver","harness")}function ss(e){let r=fe.resolve(je(e.trim()));for(;XS.has(fe.basename(r));)r=fe.dirname(r);return r}function QS(e,r=process.env){return fe.join(fa(r),e)}function ZS(e=process.env){let r=fa(e);if(Re(fe.join(r,"runs")))return!0;if(Re(r)&&!Re(fe.join(r,"ghost"))&&!Re(fe.join(r,"forge")))return Re(r);let t=fe.join(ma(e),sp);return Re(t)}function is(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:ss(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:ss(n),source:"config"};let o=QS(e.boxKind,r);if(Re(fe.join(o,"runs"))||Re(o)&&!ew(o))return{harnessRoot:o,source:"box_scoped"};let i=fa(r);if(e.boxKind==="forge"){let a=tp({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&&np(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&ZS(r)){if(Re(fe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Re(i)&&!Re(fe.join(i,"ghost"))&&!Re(fe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=fe.join(ma(r),sp);if(Re(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function ew(e){if(!Re(e))return!0;for(let r of["runs","worktrees"]){let t=fe.join(e,r);if(Re(t))return!1}return!0}var sp,XS,ga=A(()=>{"use strict";Wr();op();sp=fe.join(".openclaw","harness");XS=new Set(["runs","worktrees"])});import ip from"node:os";function as(e){return e?.trim()?e.trim():null}function rw(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function tw(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 Lt(e=U(),r=process.env,t={}){let n=gr(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||as(r.KYNVER_BOX_KIND)),a=t.strict===!0||tw(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 b="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(b):o.push(`${b} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=as(e.runnerId),c=as(r.KYNVER_RUNTIME_ID)??as(r.OPENCLAW_RUNTIME_ID),u=l??c??rw(n.boxKind,ip.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=Xo({config:e,env:r,totalMemBytes:ip.totalmem()}),m=yn(n.boxKind,p.configuredMaxWorkers??$i(n.boxKind,p.autoCap)),f=is({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var On=A(()=>{"use strict";K();Oe();No();Qo();ga()});var lp=A(()=>{"use strict";fn();Oe();rs();K();Zo();zd();kn();In();On()});function nr(e){let r=e.trim().toLowerCase();return sw[r]??r}var cp,ow,sw,ls=A(()=>{"use strict";cp=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],ow=cp.join("|"),sw={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 up=A(()=>{"use strict";Wr()});var dp=A(()=>{"use strict";up()});import{execFileSync as iw}from"node:child_process";function ya(e=process.env){let r=e[aw]?.trim().toLowerCase();return r==="file"?"file":r==="keychain"?"keychain":"auto"}function lw(e,r,t){let n={encoding:"utf8",timeout:t.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...t.input!==void 0?{input:t.input}:{}};return iw(e,r,n)}function cw(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function ha(e,r){let t=JSON.stringify(tt),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 pp(e={}){if(ya(e.env??process.env)==="file")return null;let t=cw(e.platform??process.platform);return t?new ka(t,e.exec):null}var tt,aw,vr,ka,mp=A(()=>{"use strict";tt="kynver",aw="KYNVER_CREDENTIAL_STORE";vr=5e3;ka=class{constructor(r,t=lw){this.backend=r;this.exec=t}backend;exec;get(r){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",tt,"-a",r,"-w"],{timeoutMs:vr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",tt,"account",r],{timeoutMs:vr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",ha("get",r)],{timeoutMs:vr}).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",tt,"-a",r,"-l",`Kynver (${r})`,"-w",t],{timeoutMs:vr}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${r})`,"service",tt,"account",r],{input:`${t}
|
|
10
|
+
`,timeoutMs:vr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",ha("set",r)],{input:`${t}
|
|
11
|
+
`,timeoutMs:vr})}catch{return!1}return this.get(r)===t}delete(r){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",tt,"-a",r],{timeoutMs:vr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",tt,"account",r],{timeoutMs:vr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",ha("delete",r)],{timeoutMs:vr})}catch{}}}});function Sa(){return Ra||(Ra=new va),Ra}var ba,uw,cs,va,Ra,fp=A(()=>{"use strict";mp();ba="api-key",uw=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?pp({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<uw)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=ya(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()}},Ra=null});import{existsSync as hp,mkdirSync as pw,readFileSync as kp,writeFileSync as mw}from"node:fs";import{homedir as fw,totalmem as f0}from"node:os";import _a from"node:path";function gw(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:je(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:je(e.defaultRepo.trim())}:{}}}function U(){if(!hp(gp))return{};try{return gw(JSON.parse(kp(gp,"utf8")))}catch{return{}}}function us(){if(pa(),!hp(wa))return{};try{return JSON.parse(kp(wa,"utf8"))}catch{return{}}}function xa(e){pa(),pw(Ca,{recursive:!0}),mw(wa,`${JSON.stringify(e,null,2)}
|
|
12
|
+
`,{mode:384})}function hw(e,r,t,n={}){let o=us();if(Sa().write(e,t)){let i={...o,...n};delete i[r],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),xa(i);return}xa({...o,...n,[r]:t})}function kw(e,r){let t=Sa().read(e);return t||us()[r]}function Ea(){return Qd(yw)}function nt(){return Ea().getApiKey()}function ds(e){return Ea().getRunnerToken(e)}function Pa(e,r){Ea().persistRunnerToken(e,r)}function X(e){let r=Tn(e);return r||vp("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Aa(e){return Tn(e)}function Tn(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 gn(r)}function Rw(e,r){let t=e||ds(r)||(r?void 0:ds(U().agentOsId));if(t)return String(t);let n=Ye("KYNVER_RUNTIME_SECRET")||Ye("KYNVER_CRON_SECRET")||Ye("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 vw(e,r,t){let n=Rw(e,r);if(n)return{ok:!0,secret:n};let o=nt(),s=Tn(t?.baseUrl);if(o&&r&&s)try{let i=await Ia(r,{baseUrl:s,apiKey:o});return Pa(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 re(e,r,t){let n=await vw(e,r,t);if(n.ok)return n.secret;vp(n.reason)}async function yp(e,r){let t=nt(),n=Tn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Ia(e,{baseUrl:n,apiKey:t});return Pa(e,o),o}catch{return null}}async function Rp(e,r,t){let n=nt(),o=Tn(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 Ia(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Pa(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 Ia(e,r){let t=r?.apiKey||nt();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${X(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await hn(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 vp(e){console.error(e),process.exit(1)}var Ca,gp,wa,I0,O0,yw,K=A(()=>{"use strict";fn();Wr();kn();Oe();No();Qo();Rn();Zo();lp();ls();On();dp();In();fp();Ca=_a.join(fw(),".kynver"),gp=_a.join(Ca,"config.json"),wa=_a.join(Ca,"credentials");I0=500*1024*1024,O0=4*1024*1024*1024;yw={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:kw(ba,"apiKey")},getRunnerToken(e){let r=us();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){hw(ba,"apiKey",e)},persistRunnerToken(e,r){xa({...us(),runnerToken:r,runnerTokenAgentOsId:e})}}});import Oa from"node:path";function ge(e){return ss(e)}function Te(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ge(e);let r=U(),t=r.harnessRoot?.trim();if(t)return ge(t);let n=Lt(r,process.env);return n.identity?n.identity.harnessRoot:is({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Ee(e){return Oa.join(ge(e),"runs")}function Ut(e){return Oa.join(ge(e),"worktrees")}function bp(){let e=Te();return{harnessRoot:e,runsDir:Ee(e),worktreesDir:Ut(e)}}function br(e,r){return Oa.join(e,x(r))}var qe=A(()=>{"use strict";K();ga();On();O()});import{existsSync as ps,readdirSync as bw,statSync as Sw}from"node:fs";import ot from"node:path";function le(){return bp()}function ee(e){let{runsDir:r}=le(),t=ot.join(br(r,x(e)),"run.json");return ps(t)||$e(`run '${e}' not found`),I(t)}function Ge(){let{runsDir:e}=le();return Sp(e)}function ms(e){return Sp(Ee(e))}function ww(e){try{return Sw(e).isDirectory()}catch{return!1}}function Sp(e){if(!ps(e))return[];let r=[];for(let t of bw(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ot.join(e,t.name);if(!ww(n))continue;let o=I(ot.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Bt(e,r){let{runsDir:t}=le(),n=ot.join(br(t,x(e)),"run.json"),o=ot.join(br(t,x(e)),"workers",x(r),"worker.json");return ps(o)||(ps(n)||$e(`run '${e}' not found`),$e(`worker '${r}' not found in run '${e}'`)),I(o)}function Pe(e){let{runsDir:r}=le();ue(ot.join(br(r,e.id),"run.json"),e)}function F(e,r){let{runsDir:t}=le();ue(ot.join(br(t,e),"workers",r.name,"worker.json"),r)}function M(e){let{harnessRoot:r}=le();return Nn(r,e)}function Nn(e,r){return br(Ee(e),x(r))}var B=A(()=>{"use strict";qe();O()});import{parentPort as nv,workerData as mM}from"node:worker_threads";var ln=null,du=-1,pu=0;function mu(e){ln=e}function fu(e=Date.now()){return!ln||ln.stallCount===du&&e-pu<9e5?null:(du=ln.stallCount,pu=e,ln)}var lv="embedded-1",cv=[{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"}],uv={"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(`
|
|
13
|
+
`),"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(`
|
|
14
|
+
`),"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(`
|
|
15
|
+
`),"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(`
|
|
16
|
+
`)},dv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},_t={version:lv,generatedAt:"1970-01-01T00:00:00.000Z",personas:cv,instructions:uv,policyThresholds:dv};var cn=_t,pv="embedded";function gu(){return cn.version}function hu(e,r){cn=e,pv=r}function un(e){let r=cn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=_t.instructions[e];return typeof t=="string"?t:""}function Ti(e,r){let t=cn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=_t.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function ku(e){if(!e)return null;let r=e.trim().toLowerCase();return cn.personas.find(t=>t.slug===r)??null}pn();import QR from"node:path";B();Go();O();import xw from"node:path";function _w(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function fs(e){let r=ee(e),t=[];for(let n of Object.keys(r.workers||{})){let o=I(xw.join(M(r.id),"workers",x(n),"worker.json"),void 0);!o?.taskId||!Br(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,..._w(o)})}return t}K();function Mn(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}}kn();K();function xp(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 wp(e){return new Error(`callback timeout after ${e}ms`)}async function _p(e,r){let t=xp(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(wp(t))},t)})])}catch(i){throw s?wp(t):i}finally{o&&clearTimeout(o)}}function Cp(e,r){let t=xp(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function st(e,r,t,n){try{return await _p(async o=>{let s=await hn(e,{method:"POST",headers:Mn(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 Cp(o,n?.timeoutMs)}}async function J(e,r,t,n){let o=await st(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Rp(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await st(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Ta(e,r,t){try{return await _p(async n=>{let o=await hn(e,{method:"GET",headers:Mn(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 Cp(n,t?.timeoutMs)}}K();In();import{spawnSync as Uw}from"node:child_process";import{randomBytes as Bw}from"node:crypto";import{createPublicKey as Ow,verify as Tw}from"node:crypto";import{createHash as Cw,createPublicKey as tU,verify as nU}from"node:crypto";function Ma(e){return JSON.stringify(Na(e))}function Na(e){if(Array.isArray(e))return e.map(Na);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=Na(e[t]);return r}return e}function Da(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 Ep(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 sU=Buffer.from("302a300506032b6570032100","hex"),Pp="ca-6297fb8e1773",Ew={[Pp]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"};function Pw(e){return`ca-${Cw("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Ap(e,r=process.env){let t=Da(r.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(t)return Pw(t)!==e?null:t;let n=Ew[e];return!n||e===Pp&&!Ep(r)?null:Da(n)}var Aw=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,Iw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi;function gs(e){let r=typeof e.description=="string"?e.description:"",t=typeof e.executorRef=="string"?e.executorRef:"",o=[...r.matchAll(Aw)].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(Iw))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var Nw=120,Ip=["write","read_only","land_pr","verify_live"],Mw=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"];var Dw=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;function Op(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 Dw.test(i)&&i.length<=512?i:null}function Tp(e){let r=e.task??{};return e.landPrDispatch===!0||r.executor==="land_pr"?"land_pr":r.executor==="verify_live"?"verify_live":gs(r)==="read_only"?"read_only":"write"}function Ww(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(",")!==[...Mw].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)||!Ip.includes(t.operationClass))}var Lw=Buffer.from("302a300506032b6570032100","hex");function Np(e,r,t=process.env,n=Math.floor(Date.now()/1e3)){if(!Ww(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+Nw+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Ap(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=Ow({key:Buffer.concat([Lw,Buffer.from(s)]),format:"der",type:"spki"});return Tw(null,Buffer.from(Ma(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 Wa=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 Fw(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=Tp(e.decision),a=Np(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 Kw=null,Hw=null,$w=new Wa,jw=new Set;function Mp(){return ns()}function Dp(e){return{v:1,repoIdentity:e,requestNonce:Bw(16).toString("base64url")}}function Wp(e){let r=Uw("git",["-C",e,"remote","get-url","origin"],ae({encoding:"utf8",timeout:1e4}));return r.status!==0||typeof r.stdout!="string"?null:Op(r.stdout.trim())}function Lp(e){let r=Fw({...e,policy:Kw,identity:Hw,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 jw)try{o(n)}catch{}}return r}function Up(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}function Dn(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Bp(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 La(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 Vw=["implementation","review","landing"],Gw=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function Yw(e){return Vw.includes(e)}function qw(e){return Gw.includes(e)}function Fp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||Yw(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:qw(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var Kp=_t.personas.map(Fp),Jw=new Map(Kp.map(e=>[e.slug,e]));function zw(e){if(!e)return null;let r=e.trim().toLowerCase(),t=Jw.get(r)??null,n=ku(r);if(!n)return t;let o=Fp(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function Ua(e){return zw(e)?.defaultRoleLane??null}function Hp(){return Kp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function $p(e){return(e??"").trim().toLowerCase()}function Xw(e){switch($p(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 Qw(e){let r=$p(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=Xw(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function jp(e){return Qw(e)??"any"}Rn();K();Oe();function Zw(e=process.env){let r=U();return hr(r,e)!=="forge"}function hs(e,r=process.env){if(Zw(r))return e?.maxConcurrentWorkers??void 0}async function ks(e,r){let t=X(r.baseUrl?String(r.baseUrl):void 0),n=await re(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Ta(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}}Wt();var ex={fetchPreferences:ks,configuredOverride:hs,observe:Pn};async function Vp(e,r=ex){let t=await r.fetchPreferences(e.agentOsId,e.args),n=r.configuredOverride(t,e.env);return r.observe({runId:e.runId,configuredMaxWorkersOverride:n})}Wt();B();B();function ys(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ba(e){return e.toLowerCase()}function rx(e){let r=ys(e,"roleLane");if(r)return r;let t=Ba(ys(e,"executorRef")),n=Ba(ys(e,"title")),o=Ba(ys(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=Ua(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Gp(e){let r=rx(e);return r?{...e,roleLane:r}:e}K();var tx=/^claude[-_]/i,nx=/^(?:opus|sonnet|haiku)\b/i;function Yp(e){let r=e.trim();return tx.test(r)||nx.test(r)}function qp(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Fa(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Jp(e){return e.trim().toLowerCase().startsWith("gemini-")}function ox(e){return qp(e)?"codex":Yp(e)?"claude":Jp(e)?"gemini":(Fa(e),"cursor")}function sx(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 ix(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?Yp(n)||qp(n)||Fa(n)||Jp(n)?{lane:t,model:n,provider:ox(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function Ne(e){let r=typeof e=="string"?e.trim():"";return r?sx(r)??ix(r):null}function zp(e){let r=Ne(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Fa(r.model)):!1}ls();ls();var wr="cursor",ax=new Set(["claude","opus","anthropic"]),lx=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Wn(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Sr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return ax.has(r)?!0:r.includes("claude")||r.includes("opus")}function Rs(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Sr(r))return!0;let t=Wn(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ne(Wn(e,"executorRef"));if(n?.provider&&Sr(n.provider)||n?.model&&Sr(cx(n.model)))return!0;let o=Wn(e,"description");if(lx.some(i=>i.test(o)))return!0;let s=Wn(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function cx(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function ux(e,r){return{provider:wr,model:vs,rule:`policy:cursor_default${r}`,requestedModel:e}}var dx=["explicit:","executor_ref:","factory:","task:"];function px(e){return dx.some(r=>e.startsWith(r))}function Ka(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||Ne(Wn(e,"executorRef"))?.provider?!0:Rs(e)}function Xp(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Sr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||px(r.rule)||Ka(t)||!Sr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return ux(r.model,o)}function Qp(e,r=wr){let t=e?.trim();return t?nr(t):r}var Zp={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 Ft(e){return Zp[e]}function em(){return Object.values(Zp)}import{existsSync as wx}from"node:fs";import{homedir as xx}from"node:os";import Un from"node:path";import{createHash as om}from"node:crypto";import{statSync as Sx}from"node:fs";import{spawnSync as sm}from"node:child_process";import{existsSync as nm,readFileSync as mx}from"node:fs";import it from"node:path";var Ln=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},fx=".COM;.EXE;.BAT;.CMD";function gx(e){return e.includes("/")||e.includes("\\")}function hx(e){return(e.PATHEXT||fx).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function kx(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function yx(e,r={}){let t=r.env??process.env,n=r.exists??nm,o=hx(t),s=it.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(gx(e)||it.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of kx(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}var rm=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,Rx=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function tm(e){return e.replace(/^[\\/]+/,"")}function vx(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=Rx.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=rm.exec(n);if(o)return tm(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),a=i?rm.exec(i):null;if(a)return tm(a[1])}return null}function bx(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=yx(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=>mx(m,"utf8")),i=r.exists??nm,a;try{a=s(n)}catch{throw new Ln(n)}let l=vx(a);if(!l)throw new Ln(n);let c=it.win32.dirname(n),u=it.win32.join(c,l);if(!i(u))throw new Ln(n);let d=it.win32.join(c,"node.exe");return{executable:i(d)?d:r.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function ve(e,r,t={}){let n=bx(e,t);return[n.executable,[...n.prefixArgs,...r]]}function or(e){try{let r=Sx(e),t=`${e}|${r.size}|${r.mtimeMs}`;return om("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Kt(e){return om("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Me(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Je(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=ve(e,r),i=sm(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]=ve(e,r);return sm(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 _x="codex";function Cx(){let e=xx();return[process.env.CODEX_HOME?.trim()?Un.join(Un.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Un.join(e,".codex","auth.json"),Un.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Ex(e){return Un.dirname(e)}function Px(e){let r,t;for(let n of Cx()){if(!wx(n))continue;r??=n;let o=Je(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Ex(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??Je(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function im(e=new Date().toISOString()){let r=Me(_x,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Kt("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}=Px(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?or(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 Ax}from"node:fs";import{homedir as Ix}from"node:os";import Ha from"node:path";function Ox(){let e=process.env.HERMES_HOME?.trim(),r=e?Ha.resolve(e):Ha.join(Ix(),".hermes");return Ha.join(r,"auth.json")}function Ss(e=new Date().toISOString()){let r=Me("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Je(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Ox(),o=Ax(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?or(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 Ht(e=new Date().toISOString()){let r=im(e);if(r.ready)return{...r,path:"codex_cli"};let t=Ss(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var am=["low","medium","high"],lm={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function cm(e,r){let t=Ft(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Tx(e,r){let t=Ft(e.providerId),n=Ft(r.providerId),o=am.indexOf(t.costTier)-am.indexOf(n.costTier);if(o!==0)return o;let s=lm[e.binding.authSource]-lm[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function $a(e){let r=em().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&cm(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Tx)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return cm(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 Nx}from"node:fs";import{homedir as Mx}from"node:os";import Dx from"node:path";var Wx="claude";function Lx(){let e=Mx();return[Dx.join(e,".claude",".credentials.json")]}function um(e=new Date().toISOString()){let r=Me(Wx,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Kt("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=Je(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Lx().find(i=>Nx(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?or(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as c_}from"node:fs";import{homedir as l_}from"node:os";import Vt from"node:path";O();import{closeSync as qa,existsSync as fm,mkdirSync as qx,openSync as Ja,statSync as Jx,unlinkSync as mm}from"node:fs";import{spawn as zx}from"node:child_process";import Xx from"node:os";import sr from"node:path";Bi();var Ux="KYNVER_NO_PROD_DB_CREDENTIALS",Bx=["KYNVER_ENV_FILE"];function De(e,r={}){let t=Ui(e);if(!r.reviewWorker)return t;let n={...t,[Ux]:"1"};for(let o of Bx)delete n[o];return n}var Fx=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function dm(e){return e.replace(Fx,"")}var pm=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function ws(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function Kx(e){let r=e.trim().toLowerCase();return r.startsWith("gemini-")||r==="auto"||r==="pro"||r==="flash"||r==="flash-lite"}var Hx=new Set(["cursor"]);function $x(e){let r=e.trim().toLowerCase();return Hx.has(r)?"auto":null}function ja(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=dm(t).trim()||r;return pm.test(o)||!ws(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 $t(e,r){let t=(e??"").trim();return t?ws(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 Va(e,r){let t=(e??"").trim();if(t)return{ok:!0,model:t,normalized:!1};let n=(r??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function jt(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=dm(t).trim()||r;return ws(o)||!Kx(o)&&pm.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 Ga(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=$x(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")`}:ws(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 Bn,readdirSync as jx}from"node:fs";import at from"node:path";var Vx=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Gx(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 Yx(e){let r=at.join(e,"versions");if(!Bn(r))return null;let t=null,n=-1;for(let o of jx(r,{withFileTypes:!0})){if(!o.isDirectory()||!Vx.test(o.name))continue;let s=Gx(o.name);s==null||s<=n||(n=s,t=at.join(r,o.name))}return t}function xs(e){let r=e?.trim()||at.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=at.join(r,"node.exe"),n=at.join(r,"index.js");if(Bn(t)&&Bn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Yx(r);if(!o)return null;let s=at.join(o,"node.exe"),i=at.join(o,"index.js");return!Bn(s)||!Bn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var Ya="composer-2.5",Qx=15e3,Zx=6e4,e_=3e4;function r_(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:ce(),bundledVersionDir:t}}function Xa(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&fm(sr.join(sr.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?xs(sr.dirname(e)):t?{nodeExe:e,indexJs:sr.join(sr.dirname(e),"index.js"),versionDir:sr.dirname(e)}:xs();if(o)return r_(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 t_(e,r,t){return De({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:sr.basename(e)||"agent.cmd"}:{}},{reviewWorker:t})}function gm(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function za(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 n_(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||sr.join(Xx.homedir(),".kynver","locks");return qx(e,{recursive:!0}),sr.join(e,"cursor-agent-start.lock")}function o_(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=n_(),r=za("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",Zx),t=za("KYNVER_CURSOR_START_LOCK_STALE_MS",e_),n=Date.now();for(;;)try{let o=Ja(e,"wx");return qa(o),()=>{try{mm(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Jx(e).mtimeMs>t){mm(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);gm(250)}}function hm(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=xs(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(t)return t.nodeExe;let n=sr.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(fm(n))return n}return"agent"}function s_(){return hm(process.env)}var km={name:"cursor",defaultModel:Ya,preflightModel(e){return Ga(e,Ya)},start(e){let r=Ga(e.model,Ya);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Ja(e.stdoutPath,"a"),o=Ja(e.stderrPath,"a"),s=["ignore",n,o],i=s_(),a=Xa(i),l=o_(),c;try{c=zx(a.executable,i_(e,t,a.prefixArgs),ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:t_(i,a,e.reviewWorker)})),gm(za("KYNVER_CURSOR_START_LOCK_HOLD_MS",Qx))}finally{l(),qa(n),qa(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 i_(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 a_}from"node:child_process";function Qa(e,r=process.env){try{let t;try{t=Xa(e)}catch{t={executable:e,prefixArgs:[]}}let n=a_(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 Za(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(Vt.join(t,".config","cursor","auth.json")),r.push(Vt.join(t,".cursor-agent","auth.json")));let n=l_();if(r.push(Vt.join(n,".config","cursor","auth.json")),r.push(Vt.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(Vt.join(o,"cursor-agent","auth.json")),s&&r.push(Vt.join(s,"cursor","auth.json"))}return r}var u_="agent";function ym(e=new Date().toISOString()){let r=Me(u_,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:Kt("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=Je(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Za().find(a=>c_(a)),o=Qa(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?or(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 d_,readFileSync as p_}from"node:fs";import{homedir as m_}from"node:os";import el from"node:path";var f_=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function g_(){let e=process.env.HERMES_HOME?.trim(),r=e?el.resolve(e):el.join(m_(),".hermes");return el.join(r,".env")}function h_(e){try{let r=p_(e,"utf8"),t=[];for(let n of f_)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rm(e=new Date().toISOString()){let r=Me("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Je(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=g_(),o=d_(n),s=o?h_(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?or(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 vm(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ht(r),n={codex:t,cursor:ym(r),claude:um(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:Rm(r),hermesOpenAiCodex:Ss(r),codexAdapterPath:t.path,readyCount:o}}var k_=[/\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],y_=[/\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 rl(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function R_(e){let r=rl(e,"executorRef").toLowerCase(),t=rl(e,"title").toLowerCase(),n=rl(e,"description").toLowerCase(),o=`${r}
|
|
17
|
+
${t}
|
|
18
|
+
${n}`;return k_.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":y_.some(s=>s.test(o))?"low":"elevated"}function v_(e){let r=Ft(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 b_(e){let r=e.inventory??vm();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function lt(e){let r=v_({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 bm(e){let r=e.task??{},t=R_(r),n=b_({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ht())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=wr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=$a({inventory:n,riskClass:t});return lt(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 lt({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 lt({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 lt({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=$a({inventory:n,riskClass:t});if(a)return lt({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 lt({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"}})}import{closeSync as Em,openSync as Pm}from"node:fs";import{spawn as O_}from"node:child_process";O();import{unlinkSync as S_,writeFileSync as w_}from"node:fs";import x_ from"node:path";var ze="KYNVER_WORKER_BROKER_SOCKET";function tl(e){return`${JSON.stringify(e)}
|
|
19
|
+
`}function nl(e){let r;try{r=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!r||typeof r!="object"||Array.isArray(r))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let t=r,n=typeof t.id=="string"?t.id:"";if(t.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(t.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(t.op==="call_tool"){if(typeof t.name!="string"||!t.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:t.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var __="KYNVER_WORKER_MCP_TOOLS",C_="mcp-config.json",ne="kynver",Fn=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Sm=Fn.map(e=>`mcp__${ne}__${e}`),E_={"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 Kn(e){if(!e||e.length===0)return[...Fn];let r=new Set;for(let t of e)for(let n of E_[t]??[])r.add(n);return Fn.filter(t=>r.has(t))}function wm(e){return Kn(e).map(r=>`mcp__${ne}__${r}`)}var P_=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],A_=["openai-compatible","gemini-api"];function I_(e){return P_.includes(e)}function ol(e){return A_.includes(e)}function xm(e){return I_(e)&&!ol(e)}function Hn(e=process.env){let r=e[__]?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":!0}function _m(e){return x_.join(e,C_)}function Cm(e){let r=_m(e.workerDir),t={mcpServers:{[ne]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[ze]:e.brokerSocketPath}}}};return w_(r,`${JSON.stringify(t,null,2)}
|
|
20
|
+
`,{mode:384}),r}function _s(e){try{return S_(_m(e)),!0}catch{return!1}}var Fr="claude-sonnet-4-6",$n="claude-opus-4-8";function T_(e,r){let n=Im(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 Am={name:"claude",defaultModel:Fr,preflightModel(e){return ja(e,Fr)},start(e){let r=ja(e.model,Fr);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model;T_(e,t);let[n,o]=ve("claude",Im(e,t)),s=Pm(e.stdoutPath,"a"),i=Pm(e.stderrPath,"a"),a=["ignore",s,i],l=O_(n,o,ae({cwd:e.worktreePath,detached:ce(),stdio:a,env:De(process.env,{reviewWorker:e.reviewWorker})}));if(Em(s),Em(i),!l.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return l.unref(),{pid:l.pid,model:t}}};function Im(e,r){return["--model",r,"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:Sm).join(",")}`]:[],"--",e.prompt]}import{closeSync as Dm,existsSync as B_,openSync as Wm}from"node:fs";import{spawn as il}from"node:child_process";O();import{closeSync as Om,openSync as Tm}from"node:fs";import{spawn as N_}from"node:child_process";O();var sl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";function M_(e,r){return De({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function D_(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 Nm={name:"hermes-codex",defaultModel:sl,preflightModel(e){return $t(e,sl)},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=$t(e.model,sl);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Me("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=ve(n,D_(t,e.prompt)),i=Tm(e.stdoutPath,"a"),a=Tm(e.stderrPath,"a"),l=["ignore",i,a],c=N_(o,s,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:l,env:M_(e.reviewWorker,e.codexHome)}));if(Om(i),Om(a),!c.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return c.unref(),{pid:c.pid,model:t}}};var W_="KYNVER_CODEX_WINDOWS_SANDBOX",L_="unelevated";function U_(e=process.env){return e[W_]?.trim().toLowerCase()==="elevated"?"elevated":L_}function Mm(e=process.platform,r=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${U_(r)}"`]}function F_(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}var xr=F_();function al(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function K_(e,r){return De({...process.env,CI:"1",NO_COLOR:"1",...r?{CODEX_HOME:r}:{}},{reviewWorker:e})}function H_(e,r,t,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Mm(n,o),"--json","--sandbox",t==="read_only"?"read-only":"workspace-write","--model",e,r]}function $_(e,r,t){if(process.platform==="win32"){let[s,i]=ve(e,r);return il(s,i,t)}if(!B_("/usr/bin/script"))return il(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return il("script",["-qfc",o,"/dev/null"],t)}var Lm={name:"codex",defaultModel:xr,preflightModel(e){return $t(e,xr)},start(e){if(Ht().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return Nm.start(e);let t=$t(e.model,xr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Wm(e.stdoutPath,"a"),s=Wm(e.stderrPath,"a"),i=["ignore",o,s],a=al(),l=H_(n,e.prompt,e.executionMode),c;try{c=$_(a,l,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:K_(e.reviewWorker,e.codexHome)}))}finally{Dm(o),Dm(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}}};import{closeSync as Um,openSync as Bm}from"node:fs";import J_ from"node:path";import{fileURLToPath as z_}from"node:url";import{spawn as X_}from"node:child_process";O();import{existsSync as Cs}from"node:fs";import ct from"node:path";import{fileURLToPath as j_}from"node:url";function V_(e,r){let t=ct.resolve(e);for(;;){let n=ct.join(t,r);if(Cs(n))return n;let o=ct.dirname(t);if(o===t)return null;t=o}}function G_(e){return V_(e,ct.join("node_modules",".bin","tsx"))??"npx"}function ll(e,r){if(e.endsWith(".ts")){let t=G_(ct.dirname(e));return{command:t,argsPrefix:t==="npx"?["tsx",e]:[e],cliPath:e}}return{command:r,argsPrefix:[e],cliPath:e}}function Es(e){if(e.explicitCliPath)return Cs(e.explicitCliPath)?ll(e.explicitCliPath,e.nodeExecutable):null;let r=j_(new URL(".",e.importMetaUrl)),t=ct.join(r,"cli.js");if(Cs(t))return ll(t,e.nodeExecutable);let n=ct.join(r,"cli.ts");return Cs(n)?ll(n,e.nodeExecutable):null}var Y_="X-Kynver-Job-Token",Gn={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 q_(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function jn(e,r,t){let n=await e.fetchImpl(`${e.apiBaseUrl}${r}`,{method:t?.method??"GET",headers:{[Y_]: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 Vn(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Ps(e,r,t){let n=q_(e);switch(r){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=Vn(t.memoryQuery);s&&o.set("memoryQuery",s);let i=Vn(t.mode);return i&&o.set("mode",i),jn(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(t.query??"")});return typeof t.k=="number"&&o.set("k",String(t.k)),jn(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=Vn(t.query);s&&o.set("q",s),typeof t.limit=="number"&&o.set("limit",String(t.limit));let i=o.toString();return jn(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return jn(e,`${n}/skills/${encodeURIComponent(String(t.slug??""))}`);case"agent_os_progress_note":return jn(e,`${n}/progress-note`,{method:"POST",body:{note:String(t.note??""),...t.kind==="blocked"?{kind:"blocked"}:{},...Vn(t.eventKey)?{eventKey:Vn(t.eventKey)}:{}}})}}function Gt(e){return Fn.includes(e)}function As(e){return Kn(e).filter(Gt).map(r=>{let t=Gn[r];return{type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}})}var ut="openai-compatible",Q_=600*1e3;function cl(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}var Yn=class extends Error{};function Z_(e=process.env){let r=e.KYNVER_WORKER_BASE_URL?.trim();if(!r)throw new Yn(`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 Yn(`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 Yn(`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):Q_;return{baseUrl:r.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}var eC="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 ul(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:eC},{role:"user",content:t}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function rC(){let e=z_(new URL(".",import.meta.url)),r=import.meta.url.endsWith(".ts"),t=J_.join(e,r?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Es({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 tC(e,r,t){let n=e.workerToolGrant,o=n?As(n.capabilities):void 0;return{provider:ut,model:t,request:ul(r,t,e.prompt,o),timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function dl(e,r,t){let n=rC(),o=Bm(e.stdoutPath,"a"),s=Bm(e.stderrPath,"a"),i=["pipe",o,s],a=X_(n.command,n.argsPrefix,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:i,env:De(process.env,{reviewWorker:e.reviewWorker})}));if(Um(o),Um(s),!a.pid)throw new Error(`failed to spawn ${r.provider} worker runner (node executable unavailable?)`);try{a.stdin?.on("error",()=>{}),a.stdin?.write(JSON.stringify(r)),a.stdin?.end()}catch(l){throw new Error(`failed to hand request config to ${r.provider} runner: ${l.message}`)}return a.unref(),{pid:a.pid,model:t}}var Fm={name:ut,get defaultModel(){return cl()},preflightModel(e){return Va(e,cl())},start(e){let r=Va(e.model,cl());if(!r.ok)throw new Error(`openai-compatible provider model preflight failed: ${r.note}`);let t=r.model,n=Z_(process.env),o=tC(e,n,t);return dl(e,o,t)}};import{closeSync as Vm,openSync as Gm}from"node:fs";import{spawn as sC}from"node:child_process";O();import nC from"node:path";var oC=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"]);function Is(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function Os(e){let r=nC.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return r==="agy"||r==="antigravity"?"antigravity":"gemini"}function Km(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function Hm(e){let r=e.trim().toLowerCase();return!r||oC.has(r)?[]:["--model",e.trim()]}function $m(e,r){return[...Hm(r),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function jm(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",ne]:[],"--prompt",e.prompt]}var ir="gemini";function Ae(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function iC(e,r){return De({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...r?{GEMINI_CLI_HOME:r}:{}},{reviewWorker:e})}var Ym={name:ir,get defaultModel(){return Ae()},preflightModel(e){return jt(e,Ae())},start(e){let r=jt(e.model,Ae());if(!r.ok)throw new Error(`gemini provider model preflight failed: ${r.note}`);let t=Is(),n=Os(t),o=n==="antigravity"?Km(r):r.model,s=n==="antigravity"?$m(e,o):jm(e,o),[i,a]=ve(t,s),l=Gm(e.stdoutPath,"a"),c=Gm(e.stderrPath,"a"),u=["ignore",l,c],d=sC(i,a,ae({cwd:e.worktreePath,detached:ce(),shell:!1,stdio:u,env:iC(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(Vm(l),Vm(c),!d.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 d.unref(),{pid:d.pid,model:o}}};var ar="gemini-api",qm="https://generativelanguage.googleapis.com/v1beta/openai",aC=600*1e3,qn=class extends Error{};function lC(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function cC(e=process.env){let r=lC(e);if(!r)throw new qn('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()||qm,n;try{n=new URL(t)}catch{throw new qn(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. ${qm}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new qn(`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):aC;return{baseUrl:t.replace(/\/+$/,""),apiKey:r,timeoutMs:s}}function uC(e,r,t){let n=e.workerToolGrant,o=n?As(n.capabilities):void 0,s=ul(r,t,e.prompt,o);return{provider:ar,model:t,request:s,timeoutMs:r.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(r.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Jm={name:ar,get defaultModel(){return Ae()},preflightModel(e){return jt(e,Ae())},start(e){let r=jt(e.model,Ae());if(!r.ok)throw new Error(`gemini-api provider model preflight failed: ${r.note}`);let t=r.model,n=cC(process.env),o=uC(e,n,t);return dl(e,o,t)}};var dC="claude-sonnet-4-6",vs="composer-2.5";function we(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function pC(e){if(!e)return;let r=we(e,"workerModelOverride")||we(e,"modelOverride");return r||`${we(e,"title")}
|
|
21
|
+
${we(e,"description")}
|
|
22
|
+
${we(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function zm(e){return e.toLowerCase()}function ml(e=U()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||dC}function Ts(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-")?ir:"cursor"}function mC(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:vs,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Fr,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:Ae(),provider:ir,rule:n&&n!==ir?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:Ae(),provider:ar,rule:n&&n!==ar?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Xm(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 fC=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Qm(e,r,t){return fC.has(e)?$n:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?$n:Fr}function gC(e){let r=zm(we(e,"executorRef")),t=we(e,"title").toLowerCase(),n=we(e,"priority")||"normal",o=zm(we(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Qm(o,r,t);return{provider:"claude",model:i,rule:i===$n?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:xr,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=Ne(we(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:xr},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=Ne(we(e,"executorRef"));return{provider:ut,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=Ne(we(e,"executorRef"));return{provider:ar,...i?.model?{model:i.model}:{model:Ae()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=Ne(we(e,"executorRef"));return{provider:ir,...i?.model?{model:i.model}:{model:Ae()},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:xr,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 Xm(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Xm(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=ml();return{model:s,provider:Ts(s),rule:"default:global"}}function hC(e){return e?Ne(we(e,"executorRef")):null}function kC(e){switch(nr(e)){case ir:case ar:return Ae();case"claude":return Fr;case"codex":return xr;case"cursor":return vs;default:return}}var pl="explicit:cli_provider",Zm="config:worker_provider";function ef(e,r,t){let n=nr(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:kC(n)??e.model,rule:t}}function yC(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==pl?e:ef(e,t,pl)}function RC(e,r){if(r.explicitProvider?.trim()||Ka(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=nr(t);return n===wr||n===e.provider?e:ef(e,n,Zm)}function Ns(e){let r,t=hC(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=mC(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||Ts(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||Ts(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Rs(e.task)){let l=pC(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=Qm(d,p,m),u=c===$n?"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=gC(e.task);r={...l,requestedModel:l.model}}else{let l=ml();r={model:l,provider:e.explicitProvider?.trim()||Ts(l),rule:"default:global",requestedModel:l}}r=yC(r,e.explicitProvider),r=RC(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&nr(e.configuredProvider)!==wr&&r.rule==="config:worker_provider",i=Xp({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===pl||i.rule===Zm||Sr(i.provider)&&(e.explicitProviderIsOperatorOverride||Rs(e.task))||i.provider===ut||i.provider===ir||i.provider===ar||i.provider==="codex")return i;let a=bm({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??xr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function rf(e,r,t){return e||r||t||ml()||Fr}function vC(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function tf(e){return e?.trim()||void 0}function nf(e){let r=vC(e.task),t=Ne(r),n=e.explicitProvider?.trim().toLowerCase(),o=tf(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=tf(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&zp(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&&!Sr(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 of(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function sf(){return{maxTaskAttempts:of(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ti("harness.maxTaskAttempts",4))),dispatchCooldownMs:of(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ti("harness.dispatchCooldownMs",5e3)))}}K();import wC from"node:path";B();me();O();var fl="kynver-harness:",af="@runner:";function gl(e){return e?.trim()?e.trim():null}function bC(e){let r=gl(e);if(!r?.startsWith(fl))return null;let t=r.slice(fl.length),n=t.indexOf(af);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Jn(e,r){let t=e.trim(),n=r.trim();return`${fl}${t}${af}${n}`}function SC(e,r){let t=gl(r);return t?bC(e)===t:!1}function Ms(e){let r=gl(e.workerLeaseOwner);return r&&SC(r,e.runId)?r:Jn(e.runId,e.runnerId)}K();import lf from"node:os";Oe();function _r(e){return e?.trim()?e.trim():null}function We(e={}){let r=e.env??process.env,t=U();return{runnerId:_r(t.runnerId)??_r(r.KYNVER_RUNTIME_ID)??_r(r.OPENCLAW_RUNTIME_ID)??_r(r.HOSTNAME)??lf.hostname(),hostname:_r(r.HOSTNAME)??lf.hostname(),profile:_r(r.KYNVER_RUNNER_PROFILE)??_r(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:_r(r.KYNVER_HARNESS_REPO)??_r(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:gu()}}K();async function Ds(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=X(e.baseUrl);try{let o=await re(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await J(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}B();async function Ws(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 Ds({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)&&F(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function cf(e,r){return I(wC.join(M(e),"workers",x(r),"worker.json"),void 0)}async function uf(e,r){let t=ee(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=X(r.baseUrl?String(r.baseUrl):void 0),s=await re(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):hl,a=We({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let p=cf(e,d);if(!p?.taskId||!p.agentOsId){u.push(d);continue}if(!z(p.pid)){u.push(d);continue}if(Y(p).status==="done"){u.push(d);continue}let f=Ms({runId:e,workerLeaseOwner:p.leaseOwner??null,runnerId:a}),b=await Ws({worker:p,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(p.taskId)}/renew-lease`,R=await J(k,s,{leaseOwner:b.leaseOwner??f,leaseDurationMs:i,...b.leaseToken?{leaseToken:b.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(R.ok){l.push(d);continue}let g=R.response&&typeof R.response=="object"&&"reason"in R.response?String(R.response.reason??`http ${R.status}`):`http ${R.status}`;c.push({worker:d,reason:g})}return{renewed:l,failed:c,skipped:u}}function df(e,r){let t=ee(e);for(let n of Object.keys(t.workers||{})){let o=cf(e,n);if(!(!o||o.taskId!==r||!z(o.pid)||Y(o).status==="done"))return!0}return!1}de();B();B();import{existsSync as SA,mkdirSync as wA}from"node:fs";import Xt from"node:path";var pf="unknown";function mf(e){let r=e.baseCommit?.trim()??"",t=[];r&&r!==pf&&t.push({ref:r,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==pf&&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 xC=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,_C="next-action-fix:";function Ls(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ff(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ls(e)}function CC(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(_C)||t.includes("repair")||t.includes("unblock"))}function EC(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(xC);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Ls(String(n.targetPrUrl??n.target_pr_url??"")),s=Ls(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?ff(o):null,targetPrBranch:s}}catch{return r}}function gf(e){if(!CC(e))return null;let r=EC(e.description),t=e.prUrl?ff(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Ls(e.branch)}:null}function hf(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 kf(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=[...un(`worker.prompt.progress.${n}`).split(`
|
|
23
|
+
`),o],i=un(`worker.prompt.merge_gate.${n}`).split(`
|
|
24
|
+
`),a=un(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
25
|
+
`);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.",...un("worker.prompt.core_rules").split(`
|
|
26
|
+
`),"",...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?[...hf({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
27
|
+
`)}O();K();var Us={claude:Am,codex:Lm,cursor:km,[ir]:Ym,[ar]:Jm,[ut]:Fm},yf=null;function Rf(e){if(yf)return yf;let r=e?.trim();if(r){let o=Us[nr(r)];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Us).join(", ")}`);return o}let t=Qp(U().workerProvider),n=Us[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Us).join(", ")}`);return n}O();import{spawn as cA}from"node:child_process";import{existsSync as uA,openSync as dA,closeSync as ch}from"node:fs";import pA from"node:path";B();function vf(e){return!!e.completionReportedAt?.trim()}function Bs(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),F(r,e)}function PC(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function kl(e){return!!(PC(e.completionBlocker)||e.completionOutcome==="rejected")}function zn(e){return vf(e)&&!kl(e)}B();me();K();import ai from"node:path";function yl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Xn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var AC=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),bf=new Set(["done","failed","cancelled"]);function Sf(e){let r=yl(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=Xn(r.outcome),n=Xn(r.detail)??Xn(r.error),o=yl(r.task),s=yl(r.closedTask),i=o?Xn(o.status):null,a=s?Xn(s.status):null,c=t==="skipped_terminal_task"&&(i!==null&&bf.has(i)||a!==null&&bf.has(a))||t!==null&&AC.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:c,detail:n}}function wf(e){return e.taskAdvanced}B();Ko();var IC="expert-lane-pr-review:",OC="plan-review-task",TC="scheduledjob:",Fs=new Set(["lorentz","dalton","rhea","sentinel"]);function NC(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Rl(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function MC(e,r){return e.startsWith("factory:")?e.includes("lb")||Rl(r):!1}function Ks(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
|
|
28
|
+
${n}`,s=NC(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(IC)||r===OC||r.startsWith("daemon-review:")||s&&Fs.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||MC(r,o)||Rl(o))||r.startsWith(TC)&&e.parentTaskId&&s&&Fs.has(s)||e.planId&&!e.parentTaskId&&s&&Fs.has(s)&&Rl(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&Fs.has(s))}var xf=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,DC=new Set(Hp()),WC=/no commits between/i;function _f(e){return!!(e&&WC.test(e))}function be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Cf(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:be(e.head)}function Ef(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 LC(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 UC(e,r){if(r.changedFiles.length>0)return!1;let t=be(e.personaSlug)?.toLowerCase();if(t&&DC.has(t))return!0;let n=be(e.routingRule)??"";return!!(n&&xf.test(n))}function BC(e,r){if(e.changedFiles.length>0)return!0;let t=be(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=LC(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(be(e.headCommit)||Cf(e.gitAncestry))}function Pf(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(Ks({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=be(e.routingRule)??"";if(r&&xf.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(UC(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 BC(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Af(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:be(r?.headCommit)??Cf(e.gitAncestry),prUrl:be(r?.prUrl)??null}}import{spawnSync as FC}from"node:child_process";function Of(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return If(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return If(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 If(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 KC(e,r,t){try{let n=FC(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 $s={git:(e,r)=>te(e,r),gh:(e,r)=>KC("gh",e,r)};function HC(e){return e.split(`
|
|
29
|
+
`).map(r=>r.trim()).find(Boolean)??""}function Tf(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Of(t.stdout)}function dt(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Hs(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function Qn(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=dt(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function Nf(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 Mf(e){let r=Hs(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=$C(t.stdout)??Hs(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 $C(e){let t=HC(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}O();function Df(e){return`t-${x(e)}-a`}function Wf(e,r){let t=Df(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 Zn(e){return e.trim().toLowerCase()}function Lf(e,r){if(!e.length)return null;if(r){let t=Zn(r),n=e.find(o=>Zn(o.url)===t);if(n)return n}return[...e].sort((t,n)=>n.number-t.number)[0]??null}function Uf(e,r){let t=Zn(r);return e.filter(n=>Zn(n.url)!==t).map(n=>n.url)}function Bf(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 jC(e){let r=new Set,t=[];for(let n of e){let o=Zn(n.url);r.has(o)||(r.add(o),t.push(n))}return t}function VC(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?[]:Bf(o.stdout).filter(s=>Wf(s,t))}function GC(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=Df(t);return Bf(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||Wf(i,t))}function vl(e,r,t,n){let o=t.trim();if(!o)return[];let s=VC(e,r,o,n),i=GC(e,r,o,n);return jC([...s,...i])}function YC(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 bl(e){let r=Uf(e.rows,e.canonicalPrUrl),t=[],n=[];for(let o of r){let s=YC(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 Ff(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 qC(e){return e.gh(process.cwd(),["--version"]).status===0}function JC(e,r){return`AgentOS harness: ${e} (${r})`}function zC(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(`
|
|
30
|
+
`)}function wl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function XC(e){return wl(e.prUrlHint)??Ef(e.status.finalResult)??wl(e.worker.taskPrUrl)??null}function QC(e){let{snapshot:r,canonical:t,workerName:n,exec:o}=e,s=!1,i=!1,a=r.headCommit??dt(r.worktreePath,o)??void 0;if(r.changedFiles.length>0){let l=Qn({worktreePath:r.worktreePath,branch:r.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(t.headRefName!==r.branch){let l=Nf({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=dt(r.worktreePath,o)??a}return{ok:!0,prUrl:t.url,headCommit:a,committed:s,pushed:i}}function Sl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??dt(e.snapshot.worktreePath,e.exec)??void 0};let r=Qn({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function xl(e,r=$s){let t=XC(e),n=Af(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Pf({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?Sl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Sl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!qC(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=Tf(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,E=!1,P=n.headCommit??dt(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let S=Qn({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!S.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${S.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};h=S.committed,E=S.pushed,P=S.headCommit??P}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`."};E=S.status===0}return{ok:!0,prUrl:a,headCommit:P,committed:h,pushed:E}}let l=wl(e.worker.taskId),c=[];if(l){c=vl(n.worktreePath,i,l,r);let h=Lf(c);if(h){let E=QC({snapshot:n,canonical:h,workerName:e.worker.name,exec:r});return E.ok&&E.prUrl&&bl({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:E.prUrl,exec:r}),E}}let u=Hs(n.worktreePath,i,n.branch,r);if(u)return Sl({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let d=n.changedFiles.length>0,p=!1,m=!1,f=n.headCommit??void 0,b=Qn({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:d,exec:r});if(d&&!b.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${b.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(p=b.committed,m=b.pushed,!b.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${b.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=b.headCommit??f??dt(n.worktreePath,r)??void 0;let k=f?Ff(n.worktreePath,i,f,r):null;if(k)return{ok:!0,prUrl:k.prUrl,headCommit:f,committed:p,pushed:m,created:!1};let R=e.run.base?.trim()||"main",g=Mf({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:R.replace(/^origin\//,""),title:JC(e.worker.name,e.worker.runId),body:zC(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(_f(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 E=[...c.length>0?c:vl(n.worktreePath,i,l,r),{url:g.prUrl,number:Number.parseInt(g.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];bl({worktreePath:n.worktreePath,repo:i,rows:E,canonicalPrUrl:g.prUrl,exec:r})}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:p,pushed:m,created:g.created}}me();Zr();Zi();B();me();O();import UE from"node:path";O();import ZC from"node:path";var eo=new Map,_l=new Map;function Cl(e){clearInterval(_l.get(e)),_l.delete(e)}function El(e,r){if(Cl(e),!eo.has(e))return;let t=setInterval(()=>{(I(ZC.join(e,"worker.json"),null)?.completionReportedAt||!z(r))&&Yt(e)},1e3);t.unref(),_l.set(e,t)}function Pl(e,r){Cl(e);let t=eo.get(e);t&&t.close(),eo.set(e,r)}async function Kr(e){Cl(e);let r=eo.get(e);return r?(eo.delete(e),await r.close(),!0):!1}function Yt(e){Kr(e).catch(()=>{})}de();import{appendFileSync as eE,existsSync as Hf,mkdirSync as $f,readFileSync as rE,rmSync as Kf,writeFileSync as tE}from"node:fs";import Cr from"node:path";var jf=Cr.join(".cursor","mcp.json");function Vf(e){return Cr.join(e,jf)}function nE(e){return Q(e,["ls-files","--error-unmatch",jf.split(Cr.sep).join("/")],{allowFailure:!0}).trim().length>0}function oE(e){let r=Q(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Cr.isAbsolute(r)?r:Cr.join(e,r),n=Cr.join(t,"info","exclude"),o=".cursor/mcp.json";try{$f(Cr.dirname(n),{recursive:!0});let s=Hf(n)?rE(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;eE(n,`${s.endsWith(`
|
|
31
|
+
`)||!s?"":`
|
|
32
|
+
`}${o}
|
|
33
|
+
`)}catch{}}function Gf(e){if(nE(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=Vf(e.worktreePath);$f(Cr.dirname(r),{recursive:!0});let t={mcpServers:{[ne]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[ze]:e.brokerSocketPath}}}};return tE(r,`${JSON.stringify(t,null,2)}
|
|
34
|
+
`,{mode:384}),oE(e.worktreePath),{ok:!0,configPath:r}}function js(e){let r=Vf(e);if(!Hf(r))return!1;try{Kf(r,{force:!0});let t=Cr.dirname(r);return Kf(t,{recursive:!1}),!0}catch{return!0}}import{copyFileSync as sE,existsSync as Vs,mkdirSync as iE,readFileSync as aE,rmSync as lE,symlinkSync as cE,writeFileSync as uE}from"node:fs";import{spawnSync as dE}from"node:child_process";import{homedir as pE}from"node:os";import Hr from"node:path";var mE="codex-home";function Yf(e){return Hr.join(e,mE)}function fE(e=process.env){let r=e.CODEX_HOME?.trim();if(r)return Hr.resolve(r);let t=pE();for(let n of[Hr.join(t,".codex"),Hr.join(t,".config","codex")])if(Vs(n))return n;return null}function gE(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${ne}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${ne}.env]`,`${ze} = ${JSON.stringify(e)}`,""].join(`
|
|
35
|
+
`)}function hE(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${ne}"?\s*[\].]`,"m").test(e)}function qf(e){let r=fE(e.env??process.env),t=r?Hr.join(r,"config.toml"):null,n=t&&Vs(t)?aE(t,"utf8"):"";if(n&&hE(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${ne}" MCP server \u2014 refusing to write a duplicate stanza`};let o=Yf(e.workerDir);iE(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
|
|
36
|
+
`)?"":`
|
|
37
|
+
`;return uE(Hr.join(o,"config.toml"),`${n}${s}${gE(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:kE(r,o)}}function kE(e,r){let t=e?Hr.join(e,"auth.json"):null;if(!t||!Vs(t))return"none";let n=Hr.join(r,"auth.json");try{return cE(t,n,"file"),"symlink"}catch{try{return sE(t,n),"copy"}catch{return"none"}}}function ro(e){let r=Yf(e);if(!Vs(r))return!1;try{return lE(r,{recursive:!0,force:!0}),!0}catch{return!1}}function Jf(e,r,t=1e4){try{let[n,o]=ve(r,["--version"]),s=dE(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 yE,existsSync as Al,mkdirSync as Xf,readFileSync as Qf,rmSync as zf,writeFileSync as RE}from"node:fs";import Er from"node:path";var Zf=Er.join(".agents","mcp_config.json");function eg(e){return Er.join(e,Zf)}function vE(e){return Q(e,["ls-files","--error-unmatch",Zf.split(Er.sep).join("/")],{allowFailure:!0}).trim().length>0}function bE(e){if(!Al(e))return{};try{let r=JSON.parse(Qf(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 SE(e){let r=Q(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!r)return;let t=Er.isAbsolute(r)?r:Er.join(e,r),n=Er.join(t,"info","exclude"),o=".agents/mcp_config.json";try{Xf(Er.dirname(n),{recursive:!0});let s=Al(n)?Qf(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;yE(n,`${s.endsWith(`
|
|
38
|
+
`)||!s?"":`
|
|
39
|
+
`}${o}
|
|
40
|
+
`)}catch{}}function rg(e){if(vE(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=eg(e.worktreePath),t=bE(r);if(ne in t)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${ne}" server \u2014 refusing to overwrite it`};Xf(Er.dirname(r),{recursive:!0});let n={mcpServers:{...t,[ne]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[ze]:e.brokerSocketPath}}}};return RE(r,`${JSON.stringify(n,null,2)}
|
|
41
|
+
`,{mode:384}),SE(e.worktreePath),{ok:!0,configPath:r}}function Gs(e){let r=eg(e);if(!Al(r))return!1;try{return zf(r,{force:!0}),zf(Er.dirname(r),{recursive:!1}),!0}catch{return!0}}import{copyFileSync as wE,existsSync as Il,mkdirSync as xE,readFileSync as _E,rmSync as CE,symlinkSync as EE,writeFileSync as PE}from"node:fs";import{homedir as AE}from"node:os";import Pr from"node:path";var IE="gemini-home";function tg(e){return Pr.join(e,IE)}function OE(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||AE()}function TE(e=process.env){let r=e.GEMINI_CLI_HOME?.trim();return r?Pr.join(Pr.resolve(r),".gemini"):Pr.join(OE(e),".gemini")}function NE(e){if(!Il(e))return{};try{let r=JSON.parse(_E(e,"utf8"));return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}catch{return{}}}function ME(e){let r=e.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?!1:ne in r}function DE(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function WE(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[ze]:e},trust:!0}}function ng(e){let r=e.env??process.env,t=TE(r),n=NE(Pr.join(t,"settings.json"));if(ME(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${ne}" MCP server \u2014 refusing to write a duplicate stanza`};let o=tg(e.workerDir),s=Pr.join(o,".gemini");xE(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...DE(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[ne]:WE(e.brokerSocketPath)}};return PE(Pr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
|
|
42
|
+
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:LE(t,s)}}function LE(e,r){let t=["oauth_creds.json","google_accounts.json"],n="none";for(let o of t){let s=Pr.join(e,o);if(!Il(s))continue;let i=Pr.join(r,o);try{EE(s,i,"file"),n==="none"&&(n="symlink")}catch{try{wE(s,i),n="copy"}catch{}}}return n}function Ys(e){let r=tg(e);if(!Il(r))return!1;try{return CE(r,{recursive:!0,force:!0}),!0}catch{return!1}}var BE=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function og(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function FE(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 $r(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:FE(r);return{finalResult:r??t??"completed",summary:t}}function qs(e,r,t){if(og(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=$r(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),F(e.runId,e),e.workerDir&&(Yt(e.workerDir),_s(e.workerDir),ro(e.workerDir),Ys(e.workerDir)),e.worktreePath&&(js(e.worktreePath),Gs(e.worktreePath))}function KE(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 sg(e,r){let t=KE(r);if(t.size===0)return[];let n=ee(e),o=[];for(let s of Object.keys(n.workers||{})){let i=I(UE.join(M(n.id),"workers",x(s),"worker.json"),void 0);if(!i?.taskId||og(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!BE.has(a))continue;let l=Y(i,{base:n.base,baseCommit:n.baseCommit});qs(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}xn();function Js(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 HE(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 $E(e){let r=_n(e);return r?{summary:r.reason,handoffState:"exit_failure",blocked:r.blocked}:null}function jE(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 zs(e){let{worker:r,status:t}=e;if(Js(t.finalResult)){let u=pe(r.heartbeatPath),d=kr(u),p=Js(d)&&JSON.stringify(d)===JSON.stringify(t.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:t.finalResult,source:p,snapshot:$r(t)}}if(t.alive)return null;let n=et(r.stdoutPath);if(Js(n.finalResult)){let u={...t,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:$r(u)}}let o=pe(r.heartbeatPath),s=kr(o);if(Js(s)){let u={...t,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:$r(u)}}let i=$E(t.error??n.error);if(i){let u={...t,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:$r(u)}}let a=HE(o);if(a){let u={...t,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:$r(u)}}let l=jE({status:t,heartbeat:o}),c={...t,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:$r(c)}}function Xs(e,r){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=r.snapshot,e.completionHandoffSource=r.source,!0)}xn();function Qs(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 ig(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 ag(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function lg(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function ug(e){let r=lg(e);if(!r)return[];let t=lg(r.worktreeHandoff),n=ag(t?.disposableArtifactsRemoved);return n.length?n:ag(r.disposableArtifactsRemoved)}function cg(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function dg(e,r){let t=Qs(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>cg(o)));return t.every(o=>{let s=cg(ig(o));return n.has(s)})}function Zs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function pg(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function VE(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 GE(e){let r=pg(e.disposableArtifactsRemoved),t=ug(e.finalResult);return[...new Set([...r,...t])]}function mg(e){let r=pg(e.changedFiles),t=Qs(r),n=GE(e),o=t.length===0||dg(r,n);return Zs(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`}:Zs(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`}:Zs(e.artifactBundlePath)||Zs(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}:VE(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`}}qe();import{existsSync as dP,renameSync as pP}from"node:fs";import{mkdirSync as iP}from"node:fs";import aP from"node:path";import{DatabaseSync as lP}from"node:sqlite";var Ol=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"}},YE=[`CREATE TABLE IF NOT EXISTS local_meta (
|
|
43
|
+
key TEXT PRIMARY KEY,
|
|
44
|
+
value TEXT NOT NULL
|
|
45
|
+
) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
|
|
46
|
+
process_key TEXT PRIMARY KEY,
|
|
47
|
+
pid INTEGER NOT NULL,
|
|
48
|
+
runtime_version TEXT NOT NULL,
|
|
49
|
+
node_version TEXT NOT NULL,
|
|
50
|
+
started_at TEXT NOT NULL,
|
|
51
|
+
registered_at TEXT NOT NULL
|
|
52
|
+
) STRICT`,`CREATE TABLE IF NOT EXISTS admission_reservations (
|
|
53
|
+
reservation_key TEXT PRIMARY KEY,
|
|
54
|
+
owner TEXT NOT NULL,
|
|
55
|
+
expires_at TEXT NOT NULL,
|
|
56
|
+
created_at TEXT NOT NULL
|
|
57
|
+
) STRICT`,`CREATE TABLE IF NOT EXISTS operation_receipts (
|
|
58
|
+
idempotency_key TEXT PRIMARY KEY,
|
|
59
|
+
operation TEXT NOT NULL,
|
|
60
|
+
result_json TEXT,
|
|
61
|
+
recorded_at TEXT NOT NULL
|
|
62
|
+
) STRICT`,`CREATE TABLE IF NOT EXISTS recovery_checkpoints (
|
|
63
|
+
scope TEXT NOT NULL,
|
|
64
|
+
seq INTEGER NOT NULL,
|
|
65
|
+
payload_json TEXT NOT NULL,
|
|
66
|
+
created_at TEXT NOT NULL,
|
|
67
|
+
PRIMARY KEY (scope, seq)
|
|
68
|
+
) STRICT`];function qE(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 fg(e,r){let t=qE(e);if(t!==null&&t>1)throw new Ol(t,1);e.exec("BEGIN IMMEDIATE");try{for(let n of YE)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 JE,realpathSync as zE,readFileSync as XE}from"node:fs";import gg from"node:path";var QE=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),ZE=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"]);function eP(){try{return XE("/proc/self/mounts","utf8")}catch{return null}}function rP(e){let r=gg.resolve(e);for(let t=0;t<64;t+=1){if(JE(r))try{return zE.native(r)}catch{return r}let n=gg.dirname(r);if(n===r)return r;r=n}return r}function tP(e){return e.replace(/\\(\d{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function nP(e){let r=[];for(let t of e.split(`
|
|
69
|
+
`)){let n=t.trim().split(/\s+/);n.length<3||r.push({mountPoint:tP(n[1]),fsType:n[2]})}return r}function hg(e,r=process.platform){return r==="win32"?e.replace(/\\/g,"/"):e}function oP(e,r){let t=null,n=hg(e);for(let o of r){let s=hg(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!t||o.mountPoint.length>t.mountPoint.length)&&(t=o)}return t}function kg(e,r){let n=(r?.resolveRealPath??rP)(e),o=(r?.mountsSource??eP)();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=oP(n,nP(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 ZE.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}:QE.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 ei=class extends Error{constructor(r){super(`local-run-store refused: ${r}`),this.name="FilesystemPolicyError"}},cP="local-run-store.sqlite",uP=5e3,to=class e{db;now;databasePath;constructor(r,t,n){this.db=r,this.databasePath=t,this.now=n}static open(r){let t=kg(r.directory,r.classifyOptions);if(t.verdict!=="accepted")throw new ei(t.reason);iP(r.directory,{recursive:!0,mode:448});let n=aP.join(r.directory,r.filename??cP),o=new lP(n,{timeout:r.busyTimeoutMs??uP}),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 ei(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),fg(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
|
|
70
|
+
(process_key, pid, runtime_version, node_version, started_at, registered_at)
|
|
71
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
72
|
+
ON CONFLICT(process_key) DO UPDATE SET
|
|
73
|
+
pid = excluded.pid,
|
|
74
|
+
runtime_version = excluded.runtime_version,
|
|
75
|
+
node_version = excluded.node_version,
|
|
76
|
+
started_at = excluded.started_at,
|
|
77
|
+
registered_at = excluded.registered_at`).run(r.processKey,r.pid,r.runtimeVersion,r.nodeVersion,r.startedAt,t)}),{...r,registeredAt:t}}getProcessIdentity(r){let t=this.db.prepare(`SELECT process_key, pid, runtime_version, node_version, started_at, registered_at
|
|
78
|
+
FROM process_identity WHERE process_key = ?`).get(r);return t?{processKey:t.process_key,pid:t.pid,runtimeVersion:t.runtime_version,nodeVersion:t.node_version,startedAt:t.started_at,registeredAt:t.registered_at}:null}tryReserveAdmission(r,t,n,o){let s=o??this.now(),i=new Date(s.getTime()+n).toISOString();return this.inImmediateTransaction(()=>{let a=this.db.prepare("SELECT reservation_key, owner, expires_at FROM admission_reservations WHERE reservation_key = ?").get(r);return a&&a.expires_at>s.toISOString()&&a.owner!==t?{acquired:!1,current:{key:r,owner:a.owner,expiresAt:a.expires_at}}:(this.db.prepare(`INSERT INTO admission_reservations (reservation_key, owner, expires_at, created_at)
|
|
79
|
+
VALUES (?, ?, ?, ?)
|
|
80
|
+
ON CONFLICT(reservation_key) DO UPDATE SET
|
|
81
|
+
owner = excluded.owner,
|
|
82
|
+
expires_at = excluded.expires_at`).run(r,t,i,s.toISOString()),{acquired:!0,current:{key:r,owner:t,expiresAt:i}})})}releaseAdmission(r,t){return this.inImmediateTransaction(()=>{let n=this.db.prepare("DELETE FROM admission_reservations WHERE reservation_key = ? AND owner = ?").run(r,t);return Number(n.changes)>0})}listAdmissionReservations(r){let t=Math.floor(r?.limit??200),n=Number.isFinite(t)?Math.max(1,Math.min(1e3,t)):200,o=[],s=[];if(r?.keyPrefix){let l=r.keyPrefix.replace(/[\\%_]/g,c=>`\\${c}`);o.push("reservation_key LIKE ? ESCAPE '\\'"),s.push(`${l}%`)}r?.includeExpired||(o.push("expires_at > ?"),s.push((r?.now??this.now()).toISOString()));let i=o.length?`WHERE ${o.join(" AND ")}`:"";return this.db.prepare(`SELECT reservation_key, owner, expires_at
|
|
83
|
+
FROM admission_reservations ${i}
|
|
84
|
+
ORDER BY expires_at ASC, reservation_key ASC
|
|
85
|
+
LIMIT ?`).all(...s,n).map(l=>({key:l.reservation_key,owner:l.owner,expiresAt:l.expires_at}))}recordOperationReceipt(r){return this.inImmediateTransaction(()=>{let t=this.db.prepare(`INSERT INTO operation_receipts (idempotency_key, operation, result_json, recorded_at)
|
|
86
|
+
VALUES (?, ?, ?, ?)
|
|
87
|
+
ON CONFLICT(idempotency_key) DO NOTHING`).run(r.idempotencyKey,r.operation,r.resultJson??null,this.now().toISOString());return{deduplicated:Number(t.changes)===0}})}listOperationReceipts(r){let t=Math.floor(r?.limit??200),n=Number.isFinite(t)?Math.max(1,Math.min(1e3,t)):200,o=[],s=[];if(r?.operation&&(o.push("operation = ?"),s.push(r.operation)),r?.keyPrefix){let l=r.keyPrefix.replace(/[\\%_]/g,c=>`\\${c}`);o.push("idempotency_key LIKE ? ESCAPE '\\'"),s.push(`${l}%`)}r?.recordedAfter&&(o.push("recorded_at > ?"),s.push(r.recordedAfter));let i=o.length?`WHERE ${o.join(" AND ")}`:"";return this.db.prepare(`SELECT idempotency_key, operation, result_json, recorded_at
|
|
88
|
+
FROM operation_receipts ${i}
|
|
89
|
+
ORDER BY recorded_at ASC, idempotency_key ASC
|
|
90
|
+
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
|
|
91
|
+
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)
|
|
92
|
+
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
|
|
93
|
+
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 mP(e,r){let t=`${e}.quarantine-${r}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;dP(o)&&pP(o,`${t}${n}`)}return t}function yg(e){let r=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),t=null;try{let s=to.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=mP(n,r);try{return{store:to.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([t,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}function fP(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function gP(){return hP.classifyOptions??fP()}var hP={};var kP=300*1e3,Ar=null,ri=0;function yP(e){ri+=1;try{let r=gP(),t=yg({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 RP(e,r){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:r-e.failedAtMs>=kP}function q(e=Date.now()){let r=Te();return(!Ar||Ar.status.harnessRoot!==r||RP(Ar,e))&&(bP(),Ar=yP(r)),Ar.store}function vP(){return Ar?Ar.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:ri}}function Rg(){return q(),vP()}function bP(){try{Ar?.store?.close()}catch{}Ar=null}K();O();import{existsSync as SP,readFileSync as wP}from"node:fs";import{homedir as xP}from"node:os";import _P from"node:path";var CP=3e4,Xe=null;function vg(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return _P.join(xP(),".kynver",`local-run-store-flags-${r}.json`)}function Tl(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 bg(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:Tl(t)}function Sg(e,r){try{let t=vg(e),n={contractVersion:1,agentOsId:e,flags:Tl(r),deliveredAt:new Date().toISOString()};ue(t,n),Xe={flags:n.flags,loadedAtMs:Date.now(),file:t}}catch{}}function wg(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(Xe&&e-Xe.loadedAtMs<CP)return Xe.flags;try{let r=U().agentOsId?.trim();if(!r)return Xe={flags:{},loadedAtMs:e,file:null},Xe.flags;let t=vg(r);if(!SP(t))return Xe={flags:{},loadedAtMs:e,file:t},Xe.flags;let n=JSON.parse(wP(t,"utf8")),o=n?.contractVersion===1?Tl(n.flags):{};return Xe={flags:o,loadedAtMs:e,file:t},o}catch{return Xe={flags:{},loadedAtMs:e,file:null},Xe.flags}}var EP=[{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 PP(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 Ir(e=process.env){let r={},t={},n=[],o=wg();for(let s of EP){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=PP(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 Ie={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};function Or(e=process.env){return Ir(e).flags.dispatchReceipts}function Nl(e){return Or(e)!=="off"}function Ml(e,r){return`dispatch:${e}:${r.taskId}:${r.leaseToken}`}function oo(e,r,t){if(!Nl())return;let n=q();if(n)try{n.recordOperationReceipt({idempotencyKey:Ml(e,r),operation:`dispatch-${e}`,resultJson:t===void 0?null:JSON.stringify(t)})}catch{Ie.storeFailures+=1}}function _g(e){oo("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function ti(e){oo("spawned",e)}function qt(e,r){oo("released",e,{reasonClass:r})}function Cg(e){oo("completion-sent",e)}function Dl(e,r){oo("completion-acked",e,{outcome:r})}function Eg(e){if(!Nl())return!1;let r=q();if(!r)return!1;try{let t=r.getOperationReceipt(Ml("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 Ie.completionReplaysObserved+=1,!0}}catch{Ie.storeFailures+=1}return!1}function Wl(e){let r=String(e??"").split(":")[0]?.trim()??"";return r.length>0?r.slice(0,64):"unknown"}function Pg(e){if(Or()!=="enforce")return!1;let r=q();if(!r)return!1;try{let t=r.getOperationReceipt(Ml("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"?(Ie.completionReplaysShortCircuited+=1,!0):!1}catch{return Ie.storeFailures+=1,!1}}var AP=600*1e3;function Ag(e,r){if(Or()!=="enforce")return;let t=q();if(t)try{t.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${r}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:r})})}catch{Ie.storeFailures+=1}}function Ig(e,r){if(Or()!=="enforce")return[];let t=q();if(!t)return[];let n=r?.nowMs??Date.now(),o=r?.windowMs??AP;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 Ie.storeFailures+=1,[]}}function no(e){let r=e.split(":")[0]??"",t=Number(r);return Number.isInteger(t)&&t>=0?t:null}var IP=900*1e3,xg=10080*60*1e3,OP=1440*60*1e3,TP=500,NP=300;function Og(e){let r={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Nl())return r;let t=q();if(!t)return r;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??IP;try{let s=t.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-xg).toISOString(),limit:TP}),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>=OP&&a.length+5<=NP&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let f=u.split(":")[0]??"",b=no(u.slice(f.length+1));if((f?t.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${f}:`,limit:10}):[]).some(h=>{if(b===null)return!0;let E=h.idempotencyKey.slice(`dispatch:completion-acked:${f}:`.length),P=no(E);return P===null||P>=b}))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(Or()==="enforce"){let c=t.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=xg}).map(u=>u.idempotencyKey);if(c.length>0){let u=t.deleteOperationReceiptsByKeys(c);l+=u,Ie.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return Ie.storeFailures+=1,r}}function Tg(){return{"dispatchReceipts.storeFailures":Ie.storeFailures,"dispatchReceipts.completionReplaysObserved":Ie.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":Ie.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":Ie.agedReceiptsPruned}}var Jt=900*1e3,Bl="admission-shadow",Ll="worker-slot:",jr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},Ul=!1;function Ng(){Ul=!1}function Tr(e=process.env){return Ir(e).flags.admission}function ni(e,r){return`${Ll}${e}:${r}`}function Mg(e,r){if(Tr()==="off")return;let t=q();if(t)try{t.tryReserveAdmission(ni(e,r),Bl,Jt)}catch{jr.storeFailures+=1}}function so(e,r){if(Tr()==="off")return;let t=q();if(t)try{t.releaseAdmission(ni(e,r),Bl)}catch{jr.storeFailures+=1}}function Dg(e){let r={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Tr()==="off")return r;let t=q();if(!t)return r;try{let n=new Set(e.liveWorkers.map(p=>ni(p.runId,p.workerName))),o=t.listAdmissionReservations({keyPrefix:Ll,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=!Ul;Ul=!0,!l&&i>0&&(jr.missingForLive+=i);let c=0;for(let p of e.liveWorkers)t.tryReserveAdmission(ni(p.runId,p.workerName),Bl,Jt),c+=1;let u=0;for(let p of o)n.has(p.key)||t.releaseAdmission(p.key,p.owner)&&(u+=1,jr.deadSlotsReleased+=1);return{liveReservations:t.listAdmissionReservations({keyPrefix:Ll,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return jr.storeFailures+=1,r}}function Wg(){return{"admission.storeFailures":jr.storeFailures,"admission.missingForLive":jr.missingForLive,"admission.deadSlotsReleased":jr.deadSlotsReleased}}var Fl="worker-slot-n:",oi=64;function Lg(e){return`${Fl}${e}`}function si(e,r){return`${e}:${r}`}var Vr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0};function Ug(e){if(Tr()!=="enforce")return{admitted:!0};let r=q();if(!r)return{admitted:!0};let t=Math.max(0,Math.min(oi,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=t)return Vr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=si(e.runId,e.workerName);for(let o=0;o<t;o+=1)if(r.tryReserveAdmission(Lg(o),n,Jt).acquired)return{admitted:!0,slot:o};return Vr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Vr.enforceStoreFailures+=1,{admitted:!0}}}function Gr(e,r){if(Tr()==="off")return;let t=q();if(t)try{let n=si(e,r),o=t.listAdmissionReservations({keyPrefix:Fl,limit:oi});for(let s of o)s.owner===n&&t.releaseAdmission(s.key,n)}catch{Vr.enforceStoreFailures+=1}}function Bg(e){let r={refreshed:0,deadReleased:0,adopted:0};if(Tr()!=="enforce")return r;let t=q();if(!t)return r;try{let n=new Set(e.liveWorkers.map(c=>si(c.runId,c.workerName))),o=t.listAdmissionReservations({keyPrefix:Fl,limit:oi}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(t.tryReserveAdmission(c.key,c.owner,Jt),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=si(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<oi;d+=1)if(t.tryReserveAdmission(Lg(d),u,Jt).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Vr.enforceStoreFailures+=1,r}}function Fg(){return{"admission.enforceStoreFailures":Vr.enforceStoreFailures,"admission.refusedSlotsExhausted":Vr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Vr.admissionsRefusedDiskBackstop}}O();O();var MP=/^[a-z0-9][a-z0-9._-]{0,127}$/i,DP=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Kg=new Set(["undefined","null"]),Hg="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function WP(e){let r=e.trim();if(!MP.test(r))throw new Error(`invalid run id: ${e}`);return r}function LP(e){let r=e.trim();if(!DP.test(r))throw new Error(`invalid worker name: ${e}`);return r}function $g(e){return typeof e=="string"?e.trim():""}function Kl(e){let r=$g(e.run),t=$g(e.name);return(!r||Kg.has(r))&&$e(`missing --run RUN_ID (${Hg})`),(!t||Kg.has(t))&&$e(`missing --name WORKER_NAME (${Hg})`),{runId:WP(r),workerName:LP(t)}}import{existsSync as UP,mkdirSync as BP,readFileSync as FP,writeFileSync as KP}from"node:fs";import{homedir as HP}from"node:os";import Xg from"node:path";var xe={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};function io(e){return Ir(process.env).flags[e]}var Wj=1800*1e3;function Hl(e){return`mesh-cron-lease:${e}`}function jg(e,r){if(io("meshLease")==="off")return;let t=q();if(t)try{let n=t.latestRecoveryCheckpoint(Hl(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:Hl(e),payloadJson:JSON.stringify(r)})}catch{xe.meshStoreFailures+=1}}function Vg(e,r){let t=io("meshLease");if(t==="off")return null;let n=q();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(Hl(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(r?.leaseToken??null)||(s.holderBoxId??null)!==(r?.holderBoxId??null)||(s.authorized??null)!==(r?.authorized??null));return i&&(xe.meshLeaseDivergences+=1),t!=="enforce"?null:i&&r?.updatedAt&&s?.updatedAt&&Date.parse(r.updatedAt)>Date.parse(s.updatedAt)?(xe.meshEnforceStaleInversions+=1,null):s}catch{return xe.meshStoreFailures+=1,null}}function ii(e){return`quota-cooldown:${e}`}var Gg="quota-preflight";function Yg(e,r){if(io("quota")==="off")return;let t=q();if(t)try{t.tryReserveAdmission(ii(e),Gg,r)}catch{xe.quotaStoreFailures+=1}}function qg(e){if(io("quota")==="off")return;let r=q();if(r)try{r.releaseAdmission(ii(e),Gg)}catch{xe.quotaStoreFailures+=1}}function Jg(e,r){let t=io("quota");if(t==="off")return null;let n=q();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:ii(e),limit:50}).find(i=>i.key===ii(e)),s=!!o;return s!==r&&(xe.quotaVerdictDivergences+=1),t==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return xe.quotaStoreFailures+=1,null}}function zg(){return{"keeper.storeFailures":xe.keeperStoreFailures,"meshLease.storeFailures":xe.meshStoreFailures,"meshLease.divergences":xe.meshLeaseDivergences,"meshLease.enforceStaleInversions":xe.meshEnforceStaleInversions,"quota.storeFailures":xe.quotaStoreFailures,"quota.verdictDivergences":xe.quotaVerdictDivergences}}var $P=/\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,jP=30,VP=5,GP=240;function YP(e){let r=e?.trim();return!!(r&&$P.test(r))}function qP(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function $l(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(GP,Math.max(VP,e)):jP}function Qg(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||Xg.join(HP(),".kynver","provider-quota-cooldowns.json")}function ao(e){return(e??"").trim().toLowerCase()}function jl(){let e=Qg();if(!UP(e))return{};try{let r=JSON.parse(FP(e,"utf8"));if(!r||typeof r!="object"||Array.isArray(r))return{};let t={};for(let[n,o]of Object.entries(r)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(t[ao(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return t}catch{return{}}}function Vl(e){let r=Qg();try{BP(Xg.dirname(r),{recursive:!0}),KP(r,`${JSON.stringify(e,null,2)}
|
|
94
|
+
`,"utf8")}catch{}}function JP(e,r,t=Date.now()){let n=ao(e);if(!n)return;let o=jl();o[n]={lastExhaustedAt:new Date(t).toISOString(),reason:r.trim().slice(0,500)},Vl(o),Yg(n,$l()*6e4)}function zP(e){let r=ao(e);if(!r)return!1;qg(r);let t=jl();return r in t?(delete t[r],Vl(t),!0):!1}function Zg(e,r=Date.now()){if(!qP())return{ok:!0};let t=ao(e);if(!t)return{ok:!0};let n=jl(),o=n[t],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+$l()*6e4>r),i=Jg(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+$l()*6e4;if(!Number.isFinite(a)||l<=r)return delete n[t],Vl(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 XP(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 eh(e){let r=ao(e.provider);if(!r)return"none";let t=XP(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return t?YP(t)?(JP(r,t,e.nowMs??Date.now()),"recorded"):zP(r)?"cleared":"none":"none"}function rh(e){let r=e.usage;return!r||r.inputTokens===void 0&&r.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:r.model?.trim()||e.model?.trim()||null,inputTokens:r.inputTokens??null,outputTokens:r.outputTokens??null}}async function th(e,r,t){let n=await fetch(e,{method:"POST",headers:Mn(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 ZP(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function nh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function lo(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function eA(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function rA(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 sh(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function tA(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function zt(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,F(e.runId,e))}function nA(e){e.completionBlocker&&(delete e.completionBlocker,F(e.runId,e))}function Gl(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function oA(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function Yl(e){let{runId:r,workerName:t}=Kl(e),n=Bt(r,t),o=ee(n.runId),s=Y(n,Gl(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Se(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&zn(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&kl(n)&&nA(n),!s.finalResult&&s.alive===!1){let w=zs({worker:n,status:s});w&&Xs(n,w)&&(F(n.runId,n),n=Bt(r,t),s=Y(n,Gl(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let w=xl({worker:n,run:o,status:s});if(!w.ok)return zt(n,w.reason),{ok:!1,reason:w.reason,nextAction:w.nextAction,completionBlocked:!0};(w.prUrl||w.headCommit)&&(s=Y(n,Gl(o)),s=oA(s,w))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let w=mg({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!w.allowed){let V=w.detail??`worktree completion blocked (${w.state})`;return zt(n,V),{ok:!1,reason:V,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{eh({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=X(e.baseUrl?String(e.baseUrl):void 0),p=e.secret?String(e.secret):void 0,m=await re(p,i,{baseUrl:d});a&&(await Ws({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Bt(r,t));let f=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,b={...s};n.disposableArtifactsRemoved?.length&&(b.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(b.steerRestartRequired=!0,b.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(b.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let k=rh({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),R={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?{...b,leaseToken:n.leaseToken}:b,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(Eg(g),Pg(g)){let w={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return Bs(n,n.runId,w),qs(n,s,{source:"harness-completion"}),zt(n,void 0),so(n.runId,n.name),Gr(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}Cg(g)}let h=await th(f,m,R);if((h.status===401||h.status===403)&&!p){let w=await yp(i,{baseUrl:d});w&&w!==m&&(m=w,h=await th(f,m,R))}if(h.ok){let w=Sf(h.parsed);if(!wf(w)){let he=`completion acknowledged but board not advanced: ${w.detail??(w.routeOutcome?`harness completion returned ${w.routeOutcome}`:"harness completion did not advance the linked task")}`;zt(n,he);let Ze={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Bs(n,n.runId,Ze),g&&Dl(g,"rejected"),{ok:!1,httpStatus:h.status,response:h.parsed,reason:he,completionBlocked:!0}}zt(n,void 0);let V=w.routeOutcome??"acknowledged",$={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Bs(n,n.runId,$),qs(n,s,{source:"harness-completion"}),g&&Dl(g,"acknowledged"),so(n.runId,n.name),Gr(n.runId,n.name);let _=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:V,..._?{prHandoff:{prUrl:_}}:{}}}let E=h.status===401||h.status===403,P=ZP(h.parsed)??(E?"runner token unauthorized":"non-2xx response"),S=E?`completion replay rejected (${h.status}): ${P}`:`completion replay failed (${h.status}): ${P}`;return zt(n,S),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}function ih(e){let{run:r,workerName:t,worker:n}=e,o=Y(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Ot({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=sh(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,p=nh(n.completionResponse),m=nh(p?.task),f=lo(p?.outcome),b=lo(p?.status),k=Array.isArray(p?.warnings)?p.warnings.filter(S=>typeof S=="string"&&S.trim().length>0):[],R=lo(m?.prUrl)??lo(p?.prUrl),g=lo(n.completionReportedAt),h=eA({finished:Se(o),completionBlocker:c,completionOutcome:f,completionReportedAt:g}),E=rA({completionBlocker:c,completionOutcome:f,completionReportedAt:g,finished:Se(o)}),P=tA({changedFiles:o.changedFiles,headCommit:s,prUrl:R??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 w=S.ruleSlugs;return Array.isArray(w)?w.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:R,handoffState:P,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:h,completionReportedAt:g,completionOutcome:n.completionOutcome??null,completionRouteStatus:b,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:E,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function sA(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&&!sh(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function iA(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 co(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function oh(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function aA(e){let r=e.filter(oh),t=e.filter(n=>{if(oh(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function ah(e,r,t){let n={runId:e.id,name:e.name,status:na(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:co(r,"status"),attentionCounts:co(r,"attention"),lifecycleCounts:co(r,"lifecycleStage")},n.controller=aA(r)),n}function lA(e){return e.status==="done"&&e.attention==="done"}function ql(e){let r=ee(e),n=Object.keys(r.workers||{}).map(s=>{let i=I(ai.join(M(r.id),"workers",x(s),"worker.json"),void 0);return i?ih({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=ah(r,n,!1);return ue(ai.join(M(r.id),"last-board.json"),o),o}function Jl(e){let r=ee(e),n=Object.keys(r.workers||{}).map(i=>{let a=I(ai.join(M(r.id),"workers",x(i),"worker.json"),void 0);return a?sA(a)?iA(i,a):ih({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!lA(i)),s=ah(r,o,!0);return s.status=na(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:co(n,"status"),allAttentionCounts:co(n,"attention")},ue(ai.join(M(r.id),"last-board-compact.json"),s),s}async function lh(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=ql(t),s=X(e.baseUrl?String(e.baseUrl):void 0),i=await re(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await J(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}O();K();B();O();var MV=360*60*1e3;function uh(e){let r=e.nodeExecutable??process.execPath,t=Es({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:r});if(!t)return;let n=t.cliPath;if(!uA(n))return;let o=pA.join(e.workerDir,"auto-complete.log"),s;try{s=dA(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=cA(t.command,a,ae({detached:ce(),stdio:i,env:process.env}));return s!==void 0&&ch(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{ch(s)}catch{}return}}de();function dh(e,r,t){Q(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=te(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=te(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)}}Oe();rs();K();import RA from"node:net";import{chmodSync as vA,unlinkSync as bA}from"node:fs";import{createHash as mA}from"node:crypto";import{chmodSync as fA,mkdirSync as gA}from"node:fs";import ph from"node:os";import hA from"node:path";var kA=100,yA="\\\\.\\pipe\\";function mh(e,r){return mA("sha256").update(e).digest("hex").slice(0,r)}function zl(e){let r=e.platform??process.platform,t=mh(e.agentOsId,12),n=mh(e.workerKey,16);if(r==="win32")return{socketPath:`${yA}kynver-worker-${t}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=hA.posix,s=e.homeDir??ph.homedir(),i=o.join(s,".kynver","brokers",t),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=kA)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??ph.tmpdir(),`kynver-brokers-${t}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Xl(e){e.socketDir&&(gA(e.socketDir,{recursive:!0,mode:448}),fA(e.socketDir,448))}var uo=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=Kn(r.capabilities),this.server=RA.createServer(t=>{this.handleConnection(t)}),this.server.on("error",()=>{})}static async start(r){let t=new e(r);if(Xl(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{vA(r.address.socketPath,384)}catch{}return t}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(Gt).map(r=>Gn[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{bA(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(`
|
|
95
|
+
`);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(r,i),s=n.indexOf(`
|
|
96
|
+
`)}})}write(r,t){if(!r.destroyed)try{r.write(tl(t))}catch{}}async handleLine(r,t){let n=nl(t);if(!n.ok){this.refuse(n.reason,n.error),this.write(r,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(r,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(r,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(r,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!Gt(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 Ps({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 kh={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 Ql(){return kh}var xA=7200*1e3;async function yh(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||wr,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Ns({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim(),configuredProvider:U().workerProvider}),s=Rf(o.provider),i=o.model;if(s.preflightModel){let D=s.preflightModel(r.model);if(!D.ok)throw new Error(`model preflight failed for provider "${s.name}": ${D.note??"invalid model/provider combination"}`);D.normalized&&console.error(`[supervisor] ${n}: ${D.note}`),i=D.model}let{worktreesDir:a}=le(),l=Xt.join(M(e.id),"workers",n);wA(l,{recursive:!0});let c=Xt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(SA(c))throw new Error(`worktree path already exists: ${c}`);if(Q(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)dh(e.repo,c,u);else{let D=mf({baseCommit:e.baseCommit,base:e.base,verifyRef:L=>Q(e.repo,["rev-parse","--verify","--quiet",`${L}^{commit}`],{allowFailure:!0}).trim().length>0});D.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${D.ref} (${D.source})`),e.baseCommit=Q(e.repo,["rev-parse",D.ref],{allowFailure:!0}).trim()||D.ref,Pe(e)),Q(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let p=Xt.join(l,"stdout.jsonl"),m=Xt.join(l,"stderr.log"),f=Xt.join(l,"heartbeat.jsonl"),b=kf({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,R=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=Ks({title:r.taskTitle,personaSlug:r.personaSlug,parentTaskId:r.parentTaskId,executorRef:r.executorRef}),h,E,P,S,w=r.workerMcpToken?.trim();if(w&&ol(s.name)&&Hn()){let D=Aa();D&&r.agentOsId&&r.taskId?(E={apiBaseUrl:D,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:w,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 V=xm(s.name);if(w&&V&&Hn()){let D=Aa();if(D&&r.agentOsId&&r.taskId){let L=zl({agentOsId:String(r.agentOsId),workerKey:l}),Ke=await uo.start({address:L,apiBaseUrl:D,agentOsId:String(r.agentOsId),taskId:String(r.taskId),token:w,capabilities:r.workerMcpCapabilities??null,expiresAt:r.workerMcpExpiresAt??Date.now()+xA,workerPid:process.pid,identity:Ql(),onRefusal:T=>console.error(`[supervisor] ${n}: worker tools refused a call (${T})`)});if(Pl(l,Ke),s.name==="codex"){let T=qf({workerDir:l,brokerSocketPath:L.socketPath});if(T.ok){let G=Jf(T.codexHome,al());G.ok?(P=T.codexHome,h=P):(ro(l),await Kr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${G.detail}); spawning with the normal environment`))}else await Kr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`)}else if(s.name==="cursor"){let T=Gf({worktreePath:c,brokerSocketPath:L.socketPath});T.ok?h=T.configPath:(await Kr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`))}else if(s.name==="gemini"&&Os(Is())==="antigravity"){let T=rg({worktreePath:c,brokerSocketPath:L.socketPath});T.ok?h=T.configPath:(await Kr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`))}else if(s.name==="gemini"){let T=ng({workerDir:l,brokerSocketPath:L.socketPath});T.ok?(S=T.geminiCliHome,h=S):(await Kr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`))}else h=Cm({workerDir:l,brokerSocketPath:L.socketPath});h&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${Ke.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let $;try{$=s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:p,stderrPath:m,heartbeatPath:f,prompt:b,reviewWorker:g,executionMode:r.executionMode??"write",...E?{workerToolGrant:E}:{},...P?{codexHome:P}:{},...S?{geminiCliHome:S}:{},...h?{mcpConfigPath:h,mcpAllowedTools:wm(r.workerMcpCapabilities)}:{}})}catch(D){throw h&&(_s(l),js(c),ro(l),Ys(l),Gs(c),Yt(l)),Q(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),Q(e.repo,["branch","-D",d],{allowFailure:!0}),D}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,R===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=R}let _=rf($.model,i,s.defaultModel),Z=U(),he=gr(process.env,Z),Ze=We().runnerId,dr=es({boxKind:he.boxKind,config:Z,env:process.env}),se={name:n,runId:e.id,status:"running",pid:$.pid,model:_,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:he.boxKind,boxId:dr,runtimeId:Ze,startedAt:new Date().toISOString()};if(F(e.id,se),El(l,$.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Xt.join(l,"worker.json")}},e.status="running",Pe(e),se.agentOsId&&se.taskId){let D;try{D=uh({runId:e.id,workerName:n,workerDir:l,agentOsId:se.agentOsId})}catch(L){let Ke=`completion sidecar failed to spawn: ${L.message}`;se.completionBlocker=Ke,F(e.id,se)}if(D)D.pid&&(se.completionSidecarPid=D.pid,F(e.id,se));else{let L="completion sidecar failed to spawn (CLI not found or spawn error)";se.completionBlocker=L,se.completionSidecarSpawnFailedAt=new Date().toISOString(),F(e.id,se)}}return se}K();In();function _A(e,r){let t=ds(r)?.trim();return t||Ye("KYNVER_RUNNER_TOKEN",e)||Ye("OPENCLAW_RUNNER_TOKEN",e)||null}function CA(e){let r=nt()?.trim();return r||Ye("KYNVER_API_KEY",e)||Ye("KYNVER_RUNTIME_SECRET",e)||Ye("KYNVER_CRON_SECRET",e)||Ye("OPENCLAW_CRON_SECRET",e)||null}async function Rh(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=_A(t,e.agentOsId),l=CA(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}),b=Date.now()-p,k=f.status<500;return{reachable:k,authSource:c,endpoint:d,httpStatus:f.status,responseMs:b,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,b=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:f,probedAt:s,error:`MCP endpoint unreachable: ${b}`}}}kn();function EA(e,r){let t=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||r.apiBaseUrl?.trim()||null;return t?gn(t)??null:null}function PA(e,r){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||r.defaultRepo?.trim()||null)??null}function AA(e,r,t){let n=e.KYNVER_HARNESS_ROOT?.trim()||r.harnessRoot?.trim()||null;return n||t||null}function vh(e,r={}){let t=r.env??process.env,n=r.nowMs??Date.now(),o=r.config??{},s=EA(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=PA(t,o),l=AA(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();K();import{mkdirSync as Sh}from"node:fs";import{homedir as IA,tmpdir as l1}from"node:os";import li from"node:path";function wh(){let e=process.env.KYNVER_STATE_ROOT;return e?li.resolve(e):li.join(IA(),".kynver","state")}function ci(){return li.join(wh(),"plan-outbox")}function OA(){return li.join(wh(),"plan-outbox-archive")}function xh(){let e=ci(),r=OA();return Sh(e,{recursive:!0}),Sh(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}var m1=600*1e3,po={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0};function _h(){return{"planOutbox.storeFailures":po.storeFailures,"planOutbox.corruptItemsSeen":po.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":po.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":po.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":po.halfArchivesCompleted}}import{existsSync as MA,readFileSync as DA,renameSync as k1,readdirSync as y1,rmSync as R1,writeFileSync as v1,unlinkSync as b1}from"node:fs";import Ch from"node:path";function Eh(e){if(!MA(e))return null;try{return JSON.parse(DA(e,"utf8"))}catch{return null}}function ui(e){let{outboxDir:r}=xh();return{jsonPath:Ch.join(r,`${e.id}.json`),bodyPath:Ch.join(r,e.bodyPath)}}import KA from"node:path";function rc(e){let r=KA.join(ci(),`${e}.json`);return Eh(r)}function tc(e){let r=ui(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(`
|
|
97
|
+
`)}function nc(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 oc(e){return e?.trim()?e.trim():null}function Ph(e,r){let t=oc(e.boxKind),n=oc(e.runnerId),o=oc(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,Pe(e),{ok:!0,stamped:!0}):{ok:!0}}K();On();function Ah(e=process.env){return Lt(U(),e,{requireExplicitBoxKind:!0})}function Ih(e){return[...e.errors,...e.warnings].join("; ")}async function mo(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await J(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,transportError:!1,releaseResponse:t.response??t}}function Qt(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 Oh(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 Vh}from"node:child_process";var Th=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);function Yr(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function Nh(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 Mh(e){let r=Array.isArray(e)?e:[],t=new Map;for(let n of r){let o=n&&typeof n=="object"?n:{},s=Yr(o),i=t.get(s);(!i||Nh(o)>=Nh(i))&&t.set(s,o)}return[...t.values()]}function HA(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 Dh(e){let r=Mh(e),t=[],n=[],o=[];for(let s of r){if(HA(s)){o.push(Yr(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&&Th.has(i))){if(i){n.push(`${Yr(s)}=${i}`);continue}if(!(l&&Th.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${Yr(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${Yr(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${Yr(s)}=${a}`);continue}t.push(`${Yr(s)}=PENDING`)}}}return{pending:t,failed:n,ignoredActions:o}}function Wh(e){return Mh(e).some(t=>{let n=Yr(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 $A=new Set(["CLEAN","HAS_HOOKS"]);function Lh(e,r){let t=e==="UNSTABLE"&&r.ignoredActions.length>0;return!$A.has(e)&&!t?`mergeStateStatus is ${e}`:null}import{spawnSync as jA}from"node:child_process";function Uh(){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=jA("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 VA,randomUUID as GA}from"node:crypto";import{closeSync as Bh,fsyncSync as Fh,mkdirSync as YA,openSync as Kh,realpathSync as qA,writeFileSync as JA}from"node:fs";import sc from"node:path";function $h(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 Hh(e,r,t,n){YA(e,{recursive:!0,mode:448});let o=qA(e),s=Kh(sc.join(o,`${r}.${t}.json`),"wx",384);try{JA(s,JSON.stringify({...n,phase:t},null,2)+`
|
|
98
|
+
`),Fh(s)}finally{Bh(s)}for(let i=o;;i=sc.dirname(i)){let a=Kh(i,"r");try{Fh(a)}catch(l){if(!zA(l))throw l}finally{Bh(a)}if(i===sc.dirname(i))break}}function zA(e,r=process.platform){return r==="win32"&&e?.code==="EPERM"}function jh(e,r,t,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:VA("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:r,invocationId:GA(),startedAt:new Date().toISOString(),finishedAt:null,headSha:t,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return Hh(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return Hh(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}function ac(e){return e?.trim()?["--repo",e.trim()]:[]}function Gh(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Yh(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 XA=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,QA=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,ZA=/^docs[(:]/i,eI=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function rI(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=ZA.test(r)||eI.test(t),o=XA.test(t),s=QA.test(t);return n||o||s||e.vercelCheckSuccess===!0}function tI(e){if(!rI({title:e.title,body:e.body,vercelCheckSuccess:Wh(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 nI(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=Dh(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=Lh(e.mergeStateStatus,r);if(t)throw new Error(`PR #${e.number} ${t}`)}function oI(e){nI(e),tI(e)}function sI(e){try{return oI(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function iI(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 aI(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 lI(e,r){if(!r?.trim())return;let t=Vh("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}`)&&Vh("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function qh(e){let r=e.cwd??process.cwd(),t=e.exec??$s,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(!Qt(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=Uh();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=Yh(t,r,["pr","view",n,...ac(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=sI(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)||!$h(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(!Qt(u)||!Oh(o,u))return s();let d=jh(e.operation,n,o.headSha,o),p;try{p=t.gh(r,["pr","merge",c,...ac(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,R)=>d.finish({attribution:R,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:k?.mergedAt??null,mergeCommit:k?.mergeCommit?.oid??null,mergeExitCode:p.status});if(p.status!==0){let k=ic(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=ic(t,r,c,e.repo);if(f||(f=ic(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 b=m(f,"invoked_merge_observed");try{let k=aI(t,r,e.repo);iI(t,r,k,a.headRefName),lI(r,a.headRefName)}catch{}return{prUrl:f?.url||a.url||n,outcome:"merged",provenance:b,mergeCommit:f?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function ic(e,r,t,n){try{let o=Yh(e,r,["pr","view",t,...ac(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}async function Jh(e){let r=e.decision.task,t=e.decision.acceptedReview,n=String(r.prUrl??"");return qh({prUrl:n,cwd:e.cwd,repo:Gh(n),exec:e.exec,operation:e.operation,acceptedReview:Qt(t)?t:void 0,revalidateAcceptedReview:async()=>{let o=await J(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(r.id))}/landing-review`,e.secret,{leaseToken:r.leaseToken,leaseOwner:r.leaseOwner,attempt:r.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&Qt(s.acceptedReview)?s.acceptedReview:null}})}K();async function zh(e){let r=await re(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),t=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=e.report.provenance?.finishedAt??new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${t}`,taskId:t,leaseToken:e.task.leaseToken??null,startedAt:e.report.provenance?.startedAt??o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await J(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Xh(){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(`
|
|
99
|
+
`)}var cI="dispatch_start_readback_failed:";function pt(e){return`${cI} ${e.trim()}`}function uI(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 dI(e){let{snapshot:r,leaseOwner:t,expectedLeaseToken:n,worker:o}=e;if(!r)return{ok:!1,error:pt("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:t,expectedLeaseToken:n}};if(r.status!=="running")return{ok:!1,error:pt(`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:pt(`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:pt(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:r.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:r};let a=uI(o);return a?{ok:!1,error:pt(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:pt(`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:pt("AgentOS heartbeatAt missing after claim"),detail:{taskId:r.taskId},snapshot:r}}async function Qh(e){let r=await Ds({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return dI({snapshot:r.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}O();B();function Zh(e,r,t){r.pid&&z(r.pid)&&(rr(r.pid,"SIGTERM"),z(r.pid)&&rr(r.pid,"SIGKILL"));let n={...r,status:"failed",pid:void 0,completionBlocker:t,dispatchStartReadbackFailed:!0};return F(e,n),n}B();function ek(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 rk(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,t=await J(r,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!t.ok)return null;let n=t.response;return n&&typeof n=="object"?n:null}var hl=3600*1e3;function tk(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function nk(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function pI(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=fI(t.runtimeEnvelopeReceipt),b=t.runtimeEnvelopeReady===!0,k=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,R=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,E=h&&Array.isArray(g?.capabilities)?g.capabilities.filter(S=>typeof S=="string"&&S.trim().length>0):null,P=h&&typeof g?.exp=="number"&&Number.isFinite(g.exp)?g.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:k,memoryQualityPromptMarkdown:R,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:p,runtimeEnvelopeMarkdown:m,runtimeEnvelopeEvidence:f,runtimeEnvelopeReady:b,workerMcpToken:h,workerMcpCapabilities:E,workerMcpExpiresAt:P}}function mI(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function fI(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 gI(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("",Xh());let n=nc(e);if(n?.outboxId){let o=rc(n.outboxId);o?t.push("",tc(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
100
|
+
`)}function hI(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 di(e){let r=e.pipeline===!0||e.pipeline==="true";try{let ke=function(){return T.filter(v=>v.started).length},ye=function(v,y){Dn({runId:l.id,agentOsId:u,phase:v,startedCount:ke(),outcomeCount:T.length,cappedStarts:_,...y})},pr=function(){return T.some(v=>(typeof v.error=="string"?v.error:"").startsWith("dispatch_start_readback_failed:"))},nu=function(v){return v.landPrDispatch===!0?!0:v.task?.executor==="land_pr"};var t=ke,n=ye,o=pr,s=nu;let i=Ah();if(!i.ok||!i.identity){let v=Ih(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=ee(String(fr(String(e.run||""),"--run"))),c=Ph(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(fr(String(e.agentOsId||""),"--agent-os-id")),d=X(e.baseUrl?String(e.baseUrl):void 0),p=await re(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",f=!m,b=We({runId:l.id}),k=Jn(l.id,b.runnerId),R=Mp(),g=R?Wp(l.repo):null,h=new WeakMap;if(R&&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 E=e.diskPath?Lr({diskPath:String(e.diskPath)}):Lr({diskPath:l.repo}),P=await Vp({runId:l.id,agentOsId:u,args:e}),S=hI(e),w=S.size>0,V=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,$=w?Math.min(V,S.size):V;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let v=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await J(v,p,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(y){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${y.message}`)}}let _=f?$:Math.min($,P.slotsAvailable);if(!f&&_<=0){let v={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:P.reason??"no resource slots",resourceGate:P};if(r)return{ok:!0,...v};console.log(JSON.stringify(v,null,2));return}let Z=fs(l.id),he=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,Ze=(v,y)=>({agentOsId:u,...y?{claimAuthorization:y}:{},dryRun:f,maxStarts:v,leaseOwner:k,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):hl,runnerDiskGate:E,runnerResourceGate:P,activeHarnessWorkers:Z,runnerPresence:b,harnessBoardSnapshot:ql(l.id),...e.lane?{lane:jp(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(C=>C.trim()).filter(Boolean)}:{}}),dr=Up(),se=async v=>{let y=R&&g?Dp(g):void 0,C=await J(he,p,Ze(v,y),{agentOsId:u,baseUrl:d,timeoutMs:dr})??{ok:!1,status:0,response:null},N=C.response;if(y&&Array.isArray(N?.result?.started))for(let j of N.result.started)j&&typeof j=="object"&&h.set(j,y.requestNonce);return{dispatch:C,result:N?.result}};f||Dn({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:dr});let D=await se(w||f?_:1);if(!D.dispatch.ok||!D.result){let v=La(D.dispatch.response),y={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:D.dispatch.status,response:D.dispatch.response,authRefreshed:D.dispatch.refreshedAuth===!0,authRefreshFailure:D.dispatch.authRefreshFailure,...v?{timeout:!0}:{}};if(v&&Dn({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:D.dispatch.status}),r)return{ok:!1,...y};console.log(JSON.stringify(y,null,2)),process.exit(1)}let L=D.result;if(f){let v=tk(L),y=nk(L),C={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:L.started.map(N=>({taskId:N.task.id,title:N.task.title,reason:N.reason})),skipped:L.skipped.map(N=>({taskId:N.task.id,skipReason:N.skipReason,reason:N.reason})),diskGate:L.diskGate,resourceGate:L.resourceGate,inspected:L.inspected,pagesScanned:L.pagesScanned??null,candidatesExhausted:L.candidatesExhausted??null,capacityIdle:v?.capacityIdle===!0,admissionExhaustion:v,dispatchSkipDrain:y};if(r)return{ok:!0,...C};console.log(JSON.stringify(C,null,2));return}let Ke=sf(),T=[],G=[],W=Number(L.inspected)||0,ie=!1;async function H(v,y,C){let N=await mo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:y});v.leaseToken&&qt({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},Wl(y));let j={taskId:v.id,started:!1,error:y,released:N.released,releaseResponse:N.releaseResponse,...C};return T.push(j),ye("outcome",{lastOutcome:j}),!1}async function ov(v){let y=v.task,C=String(y.id);if(w&&!S.has(C))return H(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});if(!(y.prUrl?String(y.prUrl):""))return H(y,"land_pr task missing prUrl");try{let j=await Jh({decision:v,baseUrl:d,secret:p,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:C,runId:l.id,workerName:`land-pr-${C}`,leaseOwner:k,leaseToken:typeof y.leaseToken=="string"?y.leaseToken:"",receiptDir:`${M(l.id)}/land-pr-operations`}}),He=await zh({baseUrl:d,secret:p,agentOsId:u,runId:l.id,task:y,report:j});return He.ok?(T.push({taskId:C,started:!0,landPr:!0,outcome:j.outcome,completionStatus:He.status}),!0):H(y,`land_pr completion POST failed (HTTP ${He.status})`,{landPr:!0,outcome:j.outcome})}catch(j){return H(y,j.message)}}async function sv(v){let y="duplicate_dispatch_prevented: live local worker already owns this task",C=await mo({baseUrl:d,secret:p,agentOsId:u,taskId:String(v.id),leaseOwner:k,leaseToken:v.leaseToken?String(v.leaseToken):null,failureDetail:y});v.leaseToken&&qt({taskId:String(v.id),leaseToken:String(v.leaseToken).trim()},Wl(y));let N={taskId:v.id,started:!1,error:y,alreadyRunning:!0,nonFatal:!0,released:C.released,releaseResponse:C.releaseResponse};return T.push(N),ye("outcome",{lastOutcome:N}),!1}async function iv(v){let y=v.task,C=pI(v),N=String(y.id);if(w&&!S.has(N))return H(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...S]});let j=mI(y.personaSlug);if(j&&(!C?.personaInjectionReady||!C.personaMarkdown))return H(y,`persona_injection_required: missing anchored context-envelope persona block for "${j}"`);if(j&&!C?.runtimeEnvelopeReady)return H(y,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${j}"`);if(df(l.id,N))return sv(y);let He=Number(y.attempt)||1;if(He>Ke.maxTaskAttempts)return H(y,`task attempt ${He} exceeds KYNVER_MAX_TASK_ATTEMPTS (${Ke.maxTaskAttempts})`);let Xr=y.leaseToken?String(y.leaseToken).trim():"";if(!Xr)return H(y,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let wt=x(`t-${y.id}-a${y.attempt}`),mr=Ns({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:U().workerProvider,task:Gp(y)});_g({taskId:N,leaseToken:Xr,runId:l.id,workerName:wt,provider:mr.provider??null});let Ii=nf({task:y,routing:mr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Ii.ok)return H(y,Ii.error??"model_routing_mismatch",{modelRoutingGuard:Ii});if(ek(y)){let Ce=await rk({agentOsId:u,taskId:N,baseUrl:d,secret:p});if(Ce&&Ce.dispatchable===!1)return H(y,`pr_review_head_reconcile_blocked: ${Ce.reason??Ce.outcome??"stale PR head"}`,{headReconcile:Ce});if(Ce?.activeReviewTaskId&&Ce.activeReviewTaskId!==N)return H(y,`pr_review_head_reconcile_retargeted: active review is ${Ce.activeReviewTaskId}`,{headReconcile:Ce})}let So=Zg(mr.provider);if(!So.ok)return H(y,`provider_quota_exhausted: ${So.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:So.provider,retryAt:So.retryAtIso}});try{let Ce=y.planId?String(y.planId):void 0,wo=gf({title:y.title?String(y.title):void 0,description:y.description?String(y.description):null,executorRef:y.executorRef?String(y.executorRef):null,prUrl:y.prUrl?String(y.prUrl):null,branch:y.branch?String(y.branch):null}),cu=Ug({runId:l.id,workerName:wt,maxSlots:P.maxConcurrentWorkers,diskActiveWorkers:oa()});if(!cu.admitted)return H(y,`admission_refused: ${cu.reason}`,{nonFatal:!0});let xo=C?.workerMcpToken??null;if(xo&&Hn()){let xt=vh({jobId:`dispatch:${String(y.id)}`,agentOsId:u,taskId:String(y.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!xt.ok)console.error(`[dispatch] worker tools skipped for task ${String(y.id)}: context hydration failed (${xt.code}: ${xt.detail}) \u2014 spawning without tools`),xo=null;else{let Oi=await Rh(xt.context);Oi.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(y.id)}: tool endpoint probe failed (${Oi.error??`HTTP ${Oi.httpStatus}`}) \u2014 spawning without tools`),xo=null)}}let er=await yh(l,{name:wt,task:gI(y,u),ownedPaths:e.owned?String(e.owned).split(",").map(xt=>xt.trim()).filter(Boolean):[],model:mr.model,provider:mr.provider,routingRule:mr.rule,requestedModel:mr.requestedModel,agentOsId:u,taskId:String(y.id),planId:Ce,branch:wo?.targetPrBranch??void 0,executorRef:y.executorRef?String(y.executorRef):void 0,parentTaskId:y.parentTaskId?String(y.parentTaskId):void 0,taskTitle:y.title?String(y.title):void 0,taskPrUrl:wo?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:wo?.targetPrUrl,repairTargetBranch:wo?.targetPrBranch??void 0,instructionPolicyMarkdown:C?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:C?.instructionPolicyFingerprint??null,instructionPolicyEvidence:C?.instructionPolicyEvidence??null,memoryQualityCapture:C?.memoryQualityCapture??null,memoryQualityPromptMarkdown:C?.memoryQualityPromptMarkdown??null,personaMarkdown:C?.personaMarkdown??null,personaSlug:C?.personaSlug??j,personaEvidence:C?.personaEvidence??null,contextEnvelopeMarkdown:C?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:C?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:C?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:C?.runtimeEnvelopeEvidence??null,workerMcpToken:xo,workerMcpCapabilities:C?.workerMcpCapabilities??null,workerMcpExpiresAt:C?.workerMcpExpiresAt??null,leaseOwner:k,leaseToken:Xr,dispatched:!0,executionMode:gs(y)}),_o=await Qh({agentOsId:u,taskId:String(y.id),leaseOwner:k,expectedLeaseToken:Xr,worker:er,baseUrl:d,secret:p});if(!_o.ok)return Zh(l.id,er,_o.error??"dispatch_start_readback_failed"),Gr(l.id,wt),H(y,_o.error??"dispatch_start_readback_failed",{readback:_o.detail??null});er.leaseToken!==Xr&&(er.leaseToken=Xr,er.leaseOwner=k,F(l.id,er)),ti({taskId:N,leaseToken:Xr}),Mg(l.id,wt);let uu={taskId:y.id,started:!0,worker:er.name,pid:er.pid,branch:er.branch,model:er.model,provider:mr.provider,routingRule:mr.rule,instructionPolicyFingerprint:C?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(C?.instructionPolicyEvidence?.ruleSlugs)?C.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:C?.personaSlug??j,personaOperatingRuleCount:C?.personaEvidence?.operatingRuleCount??null};return T.push(uu),ye("worker_started",{lastOutcome:uu}),C?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${N}: instruction policy injected fingerprint=${C.instructionPolicyFingerprint}`),C?.personaSlug&&console.error(`[dispatch] task ${N}: persona context injected slug=${C.personaSlug}`),C?.contextEnvelopeReady&&console.error(`[dispatch] task ${N}: context envelope injected anchor=${C.contextEnvelopeEvidence?.anchorTaskId??N}`),C?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${N}: runtime envelope injected id=${C.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ce){return Gr(l.id,wt),H(y,Ce.message)}}let Ai=new Set;for(let v of Ig(l.id))Ai.add(v);async function ou(v){let y=v.task,C=String(y.id);if(Ai.has(C))return H(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let N=R?Lp({decision:v,leaseOwner:k,repoIdentity:g,requestNonce:h.get(v)??null}):null,j=N&&!N.allow?await H(y,`desktop_execution_policy_denied:${N.code}: ${N.reason}`,{desktopPolicyDenied:N.code,...N.code==="operation_not_approved"?{nonFatal:!0}:{}}):nu(v)?await ov(v):await iv(v);return j||(Ai.add(C),Ag(C,l.id)),j}for(let v of L.started)await ou(v);if(G.push(...L.skipped??[]),w)for(let v of G){let y=String(v.task.id);S.has(y)&&T.push({taskId:y,started:!1,error:`exact_target_not_started:${v.skipReason}`,skipReason:v.skipReason,detail:v.reason??null,requestedTargetTaskIds:[...S]})}for(;!w&&T.length<_;){if(pr()){let C={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};T.push(C),ye("circuit_breaker",{lastOutcome:C});break}let v=await se(1);if(!v.dispatch.ok||!v.result){let C=Bp(v.dispatch.response),N=ke();ie=C&&N>0;let j=La(v.dispatch.response),He={started:!1,error:j?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:v.dispatch.status,response:v.dispatch.response,...j?{timeout:!0}:{},...ie?{nonFatal:!0,partialTopUp:!0}:{}};T.push(He),ye("top_up_failed",{partialTopUpInterrupted:ie,lastOutcome:He});break}W+=Number(v.result.inspected)||0,G.push(...v.result.skipped??[]);let y=v.result.started??[];if(y.length===0)break;for(let C of y){if(T.length>=_)break;await ou(C)}}let bo=T.filter(v=>v.started).length,Dr=tk(L),St=nk(L),su=bo===0&&(Dr?.capacityIdle===!0||Number(L.resourceGate?.slotsAvailable)>0);if(su&&Dr?.summary){let v=Dr.skipReasonCounts?.retry_ceiling_exceeded??0,y=L.overAttemptIdleRecovery??Dr.overAttemptIdleRecovery,C=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:v>0?"; over_attempt_recovery not attempted":"",N=St?`; dispatch_skip_drain scanned=${St.scanned??0} advanced=${St.advanced??0}`:"",j=Dr.progressionReport?.summary?`; ${Dr.progressionReport.summary}`:"",He=St?.prLifecycleAttempt?.summary?`; ${St.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Dr.summary}${v>0?`; retry_ceiling_exceeded=${v}`:""}${C}${N}${j}${He}`)}let iu={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:k,startedCount:bo,capacityIdle:su,admissionExhaustion:Dr,dispatchSkipDrain:St,outcomes:T,skipped:G.map(v=>({taskId:v.task.id,skipReason:v.skipReason})),inspected:W,pagesScanned:L.pagesScanned??null,candidatesExhausted:L.candidatesExhausted??null,diskGate:L.diskGate,resourceGate:L.resourceGate,...ie?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:dr},au=v=>!v.started&&v.nonFatal!==!0,av=T.some(au),lu=ie&&bo>0?!0:!av;if(Dn({runId:l.id,agentOsId:u,phase:"complete",partial:ie,startedCount:bo,ok:lu}),r)return{ok:lu,...iu};console.log(JSON.stringify(iu,null,2)),T.some(au)&&process.exit(1)}catch(i){if(r)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var kI=1;function Zt(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 yI(e){let{maxStarts:r,...t}=e;return t}async function lc(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=yI(e);if(t.targetTaskId||t.targetTaskIds){let u=await di({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Zt(u)}}let n=Math.min(r,kI),o=Math.max(0,r-n),s=await di({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Zt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await di({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Zt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function ok(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function RI(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function fo(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function vI(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function sk(e,r){let t=RI(r),n=fo(t?.recommendedMaxStarts),o=fo(t?.actionableReady),s=fo(t?.queuedTasks),i=fo(t?.boardAdvancedThisTick)??0,a=fo(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=vI("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 rO from"node:path";B();vn();me();O();import bI from"node:path";var SI=new Set(["running","dispatching","pending","queued","needs_attention"]),mt=new Set(["completed","failed","cancelled","done"]);function ft(e){let r=tr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=I(bI.join(M(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let l=Y(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Dd(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function go(){let e=[];for(let r of Ge()){if(!SI.has(r.status))continue;let t=ft(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Pe(r),e.push({runId:r.id,from:n,to:t})}return e}B();vn();me();O();Zr();xn();import{existsSync as zr,lstatSync as DI,readdirSync as WI,readlinkSync as LI,renameSync as kc,unlinkSync as UI}from"node:fs";import lr from"node:path";qe();O();import Qe from"node:path";var wI=`${Qe.sep}runs${Qe.sep}runs${Qe.sep}`;function pi(e){return e.includes(wI)}function cc(e,r){return Qe.join(Ee(ge(e)),x(r))}function qr(e,r,t){return Qe.join(cc(e,r),"workers",x(t))}function ik(e,r,t){let n=ge(e);return Qe.join(n,"runs","runs",x(r),"workers",x(t))}function uc(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function gt(e){return{workerJsonPath:Qe.join(e,"worker.json"),stdoutPath:Qe.join(e,"stdout.jsonl"),stderrPath:Qe.join(e,"stderr.log"),heartbeatPath:Qe.join(e,"heartbeat.jsonl"),lastStatusPath:Qe.join(e,"last-status.json")}}function ak(e){let r=gt(qr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!pi(e.statusPath)?e.statusPath:r}import{existsSync as Jr,mkdirSync as EI,readdirSync as uk,renameSync as PI,statSync as pc}from"node:fs";import oe from"node:path";K();fn();Wr();Fi();import xI from"node:path";function _I(e){return xI.resolve(je(e.trim()))}function dc(e,r,t){let n=e?.trim();return n?{repo:_I(n),source:r,persistedInConfig:t}:null}function CI(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function lk(e={}){let r=e.env??process.env,t=e.config??U(),n=dc(t.defaultRepo,"config",!0);if(n)return n;let o=dc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=dc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||CI(Oo({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}de();Zr();qe();B();O();var ho=900*1e3,AI=3600*1e3;function dk(e,r){let t=oe.resolve(e),n=oe.resolve(Ee(r)),o=oe.relative(n,t);return o!==".."&&!o.startsWith("..")&&!oe.isAbsolute(o)}function mc(e){if(!Jr(e))return[];try{return uk(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function fc(e){let r=oe.join(e,"workers");if(!Jr(r))return[];try{return uk(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function pk(e){return oe.join(e,"archived-workers")}function II(e,r){let t=oe.join(pk(e),x(r));return Jr(t)?`${t}-${Date.now()}`:t}function ck(e,r,t){if(!Jr(e))return!1;try{let n=r-pc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function mk(e,r=Date.now(),t=ho){if(!Jr(e))return!1;let n=gt(e),o=I(n.workerJsonPath,void 0);if(o?.status==="running"&&z(o.pid))return!0;let s=pe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(ck(n.stdoutPath,r,t)||ck(n.heartbeatPath,r,t))}function OI(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-pc(oe.join(e,"worker.json")).mtimeMs}catch{return 0}}function TI(e,r,t,n){if(mk(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=OI(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 en(e,r=Date.now(),t=ho){for(let n of fc(e))if(mk(oe.join(e,"workers",n),r,t))return!0;return!1}function NI(){let r=lk()?.repo??"",t="unknown";if(r)try{let n=Q(r,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(t=n)}catch{}return{repo:r,base:"origin/main",baseCommit:t}}function MI(e,r){let t=oe.join(Ee(e),x(r));if(!Jr(t))return null;let n=fc(t);if(n.length===0)return null;let o;try{o=pc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=qr(e,r,a);s[a]={workerDir:l,statusPath:oe.join(l,"worker.json")}}let i=en(t);return{id:r,name:r,...NI(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function gc(e){let r=ge(e??Te()),t=Ee(r),n=[];for(let o of mc(t)){let s=oe.join(t,o,"run.json");if(Jr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=MI(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Pe(i),n.push({runId:o,action:"repaired_run_json",reason:en(oe.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function hc(e,r={}){let t=ge(e??Te()),n=Ee(t),o=r.now??Date.now(),s=r.archiveAgeMs??AI,i=[];gc(t);for(let a of mc(n)){let l=oe.join(n,a),c=oe.join(l,"run.json"),u=I(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...fc(l)]),p=!1;for(let m of d){let f=oe.join(l,"workers",x(m)),b=oe.join(f,"worker.json"),k=I(b,void 0);if(!k){let h=oe.join(pk(l),x(m));if(Jr(h)&&(u.workers[x(m)]||u.workers[m])){delete u.workers[x(m)],delete u.workers[m],p=!0,i.push({runId:u.id,worker:m,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:h});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let R=TI(f,k,o,s);if(!R.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:R.reason});continue}let g=II(l,m);EI(oe.dirname(g),{recursive:!0}),PI(f,g),delete u.workers[x(m)],delete u.workers[m],p=!0,i.push({runId:u.id,worker:m,action:"archived",reason:R.reason,archivePath:g})}p&&Pe(u)}return{workers:i}}function fk(e,r=Date.now()){let t=new Set,n=Ee(e);for(let o of mc(n)){let s=oe.join(n,o);en(s,r)&&t.add(`${e}\0${o}`)}return t}B();O();function BI(e,r){let t=cc(e,r),n;try{n=DI(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=lr.resolve(lr.dirname(t),LI(t));if(en(o)||en(t))return null;let s=`${t}.materialize-${Date.now()}`;return kc(o,s),UI(t),kc(s,t),o}function FI(e){let r=[];for(let t of uc()){let n=lr.join(e.fromDir,t),o=lr.join(e.toDir,t);!zr(n)||zr(o)||(kc(n,o),r.push(t))}return r}function gk(e,r){let t=gt(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 KI(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 HI(e){let r=gt(e.canonicalDir),t=I(r.lastStatusPath,void 0),n=zr(r.stdoutPath),o=zr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?et(r.stdoutPath):{finalResult:null},a=o?pe(r.heartbeatPath):pe(""),l=kr(a),c=KI({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:lr.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}),gk(u,e.canonicalDir),u}function $I(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=qr(r,e.id,o),a=lr.join(i,"worker.json");(pi(s.workerDir)||pi(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Pe(e)),t}function jI(e){let r=[],t=qr(e.harnessRoot,e.run.id,e.workerName),n=ik(e.harnessRoot,e.run.id,e.workerName),o=gt(t),s=FI({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=ak({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=I(i,void 0);if(!a&&zr(o.workerJsonPath)&&(a=I(o.workerJsonPath,void 0)),!a){let l=HI({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return F(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=zr(t),u=uc().some(d=>zr(lr.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:lr.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 F(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 gk(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",F(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 VI(e,r){let t=lr.join(M(e.id),"workers");if(!zr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of WI(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function hk(){let{harnessRoot:e}=le(),r=gc(e),t=[];for(let n of Ge()){let o=BI(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),$I(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 VI(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:qr(e,n.id,i),statusPath:lr.join(qr(e,n.id,i),"worker.json")}},Pe(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(...jI({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}Zr();jo();me();B();vn();O();import{execFileSync as kk}from"node:child_process";import yk from"node:path";function yc(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function GI(e){let r=yc(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function YI(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function qI(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 JI(e){let r=null;if(typeof e=="string"?r=Nt(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=yc(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 zI(e){try{let n=kk("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=kk("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:yc(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 XI(e){let r=pe(e.heartbeatPath);return e.completionSnapshot?.finalResult??kr(r)}function QI(e){let r=new Map,t=M(e.id);for(let n of tr(e)){let o=I(yk.join(t,"workers",x(n),"worker.json"),void 0);if(o)for(let s of JI(XI(o))){let i=GI(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function ZI(e,r){let t=pe(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,YI(r)].filter(Boolean).join(`
|
|
101
|
+
`);return qI(n)}function eO(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Rc(e={}){let r=e.lookupPr??zI,t=[],n=new Map;for(let o of Ge()){let s=QI(o),i=M(o.id);for(let a of tr(o)){let l=yk.join(i,"workers",x(a),"worker.json"),c=I(l,void 0);if(!c||!eO(c))continue;let u=Y(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of ZI(c,u.finalResult)){if(d=s.get(m)??null,!d){let f=o.repo||c.worktreePath,b=`${f}#${m}`,k=n.has(b)?n.get(b)??null:r({repoDir:f,prNumber:m});n.has(b)||n.set(b,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",F(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 tO=900*1e3;function nO(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Rk(e,r){let t=zs({worker:e,status:r}),n=t?Xs(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 vk(){let e=hk();if(nO()){let s=Rc(),i=hc();return{workers:[],finalizedRuns:go(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of Ge())for(let i of tr(s)){let a=rO.join(M(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=Y(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=Rk(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,F(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=Rk(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,F(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&&z(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>tO,m=Number.isFinite(d)&&t-d>ta;if(p&&m){rr(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,F(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=Rc(),o=hc();return{workers:r,finalizedRuns:go(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}Wt();B();import dO from"node:path";import{readdirSync as oO,readFileSync as sO}from"node:fs";var iO="dispatch:claim:",aO=900*1e3,lO=10080*60*1e3,cO=200,ht={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0};function uO(e){if(process.platform!=="linux"||!e.trim())return null;let r=[];try{r=oO("/proc")}catch{return null}for(let t of r)if(/^\d+$/.test(t)&&Number(t)!==process.pid)try{if(sO(`/proc/${t}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(t)}catch{}return null}async function bk(e){let r=Or(),t={mode:r,scanned:0,outcomes:[]};if(r!=="enforce")return t;let n=q();if(!n)return t;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??aO,i=e.findOrphanPid??uO,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-lO).toISOString(),limit:cO})}catch{return ht.recoveryStoreFailures+=1,t}for(let c of l){let u=c.idempotencyKey.slice(iO.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=no(p);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(P=>{if(f===null)return!0;let S=no(P.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return S===null||S>=f}))continue;let R={};try{R=c.resultJson?JSON.parse(c.resultJson):{}}catch{R={}}let g=R.runId??null,h=R.workerName??null;if(g&&h&&e.hasLiveWorker({runId:g,workerName:h})){ti({taskId:d,leaseToken:p}),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"finalized_late"});continue}if(g&&h){let P=e.worktreePathFor({runId:g,workerName:h}),S=P?i(P):null;if(S!==null){ht.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_orphan",detail:`live pid ${S} references ${P}`});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 E=await e.releaseClaim({taskId:d,leaseToken:p,runId:g});E.released?(qt({taskId:d,leaseToken:p},"restart_recovery"),h&&(so(g,h),Gr(g,h)),ht.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"released"})):E.transportError?a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"deferred_transport",detail:E.detail}):(qt({taskId:d,leaseToken:p},"restart_recovery_refused"),a.push({taskId:d,leaseToken:p,runId:g,workerName:h,action:"release_refused",detail:E.detail}))}catch{ht.recoveryStoreFailures+=1}}return{mode:r,scanned:l.length,outcomes:a}}function Sk(){return{"dispatchReceipts.recoveredStrandedClaims":ht.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":ht.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":ht.recoveryStoreFailures}}var wk=!1;async function xk(e){if(wk||Or()!=="enforce")return null;wk=!0;try{let r=We().runnerId,t=await bk({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>dO.join(le().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await mo({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:Jn(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}}K();Oe();rs();import _O from"node:os";la();import{mkdirSync as hO,readFileSync as kO,renameSync as yO,writeFileSync as RO}from"node:fs";import{homedir as vO}from"node:os";import mi from"node:path";import{existsSync as pO,readFileSync as mO}from"node:fs";import{dirname as vc,join as Ck}from"node:path";import{fileURLToPath as _k}from"node:url";function fO(e){let r=vc(_k(e));for(let t=0;t<6;t+=1){if(pO(Ck(r,"package.json")))return r;let n=vc(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${vc(_k(e))}`)}function gO(e=import.meta.url){let r=Ck(fO(e),"package.json"),t=JSON.parse(mO(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Ek=gO();function Pk(){return mi.join(vO(),".kynver")}function bO(e=Pk()){return mi.join(e,"doctor-native-windows.json")}function Ak(e=Pk()){return mi.join(e,"native-windows-state.json")}function SO(e,r){hO(mi.dirname(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;RO(t,`${JSON.stringify(r,null,2)}
|
|
102
|
+
`,{mode:384}),yO(t,e)}function Sc(e){try{return JSON.parse(kO(e,"utf8"))}catch{return null}}function wO(e){let r=Sc(bO(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 Ik(e=new Date,r){try{let t=Ak(r),n=Sc(t)??{};SO(t,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function xO(e){let r=Sc(Ak(e));return typeof r?.lastWorkerCompletedAt=="string"?r.lastWorkerCompletedAt:null}var bc=null,Ok=null;function Tk(e){bc=e.admission,Ok=e.ownerKind}function Nk(e={}){let r=e.platform??process.platform,t=e.hostKind??aa(),n=t==="win32";return{hostKind:t,wsl:t==="wsl",platform:r,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:Ek,ownerKind:Ok,nativeWindows:n?{admission:bc?.basis??null,hostCapability:bc?.hostCapability??null,lastDoctor:wO(e.root),lastWorkerCompletedAt:xO(e.root)}:null}}function Mk(e,r={}){let t=U(),n=(r.boxKind??hr(t)).trim().toLowerCase()||"forge",o=r.hostLabel??_O.hostname();return{boxId:es({boxKind:n,hostLabel:o,explicitBoxId:r.boxId,config:t,env:process.env}),boxKind:n,displayName:r.displayName??null,hostLabel:o,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{},host:Nk()}}B();qe();Ko();me();K();import CO from"node:path";B();me();O();async function Dk(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=ee(String(fr(String(e.run||""),"--run"))),n=String(fr(String(e.agentOsId||""),"--agent-os-id")),o=X(e.baseUrl?String(e.baseUrl):void 0),s=await re(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=We({runId:t.id}).runnerId,a=await lh({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let p of Object.keys(t.workers||{})){let m=I(CO.join(M(t.id),"workers",x(p),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let f=Y(m);if(f.alive||f.finalResult||m.completionReportedAt)continue;let b=Ms({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,R;try{R=await J(k,s,{agentOsId:n,leaseOwner:b,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(g){R={ok:!1,error:g.message}}l.push({worker:p,taskId:m.taskId,pid:m.pid,released:R.ok===!0||R.response?.ok===!0,response:R.response??R})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await J(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(p){u={ok:!1,error:p.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}O();me();B();O();import EO from"node:path";K();async function Wk(e){let r=X(e.baseUrl),t=await re(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await J(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function Lk(e,r){let t=ee(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=I(EO.join(M(t.id),"workers",x(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=Y(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 Wk({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,F(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}Go();K();Oe();qe();import Fe from"node:path";$o();import gi from"node:path";de();me();var wc=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Uk(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of wc)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Le(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!Uk(n)})}function kt(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 ko(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Le(e.changedFiles).length>0:!!(kt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}O();function yo(e){return e.status||(e.status=Y(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function xc(e,r){if(e.status)return Le(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):mn(e.worktreePath);return Le(t).length>0}function PO(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function _c(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=PO(e);if(o&&!z(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):mn(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"}:Io(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??kt(s)};return e.status=u,u}return yo(e)}me();me();Zr();O();function AO(e,r=Date.now(),t=ho){let n=pe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function rn(e,r=Date.now(),t=ho){return z(e.pid)?!0:AO(e,r,t)}function IO(e,r){return r?r.runTerminalCache.derive(e.run):ft(e.run)}function Nr(e,r=Date.now()){return rn(e.worker,r)}function Cc(e,r){return mt.has(e.run.status)?!1:IO(e,r)!==null}function Bk(e,r,t=Date.now()){if(Nr(e,t))return!0;if(mt.has(e.run.status)||Cc(e,r))return!1;let n=yo(e);return Se(n)?!1:!!Nr(e,t)}$o();me();function Fk(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Nr(e))return!0;let n=r??yo(e);return!!(!Se(n)||ko(n)||Le(n.changedFiles).length>0||Tt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:kt(n.finalResult)}).blocked)}de();O();import{existsSync as Hk,mkdirSync as OO,writeFileSync as Kk}from"node:fs";import fi from"node:path";function $k(e,r,t){return fi.join(e,"salvage",x(r),x(t))}function jk(e){return Hk(fi.join($k(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Vk(e){let r=$k(e.harnessRoot,e.indexed.runId,e.indexed.workerName);OO(r,{recursive:!0});let t=fi.join(r,"salvage.patch"),n=!1;if(Hk(e.indexed.worktreePath)){let s=te(e.indexed.worktreePath,["diff","HEAD"]),i=te(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
103
|
+
`);a.trim()&&(Kk(t,a.endsWith(`
|
|
104
|
+
`)?a:`${a}
|
|
105
|
+
`),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 Kk(fi.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
106
|
+
`),o}var TO=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function NO(e){e.writeSalvageEvidence&&TO.has(e.skipReason)&&(Nr(e.indexed,e.now)||jk({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||Vk({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function MO(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(mt.has(r.run.status)||e.liveness&&Cc(r,e.liveness)||e.liveness&&Se(_c(r,e.liveness))&&!Nr(r))?n:t}function DO(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:MO(e)}function WO(e,r){if(e.harnessRoot?.trim())return gi.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${gi.sep}runs${gi.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Gk(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=DO(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Nr(r,a))return"active_worker";let c=_c(r,e.liveness),u=WO(e,r),d=f=>{if(u)try{NO({indexed:r,harnessRoot:u,skipReason:f,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(Fk(r,c)){let f=d("completion_blocked");if(f)return f}if(xc(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(Bk(r,e.liveness,a)||!Se(c))return"run_still_active";if(ko(c)){let f=d("pr_or_unmerged_commits");if(f)return f}if(Le(c.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Tt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:kt(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 Ec(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(gi.resolve(o))||r&&Nr(r)?"active_worker":r&&xc(r,e.gitStatusCache)?"dirty_worktree":null}function Yk(e){return Ec(e)}var qk=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Jk(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)qk.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||qk.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Zk,readdirSync as ey,statSync as BO}from"node:fs";import ry from"node:path";B();qe();import zk from"node:path";O();function UO(e,r){return rn(e,r)}function Xk(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of ms(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=I(zk.join(Nn(o,s.id),"workers",x(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=zk.resolve(l.worktreePath);UO(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of fk(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Qk(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}O();function FO(e,r){try{let t=BO(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function KO(e,r){let t=ry.join(e,"runs",r,"run.json");return Zk(t)?I(t,null):null}function ty(e){try{return ey(e).length===0}catch{return!1}}function ny(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Qk(n,r,t,i.liveRunKeys)||!ty(n))return"run_still_active";let a=KO(r,t);return a&&!mt.has(a.status)&&!ft(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function oy(e){if(!Zk(e.worktreesDir))return[];let r=[],t;try{t=ey(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=ry.join(e.worktreesDir,o);ty(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:FO(s,e.now)})}return r}de();import{existsSync as Ac,rmSync as gy}from"node:fs";import{execFileSync as HO}from"node:child_process";import{existsSync as sy,readdirSync as $O,statSync as jO}from"node:fs";import VO from"node:path";var GO=2500;function YO(e,r=GO){if(!sy(e))return 0;try{let n=HO("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 Mr(e,r=5e4){if(!sy(e))return 0;let t=YO(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=$O(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=VO.join(i,l),u;try{u=jO(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as XO,rmSync as QO}from"node:fs";qe();import{lstatSync as qO,readdirSync as JO}from"node:fs";function iy(e){try{let r=qO(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 ay(e,r=32){let t=iy(e);if(!t)return!1;if(t.foreign)return!0;try{let n=JO(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=iy(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as zO}from"node:child_process";import uy from"node:path";import Ue from"node:path";function ly(e,r,t,n){let o=Ue.resolve(e),s=`${Ue.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ue.relative(t,i);if(a.startsWith("..")||Ue.isAbsolute(a))return"path_outside_harness";let l=a.split(Ue.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ue.resolve(r))?"path_outside_harness":null}function hi(e,r,t){return ly(e,r,t,"node_modules")}function ki(e,r,t){return ly(e,r,t,".next")}function yi(e,r,t){let n=Ue.resolve(e),o=Ue.relative(t,n);return o.startsWith("..")||Ue.isAbsolute(o)||o.split(Ue.sep).length<3||!n.startsWith(Ue.resolve(r))?"path_outside_harness":null}function cy(e,r,t){let n=Ue.resolve(e);return hi(n,r,t)===null||ki(n,r,t)===null||yi(n,r,t)===null}function py(){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 dy(e){let r=zO("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function my(e,r,t){if(!cy(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=dy(["chown","-R",`${n}:${o}`,uy.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=dy(["rm","-rf",uy.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 Pc="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 ZO(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function fy(e,r,t={}){if(!XO(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?Ut(n):null,i=e.bytes??Mr(e.path)??void 0,a=t.removePath??QO,l=t.hasForeignOwnedEntry??ay;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!ZO(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=py();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Pc}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=my(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}; ${Pc}`}}}function Ic(e){let r=e.harnessRoot;return!r||!dk(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Oc(e,r){let t=Ic(e);if(t)return t;let n=fy(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function hy(e,r){return Oc(e,r)}function ky(e,r){return Oc(e,r)}function yy(e,r){return Oc(e,r)}function Ry(e,r){let t=Ic(e);if(t)return t;if(!Ac(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??Mr(e.path);return gy(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 vy(e,r){let t=Ic(e);if(t)return t;if(!Ac(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??Mr(e.path);return n&&Q(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Ac(e.path)&&gy(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 Ri,readdirSync as vi,statSync as eT}from"node:fs";import cr from"node:path";function Tc(e,r){try{let t=eT(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Sy(e,r){let t=cr.relative(r,e);return t===""||!t.startsWith("..")&&!cr.isAbsolute(t)}function by(e,r,t,n){let o=[];for(let s of wc){if(s===".next")continue;let i=cr.join(e,s);if(!Ri(i))continue;let a=cr.resolve(i);t.has(a)||Sy(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:Tc(a,r.now)}))}return o}function wy(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...by(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ri(e.worktreesDir))return r;for(let n of vi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=cr.join(e.worktreesDir,n.name);for(let s of vi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=cr.join(o,s.name);r.push(...by(i,e,t,{runId:n.name,worker:s.name}))}}return r}function xy(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;Ri(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:Tc(a,e.now)})))}if(!t||!Ri(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(cr.resolve(i.worktreePath));for(let i of vi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=cr.join(e.worktreesDir,i.name),l;try{l=vi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=cr.resolve(cr.join(a,c.name));o.has(u)||s.has(u)||Sy(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Tc(u,e.now)}))}}return n}import{existsSync as Ey,readdirSync as _y,statSync as rT}from"node:fs";import tn from"node:path";var tT=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function nT(e,r){try{let t=rT(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function oT(e,r){let t=tn.relative(r,e);return t===""||!t.startsWith("..")&&!tn.isAbsolute(t)}function sT(e,r,t,n,o,s){if(!Ey(n))return;let i=tn.resolve(n);r.has(i)||oT(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:nT(i,t.now)}))}function Cy(e,r,t,n,o){for(let s of tT)sT(e,r,t,tn.join(n,s.dirName),s.kind,o)}function Py(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Cy(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Ey(e.worktreesDir))return r;for(let n of _y(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=tn.join(e.worktreesDir,n.name),s;try{s=_y(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=tn.join(o,i.name);Cy(r,t,e,a,{runId:n.name,worker:i.name})}}return r}de();import{existsSync as Ay,statSync as iT}from"node:fs";import ur from"node:path";function aT(e,r){try{let t=iT(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function lT(e){let r=[],t=null;for(let n of e.split(`
|
|
107
|
+
`)){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 cT(e,r){let t=ur.relative(ur.resolve(r),ur.resolve(e));return t!==""&&!t.startsWith("..")&&!ur.isAbsolute(t)}var uT=200;function Iy(e){if(!e.includeOrphans||!Ay(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(ur.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(ur.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Q(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=lT(a);for(let c of l){if(i>=uT)break;let u=ur.resolve(c.path);if(u===ur.resolve(s)||!cT(u,e.worktreesDir)||t.has(u)||o.has(u)||!Ay(u))continue;let p=ur.relative(e.worktreesDir,u).split(ur.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:aT(u,e.now)})}}return n}B();O();import Ro from"node:path";function Oy(e,r){let t=Ro.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ro.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Ty(e){let r=new Map;for(let t of ms(e))for(let n of Object.keys(t.workers||{})){let o=Ro.join(Nn(e,t.id),"workers",x(n),"worker.json"),s=I(o,void 0);s?.worktreePath&&r.set(Ro.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ro.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function vo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function yt(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Mc(e={}){let r=e.execute===!0||e.execute!==!1&&vo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!vo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??yt("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??yt("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??yt("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??yt("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??yt("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||vo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=vo("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&&!vo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=yt("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&m>0?m:null,b=yt("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(b)&&b>0?Math.floor(b):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 Wy(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 Mc({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 Dc,statSync as pT}from"node:fs";import Rt from"node:path";O();var Ly=1800*1e3;function mT(e,r){let t=Rt.relative(r,e);return t===""||!t.startsWith("..")&&!Rt.isAbsolute(t)}function fT(e,r,t){if(!Dc(e))return!1;try{let n=r-pT(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Wc(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ly,n=Rt.resolve(e.harnessRoot,"runs"),o=Rt.resolve(n,e.runId,"workers",e.workerName);if(!mT(o,n))return!1;let s=I(Rt.join(o,"worker.json"),void 0);return s&&rn(s,r,t)?!0:s?!1:fT(Rt.join(o,"heartbeat.jsonl"),r,t)}function Uy(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ly;if(!Dc(e.worktreePath))return null;if(e.runId&&e.workerName&&Wc(e))return"active_worker";let n=Rt.join(e.worktreePath,".git");if(!Dc(n))return null;let o=te(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
108
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(Le(s).length>0)return"dirty_worktree";let i=te(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=te(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}qe();import{existsSync as gT,readdirSync as By,statSync as hT}from"node:fs";import kT from"node:path";function Fy(e={}){let r=ge(e.harnessRoot??Te()),t=Ut(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!gT(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=By(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=kT.join(t,u.name);try{let p=hT(d);l=l===null?p.mtimeMs:Math.min(l,p.mtimeMs)}catch{}try{for(let p of By(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=Mr(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}}qe();import{existsSync as yT}from"node:fs";import{homedir as RT}from"node:os";import Ky from"node:path";var vT=["/var/tmp/kynver-harness",Ky.join(RT(),".openclaw","harness")];function Lc(e,r,t){if(!t?.trim())return;let n=ge(t.trim());e.has(n)||(e.add(n),r.push(n))}function bT(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 Hy(e={}){let r=new Set,t=[];Lc(r,t,e.harnessRoot??Te());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Lc(r,t,o);if(bT(e))for(let o of vT){let s=Ky.resolve(o);!r.has(s)&&yT(s)&&Lc(r,t,s)}return t}Rn();function ST(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function wT(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function $y(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=wT("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Lr({...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 jy(e,r){if(!r.pressured)return e;let t=e.execute||!ST("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}}Wo();import{unlinkSync as xT}from"node:fs";function bi(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Vy(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function _T(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function Gy(e={}){let r=e.execute===!0||bi("KYNVER_WSL_CRASH_DUMP_EXECUTE")||bi("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||bi("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Vy("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=At({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=_T(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{xT(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 Yy(e){return e?bi("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Vy("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Wo();function Be(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}de();var Si=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=te(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 CT}from"node:child_process";import{existsSync as ET}from"node:fs";import PT from"node:path";var AT=5e3;function IT(e,r){if(!ET(PT.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=CT("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:AT}),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 qy(e){let r=IT(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
109
|
+
`).map(t=>t.trim()).filter(Boolean)}var wi=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=qy(t)??[];return this.cache.set(t,o),o}};var xi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=ft(r);return this.cache.set(r.id,n),n}};function OT(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Jy(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:OT(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 TT(e={}){let r=e.harnessRoot?ge(e.harnessRoot):Te(),t=Hy({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function NT(e){return typeof e=="string"?{reason:e}:e}function nn(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function _i(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Mr(e.path,t)}}function zy(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 MT(e,r){return e.kind==="remove_next_cache"?ky(e,r):hy(e,r)}function DT(e,r,t){return e.kind==="remove_next_cache"?ki(e.path,r,t):hi(e.path,r,t)}function WT(e){let r=new Map;for(let t of e)for(let[n,o]of Ty(t))r.set(n,o);return r}function Xy(e,r){return e.runId&&e.worker?Fe.join(r,e.runId,e.worker):Fe.resolve(e.path,"..")}function Qy(e){return e.indexed?!1:Wc({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function LT(e={}){let r=Mc(e),t=$y();r=jy(r,t);let n=TT(e);Be("scan",`${n.scanRoots.length} harness root(s)`);let o=Xk(n.scanRoots,n.now),s=r.finalizeStaleRuns?go().map(_=>({runId:_.runId,from:_.from,to:_.to})):[];s.length>0&&Be("finalize",`${s.length} stale run(s) marked terminal`),Be("index","building worktree index");let i=WT(n.scanRoots);Be("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new xi,gitStatusCache:new wi,gitRevCache:new Si},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,p=()=>c.length>=d;for(let _ of n.scanRoots){if(p())break;Be("root",_);let Z=Fe.join(_,"worktrees"),he=Oy(i,_),Ze={harnessRoot:_,worktreesDir:Z,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:he,now:n.now},dr=r.scanDependencyCaches?Py(Ze):[];Be("dependency",r.scanDependencyCaches?`${dr.length} cache candidate(s) at ${_}`:"skipped (worktree-only sweep)");let se=0;for(let T of dr){if(p())break;se+=1,se%50===0&&Be("dependency",`${se}/${dr.length} evaluated`);let G=Fe.resolve(T.path);if(u.has(G))continue;u.add(G);let W={...T,path:G},ie=DT(W,_,Z);if(ie){nn(l,W.path,ie),c.push({...W,executed:!1,skipped:!0,skipReason:ie});continue}let ke=Xy(W,Z),ye=he.get(Fe.resolve(ke))??null,pr=Qy({candidate:W,indexed:ye,harnessRoot:_,now:n.now}),H=Ec({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:pr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(H){nn(l,W.path,H),c.push({...W,executed:!1,skipped:!0,skipReason:H});continue}c.push(MT(_i(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let T of wy(Ze)){if(p())break;let G=Fe.resolve(T.path);if(u.has(G))continue;u.add(G);let W={...T,path:G},ie=yi(W.path,_,Z);if(ie){nn(l,W.path,ie),c.push({...W,executed:!1,skipped:!0,skipReason:ie});continue}let ke=Xy(W,Z),ye=he.get(Fe.resolve(ke))??null,pr=Qy({candidate:W,indexed:ye,harnessRoot:_,now:n.now}),H=Yk({indexed:ye,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:ke,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:pr,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(H){nn(l,W.path,H),c.push({...W,executed:!1,skipped:!0,skipReason:H});continue}c.push(yy(_i(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let D=[...xy(Ze),...Iy(Ze)];Be("worktrees",`${D.length} candidate(s) at ${_}`);let L=new Set,Ke=0;for(let T of D){if(p())break;Ke+=1,Ke%50===0&&Be("worktrees",`${Ke}/${D.length} evaluated`);let G=Fe.resolve(T.path);if(L.has(G))continue;L.add(G);let W={...T,path:G},ie=he.get(Fe.resolve(W.path))??null,ke=ie?null:Uy({worktreePath:W.path,harnessRoot:_,runId:W.runId,workerName:W.worker,now:n.now}),ye=Gk({indexed:ie,worktreePath:Fe.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:ke,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:_,writeSalvageEvidence:r.execute});if(ye){let{reason:pr,detail:H}=NT(ye);nn(l,W.path,pr,H),c.push({...W,executed:!1,skipped:!0,skipReason:pr});continue}c.push(vy(_i(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let T of oy({harnessRoot:_,worktreesDir:Z,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let G=Fe.resolve(T.path);if(u.has(G))continue;u.add(G);let W={...T,path:G},ie=W.runId??Fe.basename(G),ke=ny({harnessRoot:_,runId:ie,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ke){nn(l,W.path,ke),c.push({...W,executed:!1,skipped:!0,skipReason:ke});continue}c.push(Ry(_i(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,f=0,b=0,k=0,R=0,g=0;for(let _ of c)_.bytes&&(m+=_.bytes),!_.skipped&&!_.executed&&_.bytes&&(b+=_.bytes),_.executed?(R+=1,k+=_.bytes??0,_.kind==="remove_run_directory"&&(f+=1)):_.skipped&&(g+=1,_.skipReason==="dry_run"&&_.bytes&&(b+=_.bytes));let h=r.accountBytes?Fy({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,E=At(),P=r.execute&&Yy(E),S=P?Gy({execute:!0}):null,w=E?{observed:!0,execute:P,dumpCount:E.dumpCount,totalBytes:E.totalBytes,removedCount:S?.removed.length??0,removedBytes:S?.removedBytes??0,executables:E.executables,path:E.path,reason:E.reason}:void 0;S&&S.removed.length>0&&(k+=S.removedBytes,R+=S.removed.length,Be("wsl-crashes",`removed ${S.removed.length} dump(s), ${S.removedBytes} bytes`)),Be("complete",`${c.length} action(s), ${g} skipped, ${R} removed`);let V=Jk(c,l),$=Jy({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:b,removedBytes:k,removedPaths:R,skippedPaths:g,skipReasons:zy(c,l)},...h?{storage:h}:{},...V.length>0?{preservedLivePaths:V}:{},...f>0?{removedRunDirectories:f}:{},...w?{wslCrashDumps:w}:{}});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:b,removedBytes:k,removedPaths:R,skippedPaths:g,skipReasons:zy(c,l)},...h?{storage:h}:{},...V.length>0?{preservedLivePaths:V}:{},...f>0?{removedRunDirectories:f}:{},...w?{wslCrashDumps:w}:{},compactSummary:$}}function Zy(e){let r=Wy(e);return LT({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function eR(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as BT}from"node:fs/promises";import{homedir as FT}from"node:os";import vt from"node:path";fn();var UT={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Z6=Object.keys(UT);function rR(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function tR(e,r){let t=rR(e),n=rR(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 KT=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function on(e){let r=e?.trim();return r||null}function HT(e){return[...new Set(e.filter(r=>!!r))]}function $T(){let e=FT(),r=on(process.env.KYNVER_OPENCLAW_NPM_ROOT)??on(process.env.OPENCLAW_NPM_ROOT)??vt.join(e,".openclaw","npm"),t=on(process.env.KYNVER_NPM_GLOBAL_ROOT)??on(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(on(process.env.NPM_CONFIG_PREFIX)?vt.join(on(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):vt.join(e,".npm-global","lib","node_modules"));return HT([vt.join(r,"lib","node_modules"),vt.join(r,"node_modules"),t.endsWith("node_modules")?t:vt.join(t,"lib","node_modules")])}async function jT(e){try{let r=JSON.parse(await BT(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function VT(e){let r=$T(),t=new Set,n=[];for(let o of r){let s=vt.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function nR(e=new Date().toISOString()){let r={};for(let t of KT){let n=null;for(let o of VT(t)){let s=await jT(o);s&&(!n||tR(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as GT}from"node:child_process";var YT=1e4,qT=4*1024*1024,oR=(e,r,t)=>{try{let n=GT(e,r,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??YT,maxBuffer:qT});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 Ci(e,r,t){return`${e} ${r} ${t}`}function Uc(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 sR(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 JT=8e3,zT=30,XT=100,QT=400,ZT=3600*1e3,Bc=0;function Kc(){return Date.now()<Bc}function eN(e){let r=`${e.stdout}
|
|
110
|
+
${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function iR(e){eN(e)&&(Bc=Math.max(Bc,Date.now()+ZT))}function Fc(e,r){if(Kc())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return iR(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function rN(e,r,t,n){if(Kc())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return iR(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Hc(e){return Kc()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function sn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function tN(e){return Array.isArray(e)?e.map(r=>sn(r)).filter(r=>r!==null).slice(0,zT).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function nN(e,r,t){let n=Fc(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:tN(n.statuses)}:null}var aR={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Hc,collect(e,r){let t=sR(e);if(!t)return null;let n=rN(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=sn(n.author),s=sn(n.mergeCommit),i=sn(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,JT):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>sn(u)).filter(u=>u!==null).slice(0,XT).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>sn(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,QT):[];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}}},lR={provider:"github",kind:"commit_status",version:"1",isAvailable:Hc,collect(e,r){let t=Uc(e);return t?nN(r,t.repo,t.sha):null}},cR={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Hc,collect(e,r){let t=Uc(e);if(!t)return null;let n=Fc(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=Fc(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 jc=[];function $c(e){jc.some(r=>r.provider===e.provider&&r.kind===e.kind)||jc.push(e)}function uR(e,r){return jc.find(t=>t.provider===e&&t.kind===r)??null}function dR(){$c(aR),$c(lR),$c(cR)}var oN=1,sN=25e3;function pR(e,r={}){dR();let t=r.run??oR,n=r.now??(()=>new Date),o=r.maxSubjects??oN,s=Date.now()+(r.deadlineMs??sN),i=new Set,a=e.filter(m=>{let f=Ci(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=Ci(m.provider,m.kind,m.subject),b=n(),k=r.cache?.get(f,b)??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 R=uR(m.provider,m.kind);if(!R){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${R.provider} ${R.kind}`,h=p.get(g);if(h===void 0&&(h=R.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 E=R.collect(m.subject,t);if(E==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let P={provider:m.provider,kind:m.kind,subject:m.subject,payload:E,observedAt:n().toISOString(),collectorVersion:R.version};d.items.push(P),r.cache?.set(f,P,n())}return d}B();O();import uN from"node:path";B();O();import mR from"node:path";var iN="provider-evidence-wanted.json",aN="provider-evidence-cache.json",lN=600*1e3;function fR(e){return mR.join(M(e),iN)}function cN(e){return mR.join(M(e),aN)}function gR(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 hR(e){let r=I(fR(e),null);return gR(r?.wanted)}function kR(e,r){ue(fR(e),{savedAt:new Date().toISOString(),wanted:r})}function yR(e,r={}){let t=r.ttlMs??lN,n=cN(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 RR(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?gR(r):null}var dN="provider-evidence-shared-cache.json",pN=6e4,mN=1,fN=1;function Vc(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 gN(){return uN.join(le().harnessRoot,dN)}function hN(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?mN:fN;return Vc(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,Vc("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function vR(){return Vc("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",pN)}function kN(e){return Math.floor(e.getTime()/6e4)*6e4}function yN(e){return`${e.provider}:${e.kind}`}function bR(e,r={}){let t=yR(e,{ttlMs:r.ttlMs??vR()}),n=r.file??gN(),o=I(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??vR(),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=hN(u.provider);if(m===0)return!0;let f=yN(u),b=kN(p),k=i[f];return!k||k.windowStartMs!==b?(i[f]={windowStartMs:b,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 SR from"node:path";var wR="mesh-cron-lease.json";function xR(e){let r=I(SR.join(M(e),wR),null);return Vg(e,r)??r}function _R(e,r){let t={...r,updatedAt:new Date().toISOString()};ue(SR.join(M(e),wR),t),jg(e,t)}function CR(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 ER(e){let r=Rg(),t=Ir(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(t.flags.dispatchReceipts!=="off"){Object.assign(o,Tg());let s=Og({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,t.flags.dispatchReceipts==="enforce"&&Object.assign(o,Sk())}return t.flags.planOutbox!=="off"&&Object.assign(o,_h()),t.flags.admission!=="off"&&(Object.assign(o,Wg()),t.flags.admission==="enforce"&&Object.assign(o,Fg())),(t.flags.keeper!=="off"||t.flags.meshLease!=="off"||t.flags.quota!=="off")&&Object.assign(o,zg()),{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}}K();import{createHash as PR}from"node:crypto";import{access as RN,mkdir as $8,readFile as AR,rename as j8,writeFile as V8}from"node:fs/promises";import{constants as vN}from"node:fs";import{homedir as Gc}from"node:os";import _e from"node:path";var bN=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,SN=/^[A-Za-z0-9._:-]{8,128}$/;function wN(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||_e.join(Gc(),".kynver","mcp-installations.json")}function xN(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||_e.join(Gc(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||_e.join(Gc(),".npm-global")}function _N(e){let r=_e.resolve(e);if(_e.basename(r)!=="node_modules")return r;let t=_e.dirname(r);return _e.basename(t)==="lib"?_e.dirname(t):t}function CN(e,r){return[_e.join(e,"lib","node_modules",r,"package.json"),_e.join(e,"node_modules",r,"package.json")]}async function EN(e){try{return await RN(e,vN.R_OK),!0}catch{return!1}}async function PN(e=wN()){let r;try{r=JSON.parse(await AR(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||!SN.test(t.inventoryKey)||!bN.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 AN(e,r,t){if(typeof e.bin=="string")return _e.join(t,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=r.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!_e.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?_e.join(t,s):null}function IN(e){return PR("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 ON(e){let r=[];for(let t of e){let n=_N(xN(t.prefix)),o=(await Promise.all(CN(n,t.packageName).map(async m=>({candidate:m,ok:await EN(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await AR(o,"utf8"));if(s.name!==t.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=_e.dirname(o),a=AN(s,t,i),l=t.packageName==="@kynver-app/runtime",c=t.lifecycle??"runtime_stdio",u=PR("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:IN(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 IR(){return ON(await PN())}import{createHash as TN,createHmac as NN,timingSafeEqual as MN}from"node:crypto";function Yc(e){let r=e.trim().split(".");return r.length!==3||r[0]!=="krc1"||!r[1]||!r[2]?null:{tokenId:r[1],tokenHash:TN("sha256").update(`krc1.${r[1]}.${r[2]}`,"utf8").digest("hex")}}function OR(e,r,t){let n=Yc(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=NN("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&MN(i,s)}Ni();import{createHash as DN}from"node:crypto";import{access as qc,mkdtemp as WN,readFile as WR,rm as LN}from"node:fs/promises";import{constants as Jc}from"node:fs";import{tmpdir as UN}from"node:os";import an from"node:path";import{spawn as BN}from"node:child_process";import{Client as FN}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as KN}from"@modelcontextprotocol/sdk/client/stdio.js";var zc="https://registry.npmjs.org",TR=512*1024,Xc=2*6e4,HN=2e4;function LR(){return"npm"}function NR(e,r){return Buffer.byteLength(e)>=TR?e:(e+r.toString("utf8")).slice(0,TR)}function $N(e){let r=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),t=r&&an.isAbsolute(r)?r:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:zc,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 UR(e,r,t=Xc,n){return new Promise((o,s)=>{let i,a;try{[i,a]=ve(e,r)}catch(m){s(m);return}let l=BN(i,a,{shell:!1,windowsHide:!0,detached:ce(),env:$N(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=NR(c,m)}),l.stderr.on("data",m=>{u=NR(u,m)});let p=setTimeout(()=>{d=!0,l.pid&&rr(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 jN(e,r){let[t,n]=r.split("-",2);return!n||!["sha256","sha384","sha512"].includes(t)?!1:DN(t).update(e).digest("base64")===n}async function VN(e,r,t,n){let o=await UR(LR(),["pack",`${e}@${r}`,"--json","--pack-destination",n,`--registry=${zc}`,"--ignore-scripts"],Xc,an.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"||an.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=an.join(n,i);if(!jN(await WR(a),t))throw new Error("artifact_integrity_mismatch");return a}async function GN(e,r,t){if((await UR(LR(),["install","--global","--prefix",e,r,`--registry=${zc}`,"--no-audit","--fund=false"],Xc,t)).code!==0)throw new Error("package_install_failed")}async function BR(e){let r=JSON.parse(await WR(e.local.packageJsonPath,"utf8"));if(r.name!==e.report.packageName||typeof r.version!="string")throw new Error("installed_identity_mismatch");return r.version}function YN(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 MR(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await qc(e.local.binPath,Jc.X_OK).catch(async()=>qc(e.local.binPath,Jc.R_OK));let r=new KN({command:e.local.binPath,args:[],env:YN(e.local.envAllowlist),stderr:"pipe"}),t=new FN({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")),HN)})]);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 DR(e,r,t,n,o){let s=await WN(an.join(UN(),"kynver-mcp-update-"));try{let i=await VN(r,t,n,s);if(await o(),await GN(e.local.prefix,i,an.join(s,"npm-cache")),await BR(e)!==t)throw new Error("installed_version_mismatch")}finally{await LN(s,{recursive:!0,force:!0})}}async function FR(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 qc(e.local.prefix,Jc.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await BR(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 DR(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 MR(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 DR(e,r.packageName,r.installedVersion,r.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await MR(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 eu}from"node:crypto";import{mkdir as ru,readFile as tu,rename as rM,rm as Ei,stat as tM,writeFile as VR}from"node:fs/promises";import bt from"node:path";import{createHmac as qN,timingSafeEqual as JN}from"node:crypto";import{mkdir as zN,readFile as XN,rename as QN,writeFile as ZN}from"node:fs/promises";import{homedir as eM}from"node:os";import Qc from"node:path";function Zc(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Qc.join(eM(),".kynver","state","mcp-updates")}function KR(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Qc.join(Zc(),`${e}.json`)}function HR(e,r){let t=Yc(r);return t?qN("sha256",Buffer.from(t.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function $R(e,r){try{let t=JSON.parse(await XN(KR(e),"utf8"));if(t.version!==2||t.operationId!==e||typeof t.integrityMac!="string")return null;let{integrityMac:n,...o}=t,s=HR(o,r);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!JN(i,a)?null:t}catch{return null}}async function jR(e,r){let t=HR(e,r);if(!t)throw new Error("invalid_runner_credential_for_receipt");let n=KR(e.operationId);await zN(Qc.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await ZN(o,`${JSON.stringify({...e,integrityMac:t},null,2)}
|
|
111
|
+
`,{mode:384}),await QN(o,n)}var nM="host-mutation.lock";function GR(){return bt.join(Zc(),nM)}async function YR(){try{let e=JSON.parse(await tu(bt.join(GR(),"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:qR(e.pid)}}catch{return null}}function qR(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}async function oM(e){try{return await tM(e),!0}catch(r){if(r.code==="ENOENT")return!1;throw r}}async function JR(){return sM("mcp_update")}async function sM(e){let r=GR(),t=`${r}.reclaiming`;await ru(bt.dirname(r),{recursive:!0,mode:448});let n=!1;try{if(await oM(t))return null;for(let o=0;o<2;o+=1)try{await ru(r,{mode:448});let s={pid:process.pid,nonce:eu(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await VR(bt.join(r,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Ei(t,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await tu(bt.join(r,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Ei(r,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await ru(t,{mode:448}),n=!0,await VR(bt.join(t,"owner.json"),JSON.stringify({pid:process.pid,nonce:eu(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 tu(bt.join(r,"owner.json"),"utf8"))}catch{return null}if(qR(i.pid))return null;let a=`${r}.stale-${process.pid}-${eu(8).toString("hex")}`;await rM(r,a),await Ei(a,{recursive:!0,force:!0})}return null}finally{n&&await Ei(t,{recursive:!0,force:!0})}}function Pi(e,r,t){return`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/mcp-updates/${t}`}function iM(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 zR(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 aM(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 XR(e){let r=X(e.baseUrl),t=await IR();if(t.length===0)return{ok:!0,stage:"not_configured"};let n=await st(Pi(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 JR();if(!o){let s=await YR();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await st(Pi(r,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=iM(s.response);if(!i)return{ok:!0,stage:"idle"};if(!OR(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await $R(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||!zR(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&&zR(a.recovery,i)?a.recovery:aM(g,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(g,h,E)=>{await jR({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:g,terminal:h,...E?{outcome:E}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let p="claimed",m=async g=>{if(!(await st(Pi(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),b=()=>m(p),k;try{k=await FR(l,i.claims,f,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:b,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 R=await st(Pi(r,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...k});return R.ok?(await d(k.outcome,!0,k.outcome),{ok:k.outcome==="succeeded",stage:"complete",outcome:k.outcome}):{ok:!1,stage:"complete",status:R.status,outcome:k.outcome}}finally{await o.release()}}function lM(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function cM(e,r){let t=ee(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(QR.join(M(t.id),"workers",x(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Br(a))continue;if(zn(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=Y(a);if(!Se(l))continue;let c=Ot({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await Yl({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 uM(e,r,t,n,o){let s=X(n.baseUrl?String(n.baseUrl):void 0),i=await re(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await nR(),c=fs(r),u=null;try{let P=hR(r);if(P.length>0){let S=bR(r);u=pR(P,{cache:S}),S.flush?.()}else u=null}catch{u=null}try{if(Tr()!=="off"){let P=Dt();Dg({liveWorkers:P}),Bg({liveWorkers:P})}else Ng()}catch{}let d=({runId:P,workerName:S})=>{try{let{runsDir:w}=le(),V=QR.join(br(w,x(P)),"workers",x(S),"worker.json"),$=I(V,null);return $?Br($):!1}catch{return!1}};await xk({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let p=null;try{p=ER({hasLiveWorker:d})}catch{p=null}let m=null;try{m=_u({control:Ct(e),supervisor:Au(),inFlightWorkers:Dt().length})}catch{m=null}let f=xR(r),b=fu(),k=await J(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Jl(r),resourceGate:t,boxResourceSnapshot:Mk(t,{harnessRunId:r,boxKind:hr(U())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:We({runId:r}),activeHarnessWorkers:c,...f?.leaseToken?{meshCronLeaseToken:f.leaseToken}:{},...p?{localRunStore:p}:{},...m?{runtimeControlAck:m}:{},...b?{daemonEventLoop:b}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),R=RR(k.response);if(R)try{kR(r,R)}catch{}let g=CR(k);if(g)try{_R(r,g)}catch{}let h=bg(k);h&&Sg(e,h);let E=Su(k);return E&&xu(e,E),{ok:k.ok,httpStatus:k.status,response:k.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function ZR(e){let r=String(fr(String(e.run||""),"--run")),t=String(fr(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Jl(r);let o=await ks(t,e),s=hs(o),i=Pn({runId:r,configuredMaxWorkersOverride:s}),a=eR()?Zy(r):void 0,l=await uM(t,r,i,e,a),c;if(n)try{let _=X(e.baseUrl?String(e.baseUrl):void 0),Z=await re(e.secret?String(e.secret):void 0,t,{baseUrl:_});c=await XR({agentOsId:t,secret:Z,baseUrl:_,activeOwnedSessions:Dt().length})}catch(_){c={ok:!1,stage:"cycle",error:_ instanceof Error?_.message:"update cycle failed"}}let u=sg(r,l),d=await uf(r,e),p=await cM(r,e);p.some(_=>_.ok&&!_.skipped)&&Ik();let m=Pn({runId:r,configuredMaxWorkersOverride:s}),f=vk(),b=await Lk(r,e),k=sk(m,l),R=k.maxStarts,g=Ct(t),h=Cu(g);h&&(R=0);let E=lM()?await Dk({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},P=null,S=0,w=ok(l),V=R;if(n&&V>0&&w.length>0){let _=Math.min(V,w.length),Z=await lc({...e,run:r,agentOsId:t,targetTaskIds:w.join(",")},_),he=Zt(Z);S+=he,V=Math.max(0,V-he),P={exactTargetTaskIds:w,exact:Z,startedCount:S}}if(n&&V>0){let _=await lc({...e,run:r,agentOsId:t},V),Z=Zt(_);S+=Z,P=P&&typeof P=="object"?{...P,broad:_,startedCount:S}:_}else!n||R<=0?P||(P={ok:!0,skipped:!0,reason:h??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:k,...w.length?{exactTargetTaskIds:w,exactOnly:!0}:{}}):P&&typeof P=="object"&&(P={...P,broadSkipped:!0,startedCount:S});let $=!k.underutilized&&R===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:b,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:E,dispatchAdvice:k,dispatch:P,idle:$,runtimeControl:g?{desiredState:g.desiredState,policyVersion:g.policyVersion}:null}}pn();Wt();pn();function ev(e){return Ao(Ct(e))!=="stopped"?null:Dt().length}function rv(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 dM(e){e&&(Tk({admission:e.admission,ownerKind:e.ownerKind}),Pu(e.ownerKind))}async function pM(e,r={}){try{e.instructionBundle&&hu(e.instructionBundle.bundle,e.instructionBundle.source),mu(e.eventLoopReport);let t=await(r.runTick??ZR)(e.args),n=(r.countInFlightWorkers??ev)(e.agentOsId);return{type:"result",id:e.id,ok:!0,tick:JSON.parse(JSON.stringify(t)),inFlightWorkers:n}}catch(t){return{type:"result",id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function tv(e,r,t={}){dM(r);let n=Promise.resolve();e.on("message",o=>{rv(o)&&(n=n.then(async()=>{e.postMessage(await pM(o,t))}))})}nv?tv(nv,mM):(console.error(JSON.stringify({event:"daemon_tick_thread_misuse",error:"must run as a worker thread"})),process.exitCode=1);
|