@kynver-app/runtime 0.2.148 → 0.2.151
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 +2 -0
- package/dist/cli.js +224 -214
- package/dist/daemon-tick-thread.js +49 -47
- package/dist/desktop-entry.js +168 -164
- package/dist/index.js +245 -235
- package/dist/local-run-store/index.js +11 -10
- package/dist/server/dispatch-routing.js +4 -4
- package/dist/server/model-routing.js +4 -4
- package/dist/server/orchestration.js +2 -2
- 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 ze}from"node:os";import Xe from"node:path";function Et(e){return e==="~"?ze():e.startsWith("~/")||e.startsWith("~\\")?Xe.join(ze(),e.slice(2)):e}function v(e){return Xe.resolve(Et(e))}var E=a(()=>{"use strict"});function _(e=process.platform){return e!=="win32"}var Ze=a(()=>{"use strict"});var d=a(()=>{"use strict";Ze()});var St,Fo,Ct,$o,ve=a(()=>{"use strict";St=["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"],Fo=new Set(St),Ct=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],$o=new Set(Ct)});var re=a(()=>{"use strict";E();d();ve()});import{homedir as Qe}from"node:os";import be from"node:path";function It(e=Qe()){return be.join(e,".kynver",Pt)}function rr(e,r=Qe()){return be.resolve(e)===be.resolve(It(r))}var Pt,er,Ee=a(()=>{"use strict";re();Pt="workspace",er="main"});var Se=a(()=>{"use strict";re();E();Ee()});import{existsSync as or,readFileSync as Nt}from"node:fs";import S from"node:path";function Dt(e){return e.includes("/")||e.includes("\\")}function Kt(e){return(e.PATHEXT||Tt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function Wt(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function Mt(e,r={}){let t=r.env??process.env,n=r.exists??or,o=Kt(t),s=S.win32.extname(e)!=="",i=l=>s?[l]:o.map(c=>`${l}${c}`);if(Dt(e)||S.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of Wt(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 nr(e){return e.replace(/^[\\/]+/,"")}function Ut(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=Bt.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=tr.exec(n);if(o)return nr(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?tr.exec(i):null;if(l)return nr(l[1])}return null}function Lt(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=Mt(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??(ke=>Nt(ke,"utf8")),i=r.exists??or,l;try{l=s(n)}catch{throw new Y(n)}let c=Ut(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 V=S.win32.join(u,"node.exe");return{executable:i(V)?V:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function b(e,r,t={}){let n=Lt(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Y,Tt,tr,Bt,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},Tt=".COM;.EXE;.BAT;.CMD";tr=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,Bt=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var ir=a(()=>{"use strict";C()});var Ce=a(()=>{"use strict";d()});var O=a(()=>{"use strict"});var te=a(()=>{"use strict"});var sr=a(()=>{"use strict"});var gi,hi,Oe=a(()=>{"use strict";gi=25*1024*1024*1024,hi=12*1024*1024*1024});var Ri,vi,ar=a(()=>{"use strict";Oe();Ri=5*1024*1024*1024,vi=10*1024*1024*1024});var Ai,wi,Ae=a(()=>{"use strict";ar();Oe();Ai=30*1024*1024*1024,wi=15*1024*1024*1024});var lr=a(()=>{"use strict";d()});import Ft from"node:path";var Bi,Pe=a(()=>{"use strict";E();lr();Bi=Ft.join(".openclaw","harness")});var oe=a(()=>{"use strict";A();O();te();ie();Pe()});var dr=a(()=>{"use strict";A();Pe();oe();d()});var ae=a(()=>{"use strict";dr();d()});var mr=a(()=>{"use strict";ae();d()});var fr=a(()=>{"use strict"});var gr=a(()=>{"use strict";fr();d()});var hr=a(()=>{"use strict"});var yr=a(()=>{"use strict";hr()});var le=a(()=>{"use strict"});var k,w,xs,G=a(()=>{"use strict";k="claude-sonnet-5-5",w="claude-opus-5-5",xs={[k]:"claude-sonnet-4-6",[w]:"claude-opus-4-8"}});var _r=a(()=>{"use strict"});var kr=a(()=>{"use strict"});var xr=a(()=>{"use strict";yr();d();le();G();_r();kr()});var Us,x=a(()=>{"use strict";Us=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);
|
|
@@ -64,8 +64,8 @@ child.on("error", (e) => {
|
|
|
64
64
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
65
65
|
});
|
|
66
66
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
67
|
-
`});var xr=a(()=>{"use strict";ae();d();x()});var Rr=a(()=>{"use strict";le();G()});var vr=a(()=>{"use strict"});var ea,ra,br=a(()=>{"use strict";re();ea=10*6e4,ra=60*6e4});var Er=a(()=>{"use strict"});var Pe=a(()=>{"use strict"});var Sr=a(()=>{"use strict"});var Cr=a(()=>{"use strict";Pe();Sr()});var Or=a(()=>{"use strict";fr();kr();xr();x();le();Rr();vr();br();Er();Cr();Pe();d()});var Ar=a(()=>{"use strict";Or();d()});var en,rn,wr=a(()=>{"use strict";ir();A();O();te();ie();Oe();ae();pr();Ar();d();en=500*1024*1024,rn=4*1024*1024*1024});var ie=a(()=>{"use strict";wr()});import{homedir as tn}from"node:os";import nn from"node:path";var Pr,Ie=a(()=>{"use strict";Pr=nn.join(tn(),".kynver",".env")});var Ir=a(()=>{"use strict"});var Nr=a(()=>{"use strict";Ir()});var Tr=a(()=>{"use strict"});var Dr=a(()=>{"use strict";d()});var Ne=a(()=>{"use strict";Nr();Tr();Dr()});var Kr=a(()=>{"use strict"});var Wr=a(()=>{"use strict";Kr()});var ce=a(()=>{"use strict";Ie();E();A();Ne();Wr()});var Mr=a(()=>{"use strict";O();O()});var Br=a(()=>{"use strict";Ie();Ne();ce()});var Te=a(()=>{"use strict"});var Ur=a(()=>{"use strict";Ee();O();Mr();A();ce();Br();Se();Te();oe()});function P(e){let r=e.trim().toLowerCase();return fn[r]??r}var Lr,mn,fn,ue=a(()=>{"use strict";Lr=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],mn=Lr.join("|"),fn={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var Fr=a(()=>{"use strict";E()});var $r=a(()=>{"use strict";Fr()});var Hr=a(()=>{"use strict"});var jr=a(()=>{"use strict";Hr()});import{existsSync as hn,mkdirSync as Hc,readFileSync as yn,writeFileSync as jc}from"node:fs";import{homedir as _n,totalmem as Yc}from"node:os";import De from"node:path";function kn(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function xn(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!er(v(r))?e:{...e,defaultBase:Qe}}function Rn(){if(!hn(Vr))return null;try{return JSON.parse(yn(Vr,"utf8"))}catch{return null}}function W(){let e=Rn();return e?xn(kn(e)):{}}var Yr,Vr,uu,du,pu,A=a(()=>{"use strict";Ee();E();be();or();Se();O();te();ie();Oe();ce();Ur();ue();oe();$r();Te();jr();Yr=De.join(_n(),".kynver"),Vr=De.join(Yr,"config.json"),uu=De.join(Yr,"credentials");du=500*1024*1024,pu=4*1024*1024*1024});var _t=/^claude[-_]/i,kt=/^(?:opus|sonnet|haiku)\b/i;function Ye(e){let r=e.trim();return _t.test(r)||kt.test(r)}function Ge(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ke(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function qe(e){return e.trim().toLowerCase().startsWith("gemini-")}function xt(e){return Ge(e)?"codex":Ye(e)?"claude":qe(e)?"gemini":(ke(e),"cursor")}function Rt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function vt(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?Ye(n)||Ge(n)||ke(n)||qe(n)?{lane:t,model:n,provider:xt(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?Rt(r)??vt(r):null}function xe(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ke(r.model)):!1}A();var Gr={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 Gr[e]}function qr(){return Object.values(Gr)}import{existsSync as bn}from"node:fs";import{homedir as En}from"node:os";import q from"node:path";C();import{createHash as Jr}from"node:crypto";import{statSync as vn}from"node:fs";import{spawnSync as zr}from"node:child_process";function y(e){try{let r=vn(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Jr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function B(e){return Jr("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]=b(e,r),i=zr(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 de(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=b(e,r);return zr(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 Sn="codex";function Cn(){let e=En();return[process.env.CODEX_HOME?.trim()?q.join(q.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,q.join(e,".codex","auth.json"),q.join(e,".config","codex","auth.json")].filter(t=>!!t)}function On(e){return q.dirname(e)}function An(e){let r,t;for(let n of Cn()){if(!bn(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:On(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 Xr(e=new Date().toISOString()){let r=g(Sn,["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}=An(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 wn}from"node:fs";import{homedir as Pn}from"node:os";import Ke from"node:path";function In(){let e=process.env.HERMES_HOME?.trim(),r=e?Ke.resolve(e):Ke.join(Pn(),".hermes");return Ke.join(r,"auth.json")}function pe(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=In(),o=wn(n),s=de(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=Xr(e);if(r.ready)return{...r,path:"codex_cli"};let t=pe(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"],Qr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function et(e,r){let t=M(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Nn(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=Qr[e.binding.authSource]-Qr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function We(e){let r=qr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&et(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Nn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return et(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 Tn}from"node:fs";import{homedir as Dn}from"node:os";import Kn from"node:path";var Wn="claude";function Mn(){let e=Dn();return[Kn.join(e,".claude",".credentials.json")]}function rt(e=new Date().toISOString()){let r=g(Wn,["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=Mn().find(i=>Tn(i)),o=de(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 Yn}from"node:fs";import{homedir as Vn}from"node:os";import L from"node:path";x();import{closeSync as qu,existsSync as $n,mkdirSync as Ju,openSync as zu,statSync as Xu,unlinkSync as Zu}from"node:fs";d();import U from"node:path";Re();import{existsSync as z,readdirSync as Bn}from"node:fs";import I from"node:path";var Un=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Ln(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 Fn(e){let r=I.join(e,"versions");if(!z(r))return null;let t=null,n=-1;for(let o of Bn(r,{withFileTypes:!0})){if(!o.isDirectory()||!Un.test(o.name))continue;let s=Ln(o.name);s==null||s<=n||(n=s,t=I.join(r,o.name))}return t}function Me(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(z(t)&&z(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Fn(r);if(!o)return null;let s=I.join(o,"node.exe"),i=I.join(o,"index.js");return!z(s)||!z(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function Hn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:_(),bundledVersionDir:t}}function tt(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&$n(U.join(U.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Me(U.dirname(e)):t?{nodeExe:e,indexJs:U.join(U.dirname(e),"index.js"),versionDir:U.dirname(e)}:Me();if(o)return Hn(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 jn}from"node:child_process";function Be(e,r=process.env){try{let t;try{t=tt(e)}catch{t={executable:e,prefixArgs:[]}}let n=jn(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 Ue(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=Vn();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 Gn="agent";function nt(e=new Date().toISOString()){let r=g(Gn,["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=Ue().find(l=>Yn(l)),o=Be(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 qn,readFileSync as Jn}from"node:fs";import{homedir as zn}from"node:os";import Le from"node:path";var Xn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Zn(){let e=process.env.HERMES_HOME?.trim(),r=e?Le.resolve(e):Le.join(zn(),".hermes");return Le.join(r,".env")}function Qn(e){try{let r=Jn(e,"utf8"),t=[];for(let n of Xn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function ot(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=qn(n),s=o?Qn(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 it(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=J(r),n={codex:t,cursor:nt(r),claude:rt(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:ot(r),hermesOpenAiCodex:pe(r),codexAdapterPath:t.path,readyCount:o}}var eo=[/\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],ro=[/\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 Fe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function to(e){let r=Fe(e,"executorRef").toLowerCase(),t=Fe(e,"title").toLowerCase(),n=Fe(e,"description").toLowerCase(),o=`${r}
|
|
67
|
+
`});var Rr=a(()=>{"use strict";ae();d();x()});var vr=a(()=>{"use strict";le();G()});var br=a(()=>{"use strict"});var ra,ta,Er=a(()=>{"use strict";re();ra=10*6e4,ta=60*6e4});var Sr=a(()=>{"use strict"});var Ie=a(()=>{"use strict"});var Cr=a(()=>{"use strict"});var Or=a(()=>{"use strict";Ie();Cr()});var Ar=a(()=>{"use strict";gr();xr();Rr();x();le();vr();br();Er();Sr();Or();Ie();d()});var wr=a(()=>{"use strict";Ar();d()});var rn,tn,Pr=a(()=>{"use strict";sr();A();O();te();ie();Ae();ae();mr();wr();d();rn=500*1024*1024,tn=4*1024*1024*1024});var ie=a(()=>{"use strict";Pr()});import{homedir as nn}from"node:os";import on from"node:path";var Ir,Ne=a(()=>{"use strict";Ir=on.join(nn(),".kynver",".env")});var Nr=a(()=>{"use strict"});var Tr=a(()=>{"use strict";Nr()});var Dr=a(()=>{"use strict"});var Kr=a(()=>{"use strict";d()});var Te=a(()=>{"use strict";Tr();Dr();Kr()});var Wr=a(()=>{"use strict"});var Mr=a(()=>{"use strict";Wr()});var ce=a(()=>{"use strict";Ne();E();A();Te();Mr()});var Br=a(()=>{"use strict";O();O()});var Ur=a(()=>{"use strict";Ne();Te();ce()});var De=a(()=>{"use strict"});var Lr=a(()=>{"use strict";Se();O();Br();A();ce();Ur();Ce();De();oe()});function P(e){let r=e.trim().toLowerCase();return gn[r]??r}var Fr,fn,gn,ue=a(()=>{"use strict";Fr=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],fn=Fr.join("|"),gn={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var $r=a(()=>{"use strict";E()});var Hr=a(()=>{"use strict";$r()});var jr=a(()=>{"use strict"});var Vr=a(()=>{"use strict";jr()});import{existsSync as yn,mkdirSync as jc,readFileSync as _n,writeFileSync as Vc}from"node:fs";import{homedir as kn,totalmem as Gc}from"node:os";import Ke from"node:path";function xn(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function Rn(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!rr(v(r))?e:{...e,defaultBase:er}}function vn(){if(!yn(Yr))return null;try{return JSON.parse(_n(Yr,"utf8"))}catch{return null}}function W(){let e=vn();return e?Rn(xn(e)):{}}var Gr,Yr,du,pu,mu,A=a(()=>{"use strict";Se();E();Ee();ir();Ce();O();te();ie();Ae();ce();Lr();ue();oe();Hr();De();Vr();Gr=Ke.join(kn(),".kynver"),Yr=Ke.join(Gr,"config.json"),du=Ke.join(Gr,"credentials");pu=500*1024*1024,mu=4*1024*1024*1024});var kt=/^claude[-_]/i,xt=/^(?:opus|sonnet|haiku)\b/i;function Ge(e){let r=e.trim();return kt.test(r)||xt.test(r)}function qe(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function xe(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Je(e){return e.trim().toLowerCase().startsWith("gemini-")}function Rt(e){return qe(e)?"codex":Ge(e)?"claude":Je(e)?"gemini":(xe(e),"cursor")}function vt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function bt(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?Ge(n)||qe(n)||xe(n)||Je(n)?{lane:t,model:n,provider:Rt(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?vt(r)??bt(r):null}function Re(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!xe(r.model)):!1}A();var qr={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 qr[e]}function Jr(){return Object.values(qr)}import{existsSync as En}from"node:fs";import{homedir as Sn}from"node:os";import q from"node:path";C();import{createHash as zr}from"node:crypto";import{statSync as bn}from"node:fs";import{spawnSync as Xr}from"node:child_process";function y(e){try{let r=bn(e),t=`${e}|${r.size}|${r.mtimeMs}`;return zr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function B(e){return zr("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]=b(e,r),i=Xr(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 de(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=b(e,r);return Xr(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 Cn="codex";function On(){let e=Sn();return[process.env.CODEX_HOME?.trim()?q.join(q.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,q.join(e,".codex","auth.json"),q.join(e,".config","codex","auth.json")].filter(t=>!!t)}function An(e){return q.dirname(e)}function wn(e){let r,t;for(let n of On()){if(!En(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:An(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 Zr(e=new Date().toISOString()){let r=g(Cn,["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}=wn(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 Pn}from"node:fs";import{homedir as In}from"node:os";import We from"node:path";function Nn(){let e=process.env.HERMES_HOME?.trim(),r=e?We.resolve(e):We.join(In(),".hermes");return We.join(r,"auth.json")}function pe(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=Nn(),o=Pn(n),s=de(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=Zr(e);if(r.ready)return{...r,path:"codex_cli"};let t=pe(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 Qr=["low","medium","high"],et={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function rt(e,r){let t=M(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Tn(e,r){let t=M(e.providerId),n=M(r.providerId),o=Qr.indexOf(t.costTier)-Qr.indexOf(n.costTier);if(o!==0)return o;let s=et[e.binding.authSource]-et[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Me(e){let r=Jr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&rt(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Tn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return rt(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 Dn}from"node:fs";import{homedir as Kn}from"node:os";import Wn from"node:path";var Mn="claude";function Bn(){let e=Kn();return[Wn.join(e,".claude",".credentials.json")]}function tt(e=new Date().toISOString()){let r=g(Mn,["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=Bn().find(i=>Dn(i)),o=de(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 Gn}from"node:fs";import{homedir as Yn}from"node:os";import L from"node:path";x();import{closeSync as zu,existsSync as Hn,mkdirSync as Xu,openSync as Zu,statSync as Qu,unlinkSync as ed}from"node:fs";d();import U from"node:path";ve();import{existsSync as z,readdirSync as Un}from"node:fs";import I from"node:path";var Ln=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Fn(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 $n(e){let r=I.join(e,"versions");if(!z(r))return null;let t=null,n=-1;for(let o of Un(r,{withFileTypes:!0})){if(!o.isDirectory()||!Ln.test(o.name))continue;let s=Fn(o.name);s==null||s<=n||(n=s,t=I.join(r,o.name))}return t}function Be(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(z(t)&&z(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=$n(r);if(!o)return null;let s=I.join(o,"node.exe"),i=I.join(o,"index.js");return!z(s)||!z(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function jn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:_(),bundledVersionDir:t}}function nt(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Hn(U.join(U.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Be(U.dirname(e)):t?{nodeExe:e,indexJs:U.join(U.dirname(e),"index.js"),versionDir:U.dirname(e)}:Be();if(o)return jn(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 Vn}from"node:child_process";function Ue(e,r=process.env){try{let t;try{t=nt(e)}catch{t={executable:e,prefixArgs:[]}}let n=Vn(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 Le(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=Yn();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 qn="agent";function ot(e=new Date().toISOString()){let r=g(qn,["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=Le().find(l=>Gn(l)),o=Ue(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 Jn,readFileSync as zn}from"node:fs";import{homedir as Xn}from"node:os";import Fe from"node:path";var Zn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Qn(){let e=process.env.HERMES_HOME?.trim(),r=e?Fe.resolve(e):Fe.join(Xn(),".hermes");return Fe.join(r,".env")}function eo(e){try{let r=zn(e,"utf8"),t=[];for(let n of Zn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function it(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=Qn(),o=Jn(n),s=o?eo(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 st(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=J(r),n={codex:t,cursor:ot(r),claude:tt(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:it(r),hermesOpenAiCodex:pe(r),codexAdapterPath:t.path,readyCount:o}}var ro=[/\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],to=[/\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 $e(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function no(e){let r=$e(e,"executorRef").toLowerCase(),t=$e(e,"title").toLowerCase(),n=$e(e,"description").toLowerCase(),o=`${r}
|
|
68
68
|
${t}
|
|
69
|
-
${n}`;return
|
|
69
|
+
${n}`;return ro.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":to.some(s=>s.test(o))?"low":"elevated"}function oo(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 io(e){let r=e.inventory??st();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function N(e){let r=oo({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 at(e){let r=e.task??{},t=no(r),n=io({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:J())}),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=Me({inventory:n,riskClass:t});return N(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 N({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 N({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 N({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=Me({inventory:n,riskClass:t});if(l)return N({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 N({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"}})}x();d();C();G();var lt="kynver",ct=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],so=ct.map(e=>`mcp__${lt}__${e}`);G();x();d();C();x();d();C();var fe="gpt-5.6-sol";var mp=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||fe;function lo(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||fe}var $=lo();x();d();var He="openai-compatible",Gp=600*1e3;x();d();C();var T="gemini";function D(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var H="gemini-api";var ym=600*1e3;var j="venice";var po="venice-uncensored-1-2";var mo="KYNVER_VENICE_DEFAULT_MODEL";function ge(e=process.env){return e[mo]?.trim()||po}var pt=k,Q="composer-2.5";function m(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function fo(e){if(!e)return;let r=m(e,"workerModelOverride")||m(e,"modelOverride");return r||`${m(e,"title")}
|
|
70
70
|
${m(e,"description")}
|
|
71
|
-
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
71
|
+
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function ut(e){return e.toLowerCase()}function _e(e=W()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||pt}function he(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-")?T:"cursor"}function go(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Q,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:T,rule:n&&n!==T?"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}:t==="venice"||t==="venice-ai"||t==="venice_ai"?{model:ge(),provider:j,rule:n&&n!==j?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function dt(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 ho=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function mt(e,r,t){return ho.has(e)?w:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?w:k}function ft(e){let r=ut(m(e,"executorRef")),t=m(e,"title").toLowerCase(),n=m(e,"priority")||"normal",o=ut(m(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=mt(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:He,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:venice")||r.startsWith("venice:")){let i=f(m(e,"executorRef"));return{provider:j,...i?.model?{model:i.model}:{model:ge()},rule:"lane:venice"}}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:T,...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 dt(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(dt(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=_e();return{model:s,provider:he(s),rule:"default:global"}}function yo(e){return e?f(m(e,"executorRef")):null}function _o(e){switch(P(e)){case T:case H:return D();case j:return ge();case"claude":return k;case"codex":return $;case"cursor":return Q;default:return}}var je="explicit:cli_provider",gt="config:worker_provider";function ht(e,r,t){let n=P(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:_o(n)??e.model,rule:t}}function ko(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==je?e:ht(e,t,je)}function xo(e,r){if(r.explicitProvider?.trim()||Ve(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=P(t);return n===F||n===e.provider?e:ht(e,n,gt)}function Ro(e){let r,t=yo(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=go(c,e.explicitProvider);u?r=u:r={model:c,provider:e.explicitProvider?.trim()||he(c),rule:"explicit:cli",requestedModel:c}}else if(n)r={model:n,provider:o||he(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&ye(e.task)){let c=fo(e.task),u,p;if(c)u=c,p="task:provider_override";else{let V=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Ye=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",ke=typeof e.task.title=="string"?e.task.title.toLowerCase():"";u=mt(V,Ye,ke),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=ft(e.task);r={...c,requestedModel:c.model}}else{let c=_e();r={model:c,provider:e.explicitProvider?.trim()||he(c),rule:"default:global",requestedModel:c}}r=ko(r,e.explicitProvider),r=xo(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=yt({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===je||i.rule===gt||R(i.provider)&&(e.explicitProviderIsOperatorOverride||ye(e.task))||i.provider===He||i.provider===T||i.provider===H||i.provider===j||i.provider==="codex")return i;let l=at({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 vo(e,r,t){return e||r||t||_e()||k}ue();ue();var F="cursor",bo=new Set(["claude","opus","anthropic"]),Eo=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ee(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function R(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return bo.has(r)?!0:r.includes("claude")||r.includes("opus")}function ye(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&R(r))return!0;let t=ee(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(ee(e,"executorRef"));if(n?.provider&&R(n.provider)||n?.model&&R(So(n.model)))return!0;let o=ee(e,"description");if(Eo.some(i=>i.test(o)))return!0;let s=ee(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function So(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Co(e,r){return{provider:F,model:Q,rule:`policy:cursor_default${r}`,requestedModel:e}}var Oo=["explicit:","executor_ref:","factory:","task:"];function Ao(e){return Oo.some(r=>e.startsWith(r))}function Ve(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||f(ee(e,"executorRef"))?.provider?!0:ye(e)}function yt(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&R(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||Ao(r.rule)||Ve(t)||!R(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Co(r.model,o)}function wo(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function _t(e){return e?.trim()||void 0}function Po(e){let r=wo(e.task),t=f(r),n=e.explicitProvider?.trim().toLowerCase(),o=_t(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=_t(e.routing.model),p={provider:c,model:u,rule:e.routing.rule};return s&&s!=="cursor"||r&&Re(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&&!R(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{Q as CURSOR_DEFAULT_MODEL,pt as GLOBAL_DEFAULT_MODEL,Po as assessDispatchModelGuard,Re as executorRefRequestsNonCursorWorker,ft as inferModelRoutingFromTask,f as parseExecutorRefRoutingIntent,_e as resolveGlobalDefaultModel,vo as resolveModelFallback,Ro as resolveWorkerLaunch};
|
|
@@ -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 ze}from"node:os";import Xe from"node:path";function Et(e){return e==="~"?ze():e.startsWith("~/")||e.startsWith("~\\")?Xe.join(ze(),e.slice(2)):e}function v(e){return Xe.resolve(Et(e))}var E=a(()=>{"use strict"});function _(e=process.platform){return e!=="win32"}var Ze=a(()=>{"use strict"});var d=a(()=>{"use strict";Ze()});var St,Fo,Ct,$o,ve=a(()=>{"use strict";St=["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"],Fo=new Set(St),Ct=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],$o=new Set(Ct)});var re=a(()=>{"use strict";E();d();ve()});import{homedir as Qe}from"node:os";import be from"node:path";function It(e=Qe()){return be.join(e,".kynver",Pt)}function rr(e,r=Qe()){return be.resolve(e)===be.resolve(It(r))}var Pt,er,Ee=a(()=>{"use strict";re();Pt="workspace",er="main"});var Se=a(()=>{"use strict";re();E();Ee()});import{existsSync as or,readFileSync as Nt}from"node:fs";import S from"node:path";function Dt(e){return e.includes("/")||e.includes("\\")}function Kt(e){return(e.PATHEXT||Tt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function Wt(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function Mt(e,r={}){let t=r.env??process.env,n=r.exists??or,o=Kt(t),s=S.win32.extname(e)!=="",i=l=>s?[l]:o.map(c=>`${l}${c}`);if(Dt(e)||S.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of Wt(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 nr(e){return e.replace(/^[\\/]+/,"")}function Ut(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=Bt.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=tr.exec(n);if(o)return nr(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?tr.exec(i):null;if(l)return nr(l[1])}return null}function Lt(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=Mt(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??(ke=>Nt(ke,"utf8")),i=r.exists??or,l;try{l=s(n)}catch{throw new Y(n)}let c=Ut(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 V=S.win32.join(u,"node.exe");return{executable:i(V)?V:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function b(e,r,t={}){let n=Lt(e,t);return[n.executable,[...n.prefixArgs,...r]]}var Y,Tt,tr,Bt,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},Tt=".COM;.EXE;.BAT;.CMD";tr=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,Bt=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var ir=a(()=>{"use strict";C()});var Ce=a(()=>{"use strict";d()});var O=a(()=>{"use strict"});var te=a(()=>{"use strict"});var sr=a(()=>{"use strict"});var gi,hi,Oe=a(()=>{"use strict";gi=25*1024*1024*1024,hi=12*1024*1024*1024});var Ri,vi,ar=a(()=>{"use strict";Oe();Ri=5*1024*1024*1024,vi=10*1024*1024*1024});var Ai,wi,Ae=a(()=>{"use strict";ar();Oe();Ai=30*1024*1024*1024,wi=15*1024*1024*1024});var lr=a(()=>{"use strict";d()});import Ft from"node:path";var Bi,Pe=a(()=>{"use strict";E();lr();Bi=Ft.join(".openclaw","harness")});var oe=a(()=>{"use strict";A();O();te();ie();Pe()});var dr=a(()=>{"use strict";A();Pe();oe();d()});var ae=a(()=>{"use strict";dr();d()});var mr=a(()=>{"use strict";ae();d()});var fr=a(()=>{"use strict"});var gr=a(()=>{"use strict";fr();d()});var hr=a(()=>{"use strict"});var yr=a(()=>{"use strict";hr()});var le=a(()=>{"use strict"});var k,w,xs,G=a(()=>{"use strict";k="claude-sonnet-5-5",w="claude-opus-5-5",xs={[k]:"claude-sonnet-4-6",[w]:"claude-opus-4-8"}});var _r=a(()=>{"use strict"});var kr=a(()=>{"use strict"});var xr=a(()=>{"use strict";yr();d();le();G();_r();kr()});var Us,x=a(()=>{"use strict";Us=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);
|
|
@@ -64,8 +64,8 @@ child.on("error", (e) => {
|
|
|
64
64
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
65
65
|
});
|
|
66
66
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
67
|
-
`});var xr=a(()=>{"use strict";ae();d();x()});var Rr=a(()=>{"use strict";le();G()});var vr=a(()=>{"use strict"});var ea,ra,br=a(()=>{"use strict";re();ea=10*6e4,ra=60*6e4});var Er=a(()=>{"use strict"});var Pe=a(()=>{"use strict"});var Sr=a(()=>{"use strict"});var Cr=a(()=>{"use strict";Pe();Sr()});var Or=a(()=>{"use strict";fr();kr();xr();x();le();Rr();vr();br();Er();Cr();Pe();d()});var Ar=a(()=>{"use strict";Or();d()});var en,rn,wr=a(()=>{"use strict";ir();A();O();te();ie();Oe();ae();pr();Ar();d();en=500*1024*1024,rn=4*1024*1024*1024});var ie=a(()=>{"use strict";wr()});import{homedir as tn}from"node:os";import nn from"node:path";var Pr,Ie=a(()=>{"use strict";Pr=nn.join(tn(),".kynver",".env")});var Ir=a(()=>{"use strict"});var Nr=a(()=>{"use strict";Ir()});var Tr=a(()=>{"use strict"});var Dr=a(()=>{"use strict";d()});var Ne=a(()=>{"use strict";Nr();Tr();Dr()});var Kr=a(()=>{"use strict"});var Wr=a(()=>{"use strict";Kr()});var ce=a(()=>{"use strict";Ie();E();A();Ne();Wr()});var Mr=a(()=>{"use strict";O();O()});var Br=a(()=>{"use strict";Ie();Ne();ce()});var Te=a(()=>{"use strict"});var Ur=a(()=>{"use strict";Ee();O();Mr();A();ce();Br();Se();Te();oe()});function P(e){let r=e.trim().toLowerCase();return fn[r]??r}var Lr,mn,fn,ue=a(()=>{"use strict";Lr=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],mn=Lr.join("|"),fn={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var Fr=a(()=>{"use strict";E()});var $r=a(()=>{"use strict";Fr()});var Hr=a(()=>{"use strict"});var jr=a(()=>{"use strict";Hr()});import{existsSync as hn,mkdirSync as Hc,readFileSync as yn,writeFileSync as jc}from"node:fs";import{homedir as _n,totalmem as Yc}from"node:os";import De from"node:path";function kn(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function xn(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!er(v(r))?e:{...e,defaultBase:Qe}}function Rn(){if(!hn(Vr))return null;try{return JSON.parse(yn(Vr,"utf8"))}catch{return null}}function W(){let e=Rn();return e?xn(kn(e)):{}}var Yr,Vr,uu,du,pu,A=a(()=>{"use strict";Ee();E();be();or();Se();O();te();ie();Oe();ce();Ur();ue();oe();$r();Te();jr();Yr=De.join(_n(),".kynver"),Vr=De.join(Yr,"config.json"),uu=De.join(Yr,"credentials");du=500*1024*1024,pu=4*1024*1024*1024});var _t=/^claude[-_]/i,kt=/^(?:opus|sonnet|haiku)\b/i;function Ye(e){let r=e.trim();return _t.test(r)||kt.test(r)}function Ge(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ke(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function qe(e){return e.trim().toLowerCase().startsWith("gemini-")}function xt(e){return Ge(e)?"codex":Ye(e)?"claude":qe(e)?"gemini":(ke(e),"cursor")}function Rt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function vt(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?Ye(n)||Ge(n)||ke(n)||qe(n)?{lane:t,model:n,provider:xt(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?Rt(r)??vt(r):null}function xe(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ke(r.model)):!1}A();var Gr={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 Gr[e]}function qr(){return Object.values(Gr)}import{existsSync as bn}from"node:fs";import{homedir as En}from"node:os";import q from"node:path";C();import{createHash as Jr}from"node:crypto";import{statSync as vn}from"node:fs";import{spawnSync as zr}from"node:child_process";function y(e){try{let r=vn(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Jr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function B(e){return Jr("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]=b(e,r),i=zr(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 de(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=b(e,r);return zr(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 Sn="codex";function Cn(){let e=En();return[process.env.CODEX_HOME?.trim()?q.join(q.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,q.join(e,".codex","auth.json"),q.join(e,".config","codex","auth.json")].filter(t=>!!t)}function On(e){return q.dirname(e)}function An(e){let r,t;for(let n of Cn()){if(!bn(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:On(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 Xr(e=new Date().toISOString()){let r=g(Sn,["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}=An(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 wn}from"node:fs";import{homedir as Pn}from"node:os";import Ke from"node:path";function In(){let e=process.env.HERMES_HOME?.trim(),r=e?Ke.resolve(e):Ke.join(Pn(),".hermes");return Ke.join(r,"auth.json")}function pe(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=In(),o=wn(n),s=de(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=Xr(e);if(r.ready)return{...r,path:"codex_cli"};let t=pe(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"],Qr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function et(e,r){let t=M(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Nn(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=Qr[e.binding.authSource]-Qr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function We(e){let r=qr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&et(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Nn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return et(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 Tn}from"node:fs";import{homedir as Dn}from"node:os";import Kn from"node:path";var Wn="claude";function Mn(){let e=Dn();return[Kn.join(e,".claude",".credentials.json")]}function rt(e=new Date().toISOString()){let r=g(Wn,["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=Mn().find(i=>Tn(i)),o=de(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 Yn}from"node:fs";import{homedir as Vn}from"node:os";import L from"node:path";x();import{closeSync as qu,existsSync as $n,mkdirSync as Ju,openSync as zu,statSync as Xu,unlinkSync as Zu}from"node:fs";d();import U from"node:path";Re();import{existsSync as z,readdirSync as Bn}from"node:fs";import I from"node:path";var Un=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Ln(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 Fn(e){let r=I.join(e,"versions");if(!z(r))return null;let t=null,n=-1;for(let o of Bn(r,{withFileTypes:!0})){if(!o.isDirectory()||!Un.test(o.name))continue;let s=Ln(o.name);s==null||s<=n||(n=s,t=I.join(r,o.name))}return t}function Me(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(z(t)&&z(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Fn(r);if(!o)return null;let s=I.join(o,"node.exe"),i=I.join(o,"index.js");return!z(s)||!z(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function Hn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:_(),bundledVersionDir:t}}function tt(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&$n(U.join(U.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Me(U.dirname(e)):t?{nodeExe:e,indexJs:U.join(U.dirname(e),"index.js"),versionDir:U.dirname(e)}:Me();if(o)return Hn(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 jn}from"node:child_process";function Be(e,r=process.env){try{let t;try{t=tt(e)}catch{t={executable:e,prefixArgs:[]}}let n=jn(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 Ue(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=Vn();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 Gn="agent";function nt(e=new Date().toISOString()){let r=g(Gn,["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=Ue().find(l=>Yn(l)),o=Be(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 qn,readFileSync as Jn}from"node:fs";import{homedir as zn}from"node:os";import Le from"node:path";var Xn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Zn(){let e=process.env.HERMES_HOME?.trim(),r=e?Le.resolve(e):Le.join(zn(),".hermes");return Le.join(r,".env")}function Qn(e){try{let r=Jn(e,"utf8"),t=[];for(let n of Xn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function ot(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=qn(n),s=o?Qn(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 it(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=J(r),n={codex:t,cursor:nt(r),claude:rt(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:ot(r),hermesOpenAiCodex:pe(r),codexAdapterPath:t.path,readyCount:o}}var eo=[/\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],ro=[/\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 Fe(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function to(e){let r=Fe(e,"executorRef").toLowerCase(),t=Fe(e,"title").toLowerCase(),n=Fe(e,"description").toLowerCase(),o=`${r}
|
|
67
|
+
`});var Rr=a(()=>{"use strict";ae();d();x()});var vr=a(()=>{"use strict";le();G()});var br=a(()=>{"use strict"});var ra,ta,Er=a(()=>{"use strict";re();ra=10*6e4,ta=60*6e4});var Sr=a(()=>{"use strict"});var Ie=a(()=>{"use strict"});var Cr=a(()=>{"use strict"});var Or=a(()=>{"use strict";Ie();Cr()});var Ar=a(()=>{"use strict";gr();xr();Rr();x();le();vr();br();Er();Sr();Or();Ie();d()});var wr=a(()=>{"use strict";Ar();d()});var rn,tn,Pr=a(()=>{"use strict";sr();A();O();te();ie();Ae();ae();mr();wr();d();rn=500*1024*1024,tn=4*1024*1024*1024});var ie=a(()=>{"use strict";Pr()});import{homedir as nn}from"node:os";import on from"node:path";var Ir,Ne=a(()=>{"use strict";Ir=on.join(nn(),".kynver",".env")});var Nr=a(()=>{"use strict"});var Tr=a(()=>{"use strict";Nr()});var Dr=a(()=>{"use strict"});var Kr=a(()=>{"use strict";d()});var Te=a(()=>{"use strict";Tr();Dr();Kr()});var Wr=a(()=>{"use strict"});var Mr=a(()=>{"use strict";Wr()});var ce=a(()=>{"use strict";Ne();E();A();Te();Mr()});var Br=a(()=>{"use strict";O();O()});var Ur=a(()=>{"use strict";Ne();Te();ce()});var De=a(()=>{"use strict"});var Lr=a(()=>{"use strict";Se();O();Br();A();ce();Ur();Ce();De();oe()});function P(e){let r=e.trim().toLowerCase();return gn[r]??r}var Fr,fn,gn,ue=a(()=>{"use strict";Fr=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],fn=Fr.join("|"),gn={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var $r=a(()=>{"use strict";E()});var Hr=a(()=>{"use strict";$r()});var jr=a(()=>{"use strict"});var Vr=a(()=>{"use strict";jr()});import{existsSync as yn,mkdirSync as jc,readFileSync as _n,writeFileSync as Vc}from"node:fs";import{homedir as kn,totalmem as Gc}from"node:os";import Ke from"node:path";function xn(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function Rn(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!rr(v(r))?e:{...e,defaultBase:er}}function vn(){if(!yn(Yr))return null;try{return JSON.parse(_n(Yr,"utf8"))}catch{return null}}function W(){let e=vn();return e?Rn(xn(e)):{}}var Gr,Yr,du,pu,mu,A=a(()=>{"use strict";Se();E();Ee();ir();Ce();O();te();ie();Ae();ce();Lr();ue();oe();Hr();De();Vr();Gr=Ke.join(kn(),".kynver"),Yr=Ke.join(Gr,"config.json"),du=Ke.join(Gr,"credentials");pu=500*1024*1024,mu=4*1024*1024*1024});var kt=/^claude[-_]/i,xt=/^(?:opus|sonnet|haiku)\b/i;function Ge(e){let r=e.trim();return kt.test(r)||xt.test(r)}function qe(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function xe(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Je(e){return e.trim().toLowerCase().startsWith("gemini-")}function Rt(e){return qe(e)?"codex":Ge(e)?"claude":Je(e)?"gemini":(xe(e),"cursor")}function vt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function bt(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?Ge(n)||qe(n)||xe(n)||Je(n)?{lane:t,model:n,provider:Rt(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?vt(r)??bt(r):null}function Re(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!xe(r.model)):!1}A();var qr={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 qr[e]}function Jr(){return Object.values(qr)}import{existsSync as En}from"node:fs";import{homedir as Sn}from"node:os";import q from"node:path";C();import{createHash as zr}from"node:crypto";import{statSync as bn}from"node:fs";import{spawnSync as Xr}from"node:child_process";function y(e){try{let r=bn(e),t=`${e}|${r.size}|${r.mtimeMs}`;return zr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function B(e){return zr("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]=b(e,r),i=Xr(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 de(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=b(e,r);return Xr(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 Cn="codex";function On(){let e=Sn();return[process.env.CODEX_HOME?.trim()?q.join(q.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,q.join(e,".codex","auth.json"),q.join(e,".config","codex","auth.json")].filter(t=>!!t)}function An(e){return q.dirname(e)}function wn(e){let r,t;for(let n of On()){if(!En(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:An(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 Zr(e=new Date().toISOString()){let r=g(Cn,["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}=wn(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 Pn}from"node:fs";import{homedir as In}from"node:os";import We from"node:path";function Nn(){let e=process.env.HERMES_HOME?.trim(),r=e?We.resolve(e):We.join(In(),".hermes");return We.join(r,"auth.json")}function pe(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=Nn(),o=Pn(n),s=de(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=Zr(e);if(r.ready)return{...r,path:"codex_cli"};let t=pe(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 Qr=["low","medium","high"],et={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function rt(e,r){let t=M(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Tn(e,r){let t=M(e.providerId),n=M(r.providerId),o=Qr.indexOf(t.costTier)-Qr.indexOf(n.costTier);if(o!==0)return o;let s=et[e.binding.authSource]-et[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Me(e){let r=Jr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&rt(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Tn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return rt(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 Dn}from"node:fs";import{homedir as Kn}from"node:os";import Wn from"node:path";var Mn="claude";function Bn(){let e=Kn();return[Wn.join(e,".claude",".credentials.json")]}function tt(e=new Date().toISOString()){let r=g(Mn,["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=Bn().find(i=>Dn(i)),o=de(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 Gn}from"node:fs";import{homedir as Yn}from"node:os";import L from"node:path";x();import{closeSync as zu,existsSync as Hn,mkdirSync as Xu,openSync as Zu,statSync as Qu,unlinkSync as ed}from"node:fs";d();import U from"node:path";ve();import{existsSync as z,readdirSync as Un}from"node:fs";import I from"node:path";var Ln=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Fn(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 $n(e){let r=I.join(e,"versions");if(!z(r))return null;let t=null,n=-1;for(let o of Un(r,{withFileTypes:!0})){if(!o.isDirectory()||!Ln.test(o.name))continue;let s=Fn(o.name);s==null||s<=n||(n=s,t=I.join(r,o.name))}return t}function Be(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(z(t)&&z(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=$n(r);if(!o)return null;let s=I.join(o,"node.exe"),i=I.join(o,"index.js");return!z(s)||!z(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function jn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:_(),bundledVersionDir:t}}function nt(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Hn(U.join(U.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Be(U.dirname(e)):t?{nodeExe:e,indexJs:U.join(U.dirname(e),"index.js"),versionDir:U.dirname(e)}:Be();if(o)return jn(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 Vn}from"node:child_process";function Ue(e,r=process.env){try{let t;try{t=nt(e)}catch{t={executable:e,prefixArgs:[]}}let n=Vn(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 Le(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=Yn();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 qn="agent";function ot(e=new Date().toISOString()){let r=g(qn,["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=Le().find(l=>Gn(l)),o=Ue(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 Jn,readFileSync as zn}from"node:fs";import{homedir as Xn}from"node:os";import Fe from"node:path";var Zn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Qn(){let e=process.env.HERMES_HOME?.trim(),r=e?Fe.resolve(e):Fe.join(Xn(),".hermes");return Fe.join(r,".env")}function eo(e){try{let r=zn(e,"utf8"),t=[];for(let n of Zn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function it(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=Qn(),o=Jn(n),s=o?eo(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 st(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=J(r),n={codex:t,cursor:ot(r),claude:tt(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:it(r),hermesOpenAiCodex:pe(r),codexAdapterPath:t.path,readyCount:o}}var ro=[/\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],to=[/\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 $e(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function no(e){let r=$e(e,"executorRef").toLowerCase(),t=$e(e,"title").toLowerCase(),n=$e(e,"description").toLowerCase(),o=`${r}
|
|
68
68
|
${t}
|
|
69
|
-
${n}`;return
|
|
69
|
+
${n}`;return ro.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":to.some(s=>s.test(o))?"low":"elevated"}function oo(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 io(e){let r=e.inventory??st();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function N(e){let r=oo({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 at(e){let r=e.task??{},t=no(r),n=io({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:J())}),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=Me({inventory:n,riskClass:t});return N(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 N({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 N({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 N({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=Me({inventory:n,riskClass:t});if(l)return N({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 N({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"}})}x();d();C();G();var lt="kynver",ct=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],so=ct.map(e=>`mcp__${lt}__${e}`);G();x();d();C();x();d();C();var fe="gpt-5.6-sol";var mp=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||fe;function lo(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||fe}var $=lo();x();d();var He="openai-compatible",Gp=600*1e3;x();d();C();var T="gemini";function D(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var H="gemini-api";var ym=600*1e3;var j="venice";var po="venice-uncensored-1-2";var mo="KYNVER_VENICE_DEFAULT_MODEL";function ge(e=process.env){return e[mo]?.trim()||po}var pt=k,Q="composer-2.5";function m(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function fo(e){if(!e)return;let r=m(e,"workerModelOverride")||m(e,"modelOverride");return r||`${m(e,"title")}
|
|
70
70
|
${m(e,"description")}
|
|
71
|
-
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
71
|
+
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function ut(e){return e.toLowerCase()}function _e(e=W()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||pt}function he(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-")?T:"cursor"}function go(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Q,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:T,rule:n&&n!==T?"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}:t==="venice"||t==="venice-ai"||t==="venice_ai"?{model:ge(),provider:j,rule:n&&n!==j?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function dt(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 ho=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function mt(e,r,t){return ho.has(e)?w:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?w:k}function ft(e){let r=ut(m(e,"executorRef")),t=m(e,"title").toLowerCase(),n=m(e,"priority")||"normal",o=ut(m(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=mt(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:He,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:venice")||r.startsWith("venice:")){let i=f(m(e,"executorRef"));return{provider:j,...i?.model?{model:i.model}:{model:ge()},rule:"lane:venice"}}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:T,...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 dt(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(dt(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=_e();return{model:s,provider:he(s),rule:"default:global"}}function yo(e){return e?f(m(e,"executorRef")):null}function _o(e){switch(P(e)){case T:case H:return D();case j:return ge();case"claude":return k;case"codex":return $;case"cursor":return Q;default:return}}var je="explicit:cli_provider",gt="config:worker_provider";function ht(e,r,t){let n=P(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:_o(n)??e.model,rule:t}}function ko(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==je?e:ht(e,t,je)}function xo(e,r){if(r.explicitProvider?.trim()||Ve(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=P(t);return n===F||n===e.provider?e:ht(e,n,gt)}function Ro(e){let r,t=yo(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=go(c,e.explicitProvider);u?r=u:r={model:c,provider:e.explicitProvider?.trim()||he(c),rule:"explicit:cli",requestedModel:c}}else if(n)r={model:n,provider:o||he(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&ye(e.task)){let c=fo(e.task),u,p;if(c)u=c,p="task:provider_override";else{let V=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Ye=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",ke=typeof e.task.title=="string"?e.task.title.toLowerCase():"";u=mt(V,Ye,ke),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=ft(e.task);r={...c,requestedModel:c.model}}else{let c=_e();r={model:c,provider:e.explicitProvider?.trim()||he(c),rule:"default:global",requestedModel:c}}r=ko(r,e.explicitProvider),r=xo(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=yt({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===je||i.rule===gt||R(i.provider)&&(e.explicitProviderIsOperatorOverride||ye(e.task))||i.provider===He||i.provider===T||i.provider===H||i.provider===j||i.provider==="codex")return i;let l=at({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 vo(e,r,t){return e||r||t||_e()||k}ue();ue();var F="cursor",bo=new Set(["claude","opus","anthropic"]),Eo=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ee(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function R(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return bo.has(r)?!0:r.includes("claude")||r.includes("opus")}function ye(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&R(r))return!0;let t=ee(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(ee(e,"executorRef"));if(n?.provider&&R(n.provider)||n?.model&&R(So(n.model)))return!0;let o=ee(e,"description");if(Eo.some(i=>i.test(o)))return!0;let s=ee(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function So(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Co(e,r){return{provider:F,model:Q,rule:`policy:cursor_default${r}`,requestedModel:e}}var Oo=["explicit:","executor_ref:","factory:","task:"];function Ao(e){return Oo.some(r=>e.startsWith(r))}function Ve(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||f(ee(e,"executorRef"))?.provider?!0:ye(e)}function yt(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&R(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||Ao(r.rule)||Ve(t)||!R(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Co(r.model,o)}function wo(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function _t(e){return e?.trim()||void 0}function Po(e){let r=wo(e.task),t=f(r),n=e.explicitProvider?.trim().toLowerCase(),o=_t(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=_t(e.routing.model),p={provider:c,model:u,rule:e.routing.rule};return s&&s!=="cursor"||r&&Re(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&&!R(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{Q as CURSOR_DEFAULT_MODEL,pt as GLOBAL_DEFAULT_MODEL,Po as assessDispatchModelGuard,Re as executorRefRequestsNonCursorWorker,ft as inferModelRoutingFromTask,f as parseExecutorRefRoutingIntent,_e as resolveGlobalDefaultModel,vo as resolveModelFallback,Ro as resolveWorkerLaunch};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{existsSync as ie}from"node:fs";import{homedir as se}from"node:os";import ae from"node:path";import{createHash as Y}from"node:crypto";import{statSync as ne}from"node:fs";import{spawnSync as
|
|
1
|
+
import{existsSync as ie}from"node:fs";import{homedir as se}from"node:os";import ae from"node:path";import{createHash as Y}from"node:crypto";import{statSync as ne}from"node:fs";import{spawnSync as j}from"node:child_process";import{existsSync as M,readFileSync as z}from"node:fs";import p 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},X=".COM;.EXE;.BAT;.CMD";function q(e){return e.includes("/")||e.includes("\\")}function Q(e){return(e.PATHEXT||X).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function Z(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function ee(e,r={}){let t=r.env??process.env,o=r.exists??M,n=Q(t),i=p.win32.extname(e)!=="",s=a=>i?[a]:n.map(c=>`${a}${c}`);if(q(e)||p.win32.isAbsolute(e))return s(e).find(a=>o(a))??null;for(let a of Z(t).split(";").map(c=>c.trim()).filter(Boolean)){let c=s(p.win32.join(a,e)).find(m=>o(m));if(c)return c}return null}var D=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,re=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function B(e){return e.replace(/^[\\/]+/,"")}function te(e){let r=e.split(/\r?\n/),t=new Map;for(let i of r){let s=re.exec(i);s&&t.set(s[1].toUpperCase(),s[2])}let o=r.filter(i=>i.includes("%*")).pop();if(!o)return null;let n=D.exec(o);if(n)return B(n[1]);for(let i of o.matchAll(/%([A-Za-z_]\w*)%/g)){let s=t.get(i[1].toUpperCase()),a=s?D.exec(s):null;if(a)return B(a[1])}return null}function oe(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let o=ee(e,r);if(!o)return{executable:e,prefixArgs:[],kind:"passthrough"};let n=p.win32.extname(o).toLowerCase();if(n!==".cmd"&&n!==".bat")return{executable:o,prefixArgs:[],kind:"exe"};let i=r.readText??(G=>z(G,"utf8")),s=r.exists??M,a;try{a=i(o)}catch{throw new _(o)}let c=te(a);if(!c)throw new _(o);let m=p.win32.dirname(o),K=p.win32.join(m,c);if(!s(K))throw new _(o);let L=p.win32.join(m,"node.exe");return{executable:s(L)?L:r.nodeExecutable??process.execPath,prefixArgs:[K],kind:"node-shim"}}function R(e,r,t={}){let o=oe(e,t);return[o.executable,[...o.prefixArgs,...r]]}function u(e){try{let r=ne(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Y("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function h(e){return Y("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function d(e,r){for(let t of r){let o=process.env[t]?.trim();if(o)return o}return e}function l(e,r,t={}){let o=t.timeoutMs??8e3;try{let[n,i]=R(e,r),s=j(n,i,{windowsHide:!0,encoding:"utf8",timeout:o,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(s.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let a=(s.stderr||s.stdout||"").trim(),c=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:a?`${c}: ${a.slice(0,200)}`:c}}catch(n){return{ok:!1,note:n instanceof Error?n.message:`${e} probe failed`}}}function A(e,r,t={}){let o=t.timeoutMs??8e3;try{let[n,i]=R(e,r);return j(n,i,{windowsHide:!0,stdio:"ignore",timeout:o,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(n){return{ok:!1,note:n instanceof Error?n.message:`${e} auth probe failed`}}}var ce="claude";function le(){let e=se();return[ae.join(e,".claude",".credentials.json")]}function U(e=new Date().toISOString()){let r=d(ce,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:h("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=l(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),o=le().find(s=>ie(s)),n=A(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),i=t.ok&&(n.ok||!!o);return{providerId:"claude",ready:i,authSource:"oauth_local",sessionFingerprint:o?u(o):void 0,checkedAt:e,note:i?"Local Claude Code OAuth session bound on runner":[t.note,n.note,o?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as ue}from"node:fs";import{homedir as de}from"node:os";import S from"node:path";var pe="codex";function fe(){let e=de();return[process.env.CODEX_HOME?.trim()?S.join(S.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,S.join(e,".codex","auth.json"),S.join(e,".config","codex","auth.json")].filter(t=>!!t)}function me(e){return S.dirname(e)}function he(e){let r,t;for(let o of fe()){if(!ue(o))continue;r??=o;let n=l(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:me(o)}});if(t??=n,n.ok)return{authPath:o,login:n}}return{authPath:r,login:t??l(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function H(e=new Date().toISOString()){let r=d(pe,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:h("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:o}=he(r),n=!!t&&o.ok;return{providerId:"codex",ready:n,authSource:"oauth_local",sessionFingerprint:t?u(t):void 0,checkedAt:e,note:n?"Local Codex OAuth session bound on runner":[o.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as ge}from"node:fs";import{homedir as Ee}from"node:os";import y from"node:path";function _e(){let e=process.env.HERMES_HOME?.trim(),r=e?y.resolve(e):y.join(Ee(),".hermes");return y.join(r,"auth.json")}function x(e=new Date().toISOString()){let r=d("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=l(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),o=_e(),n=ge(o),i=A(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),s=t.ok&&i.ok;return{path:"hermes_openai_codex",ready:s,authSource:s?"subscription_hermes":"none",sessionFingerprint:n?u(o):void 0,checkedAt:e,note:s?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,i.note,n?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function F(e=new Date().toISOString()){let r=H(e);if(r.ready)return{...r,path:"codex_cli"};let t=x(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"}}import{existsSync as be}from"node:fs";import{homedir as ke}from"node:os";import E from"node:path";import{closeSync as Ur,existsSync as Pe,mkdirSync as Hr,openSync as Fr,statSync as $r,unlinkSync as Wr}from"node:fs";var Er=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);
|
|
@@ -64,4 +64,4 @@ child.on("error", (e) => {
|
|
|
64
64
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
65
65
|
});
|
|
66
66
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
67
|
-
`;import g from"node:path";function v(e=process.platform){return e!=="win32"}var Se=["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"],vr=new Set(Se);var Oe=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Pr=new Set(Oe);import{existsSync as O,readdirSync as Ce}from"node:fs";import f from"node:path";var Ae=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function xe(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[o,n,i]=t;return!o||!n||!i?null:+`${o}${n.padStart(2,"0")}${i.padStart(2,"0")}`}function ve(e){let r=f.join(e,"versions");if(!O(r))return null;let t=null,o=-1;for(let n of Ce(r,{withFileTypes:!0})){if(!n.isDirectory()||!Ae.test(n.name))continue;let i=xe(n.name);i==null||i<=o||(o=i,t=f.join(r,n.name))}return t}function k(e){let r=e?.trim()||f.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=f.join(r,"node.exe"),o=f.join(r,"index.js");if(O(t)&&O(o))return{nodeExe:t,indexJs:o,versionDir:r};let n=ve(r);if(!n)return null;let i=f.join(n,"node.exe"),s=f.join(n,"index.js");return!O(i)||!O(s)?null:{nodeExe:i,indexJs:s,versionDir:n}}function Re(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:v(),bundledVersionDir:t}}function $(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Pe(g.join(g.dirname(e),"index.js"));if(r||t||e==="agent"){let n=r?k(g.dirname(e)):t?{nodeExe:e,indexJs:g.join(g.dirname(e),"index.js"),versionDir:g.dirname(e)}:k();if(n)return Re(n.nodeExe,n.indexJs,n.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:v()}}import{spawnSync as ye}from"node:child_process";function b(e,r=process.env){try{let t;try{t=$(e)}catch{t={executable:e,prefixArgs:[]}}let o=ye(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(o.status!==0)return{ok:!1,note:"agent status: not authenticated"};let n=(o.stdout||"").trim();if(!n)return{ok:!1,note:"agent status: empty response"};let i;try{i=JSON.parse(n)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof i=="object"&&i!==null&&i.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
|
|
67
|
+
`;import g from"node:path";function v(e=process.platform){return e!=="win32"}var Se=["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"],vr=new Set(Se);var Oe=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Pr=new Set(Oe);import{existsSync as O,readdirSync as Ce}from"node:fs";import f from"node:path";var Ae=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function xe(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[o,n,i]=t;return!o||!n||!i?null:+`${o}${n.padStart(2,"0")}${i.padStart(2,"0")}`}function ve(e){let r=f.join(e,"versions");if(!O(r))return null;let t=null,o=-1;for(let n of Ce(r,{withFileTypes:!0})){if(!n.isDirectory()||!Ae.test(n.name))continue;let i=xe(n.name);i==null||i<=o||(o=i,t=f.join(r,n.name))}return t}function k(e){let r=e?.trim()||f.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=f.join(r,"node.exe"),o=f.join(r,"index.js");if(O(t)&&O(o))return{nodeExe:t,indexJs:o,versionDir:r};let n=ve(r);if(!n)return null;let i=f.join(n,"node.exe"),s=f.join(n,"index.js");return!O(i)||!O(s)?null:{nodeExe:i,indexJs:s,versionDir:n}}function Re(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:v(),bundledVersionDir:t}}function $(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Pe(g.join(g.dirname(e),"index.js"));if(r||t||e==="agent"){let n=r?k(g.dirname(e)):t?{nodeExe:e,indexJs:g.join(g.dirname(e),"index.js"),versionDir:g.dirname(e)}:k();if(n)return Re(n.nodeExe,n.indexJs,n.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:v()}}import{spawnSync as ye}from"node:child_process";function b(e,r=process.env){try{let t;try{t=$(e)}catch{t={executable:e,prefixArgs:[]}}let o=ye(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(o.status!==0)return{ok:!1,note:"agent status: not authenticated"};let n=(o.stdout||"").trim();if(!n)return{ok:!1,note:"agent status: empty response"};let i;try{i=JSON.parse(n)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof i=="object"&&i!==null&&i.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 w(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(E.join(t,".config","cursor","auth.json")),r.push(E.join(t,".cursor-agent","auth.json")));let o=ke();if(r.push(E.join(o,".config","cursor","auth.json")),r.push(E.join(o,".cursor-agent","auth.json")),process.platform==="win32"){let n=e.LOCALAPPDATA?.trim(),i=e.APPDATA?.trim();n&&r.push(E.join(n,"cursor-agent","auth.json")),i&&r.push(E.join(i,"cursor","auth.json"))}return r}var we="agent";function W(e=new Date().toISOString()){let r=d(we,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:h("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=l(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),o=w().find(a=>be(a)),n=b(r),i=!!o||n.ok,s=t.ok&&i;return{providerId:"cursor",ready:s,authSource:"oauth_local",sessionFingerprint:o?u(o):void 0,checkedAt:e,note:s?"Local Cursor/Composer OAuth session bound on runner":[t.note,i?void 0:n.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as Ie,readFileSync as Ne}from"node:fs";import{homedir as Te}from"node:os";import I from"node:path";var Ke=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Le(){let e=process.env.HERMES_HOME?.trim(),r=e?I.resolve(e):I.join(Te(),".hermes");return I.join(r,".env")}function De(e){try{let r=Ne(e,"utf8"),t=[];for(let o of Ke)new RegExp(`^${o}=`,"m").test(r)&&t.push(o);return t}catch{return[]}}function V(e=new Date().toISOString()){let r=d("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=l(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),o=Le(),n=Ie(o),i=n?De(o):[],a=i.some(m=>m.endsWith("_API_KEY"))?"api_key_env":n?"oauth_local":"none",c=t.ok&&n;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:n,authSource:a,sessionFingerprint:n?u(o):void 0,checkedAt:e,note:c?`Hermes profile bound (${i.length?`keys: ${i.join(", ")}`:"no API keys detected"})`:[t.note,n?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Be(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=F(r),o={codex:t,cursor:W(r),claude:U(r)},n=Object.values(o).filter(i=>i.ready).length;return{generatedAt:r,bindings:o,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:V(r),hermesOpenAiCodex:x(r),codexAdapterPath:t.path,readyCount:n}}var Me={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 Ye(){return Object.values(Me)}var J=["off","observe","enforce"];function je(e){let r=(e??"off").trim().toLowerCase();return J.includes(r)?r:"off"}function P(e=process.env){return je(e.KYNVER_ORCHESTRATION_POLICY_MODE)}function N(e=process.env){let r=e.KYNVER_ORCHESTRATION_ENFORCE_TASKS?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":P(e)==="enforce"}import{createHash as Ue}from"node:crypto";function C(e){if(e==null)return null;let r=e.trim();return r.length?r:null}function T(e){let r=C(e.sessionId)??"anonymous",t=C(e.title)??C(e.action)??"foreground",o=Ue("sha256").update([C(e.planId)??"",C(e.parentTaskId)??"",t.toLowerCase()].join("|")).digest("hex").slice(0,16);return`hermes-foreground:${r}:${o}`}function He(e,r){return e==="enforce"&&r?"enforce_harness_task":e==="observe"?"observe_bypass":"allow_local"}function Fe(e,r=process.env){let t=P(r),o=N(r),n=He(t,o),i=n==="enforce_harness_task"?T({sessionId:e.sessionId,planId:e.planId,parentTaskId:e.parentTaskId,title:e.title,action:e.action}):null,s;return t==="off"?s="Orchestration policy off \u2014 local foreground path allowed.":n==="observe_bypass"?s=`Observe mode: ${e.action} bypass logged; local fallback preserved.`:n==="enforce_harness_task"?s=`Enforce mode: ${e.action} must create linked harness AgentTask (${i}).`:s="Local foreground path allowed.",{mode:t,decision:n,idempotencyKey:i,bypassLogged:n==="observe_bypass",reason:s}}export{T as buildForegroundHarnessIdempotencyKey,Be as buildOrchestrationProviderInventory,Fe as evaluateOrchestrationPolicy,N as isOrchestrationEnforceTasksEnabled,Ye as listOrchestrationProviderCapabilities,P as resolveOrchestrationPolicyMode};
|