@kynver-app/runtime 0.2.130 → 0.2.135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -7
- package/dist/cli.js +208 -195
- package/dist/daemon-tick-thread.js +55 -51
- package/dist/desktop-entry.js +157 -149
- package/dist/index.js +232 -219
- package/dist/local-run-store/index.js +10 -10
- package/dist/server/cleanup.js +15 -15
- package/dist/server/default-repo.js +2 -2
- package/dist/server/dispatch-routing.js +4 -4
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +1 -1
- package/dist/server/model-routing.js +4 -4
- package/dist/server/monitor.js +8 -8
- package/dist/server/worker-policy.js +3 -3
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
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{homedir as
|
|
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{homedir as Ge}from"node:os";import qe from"node:path";function xt(e){return e==="~"?Ge():e.startsWith("~/")||e.startsWith("~\\")?qe.join(Ge(),e.slice(2)):e}function b(e){return qe.resolve(xt(e))}var E=a(()=>{"use strict"});function _(e=process.platform){return e!=="win32"}var Je=a(()=>{"use strict"});var d=a(()=>{"use strict";Je()});var bt,Wo,vt,Mo,ke=a(()=>{"use strict";bt=["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"],Wo=new Set(bt),vt=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Mo=new Set(vt)});var ee=a(()=>{"use strict";E();d();ke()});import{homedir as ze}from"node:os";import Re from"node:path";function At(e=ze()){return Re.join(e,".kynver",Ot)}function Ze(e,r=ze()){return Re.resolve(e)===Re.resolve(At(r))}var Ot,Xe,xe=a(()=>{"use strict";ee();Ot="workspace",Xe="main"});var be=a(()=>{"use strict";ee();E();xe()});import{existsSync as rr,readFileSync as wt}from"node:fs";import S from"node:path";function It(e){return e.includes("/")||e.includes("\\")}function Tt(e){return(e.PATHEXT||Pt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function Nt(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function Dt(e,r={}){let t=r.env??process.env,n=r.exists??rr,o=Tt(t),s=S.win32.extname(e)!=="",i=l=>s?[l]:o.map(c=>`${l}${c}`);if(It(e)||S.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of Nt(t).split(";").map(c=>c.trim()).filter(Boolean)){let c=i(S.win32.join(l,e)).find(u=>n(u));if(c)return c}return null}function er(e){return e.replace(/^[\\/]+/,"")}function Wt(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=Kt.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Qe.exec(n);if(o)return er(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?Qe.exec(i):null;if(l)return er(l[1])}return null}function Mt(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=Dt(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=S.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(he=>wt(he,"utf8")),i=r.exists??rr,l;try{l=s(n)}catch{throw new Y(n)}let c=Wt(l);if(!c)throw new Y(n);let u=S.win32.dirname(n),p=S.win32.join(u,c);if(!i(p))throw new Y(n);let j=S.win32.join(u,"node.exe");return{executable:i(j)?j:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function v(e,r,t={}){let n=Mt(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Y,Pt,Qe,Kt,C=a(()=>{"use strict";Y=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},Pt=".COM;.EXE;.BAT;.CMD";Qe=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,Kt=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var tr=a(()=>{"use strict";C()});var ve=a(()=>{"use strict";d()});var O=a(()=>{"use strict"});var re=a(()=>{"use strict"});var nr=a(()=>{"use strict"});var ui,di,Ee=a(()=>{"use strict";ui=25*1024*1024*1024,di=12*1024*1024*1024});var hi,yi,or=a(()=>{"use strict";Ee();hi=5*1024*1024*1024,yi=10*1024*1024*1024});var vi,Ei,Se=a(()=>{"use strict";or();Ee();vi=30*1024*1024*1024,Ei=15*1024*1024*1024});var ir=a(()=>{"use strict";d()});import Bt from"node:path";var Ni,Oe=a(()=>{"use strict";E();ir();Ni=Bt.join(".openclaw","harness")});var ne=a(()=>{"use strict";A();O();re();oe();Oe()});var lr=a(()=>{"use strict";A();Oe();ne();d()});var se=a(()=>{"use strict";lr();d()});var ur=a(()=>{"use strict";se();d()});var dr=a(()=>{"use strict"});var pr=a(()=>{"use strict";dr();d()});var mr=a(()=>{"use strict"});var fr=a(()=>{"use strict";mr()});var ae=a(()=>{"use strict"});var k,w,gs,V=a(()=>{"use strict";k="claude-sonnet-5-5",w="claude-opus-5-5",gs={[k]:"claude-sonnet-4-6",[w]:"claude-opus-4-8"}});var gr=a(()=>{"use strict"});var hr=a(()=>{"use strict"});var yr=a(()=>{"use strict";fr();d();ae();V();gr();hr()});var Ds,R=a(()=>{"use strict";Ds=String.raw`"use strict";
|
|
2
2
|
const cp = require("child_process"), fs = require("fs");
|
|
3
3
|
const argv = process.argv.slice(1);
|
|
4
4
|
const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
|
|
@@ -62,8 +62,8 @@ child.on("error", (e) => {
|
|
|
62
62
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
63
63
|
});
|
|
64
64
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
65
|
-
`});var ar=a(()=>{"use strict";oe();d();R()});var lr=a(()=>{"use strict";ie()});var cr=a(()=>{"use strict"});var Ss,Cs,ur=a(()=>{"use strict";Z();Ss=10*6e4,Cs=60*6e4});var dr=a(()=>{"use strict"});var ve=a(()=>{"use strict"});var pr=a(()=>{"use strict"});var mr=a(()=>{"use strict";ve();pr()});var fr=a(()=>{"use strict";rr();sr();ar();R();ie();lr();cr();ur();dr();mr();ve();d()});var gr=a(()=>{"use strict";fr();d()});var Nt,Kt,hr=a(()=>{"use strict";Ve();E();v();Q();te();_e();oe();Qe();gr();d();Nt=500*1024*1024,Kt=4*1024*1024*1024});var te=a(()=>{"use strict";hr()});import{homedir as Wt}from"node:os";import Mt from"node:path";var yr,Ee=a(()=>{"use strict";yr=Mt.join(Wt(),".kynver",".env")});var kr=a(()=>{"use strict"});var Rr=a(()=>{"use strict";kr()});var _r=a(()=>{"use strict"});var xr=a(()=>{"use strict";d()});var Se=a(()=>{"use strict";Rr();_r();xr()});var br=a(()=>{"use strict"});var vr=a(()=>{"use strict";br()});var se=a(()=>{"use strict";Ee();b();E();Se();vr()});var Er=a(()=>{"use strict";v();v()});var Sr=a(()=>{"use strict";Ee();Se();se()});var Ce=a(()=>{"use strict"});var Cr=a(()=>{"use strict";ye();v();Er();E();se();Sr();ke();Ce();re()});function S(e){let r=e.trim().toLowerCase();return Vt[r]??r}var Or,Yt,Vt,ae=a(()=>{"use strict";Or=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Yt=Or.join("|"),Vt={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 Ar=a(()=>{"use strict";b()});var wr=a(()=>{"use strict";Ar()});var Pr=a(()=>{"use strict"});var Ir=a(()=>{"use strict";Pr()});import{existsSync as qt,mkdirSync as dc,readFileSync as Jt,writeFileSync as pc}from"node:fs";import{homedir as zt,totalmem as fc}from"node:os";import Oe from"node:path";function Xt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:x(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:x(e.defaultRepo.trim())}:{}}}function N(){if(!qt(Tr))return{};try{return Xt(JSON.parse(Jt(Tr,"utf8")))}catch{return{}}}var Nr,Tr,Pc,Ic,Tc,E=a(()=>{"use strict";ye();b();ke();v();Q();te();_e();se();Cr();ae();re();wr();Ce();Ir();Nr=Oe.join(zt(),".kynver"),Tr=Oe.join(Nr,"config.json"),Pc=Oe.join(Nr,"credentials");Ic=500*1024*1024,Tc=4*1024*1024*1024});var lt=/^claude[-_]/i,ct=/^(?:opus|sonnet|haiku)\b/i;function Ue(e){let r=e.trim();return lt.test(r)||ct.test(r)}function Le(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function fe(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Fe(e){return e.trim().toLowerCase().startsWith("gemini-")}function ut(e){return Le(e)?"codex":Ue(e)?"claude":Fe(e)?"gemini":(fe(e),"cursor")}function dt(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 pt(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?Ue(n)||Le(n)||fe(n)||Fe(n)?{lane:t,model:n,provider:ut(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function f(e){let r=typeof e=="string"?e.trim():"";return r?dt(r)??pt(r):null}function ge(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!fe(r.model)):!1}E();var Kr={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 K(e){return Kr[e]}function Wr(){return Object.values(Kr)}import{existsSync as cn}from"node:fs";import{homedir as un}from"node:os";import H from"node:path";import{createHash as Ur}from"node:crypto";import{statSync as ln}from"node:fs";import{spawnSync as Lr}from"node:child_process";import{existsSync as Br,readFileSync as Zt}from"node:fs";import C from"node:path";var $=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},Qt=".COM;.EXE;.BAT;.CMD";function en(e){return e.includes("/")||e.includes("\\")}function rn(e){return(e.PATHEXT||Qt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function tn(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function nn(e,r={}){let t=r.env??process.env,n=r.exists??Br,o=rn(t),s=C.win32.extname(e)!=="",i=l=>s?[l]:o.map(c=>`${l}${c}`);if(en(e)||C.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of tn(t).split(";").map(c=>c.trim()).filter(Boolean)){let c=i(C.win32.join(l,e)).find(u=>n(u));if(c)return c}return null}var Mr=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,on=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function Dr(e){return e.replace(/^[\\/]+/,"")}function sn(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=on.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Mr.exec(n);if(o)return Dr(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?Mr.exec(i):null;if(l)return Dr(l[1])}return null}function an(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=nn(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=C.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(me=>Zt(me,"utf8")),i=r.exists??Br,l;try{l=s(n)}catch{throw new $(n)}let c=sn(l);if(!c)throw new $(n);let u=C.win32.dirname(n),p=C.win32.join(u,c);if(!i(p))throw new $(n);let F=C.win32.join(u,"node.exe");return{executable:i(F)?F:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function O(e,r,t={}){let n=an(e,t);return[n.executable,[...n.prefixArgs,...r]]}function y(e){try{let r=ln(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Ur("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function W(e){return Ur("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=O(e,r),i=Lr(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 l=(i.stderr||i.stdout||"").trim(),c=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:l?`${c}: ${l.slice(0,200)}`:c}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function le(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=O(e,r);return Lr(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 dn="codex";function pn(){let e=un();return[process.env.CODEX_HOME?.trim()?H.join(H.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,H.join(e,".codex","auth.json"),H.join(e,".config","codex","auth.json")].filter(t=>!!t)}function mn(e){return H.dirname(e)}function fn(e){let r,t;for(let n of pn()){if(!cn(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:mn(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Fr(e=new Date().toISOString()){let r=g(dn,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:W("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}=fn(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(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 gn}from"node:fs";import{homedir as hn}from"node:os";import Ae from"node:path";function yn(){let e=process.env.HERMES_HOME?.trim(),r=e?Ae.resolve(e):Ae.join(hn(),".hermes");return Ae.join(r,"auth.json")}function ce(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=yn(),o=gn(n),s=le(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?y(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 j(e=new Date().toISOString()){let r=Fr(e);if(r.ready)return{...r,path:"codex_cli"};let t=ce(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 $r=["low","medium","high"],Hr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function jr(e,r){let t=K(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function kn(e,r){let t=K(e.providerId),n=K(r.providerId),o=$r.indexOf(t.costTier)-$r.indexOf(n.costTier);if(o!==0)return o;let s=Hr[e.binding.authSource]-Hr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function we(e){let r=Wr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&jr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(kn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return jr(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 Rn}from"node:fs";import{homedir as _n}from"node:os";import xn from"node:path";var bn="claude";function vn(){let e=_n();return[xn.join(e,".claude",".credentials.json")]}function Yr(e=new Date().toISOString()){let r=g(bn,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:W("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=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=vn().find(i=>Rn(i)),o=le(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?y(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 Tn}from"node:fs";import{homedir as In}from"node:os";import D from"node:path";R();import{closeSync as yu,existsSync as An,mkdirSync as ku,openSync as Ru,statSync as _u,unlinkSync as xu}from"node:fs";d();import M from"node:path";he();import{existsSync as Y,readdirSync as En}from"node:fs";import A from"node:path";var Sn=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Cn(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 On(e){let r=A.join(e,"versions");if(!Y(r))return null;let t=null,n=-1;for(let o of En(r,{withFileTypes:!0})){if(!o.isDirectory()||!Sn.test(o.name))continue;let s=Cn(o.name);s==null||s<=n||(n=s,t=A.join(r,o.name))}return t}function Pe(e){let r=e?.trim()||A.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=A.join(r,"node.exe"),n=A.join(r,"index.js");if(Y(t)&&Y(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=On(r);if(!o)return null;let s=A.join(o,"node.exe"),i=A.join(o,"index.js");return!Y(s)||!Y(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function wn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:k(),bundledVersionDir:t}}function Vr(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&An(M.join(M.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Pe(M.dirname(e)):t?{nodeExe:e,indexJs:M.join(M.dirname(e),"index.js"),versionDir:M.dirname(e)}:Pe();if(o)return wn(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:k()}}import{spawnSync as Pn}from"node:child_process";function Ie(e,r=process.env){try{let t;try{t=Vr(e)}catch{t={executable:e,prefixArgs:[]}}let n=Pn(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 Te(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(D.join(t,".config","cursor","auth.json")),r.push(D.join(t,".cursor-agent","auth.json")));let n=In();if(r.push(D.join(n,".config","cursor","auth.json")),r.push(D.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(D.join(o,"cursor-agent","auth.json")),s&&r.push(D.join(s,"cursor","auth.json"))}return r}var Nn="agent";function Gr(e=new Date().toISOString()){let r=g(Nn,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:W("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=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Te().find(l=>Tn(l)),o=Ie(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(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 Kn,readFileSync as Wn}from"node:fs";import{homedir as Mn}from"node:os";import Ne from"node:path";var Dn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Bn(){let e=process.env.HERMES_HOME?.trim(),r=e?Ne.resolve(e):Ne.join(Mn(),".hermes");return Ne.join(r,".env")}function Un(e){try{let r=Wn(e,"utf8"),t=[];for(let n of Dn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function qr(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Bn(),o=Kn(n),s=o?Un(n):[],l=s.some(u=>u.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",c=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:c?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Jr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=j(r),n={codex:t,cursor:Gr(r),claude:Yr(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:qr(r),hermesOpenAiCodex:ce(r),codexAdapterPath:t.path,readyCount:o}}var Ln=[/\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],Fn=[/\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 Ke(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function $n(e){let r=Ke(e,"executorRef").toLowerCase(),t=Ke(e,"title").toLowerCase(),n=Ke(e,"description").toLowerCase(),o=`${r}
|
|
65
|
+
`});var _r=a(()=>{"use strict";se();d();R()});var kr=a(()=>{"use strict";ae();V()});var Rr=a(()=>{"use strict"});var zs,Xs,xr=a(()=>{"use strict";ee();zs=10*6e4,Xs=60*6e4});var br=a(()=>{"use strict"});var Ae=a(()=>{"use strict"});var vr=a(()=>{"use strict"});var Er=a(()=>{"use strict";Ae();vr()});var Sr=a(()=>{"use strict";pr();yr();_r();R();ae();kr();Rr();xr();br();Er();Ae();d()});var Cr=a(()=>{"use strict";Sr();d()});var Zt,Qt,Or=a(()=>{"use strict";nr();A();O();re();oe();Se();se();ur();Cr();d();Zt=500*1024*1024,Qt=4*1024*1024*1024});var oe=a(()=>{"use strict";Or()});import{homedir as en}from"node:os";import rn from"node:path";var Ar,we=a(()=>{"use strict";Ar=rn.join(en(),".kynver",".env")});var wr=a(()=>{"use strict"});var Pr=a(()=>{"use strict";wr()});var Ir=a(()=>{"use strict"});var Tr=a(()=>{"use strict";d()});var Pe=a(()=>{"use strict";Pr();Ir();Tr()});var Nr=a(()=>{"use strict"});var Dr=a(()=>{"use strict";Nr()});var le=a(()=>{"use strict";we();E();A();Pe();Dr()});var Kr=a(()=>{"use strict";O();O()});var Wr=a(()=>{"use strict";we();Pe();le()});var Ie=a(()=>{"use strict"});var Mr=a(()=>{"use strict";be();O();Kr();A();le();Wr();ve();Ie();ne()});function P(e){let r=e.trim().toLowerCase();return pn[r]??r}var Br,dn,pn,ce=a(()=>{"use strict";Br=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],dn=Br.join("|"),pn={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 Ur=a(()=>{"use strict";E()});var Lr=a(()=>{"use strict";Ur()});var Fr=a(()=>{"use strict"});var $r=a(()=>{"use strict";Fr()});import{existsSync as fn,mkdirSync as Uc,readFileSync as gn,writeFileSync as Lc}from"node:fs";import{homedir as hn,totalmem as $c}from"node:os";import Te from"node:path";function yn(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:b(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:b(e.defaultRepo.trim())}:{}}}function _n(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!Ze(b(r))?e:{...e,defaultBase:Xe}}function kn(){if(!fn(Hr))return null;try{return JSON.parse(gn(Hr,"utf8"))}catch{return null}}function W(){let e=kn();return e?_n(yn(e)):{}}var jr,Hr,su,au,lu,A=a(()=>{"use strict";be();E();xe();tr();ve();O();re();oe();Se();le();Mr();ce();ne();Lr();Ie();$r();jr=Te.join(hn(),".kynver"),Hr=Te.join(jr,"config.json"),su=Te.join(jr,"credentials");au=500*1024*1024,lu=4*1024*1024*1024});var ht=/^claude[-_]/i,yt=/^(?:opus|sonnet|haiku)\b/i;function je(e){let r=e.trim();return ht.test(r)||yt.test(r)}function Ye(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ye(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Ve(e){return e.trim().toLowerCase().startsWith("gemini-")}function _t(e){return Ye(e)?"codex":je(e)?"claude":Ve(e)?"gemini":(ye(e),"cursor")}function kt(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 Rt(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?je(n)||Ye(n)||ye(n)||Ve(n)?{lane:t,model:n,provider:_t(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function f(e){let r=typeof e=="string"?e.trim():"";return r?kt(r)??Rt(r):null}function _e(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ye(r.model)):!1}A();var Yr={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 M(e){return Yr[e]}function Vr(){return Object.values(Yr)}import{existsSync as xn}from"node:fs";import{homedir as bn}from"node:os";import G from"node:path";C();import{createHash as Gr}from"node:crypto";import{statSync as Rn}from"node:fs";import{spawnSync as qr}from"node:child_process";function y(e){try{let r=Rn(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Gr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function B(e){return Gr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=v(e,r),i=qr(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 l=(i.stderr||i.stdout||"").trim(),c=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:l?`${c}: ${l.slice(0,200)}`:c}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function ue(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=v(e,r);return qr(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 vn="codex";function En(){let e=bn();return[process.env.CODEX_HOME?.trim()?G.join(G.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,G.join(e,".codex","auth.json"),G.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Sn(e){return G.dirname(e)}function Cn(e){let r,t;for(let n of En()){if(!xn(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Sn(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Jr(e=new Date().toISOString()){let r=g(vn,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:B("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}=Cn(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(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 On}from"node:fs";import{homedir as An}from"node:os";import Ne from"node:path";function wn(){let e=process.env.HERMES_HOME?.trim(),r=e?Ne.resolve(e):Ne.join(An(),".hermes");return Ne.join(r,"auth.json")}function de(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=wn(),o=On(n),s=ue(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?y(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 q(e=new Date().toISOString()){let r=Jr(e);if(r.ready)return{...r,path:"codex_cli"};let t=de(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 zr=["low","medium","high"],Xr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Zr(e,r){let t=M(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Pn(e,r){let t=M(e.providerId),n=M(r.providerId),o=zr.indexOf(t.costTier)-zr.indexOf(n.costTier);if(o!==0)return o;let s=Xr[e.binding.authSource]-Xr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function De(e){let r=Vr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&Zr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Pn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Zr(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 In}from"node:fs";import{homedir as Tn}from"node:os";import Nn from"node:path";var Dn="claude";function Kn(){let e=Tn();return[Nn.join(e,".claude",".credentials.json")]}function Qr(e=new Date().toISOString()){let r=g(Dn,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:B("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=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Kn().find(i=>In(i)),o=ue(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?y(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 jn}from"node:fs";import{homedir as Hn}from"node:os";import L from"node:path";R();import{closeSync as ju,existsSync as Ln,mkdirSync as Yu,openSync as Vu,statSync as Gu,unlinkSync as qu}from"node:fs";d();import U from"node:path";ke();import{existsSync as J,readdirSync as Wn}from"node:fs";import I from"node:path";var Mn=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Bn(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 Un(e){let r=I.join(e,"versions");if(!J(r))return null;let t=null,n=-1;for(let o of Wn(r,{withFileTypes:!0})){if(!o.isDirectory()||!Mn.test(o.name))continue;let s=Bn(o.name);s==null||s<=n||(n=s,t=I.join(r,o.name))}return t}function Ke(e){let r=e?.trim()||I.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=I.join(r,"node.exe"),n=I.join(r,"index.js");if(J(t)&&J(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Un(r);if(!o)return null;let s=I.join(o,"node.exe"),i=I.join(o,"index.js");return!J(s)||!J(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function Fn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:_(),bundledVersionDir:t}}function et(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Ln(U.join(U.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Ke(U.dirname(e)):t?{nodeExe:e,indexJs:U.join(U.dirname(e),"index.js"),versionDir:U.dirname(e)}:Ke();if(o)return Fn(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:_()}}import{spawnSync as $n}from"node:child_process";function We(e,r=process.env){try{let t;try{t=et(e)}catch{t={executable:e,prefixArgs:[]}}let n=$n(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 Me(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(L.join(t,".config","cursor","auth.json")),r.push(L.join(t,".cursor-agent","auth.json")));let n=Hn();if(r.push(L.join(n,".config","cursor","auth.json")),r.push(L.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(L.join(o,"cursor-agent","auth.json")),s&&r.push(L.join(s,"cursor","auth.json"))}return r}var Yn="agent";function rt(e=new Date().toISOString()){let r=g(Yn,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:B("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=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Me().find(l=>jn(l)),o=We(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(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 Vn,readFileSync as Gn}from"node:fs";import{homedir as qn}from"node:os";import Be from"node:path";var Jn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function zn(){let e=process.env.HERMES_HOME?.trim(),r=e?Be.resolve(e):Be.join(qn(),".hermes");return Be.join(r,".env")}function Xn(e){try{let r=Gn(e,"utf8"),t=[];for(let n of Jn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function tt(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=zn(),o=Vn(n),s=o?Xn(n):[],l=s.some(u=>u.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",c=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:c?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function nt(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=q(r),n={codex:t,cursor:rt(r),claude:Qr(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:tt(r),hermesOpenAiCodex:de(r),codexAdapterPath:t.path,readyCount:o}}var Zn=[/\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],Qn=[/\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 Ue(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function eo(e){let r=Ue(e,"executorRef").toLowerCase(),t=Ue(e,"title").toLowerCase(),n=Ue(e,"description").toLowerCase(),o=`${r}
|
|
66
66
|
${t}
|
|
67
|
-
${n}`;return
|
|
67
|
+
${n}`;return Zn.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":Qn.some(s=>s.test(o))?"low":"elevated"}function ro(e){let r=M(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 to(e){let r=e.inventory??nt();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function T(e){let r=ro({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 ot(e){let r=e.task??{},t=eo(r),n=to({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:q())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=F;if(o==="codex"||o==="provider:codex"){let u=n.bindings.codex;if(!u.ready){let p=De({inventory:n,riskClass:t});return T(p?{providerId:p.providerId,binding:p.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"})}return T({providerId:"codex",binding:u,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let u=n.bindings.cursor;if(u.ready)return T({providerId:"cursor",binding:u,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let u=n.bindings.claude;if(u.ready)return T({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=De({inventory:n,riskClass:t});if(l)return T({providerId:l.providerId,binding:l.binding,riskClass:t,routingRule:`orchestration:cost_aware_${l.providerId}`,model:s,escalatedFrom:l.escalatedFrom,escalatedReason:l.escalatedReason});let c=n.bindings.codex;return T({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:c.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...c.ready?{}:{escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}})}R();d();C();V();var it="kynver",st=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],no=st.map(e=>`mcp__${it}__${e}`);V();R();d();C();R();d();C();var pe="gpt-5.6-sol";var op=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||pe;function io(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||pe}var $=io();R();d();var Le="openai-compatible",Mp=600*1e3;R();d();C();var N="gemini";function D(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var H="gemini-api";var sm=600*1e3;var ct=k,Z="composer-2.5";function m(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function lo(e){if(!e)return;let r=m(e,"workerModelOverride")||m(e,"modelOverride");return r||`${m(e,"title")}
|
|
68
68
|
${m(e,"description")}
|
|
69
|
-
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
69
|
+
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function at(e){return e.toLowerCase()}function ge(e=W()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||ct}function me(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-")?N:"cursor"}function co(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Z,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:k,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:D(),provider:N,rule:n&&n!==N?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:D(),provider:H,rule:n&&n!==H?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function lt(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 uo=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function ut(e,r,t){return uo.has(e)?w:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?w:k}function dt(e){let r=at(m(e,"executorRef")),t=m(e,"title").toLowerCase(),n=m(e,"priority")||"normal",o=at(m(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=ut(o,r,t);return{provider:"claude",model:i,rule:i===w?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:$,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=f(m(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:$},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=f(m(e,"executorRef"));return{provider:Le,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=f(m(e,"executorRef"));return{provider:H,...i?.model?{model:i.model}:{model:D()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=f(m(e,"executorRef"));return{provider:N,...i?.model?{model:i.model}:{model:D()},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:$,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 lt(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(lt(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=ge();return{model:s,provider:me(s),rule:"default:global"}}function po(e){return e?f(m(e,"executorRef")):null}function mo(e){switch(P(e)){case N:case H:return D();case"claude":return k;case"codex":return $;case"cursor":return Z;default:return}}var Fe="explicit:cli_provider",pt="config:worker_provider";function mt(e,r,t){let n=P(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:mo(n)??e.model,rule:t}}function fo(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Fe?e:mt(e,t,Fe)}function go(e,r){if(r.explicitProvider?.trim()||$e(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=P(t);return n===F||n===e.provider?e:mt(e,n,pt)}function ho(e){let r,t=po(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 c=e.explicitModel.trim(),u=co(c,e.explicitProvider);u?r=u:r={model:c,provider:e.explicitProvider?.trim()||me(c),rule:"explicit:cli",requestedModel:c}}else if(n)r={model:n,provider:o||me(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&fe(e.task)){let c=lo(e.task),u,p;if(c)u=c,p="task:provider_override";else{let j=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",He=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",he=typeof e.task.title=="string"?e.task.title.toLowerCase():"";u=ut(j,He,he),p=u===w?"factory:claude_review":"factory:claude_implementation"}r={model:u,provider:"claude",rule:p,requestedModel:u}}else if(e.task&&Object.keys(e.task).length>0){let c=dt(e.task);r={...c,requestedModel:c.model}}else{let c=ge();r={model:c,provider:e.explicitProvider?.trim()||me(c),rule:"default:global",requestedModel:c}}r=fo(r,e.explicitProvider),r=go(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&P(e.configuredProvider)!==F&&r.rule==="config:worker_provider",i=ft({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===Fe||i.rule===pt||x(i.provider)&&(e.explicitProviderIsOperatorOverride||fe(e.task))||i.provider===Le||i.provider===N||i.provider===H||i.provider==="codex")return i;let l=ot({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:l.provider,model:l.provider==="codex"?l.model??i.model??$:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function yo(e,r,t){return e||r||t||ge()||k}ce();ce();var F="cursor",_o=new Set(["claude","opus","anthropic"]),ko=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Q(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function x(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return _o.has(r)?!0:r.includes("claude")||r.includes("opus")}function fe(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&x(r))return!0;let t=Q(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=f(Q(e,"executorRef"));if(n?.provider&&x(n.provider)||n?.model&&x(Ro(n.model)))return!0;let o=Q(e,"description");if(ko.some(i=>i.test(o)))return!0;let s=Q(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function Ro(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function xo(e,r){return{provider:F,model:Z,rule:`policy:cursor_default${r}`,requestedModel:e}}var bo=["explicit:","executor_ref:","factory:","task:"];function vo(e){return bo.some(r=>e.startsWith(r))}function $e(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||f(Q(e,"executorRef"))?.provider?!0:fe(e)}function ft(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&x(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||vo(r.rule)||$e(t)||!x(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return xo(r.model,o)}function Eo(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function gt(e){return e?.trim()||void 0}function So(e){let r=Eo(e.task),t=f(r),n=e.explicitProvider?.trim().toLowerCase(),o=gt(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,l=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 c=e.routing.provider,u=gt(e.routing.model),p={provider:c,model:u,rule:e.routing.rule};return s&&s!=="cursor"||r&&_e(r)||n&&n!=="cursor"?c==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${l}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:p}:i&&u&&i!==u&&!x(c)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${l}) but routing resolved model=${u} (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:p}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:p}:{ok:!0,resolved:p}}export{Z as CURSOR_DEFAULT_MODEL,ct as GLOBAL_DEFAULT_MODEL,So as assessDispatchModelGuard,_e as executorRefRequestsNonCursorWorker,dt as inferModelRoutingFromTask,f as parseExecutorRefRoutingIntent,ge as resolveGlobalDefaultModel,yo as resolveModelFallback,ho as resolveWorkerLaunch};
|
package/dist/server/monitor.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var l=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function oe(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
|
|
1
|
+
var l=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function oe(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 Be(e){let r=e.trim();if(!r)return null;let t=oe(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=oe(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=oe(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function Ue(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Be(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Be(t);return n||t}var Me=l(()=>{"use strict"});var Fe=l(()=>{"use strict"});import{existsSync as Pt,mkdirSync as Bo,readFileSync as It,readdirSync as Uo,renameSync as Mo,rmSync as Fo,statSync as Le,writeFileSync as Lo}from"node:fs";function se(e){console.error(e),process.exit(1)}function ie(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function B(e){try{return JSON.parse(e)}catch{return null}}function U(e){try{return Le(e).size}catch{return 0}}function M(e){try{return Le(e).mtime.toISOString()}catch{return null}}function F(e,r){return Pt(e)?It(e,"utf8").split(`
|
|
2
2
|
`).slice(-r).join(`
|
|
3
|
-
`):""}function A(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function
|
|
4
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
5
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
6
|
-
${e.stderr}`.trim(),t=
|
|
7
|
-
`).filter(Boolean),n=null,o=
|
|
8
|
-
`).map(r=>r.trim()).filter(Boolean)}function I(e,r){try{let t=
|
|
3
|
+
`):""}function A(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function $e(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 ae(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var g=l(()=>{"use strict";Fe()});import{existsSync as Tt,readFileSync as Nt}from"node:fs";function He(e){return e==="complete"}function je(e){return He(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Ye(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Tt(e))return r;let t=Date.now()+Kt,n=new Date(t).toISOString(),o=Nt(e,"utf8").split(`
|
|
4
|
+
`).filter(Boolean);for(let s of o){let i=B(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),p=Date.parse(u);Number.isFinite(p)&&p>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:n}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),He(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Ue(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(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var Kt,Ve=l(()=>{"use strict";Me();g();Kt=6e4});function Je(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function L(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 ze(e){let r=Je(e[0]);return!!(r&&Wt.has(r))}function Bt(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Ut(e){if(!e||e.includes("*"))return null;let r=Bt(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Xe(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function le(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Mt(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Ft(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;Ge.has(n)&&(t+=1);continue}r.push(n)}}return r}function Lt(e){let r=!1,t=e.map((o,s)=>{let i=Mt(o),a=e[s-1];return a&&Ge.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Ft(t);if(n.length===2){let[o,s]=n;if(le(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Ut(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 qe(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 $(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=L(r);if(!t.length)return{command:r,wrapped:!1};let n=Je(t[0]);if(!n||!Dt.has(n))return{command:r,wrapped:!1};let o=qe(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 $t(e,r){let t=e.trim(),n=L(t),o=qe(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Ht(e){let r=e.trim(),t=$(r),n=L(t.command);if(!n.length||!ze(n))return{segment:r,changed:!1};let o=Lt(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:$t(r,s),changed:!0}:{segment:s,changed:!0}}function ue(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=Ht(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Ze(e){let r=$(e).command,t=L(r.trim());return t.length&&ze(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Qe(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 jt(e){let{pattern:r,target:t}=Qe(e);return r?le(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Xe(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Yt(e){let{pattern:r,target:t}=Qe(e);if(!r)return null;if(le(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Xe(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Vt(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 Gt(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 ce(e){let r=e.meta?.trim()||(e.command?Gt(e.command):null)||null;if(r){let t=jt(r),n=Vt(t);if(n)return n;let o=Yt(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=ue(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 Wt,Dt,Ge,er=l(()=>{"use strict";Wt=new Set(["rg","ripgrep","grep"]),Dt=new Set(["bash","sh","dash","zsh"]),Ge=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function w(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Xt(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 O(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function qt(e){let r=e.metadata;if(!O(r))return null;let t=r.vulnerabilities;if(!O(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 Zt(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 Qt(e,r){let t=e.error;if(O(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?w(o.split(`
|
|
5
|
+
`).find(Boolean)??o,160):"npm audit failed"}function en(e){let r=`${e.stdout}
|
|
6
|
+
${e.stderr}`.trim(),t=Xt(r);if(!t||!O(t)){let o=w(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(O(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Qt(t,e.stderr)}`};let n=qt(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:Zt(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function rn(e){return Jt.test(e)}function tn(e){let r=$(e).command;return rr.test(e)||rr.test(r)||Ze(e)}function nn(e){let r=ce({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&&zt.test(n)){let i=w(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ue(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=w(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 tr(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(rn(e.command)){let i=r.trim()||n.trim()||t.trim();return en({exitCode:e.exitCode,stdout:i,stderr:t})}if(tn(e.command))return nn({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ce({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=w(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Jt,rr,zt,nr=l(()=>{"use strict";er();Jt=/\bnpm\s+audit\b/i,rr=/\b(rg|ripgrep)\b/i,zt=/\b(error|invalid|unknown|panic|not found)\b/i});function P(e){return typeof e=="string"&&on.test(e.trim())}function H(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 on,j=l(()=>{"use strict";on=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});var sn,an,Zo,or,de=l(()=>{"use strict";sn="claude-sonnet-5-5",an="claude-opus-5-5",Zo={[sn]:"claude-sonnet-4-6",[an]:"claude-opus-4-8"},or=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function fe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ln(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 sr(e){if(e.event==="step_update"&&fe(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"||!fe(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=fe(r.usage)?ln(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 ir=l(()=>{"use strict"});function pe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ar(){return{assistantText:""}}function un(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function cn(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=(pe(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 dn(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function lr(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return un(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!dn(e))return null;let t=pe(e.stats)?cn(e.stats):void 0;if(e.status==="error"){let o=pe(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 ur=l(()=>{"use strict"});import{existsSync as fn,readFileSync as pn}from"node:fs";function mn(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function gn(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 hn(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",H(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function S(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function yn(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function bn(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 kn(e,r){let t=yn(r);if(!t)return;let n=S(t.input_tokens)??S(t.inputTokens)??S(t.prompt_tokens),o=S(t.output_tokens)??S(t.outputTokens)??S(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=bn(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Rn(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 u=a,p=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:p,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function xn(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function cr(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!fn(e))return r;let t=pn(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean),n=null,o=ar();for(let s of t){let i=B(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 d=i.item;if(d&&typeof d=="object"&&!Array.isArray(d)){let m=d;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=mn(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 d=i.event.content_block;d?.type==="tool_use"&&(r.currentTool=String(d.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let d=i.message.content;if(Array.isArray(d)){let m=d.find(h=>h?.type==="tool_use");m&&(r.currentTool=String(m.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let d=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=gn(d);m&&(r.currentTool=m)}let u=Rn(i);u&&xn(r,tr({command:u.command,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,interleavedOutput:u.interleaved}));let p=sr(i),f=p?null:lr(i,o),c=p??f;if(c?.currentTool&&(r.currentTool=c.currentTool),c?.usage&&(r.usage={...r.usage??{},...c.usage}),c?.terminal?c.terminal.ok?r.finalResult=c.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=c.terminal.error):i.type==="result"&&hn(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let d=i.error;r.error=typeof d?.message=="string"?d.message:"provider turn failed"}kn(r,i)}return r}var dr=l(()=>{"use strict";nr();g();j();de();ir();ur()});var k=l(()=>{"use strict"});var Sn,gs,En,hs,fr=l(()=>{"use strict";Sn=["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"],gs=new Set(Sn),En=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],hs=new Set(En)});import{spawnSync as mr}from"node:child_process";function _n(e,r,t={}){let n=mr("git",r,ie({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=vn(e,r,n);if(t.throwError)throw new Error(o);se(o)}return n.stdout||""}function vn(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 gr(e){return _n(e,["status","--short"],{allowFailure:!0}).split(`
|
|
8
|
+
`).map(r=>r.trim()).filter(Boolean)}function I(e,r){try{let t=mr("git",r,ie({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function pr(e,r,t){let n=I(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 hr(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 E(n,"missing worktree path");let s=I(e,["rev-parse","HEAD"]);if(s.status!==0)return E(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let d=I(e,["rev-parse",n]);if(d.status!==0)return E(n,d.error||d.stderr||d.stdout||`failed to resolve ${n}`,s.stdout.trim());i=d.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 u=pr(e,i,a),p=pr(e,a,i),f=u.error||p.error||void 0;if(u.isAncestor==null||p.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:p.isAncestor,relation:"unknown",...f?{error:f}:{}};let c=u.isAncestor?"ahead":p.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:p.isAncestor,relation:c,...f?{error:f}:{}}}function E(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var V=l(()=>{"use strict";k();g();fr()});var me=l(()=>{"use strict";V()});var ge=l(()=>{"use strict";V();k();me()});var yr=l(()=>{"use strict"});var br=l(()=>{"use strict";yr()});var he=l(()=>{"use strict";g()});var R=l(()=>{"use strict"});var G=l(()=>{"use strict"});var kr=l(()=>{"use strict"});var $s,Hs,ye=l(()=>{"use strict";$s=25*1024*1024*1024,Hs=12*1024*1024*1024});var Js,zs,Rr=l(()=>{"use strict";ye();Js=5*1024*1024*1024,zs=10*1024*1024*1024});var ri,ti,be=l(()=>{"use strict";Rr();ye();ri=30*1024*1024*1024,ti=15*1024*1024*1024});var xr=l(()=>{"use strict";T();g()});var Er=l(()=>{"use strict";N();g()});var An,wn,vr=l(()=>{"use strict";kr();_();R();G();z();be();T();xr();Er();g();An=500*1024*1024,wn=4*1024*1024*1024});var z=l(()=>{"use strict";vr()});import{homedir as In}from"node:os";import Tn from"node:path";var Cr,xe=l(()=>{"use strict";Cr=Tn.join(In(),".kynver",".env")});var Ar=l(()=>{"use strict"});var wr=l(()=>{"use strict";Ar()});var Or=l(()=>{"use strict"});var Pr=l(()=>{"use strict";g()});var Se=l(()=>{"use strict";wr();Or();Pr()});var Ir=l(()=>{"use strict"});var Tr=l(()=>{"use strict";Ir()});var X=l(()=>{"use strict";xe();k();_();Se();Tr()});var Nr=l(()=>{"use strict";R();R()});var Kr=l(()=>{"use strict";xe();Se();X()});var Ee=l(()=>{"use strict"});var Wr=l(()=>{"use strict";g()});import Un from"node:path";var wa,_e=l(()=>{"use strict";k();Wr();wa=Un.join(".openclaw","harness")});var Z=l(()=>{"use strict";_();R();G();z();_e()});var Br=l(()=>{"use strict";ge();R();Nr();_();X();Kr();he();Ee();Z()});var Yn,za,Ur=l(()=>{"use strict";Yn=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],za=Yn.join("|")});var Mr=l(()=>{"use strict";k()});var Fr=l(()=>{"use strict";Mr()});var Lr=l(()=>{"use strict"});var $r=l(()=>{"use strict";Lr()});import{homedir as Vn,totalmem as wl}from"node:os";import ve from"node:path";var Hr,Vl,Gl,Jl,zl,_=l(()=>{"use strict";ge();k();me();br();he();R();G();z();be();X();Br();Ur();Z();Fr();Ee();$r();Hr=ve.join(Vn(),".kynver"),Vl=ve.join(Hr,"config.json"),Gl=ve.join(Hr,"credentials"),Jl=500*1024*1024,zl=4*1024*1024*1024});var jr=l(()=>{"use strict";_();_e();Z();g()});var T=l(()=>{"use strict";jr();g()});import{accessSync as cu,constants as du,existsSync as Gn,readFileSync as Jn}from"node:fs";import zn from"node:path";function qn(e){return zn.join(e,Xn)}function Zn(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Ce(e){if(!e)return null;let r=qn(e);if(!Gn(r))return null;try{let t=JSON.parse(Jn(r,"utf8")),n=t.oomEvidence;return{exitCode:Zn(t.exitCode),signal:typeof t.signal=="string"&&t.signal?t.signal:null,...typeof t.startedAt=="string"?{startedAt:t.startedAt}:{},...typeof t.endedAt=="string"?{endedAt:t.endedAt}:{},...typeof t.childPid=="number"?{childPid:t.childPid}:{},...typeof t.spawnError=="string"?{spawnError:t.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function Yr(e){if(!e)return null;let r=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${r}`:e.exitCode===null?null:`exited with code ${e.exitCode}${r}`}var Xn,pu,Ae=l(()=>{"use strict";Xn="exit.json";pu=String.raw`"use strict";
|
|
9
9
|
const cp = require("child_process"), fs = require("fs");
|
|
10
10
|
const argv = process.argv.slice(1);
|
|
11
11
|
const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
|
|
@@ -69,4 +69,4 @@ child.on("error", (e) => {
|
|
|
69
69
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
70
70
|
});
|
|
71
71
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
72
|
-
`});function Ce(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&zn.has(r)}function Ae(e){return!!(e&&Gn.test(e))}function Hr(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Ce(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||Ae(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":Lr.test(r)||Lr.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function jr(e){let r=[Jn(e.stopClass)],t=$r(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function Jn(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}var Gn,Lr,zn,Yr=l(()=>{"use strict";T();g();ve();Gn=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,Lr=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,zn=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"])});function Vr(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function we(e){let r=(e??"").trim();if(!r)return null;if(P(r))return{blocked:!0,reason:`provider authentication failed: ${Vr(r)}`};for(let t of Xn)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Vr(r)}`};return null}var Xn,Gr=l(()=>{"use strict";j();Xn=[{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 zr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function qn(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 Zn(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:zr(e.head)}function Qn(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 Jr(e){if(e.alive||qn(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=zr(e.headCommit)??Zn(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:Qn(s,r,t)}}var Xr=l(()=>{"use strict"});import{existsSync as eo,readFileSync as ro,statSync as Qr}from"node:fs";import Q from"node:path";function so(e,r=process.env){let t=e?no:to,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 io(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Oe(e){try{return Qr(e).mtimeMs}catch{return-1}}function ao(e){let r=Q.join(e,".git");try{if(Qr(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(ro(r,"utf8"));return t?Q.resolve(e,t[1].trim()):null}catch{return null}}function qr(e){let r=ao(e);return[Oe(e),r?Oe(Q.join(r,"HEAD")):-2,r?Oe(Q.join(r,"index")):-2].join(":")}function Zr(e,r){return{changedFiles:mr(e),gitAncestry:pr(e,{base:r.base,baseCommit:r.baseCommit})}}function lo(e,r){for(k.delete(e),k.set(e,r);k.size>oo;){let t=k.keys().next().value;if(t===void 0)break;k.delete(t)}}function et(e,r,t){let n=io(r);if(!e||!e.trim())return K.missingWorktree++,{changedFiles:[],gitAncestry:_(n,"missing worktree path")};let o=`${e}\0${n}`;if(!eo(e))return k.delete(o),K.missingWorktree++,{changedFiles:[],gitAncestry:_(n,`worktree no longer exists: ${e}`)};if(t.alive)return k.delete(o),K.liveProbes++,Zr(e,r);let s=t.ttlMs??so(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=qr(e),u=k.get(o);if(s>0&&u&&u.fingerprint===a&&i<u.expiresAt)return K.hits++,u.probe;K.misses++;let p=Zr(e,r);if(s>0){let m=.8+.4*(t.random??Math.random)();lo(o,{fingerprint:qr(e),expiresAt:i+Math.round(s*m),probe:p})}return p}var to,no,oo,k,K,rt=l(()=>{"use strict";V();to=10*6e4,no=60*6e4,oo=2048,k=new Map,K={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function W(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function uo(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 co(e){if(W(e.headCommit)||W(e.prUrl)||W(e.artifactBundlePath)||W(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&W(r.head))}function tt(e){return uo(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:co(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 nt(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var ot=l(()=>{"use strict"});function Pe(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 st(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function ee(e){let r=e.trim();if(!r)return null;let t=Pe(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let m=Pe(s[1]??"");m&&n.push(m)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let m=Pe(r.slice(i,a+1));m&&n.push(m)}if(n.length===0)return null;let u=n[n.length-1],p=st(u);for(let m of n){let c=st(m);c>p&&(u=m,p=c)}return u}var Ie=l(()=>{"use strict"});function it(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 at(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function mo(e){return new Set(e.map(r=>at(it(r)??r)).filter(Boolean))}function lt(e,r,t){let n=it(e)??e;if(!n)return"unrelated";let o=at(n);return mo(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var ut=l(()=>{"use strict"});function v(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function po(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function x(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:v(e)}function re(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function ct(e){let r=null;if(typeof e=="string"){let o=ee(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=x(String(s.prUrl??s.pr_url??"")),a=v(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:v(s.mergeCommit??s.merge_commit),reason:v(s.reason)})}return n}function dt(e,r){let t=[],n=x(v(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=x(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function mt(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(!po(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?x(v(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?x(r.targetPrUrls[0]):null):null;if(s){let c=dt(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of c)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let h=ct(n).find(y=>y.prUrl===s);if(!h||h.outcome!=="merged"&&!(h.reason?.trim()&&(h.outcome==="skipped"||h.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=ct(n),a=new Map(i.map(c=>[re(c.prUrl),c])),u=new Set(r.targetPrUrls.map(c=>re(x(c)??c)).filter(Boolean)),p=dt(t,n);if(r.landingOnly)for(let c of p){let d=a.get(re(c)),f=lt(c,r.targetPrUrls,d);if(!(f==="contract"||f==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${c}`}:{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 m=[];for(let c of r.targetPrUrls){let d=re(x(c)??c),f=a.get(d);if(!f){m.push(d);continue}f.outcome!=="merged"&&!f.reason?.trim()&&m.push(d)}return m.length>0?{blocked:!0,reason:m.every(c=>a.has(c))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${m.join(", ")}`}:{blocked:!1}}function pt(e){if(e.blocked)return e.detail??e.reason}var ft=l(()=>{"use strict";Ie();ut()});function go(e){let r=Date.now();if(e.providerTerminalError||H(e.finalResult)||e.finalResult&&e.error?.trim()||P(e.error)||P(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:we(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!gt(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&yo(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=nt(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=mt({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=pt(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(ho(e))return{state:"done",reason:"empty abandoned worker record"};let o=we(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Jr({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let u=e.error?.trim();return{state:"needs_attention",reason:u?`${s.attentionReason} (${u})`:s.attentionReason}}let i=e.error?.trim(),a=Ae(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>fo)return{state:"needs_attention",reason:`no first stream event ${ae(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>te?{state:"stale",reason:`no log/event/heartbeat activity for ${ae(n)}s`}:{state:"ok",reason:"recent activity"}}function gt(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function ho(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 yo(e){let r=null;if(typeof e=="string"?r=ee(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 ko(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Le(t))}function bo(e,r={}){let t=ar(e.stdoutPath),n=He(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=ko(e,t.finalResult,n),i=o?!1:A(e.pid),a=U(e.stdoutPath),u=U(e.stderrPath),p=U(e.heartbeatPath),{changedFiles:m,gitAncestry:c}=et(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),d=Fe([t.lastEventAt,n.lastHeartbeatAt,M(e.stdoutPath),M(e.stderrPath),M(e.heartbeatPath)]),f=i?null:Ee(e.workerDir),h=s&&!Ce(s)?s:null,y=t.error||!i&&!s&&F(e.stderrPath,10).trim()||void 0,Te=y||!i&&s&&!h&&F(e.stderrPath,10).trim()||void 0,Ne=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,Ke=gt(Ne)?null:Ne,St=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,B=go({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:p,lastActivityAt:d,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:m,gitAncestry:c,completionBlocker:Ke,landingContract:St,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),_t=Ke||B.state==="blocked"?"blocked":o||B.state==="done"?"done":s?"exited":i?"running":"exited",ne=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,Et=Hr({alive:i,finalResult:s,error:Te??null,stale:B.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:f}),C=ne&&!i&&!h?ne:Et,vt=C==="running"||C==="finished"?null:(ne===C?e.stopReason:void 0)??jr({stopClass:C,exit:f,error:Te??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:_t,stopClass:C,stopReason:vt,exit:f,attention:B,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:p,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:d,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:m,gitAncestry:c,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 ht(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function yt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var fo,te,N=l(()=>{"use strict";je();lr();Yr();ve();j();Gr();Xr();rt();ot();ft();Ie();g();fo=18e4,te=6e5});N();var kt="kynver-harness:",Ro="@runner:";function bt(e){return e?.trim()?e.trim():null}function xo(e){let r=bt(e);if(!r?.startsWith(kt))return null;let t=r.slice(kt.length),n=t.indexOf(Ro);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Rt(e,r){let t=bt(r);return t?xo(e)===t:!1}N();g();function So(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Rt(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=n.leaseToken?.trim()??"";if(n.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>te?{health:"stale",reason:`heartbeat older than ${Math.floor(te/1e3)}s`}:t.alive&&r.pid&&!A(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}T();function xt(e){return!!e.completionReportedAt?.trim()}N();function _o(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),xt(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),yt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=ht(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}export{_o as assessAutoCompleteEligibility,So as classifyWorkerHealth,bo as computeWorkerStatus};
|
|
72
|
+
`});function we(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&eo.has(r)}function Oe(e){return!!(e&&Qn.test(e))}function Gr(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!we(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||Oe(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":Vr.test(r)||Vr.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function Jr(e){let r=[ro(e.stopClass)],t=Yr(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function ro(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}var Qn,Vr,eo,zr=l(()=>{"use strict";T();g();Ae();Qn=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,Vr=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,eo=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"])});function Xr(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Pe(e){let r=(e??"").trim();if(!r)return null;if(P(r))return{blocked:!0,reason:`provider authentication failed: ${Xr(r)}`};for(let t of to)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Xr(r)}`};return null}var to,qr=l(()=>{"use strict";j();de();to=[{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:or,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Zr(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function no(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 oo(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Zr(e.head)}function so(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 Qr(e){if(e.alive||no(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Zr(e.headCommit)??oo(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:so(s,r,t)}}var et=l(()=>{"use strict"});import{existsSync as io,readFileSync as ao,statSync as nt}from"node:fs";import Q from"node:path";function fo(e,r=process.env){let t=e?uo:lo,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 po(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Ie(e){try{return nt(e).mtimeMs}catch{return-1}}function mo(e){let r=Q.join(e,".git");try{if(nt(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(ao(r,"utf8"));return t?Q.resolve(e,t[1].trim()):null}catch{return null}}function rt(e){let r=mo(e);return[Ie(e),r?Ie(Q.join(r,"HEAD")):-2,r?Ie(Q.join(r,"index")):-2].join(":")}function tt(e,r){return{changedFiles:gr(e),gitAncestry:hr(e,{base:r.base,baseCommit:r.baseCommit})}}function go(e,r){for(b.delete(e),b.set(e,r);b.size>co;){let t=b.keys().next().value;if(t===void 0)break;b.delete(t)}}function ot(e,r,t){let n=po(r);if(!e||!e.trim())return K.missingWorktree++,{changedFiles:[],gitAncestry:E(n,"missing worktree path")};let o=`${e}\0${n}`;if(!io(e))return b.delete(o),K.missingWorktree++,{changedFiles:[],gitAncestry:E(n,`worktree no longer exists: ${e}`)};if(t.alive)return b.delete(o),K.liveProbes++,tt(e,r);let s=t.ttlMs??fo(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=rt(e),u=b.get(o);if(s>0&&u&&u.fingerprint===a&&i<u.expiresAt)return K.hits++,u.probe;K.misses++;let p=tt(e,r);if(s>0){let f=.8+.4*(t.random??Math.random)();go(o,{fingerprint:rt(e),expiresAt:i+Math.round(s*f),probe:p})}return p}var lo,uo,co,b,K,st=l(()=>{"use strict";V();lo=10*6e4,uo=60*6e4,co=2048,b=new Map,K={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function W(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ho(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 yo(e){if(W(e.headCommit)||W(e.prUrl)||W(e.artifactBundlePath)||W(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&W(r.head))}function it(e){return ho(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:yo(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 at(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var lt=l(()=>{"use strict"});function Te(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 ut(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function ee(e){let r=e.trim();if(!r)return null;let t=Te(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let f=Te(s[1]??"");f&&n.push(f)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let f=Te(r.slice(i,a+1));f&&n.push(f)}if(n.length===0)return null;let u=n[n.length-1],p=ut(u);for(let f of n){let c=ut(f);c>p&&(u=f,p=c)}return u}var Ne=l(()=>{"use strict"});function ct(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 dt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function bo(e){return new Set(e.map(r=>dt(ct(r)??r)).filter(Boolean))}function ft(e,r,t){let n=ct(e)??e;if(!n)return"unrelated";let o=dt(n);return bo(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var pt=l(()=>{"use strict"});function v(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ko(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function x(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:v(e)}function re(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function mt(e){let r=null;if(typeof e=="string"){let o=ee(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=x(String(s.prUrl??s.pr_url??"")),a=v(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:v(s.mergeCommit??s.merge_commit),reason:v(s.reason)})}return n}function gt(e,r){let t=[],n=x(v(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=x(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function ht(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(!ko(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?x(v(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?x(r.targetPrUrls[0]):null):null;if(s){let c=gt(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of c)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let h=mt(n).find(y=>y.prUrl===s);if(!h||h.outcome!=="merged"&&!(h.reason?.trim()&&(h.outcome==="skipped"||h.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=mt(n),a=new Map(i.map(c=>[re(c.prUrl),c])),u=new Set(r.targetPrUrls.map(c=>re(x(c)??c)).filter(Boolean)),p=gt(t,n);if(r.landingOnly)for(let c of p){let d=a.get(re(c)),m=ft(c,r.targetPrUrls,d);if(!(m==="contract"||m==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${c}`}:{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 f=[];for(let c of r.targetPrUrls){let d=re(x(c)??c),m=a.get(d);if(!m){f.push(d);continue}m.outcome!=="merged"&&!m.reason?.trim()&&f.push(d)}return f.length>0?{blocked:!0,reason:f.every(c=>a.has(c))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${f.join(", ")}`}:{blocked:!1}}function yt(e){if(e.blocked)return e.detail??e.reason}var bt=l(()=>{"use strict";Ne();pt()});function xo(e){let r=Date.now();if(e.providerTerminalError||H(e.finalResult)||e.finalResult&&e.error?.trim()||P(e.error)||P(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Pe(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!kt(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Eo(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=it(o);if(s.blocked){let i=at(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=ht({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=yt(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(So(e))return{state:"done",reason:"empty abandoned worker record"};let o=Pe(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Qr({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let u=e.error?.trim();return{state:"needs_attention",reason:u?`${s.attentionReason} (${u})`:s.attentionReason}}let i=e.error?.trim(),a=Oe(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Ro)return{state:"needs_attention",reason:`no first stream event ${ae(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>te?{state:"stale",reason:`no log/event/heartbeat activity for ${ae(n)}s`}:{state:"ok",reason:"recent activity"}}function kt(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function So(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 Eo(e){let r=null;if(typeof e=="string"?r=ee(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 _o(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??je(t))}function vo(e,r={}){let t=cr(e.stdoutPath),n=Ye(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=_o(e,t.finalResult,n),i=o?!1:A(e.pid),a=U(e.stdoutPath),u=U(e.stderrPath),p=U(e.heartbeatPath),{changedFiles:f,gitAncestry:c}=ot(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),d=$e([t.lastEventAt,n.lastHeartbeatAt,M(e.stdoutPath),M(e.stderrPath),M(e.heartbeatPath)]),m=i?null:Ce(e.workerDir),h=s&&!we(s)?s:null,y=t.error||!i&&!s&&F(e.stderrPath,10).trim()||void 0,Ke=y||!i&&s&&!h&&F(e.stderrPath,10).trim()||void 0,We=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,De=kt(We)?null:We,Ct=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,D=xo({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:p,lastActivityAt:d,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:f,gitAncestry:c,completionBlocker:De,landingContract:Ct,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),At=De||D.state==="blocked"?"blocked":o||D.state==="done"?"done":s?"exited":i?"running":"exited",ne=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,wt=Gr({alive:i,finalResult:s,error:Ke??null,stale:D.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),C=ne&&!i&&!h?ne:wt,Ot=C==="running"||C==="finished"?null:(ne===C?e.stopReason:void 0)??Jr({stopClass:C,exit:m,error:Ke??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:At,stopClass:C,stopReason:Ot,exit:m,attention:D,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:p,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:d,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:f,gitAncestry:c,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 Rt(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function xt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Ro,te,N=l(()=>{"use strict";Ve();dr();zr();Ae();j();qr();et();st();lt();bt();Ne();g();Ro=18e4,te=6e5});N();var St="kynver-harness:",Co="@runner:";function Et(e){return e?.trim()?e.trim():null}function Ao(e){let r=Et(e);if(!r?.startsWith(St))return null;let t=r.slice(St.length),n=t.indexOf(Co);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function _t(e,r){let t=Et(r);return t?Ao(e)===t:!1}N();g();function wo(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!_t(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=n.leaseToken?.trim()??"";if(n.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>te?{health:"stale",reason:`heartbeat older than ${Math.floor(te/1e3)}s`}:t.alive&&r.pid&&!A(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}T();function vt(e){return!!e.completionReportedAt?.trim()}N();function Oo(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),vt(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),xt(t)&&n.push(t.attention.reason||"landing gate blocked");let o=Rt(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}export{Oo as assessAutoCompleteEligibility,wo as classifyWorkerHealth,vo as computeWorkerStatus};
|