@kynver-app/runtime 0.2.118 → 0.2.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +258 -185
- package/dist/daemon-tick-thread.js +175 -0
- package/dist/desktop-entry.js +214 -143
- package/dist/index.js +281 -208
- package/dist/local-run-store/index.js +73 -9
- package/dist/server/cleanup.js +78 -14
- package/dist/server/default-repo.js +65 -1
- package/dist/server/dispatch-routing.js +67 -3
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +1 -1
- package/dist/server/model-routing.js +67 -3
- package/dist/server/monitor.js +71 -7
- package/dist/server/orchestration.js +65 -1
- package/dist/server/worker-policy.js +66 -2
- package/dist/worker-broker/index.js +4 -4
- package/package.json +2 -2
|
@@ -1 +1,65 @@
|
|
|
1
|
-
var e=(r,n,t)=>()=>{if(t)throw t[0];try{return r&&(n=r(r=0)),n}catch(o){throw t=[o],o}};import{homedir as
|
|
1
|
+
var e=(r,n,t)=>()=>{if(t)throw t[0];try{return r&&(n=r(r=0)),n}catch(o){throw t=[o],o}};import{homedir as j}from"node:os";import Y from"node:path";function He(r){return r==="~"?j():r.startsWith("~/")||r.startsWith("~\\")?Y.join(j(),r.slice(2)):r}function u(r){return Y.resolve(He(r))}var c=e(()=>{"use strict"});var V=e(()=>{"use strict"});function G(r){return process.platform!=="win32"?r:{windowsHide:!0,...r}}var s=e(()=>{"use strict";V()});var je,Lr,Ye,Hr,z=e(()=>{"use strict";je=["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"],Lr=new Set(je),Ye=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Hr=new Set(Ye)});import{spawnSync as Ge}from"node:child_process";function v(r,n){try{let t=Ge("git",n,G({cwd:r,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}var g=e(()=>{"use strict";c();s();z()});var C=e(()=>{"use strict";g()});import{existsSync as w,readFileSync as q}from"node:fs";import{homedir as ze}from"node:os";import i from"node:path";import{fileURLToPath as Je}from"node:url";function Xe(r){let n=i.join(r,"package.json");if(!w(n))return null;try{let t=JSON.parse(q(n,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function X(r){return Xe(r)==="kynver"}function J(r){let n=i.resolve(r);if(!w(n))return null;let t=v(n,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let o=t.stdout.trim();return o.length?i.resolve(o):null}function Ze(r=import.meta.url){let n=i.dirname(Je(r));for(let t=0;t<8;t+=1){let o=i.join(n,"package.json");if(w(o))try{if(JSON.parse(q(o,"utf8")).name==="@kynver-app/runtime")return n}catch{}let a=i.dirname(n);if(a===n)break;n=a}return null}function A(r,n,t,o,a){if(!t)return;let l=i.resolve(t);r.has(l)||(a?.requireMonorepo??!0)&&!X(l)||(r.add(l),n.push({repo:l,source:o}))}function Qe(r){let n=r?.cwd??process.cwd(),t=new Set,o=[];A(t,o,J(n),"cwd_git",{requireMonorepo:!1});let a=Ze(r?.runtimeModuleUrl??import.meta.url);a&&A(t,o,J(a),"runtime_checkout");let l=ze();for(let m of qe)A(t,o,u(i.join(l,m)),"well_known_path");let L=i.resolve(r?.cwd??process.cwd());return o.filter(m=>{if(m.source!=="runtime_checkout"||!X(m.repo))return!0;let H=i.resolve(m.repo);return L===H||L.startsWith(`${H}${i.sep}`)})}function O(r){return Qe(r)[0]??null}var qe,h=e(()=>{"use strict";g();c();C();qe=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});var P=e(()=>{"use strict";s()});var d=e(()=>{"use strict"});var y=e(()=>{"use strict"});var Z=e(()=>{"use strict"});var gt,ht,I=e(()=>{"use strict";gt=25*1024*1024*1024,ht=12*1024*1024*1024});var xt,St,Q=e(()=>{"use strict";I();xt=5*1024*1024*1024,St=10*1024*1024*1024});var wt,Ot,T=e(()=>{"use strict";Q();I();wt=30*1024*1024*1024,Ot=15*1024*1024*1024});var ee=e(()=>{"use strict";s()});import er from"node:path";var Bt,K=e(()=>{"use strict";c();ee();Bt=er.join(".openclaw","harness")});var k=e(()=>{"use strict";f();d();y();R();K()});var ne=e(()=>{"use strict";f();K();k();s()});var S=e(()=>{"use strict";ne();s()});var se=e(()=>{"use strict";S();s()});var ie=e(()=>{"use strict"});var ae=e(()=>{"use strict";ie();s()});var le=e(()=>{"use strict"});var ue=e(()=>{"use strict";le()});var _=e(()=>{"use strict"});var ce=e(()=>{"use strict"});var de=e(()=>{"use strict"});var fe=e(()=>{"use strict";ue();s();_();ce();de()});var Dn,W=e(()=>{"use strict";Dn=String.raw`"use strict";
|
|
2
|
+
const cp = require("child_process"), fs = require("fs");
|
|
3
|
+
const argv = process.argv.slice(1);
|
|
4
|
+
const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
|
|
5
|
+
const startedMs = Date.now();
|
|
6
|
+
function cgroupOomKills() {
|
|
7
|
+
try {
|
|
8
|
+
const line = fs.readFileSync("/proc/self/cgroup", "utf8").split("\n").find((l) => l.startsWith("0::"));
|
|
9
|
+
if (!line) return null;
|
|
10
|
+
const file = "/sys/fs/cgroup" + line.slice(3).trim().replace(/\/$/, "") + "/memory.events";
|
|
11
|
+
const m = /(?:^|\n)oom_kill (\d+)/.exec(fs.readFileSync(file, "utf8"));
|
|
12
|
+
return m ? Number(m[1]) : null;
|
|
13
|
+
} catch { return null; }
|
|
14
|
+
}
|
|
15
|
+
function kernelLog() {
|
|
16
|
+
const override = process.env.KYNVER_EXIT_CAPTURE_KERNEL_LOG_FILE;
|
|
17
|
+
if (override) { try { return fs.readFileSync(override, "utf8"); } catch { return ""; } }
|
|
18
|
+
const run = (bin, a) => {
|
|
19
|
+
try {
|
|
20
|
+
const r = cp.spawnSync(bin, a, { encoding: "utf8", timeout: 3000, maxBuffer: 8 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
|
|
21
|
+
return r.status === 0 ? String(r.stdout || "") : "";
|
|
22
|
+
} catch { return ""; }
|
|
23
|
+
};
|
|
24
|
+
return run("journalctl", ["-k", "-q", "--no-pager", "--since", "@" + Math.floor(startedMs / 1000)]) || run("dmesg", []);
|
|
25
|
+
}
|
|
26
|
+
const oomBefore = cgroupOomKills();
|
|
27
|
+
let child, finished = false;
|
|
28
|
+
function write(rec) {
|
|
29
|
+
try { fs.writeFileSync(exitFile, JSON.stringify(rec, null, 2) + "\n"); } catch {}
|
|
30
|
+
}
|
|
31
|
+
function finish(code, signal, spawnError) {
|
|
32
|
+
if (finished) return;
|
|
33
|
+
finished = true;
|
|
34
|
+
const rec = { exitCode: code, signal: signal || null, startedAt: new Date(startedMs).toISOString(), endedAt: new Date().toISOString(), childPid: child && child.pid };
|
|
35
|
+
if (spawnError) rec.spawnError = spawnError;
|
|
36
|
+
if (signal === "SIGKILL" || code === 137 || (code !== 0 && code !== null)) {
|
|
37
|
+
const oomAfter = cgroupOomKills();
|
|
38
|
+
if (oomBefore !== null && oomAfter !== null && oomAfter > oomBefore) {
|
|
39
|
+
rec.oomEvidence = { source: "cgroup", detail: "memory.events oom_kill " + oomBefore + " -> " + oomAfter };
|
|
40
|
+
} else if (signal === "SIGKILL" || code === 137) {
|
|
41
|
+
const pid = child && child.pid;
|
|
42
|
+
const hit = kernelLog().split("\n").find((l) => pid && new RegExp("(?:Killed process|oom-kill:.*pid=|Memory cgroup out of memory: Killed process) ?" + pid + "\\b").test(l));
|
|
43
|
+
if (hit) rec.oomEvidence = { source: "kernel_log", detail: hit.trim().slice(0, 300) };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
write(rec);
|
|
47
|
+
if (signal) {
|
|
48
|
+
const n = (require("os").constants.signals || {})[signal];
|
|
49
|
+
process.exit(128 + (n || 9));
|
|
50
|
+
}
|
|
51
|
+
process.exit(code === null ? 1 : code);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
child = cp.spawn(cmd, args, { stdio: "inherit" });
|
|
55
|
+
} catch (e) {
|
|
56
|
+
process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
|
|
57
|
+
finish(127, null, String(e && e.message));
|
|
58
|
+
}
|
|
59
|
+
for (const s of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(s, () => { try { child.kill(s); } catch {} });
|
|
60
|
+
child.on("error", (e) => {
|
|
61
|
+
process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
|
|
62
|
+
if (!child.pid) finish(127, null, String(e && e.message));
|
|
63
|
+
});
|
|
64
|
+
child.on("exit", (code, signal) => finish(code, signal));
|
|
65
|
+
`});var pe=e(()=>{"use strict";S();s();W()});var me=e(()=>{"use strict";_()});var ge=e(()=>{"use strict"});var qn,Xn,he=e(()=>{"use strict";g();qn=10*6e4,Xn=60*6e4});var ye=e(()=>{"use strict"});var D=e(()=>{"use strict"});var be=e(()=>{"use strict"});var ke=e(()=>{"use strict";D();be()});var Re=e(()=>{"use strict";ae();fe();pe();W();_();me();ge();he();ye();ke();D();s()});var xe=e(()=>{"use strict";Re();s()});var mr,gr,Se=e(()=>{"use strict";Z();f();d();y();R();T();S();se();xe();s();mr=500*1024*1024,gr=4*1024*1024*1024});var R=e(()=>{"use strict";Se()});import{homedir as hr}from"node:os";import yr from"node:path";var _e,U=e(()=>{"use strict";_e=yr.join(hr(),".kynver",".env")});var Ee=e(()=>{"use strict"});var ve=e(()=>{"use strict";Ee()});var Ce=e(()=>{"use strict"});var Ae=e(()=>{"use strict";s()});var B=e(()=>{"use strict";ve();Ce();Ae()});var we=e(()=>{"use strict"});var Oe=e(()=>{"use strict";we()});var E=e(()=>{"use strict";U();c();f();B();Oe()});var Te=e(()=>{"use strict";d();d()});var Ne=e(()=>{"use strict";U();B();E()});var M=e(()=>{"use strict"});var We=e(()=>{"use strict";h();d();Te();f();E();Ne();P();M();k()});var _r,di,De=e(()=>{"use strict";_r=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],di=_r.join("|")});var Ue=e(()=>{"use strict";c()});var Be=e(()=>{"use strict";Ue()});var Me=e(()=>{"use strict"});var Fe=e(()=>{"use strict";Me()});import{existsSync as Er,mkdirSync as Bi,readFileSync as vr,writeFileSync as Mi}from"node:fs";import{homedir as Cr,totalmem as $i}from"node:os";import F from"node:path";function Ar(r){return{...r,...r.harnessRoot?.trim()?{harnessRoot:u(r.harnessRoot.trim())}:{},...r.defaultRepo?.trim()?{defaultRepo:u(r.defaultRepo.trim())}:{}}}function p(){if(!Er($e))return{};try{return Ar(JSON.parse(vr($e,"utf8")))}catch{return{}}}var Le,$e,na,oa,sa,f=e(()=>{"use strict";h();c();P();d();y();R();T();E();We();De();k();Be();M();Fe();Le=F.join(Cr(),".kynver"),$e=F.join(Le,"config.json"),na=F.join(Le,"credentials");oa=500*1024*1024,sa=4*1024*1024*1024});f();h();c();C();import wr from"node:path";function Or(r){return wr.resolve(u(r.trim()))}function $(r,n,t){let o=r?.trim();return o?{repo:Or(o),source:n,persistedInConfig:t}:null}function Pr(r){return r?{repo:r.repo,source:r.source,persistedInConfig:!1}:null}function Ir(r={}){let n=r.env??process.env,t=r.config??p(),o=$(t.defaultRepo,"config",!0);if(o)return o;let a=$(n.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(a)return a;let l=$(n.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return l||Pr(O({cwd:r.cwd,runtimeModuleUrl:r.runtimeModuleUrl}))}export{Ir as resolveDefaultRepo};
|
|
@@ -1,5 +1,69 @@
|
|
|
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 Ue}from"node:os";import Le from"node:path";function lt(e){return e==="~"?Ue():e.startsWith("~/")||e.startsWith("~\\")?Le.join(Ue(),e.slice(2)):e}function x(e){return Le.resolve(lt(e))}var _=a(()=>{"use strict"});function k(e=process.platform){return e!=="win32"}var Fe=a(()=>{"use strict"});var d=a(()=>{"use strict";Fe()});var ut,ho,ct,yo,pe=a(()=>{"use strict";ut=["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"],ho=new Set(ut),ct=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],yo=new Set(ct)});var z=a(()=>{"use strict";_();d();pe()});var $e=a(()=>{"use strict";z()});var me=a(()=>{"use strict";z();_();$e()});var fe=a(()=>{"use strict";d()});var v=a(()=>{"use strict"});var X=a(()=>{"use strict"});var He=a(()=>{"use strict"});var Do,Bo,ge=a(()=>{"use strict";Do=25*1024*1024*1024,Bo=12*1024*1024*1024});var Ho,jo,je=a(()=>{"use strict";ge();Ho=5*1024*1024*1024,jo=10*1024*1024*1024});var zo,Xo,he=a(()=>{"use strict";je();ge();zo=30*1024*1024*1024,Xo=15*1024*1024*1024});var Ve=a(()=>{"use strict";d()});import ft from"node:path";var si,ye=a(()=>{"use strict";_();Ve();si=ft.join(".openclaw","harness")});var Z=a(()=>{"use strict";b();v();X();ee();ye()});var Je=a(()=>{"use strict";b();ye();Z();d()});var Re=a(()=>{"use strict";Je();d()});var ze=a(()=>{"use strict";Re();d()});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe();d()});var Ze=a(()=>{"use strict"});var er=a(()=>{"use strict";Ze()});var re=a(()=>{"use strict"});var rr=a(()=>{"use strict"});var tr=a(()=>{"use strict"});var nr=a(()=>{"use strict";er();d();re();rr();tr()});var or=a(()=>{"use strict";re()});var ir=a(()=>{"use strict"});var sr=a(()=>{"use strict"});var xe=a(()=>{"use strict"});var ar=a(()=>{"use strict"});var lr=a(()=>{"use strict";xe();ar()});var ur=a(()=>{"use strict";Qe();nr();re();or();ir();z();sr();lr();xe();d()});var cr=a(()=>{"use strict";ur()});var Et,Ct,dr=a(()=>{"use strict";He();b();v();X();ee();he();Re();ze();cr();d();Et=500*1024*1024,Ct=4*1024*1024*1024});var ee=a(()=>{"use strict";dr()});import{homedir as Ot}from"node:os";import At from"node:path";var pr,_e=a(()=>{"use strict";pr=At.join(Ot(),".kynver",".env")});var mr=a(()=>{"use strict"});var fr=a(()=>{"use strict";mr()});var gr=a(()=>{"use strict"});var hr=a(()=>{"use strict";d()});var ve=a(()=>{"use strict";fr();gr();hr()});var yr=a(()=>{"use strict"});var kr=a(()=>{"use strict";yr()});var te=a(()=>{"use strict";_e();_();b();ve();kr()});var Rr=a(()=>{"use strict";v();v()});var xr=a(()=>{"use strict";_e();ve();te()});var be=a(()=>{"use strict"});var _r=a(()=>{"use strict";me();v();Rr();b();te();xr();fe();be();Z()});function S(e){let r=e.trim().toLowerCase();return Bt[r]??r}var vr,Dt,Bt,ne=a(()=>{"use strict";vr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Dt=vr.join("|"),Bt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var br=a(()=>{"use strict";_()});var Sr=a(()=>{"use strict";br()});var Er=a(()=>{"use strict"});var Cr=a(()=>{"use strict";Er()});import{existsSync as Lt,mkdirSync as Ll,readFileSync as Ft,writeFileSync as Fl}from"node:fs";import{homedir as $t,totalmem as Hl}from"node:os";import Se from"node:path";function Ht(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:x(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:x(e.defaultRepo.trim())}:{}}}function T(){if(!Lt(Or))return{};try{return Ht(JSON.parse(Ft(Or,"utf8")))}catch{return{}}}var Ar,Or,iu,su,au,b=a(()=>{"use strict";me();_();fe();v();X();ee();he();te();_r();ne();Z();Sr();be();Cr();Ar=Se.join($t(),".kynver"),Or=Se.join(Ar,"config.json"),iu=Se.join(Ar,"credentials");su=500*1024*1024,au=4*1024*1024*1024});var nt=/^claude[-_]/i,ot=/^(?:opus|sonnet|haiku)\b/i;function Me(e){let r=e.trim();return nt.test(r)||ot.test(r)}function De(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ce(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Be(e){return e.trim().toLowerCase().startsWith("gemini-")}function it(e){return De(e)?"codex":Me(e)?"claude":Be(e)?"gemini":(ce(e),"cursor")}function st(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function at(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?Me(n)||De(n)||ce(n)||Be(n)?{lane:t,model:n,provider:it(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?st(r)??at(r):null}function de(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ce(r.model)):!1}b();var wr={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 N(e){return wr[e]}function Pr(){return Object.values(wr)}import{existsSync as en}from"node:fs";import{homedir as rn}from"node:os";import $ from"node:path";import{createHash as Kr}from"node:crypto";import{statSync as Zt}from"node:fs";import{spawnSync as Wr}from"node:child_process";import{existsSync as Nr,readFileSync as jt}from"node:fs";import E from"node:path";var F=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},Yt=".COM;.EXE;.BAT;.CMD";function Vt(e){return e.includes("/")||e.includes("\\")}function Gt(e){return(e.PATHEXT||Yt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function qt(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function Jt(e,r={}){let t=r.env??process.env,n=r.exists??Nr,o=Gt(t),s=E.win32.extname(e)!=="",i=l=>s?[l]:o.map(u=>`${l}${u}`);if(Vt(e)||E.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of qt(t).split(";").map(u=>u.trim()).filter(Boolean)){let u=i(E.win32.join(l,e)).find(c=>n(c));if(u)return u}return null}var Ir=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,zt=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function Tr(e){return e.replace(/^[\\/]+/,"")}function Xt(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=zt.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Ir.exec(n);if(o)return Tr(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?Ir.exec(i):null;if(l)return Tr(l[1])}return null}function Qt(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=Jt(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=E.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(ue=>jt(ue,"utf8")),i=r.exists??Nr,l;try{l=s(n)}catch{throw new F(n)}let u=Xt(l);if(!u)throw new F(n);let c=E.win32.dirname(n),p=E.win32.join(c,u);if(!i(p))throw new F(n);let L=E.win32.join(c,"node.exe");return{executable:i(L)?L:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function C(e,r,t={}){let n=Qt(e,t);return[n.executable,[...n.prefixArgs,...r]]}function y(e){try{let r=Zt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Kr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function K(e){return Kr("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]=C(e,r),i=Wr(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(),u=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:l?`${u}: ${l.slice(0,200)}`:u}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function oe(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=C(e,r);return Wr(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 tn="codex";function nn(){let e=rn();return[process.env.CODEX_HOME?.trim()?$.join($.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,$.join(e,".codex","auth.json"),$.join(e,".config","codex","auth.json")].filter(t=>!!t)}function on(e){return $.dirname(e)}function sn(e){let r,t;for(let n of nn()){if(!en(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 Mr(e=new Date().toISOString()){let r=g(tn,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:K("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}=sn(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 an}from"node:fs";import{homedir as ln}from"node:os";import Ee from"node:path";function un(){let e=process.env.HERMES_HOME?.trim(),r=e?Ee.resolve(e):Ee.join(ln(),".hermes");return Ee.join(r,"auth.json")}function ie(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=un(),o=an(n),s=oe(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 H(e=new Date().toISOString()){let r=Mr(e);if(r.ready)return{...r,path:"codex_cli"};let t=ie(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 Dr=["low","medium","high"],Br={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Ur(e,r){let t=N(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function cn(e,r){let t=N(e.providerId),n=N(r.providerId),o=Dr.indexOf(t.costTier)-Dr.indexOf(n.costTier);if(o!==0)return o;let s=Br[e.binding.authSource]-Br[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ce(e){let r=Pr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&Ur(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(cn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Ur(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 pn}from"node:os";import mn from"node:path";var fn="claude";function gn(){let e=pn();return[mn.join(e,".claude",".credentials.json")]}function Lr(e=new Date().toISOString()){let r=g(fn,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:K("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=gn().find(i=>dn(i)),o=oe(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 Sn}from"node:fs";import{homedir as bn}from"node:os";import M from"node:path";import{closeSync as Vu,existsSync as xn,mkdirSync as Gu,openSync as qu,statSync as Ju,unlinkSync as zu}from"node:fs";d();import W from"node:path";pe();import{existsSync as j,readdirSync as hn}from"node:fs";import O from"node:path";var yn=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function kn(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 Rn(e){let r=O.join(e,"versions");if(!j(r))return null;let t=null,n=-1;for(let o of hn(r,{withFileTypes:!0})){if(!o.isDirectory()||!yn.test(o.name))continue;let s=kn(o.name);s==null||s<=n||(n=s,t=O.join(r,o.name))}return t}function Oe(e){let r=e?.trim()||O.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=O.join(r,"node.exe"),n=O.join(r,"index.js");if(j(t)&&j(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=Rn(r);if(!o)return null;let s=O.join(o,"node.exe"),i=O.join(o,"index.js");return!j(s)||!j(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function _n(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:k(),bundledVersionDir:t}}function Fr(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&xn(W.join(W.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Oe(W.dirname(e)):t?{nodeExe:e,indexJs:W.join(W.dirname(e),"index.js"),versionDir:W.dirname(e)}:Oe();if(o)return _n(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:k()}}import{spawnSync as vn}from"node:child_process";function Ae(e,r=process.env){try{let t;try{t=Fr(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 we(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(M.join(t,".config","cursor","auth.json")),r.push(M.join(t,".cursor-agent","auth.json")));let n=bn();if(r.push(M.join(n,".config","cursor","auth.json")),r.push(M.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(M.join(o,"cursor-agent","auth.json")),s&&r.push(M.join(s,"cursor","auth.json"))}return r}var En="agent";function $r(e=new Date().toISOString()){let r=g(En,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:K("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=we().find(l=>Sn(l)),o=Ae(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 Cn,readFileSync as On}from"node:fs";import{homedir as An}from"node:os";import Pe from"node:path";var wn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Pn(){let e=process.env.HERMES_HOME?.trim(),r=e?Pe.resolve(e):Pe.join(An(),".hermes");return Pe.join(r,".env")}function In(e){try{let r=On(e,"utf8"),t=[];for(let n of wn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Hr(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=Pn(),o=Cn(n),s=o?In(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function jr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=H(r),n={codex:t,cursor:$r(r),claude:Lr(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:Hr(r),hermesOpenAiCodex:ie(r),codexAdapterPath:t.path,readyCount:o}}var Tn=[/\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],Nn=[/\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 Ie(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Kn(e){let r=Ie(e,"executorRef").toLowerCase(),t=Ie(e,"title").toLowerCase(),n=Ie(e,"description").toLowerCase(),o=`${r}
|
|
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 $e}from"node:os";import He from"node:path";function mt(e){return e==="~"?$e():e.startsWith("~/")||e.startsWith("~\\")?He.join($e(),e.slice(2)):e}function x(e){return He.resolve(mt(e))}var b=a(()=>{"use strict"});function k(e=process.platform){return e!=="win32"}var je=a(()=>{"use strict"});var d=a(()=>{"use strict";je()});var ft,Eo,gt,So,he=a(()=>{"use strict";ft=["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"],Eo=new Set(ft),gt=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],So=new Set(gt)});var Z=a(()=>{"use strict";b();d();he()});var Ye=a(()=>{"use strict";Z()});var ye=a(()=>{"use strict";Z();b();Ye()});var ke=a(()=>{"use strict";d()});var v=a(()=>{"use strict"});var Q=a(()=>{"use strict"});var Ve=a(()=>{"use strict"});var Yo,Vo,Re=a(()=>{"use strict";Yo=25*1024*1024*1024,Vo=12*1024*1024*1024});var Xo,Zo,Ge=a(()=>{"use strict";Re();Xo=5*1024*1024*1024,Zo=10*1024*1024*1024});var oi,ii,_e=a(()=>{"use strict";Ge();Re();oi=30*1024*1024*1024,ii=15*1024*1024*1024});var qe=a(()=>{"use strict";d()});import Rt from"node:path";var fi,be=a(()=>{"use strict";b();qe();fi=Rt.join(".openclaw","harness")});var re=a(()=>{"use strict";E();v();Q();te();be()});var Xe=a(()=>{"use strict";E();be();re();d()});var oe=a(()=>{"use strict";Xe();d()});var Qe=a(()=>{"use strict";oe();d()});var er=a(()=>{"use strict"});var rr=a(()=>{"use strict";er();d()});var tr=a(()=>{"use strict"});var nr=a(()=>{"use strict";tr()});var ie=a(()=>{"use strict"});var or=a(()=>{"use strict"});var ir=a(()=>{"use strict"});var sr=a(()=>{"use strict";nr();d();ie();or();ir()});var ds,R=a(()=>{"use strict";ds=String.raw`"use strict";
|
|
2
|
+
const cp = require("child_process"), fs = require("fs");
|
|
3
|
+
const argv = process.argv.slice(1);
|
|
4
|
+
const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
|
|
5
|
+
const startedMs = Date.now();
|
|
6
|
+
function cgroupOomKills() {
|
|
7
|
+
try {
|
|
8
|
+
const line = fs.readFileSync("/proc/self/cgroup", "utf8").split("\n").find((l) => l.startsWith("0::"));
|
|
9
|
+
if (!line) return null;
|
|
10
|
+
const file = "/sys/fs/cgroup" + line.slice(3).trim().replace(/\/$/, "") + "/memory.events";
|
|
11
|
+
const m = /(?:^|\n)oom_kill (\d+)/.exec(fs.readFileSync(file, "utf8"));
|
|
12
|
+
return m ? Number(m[1]) : null;
|
|
13
|
+
} catch { return null; }
|
|
14
|
+
}
|
|
15
|
+
function kernelLog() {
|
|
16
|
+
const override = process.env.KYNVER_EXIT_CAPTURE_KERNEL_LOG_FILE;
|
|
17
|
+
if (override) { try { return fs.readFileSync(override, "utf8"); } catch { return ""; } }
|
|
18
|
+
const run = (bin, a) => {
|
|
19
|
+
try {
|
|
20
|
+
const r = cp.spawnSync(bin, a, { encoding: "utf8", timeout: 3000, maxBuffer: 8 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
|
|
21
|
+
return r.status === 0 ? String(r.stdout || "") : "";
|
|
22
|
+
} catch { return ""; }
|
|
23
|
+
};
|
|
24
|
+
return run("journalctl", ["-k", "-q", "--no-pager", "--since", "@" + Math.floor(startedMs / 1000)]) || run("dmesg", []);
|
|
25
|
+
}
|
|
26
|
+
const oomBefore = cgroupOomKills();
|
|
27
|
+
let child, finished = false;
|
|
28
|
+
function write(rec) {
|
|
29
|
+
try { fs.writeFileSync(exitFile, JSON.stringify(rec, null, 2) + "\n"); } catch {}
|
|
30
|
+
}
|
|
31
|
+
function finish(code, signal, spawnError) {
|
|
32
|
+
if (finished) return;
|
|
33
|
+
finished = true;
|
|
34
|
+
const rec = { exitCode: code, signal: signal || null, startedAt: new Date(startedMs).toISOString(), endedAt: new Date().toISOString(), childPid: child && child.pid };
|
|
35
|
+
if (spawnError) rec.spawnError = spawnError;
|
|
36
|
+
if (signal === "SIGKILL" || code === 137 || (code !== 0 && code !== null)) {
|
|
37
|
+
const oomAfter = cgroupOomKills();
|
|
38
|
+
if (oomBefore !== null && oomAfter !== null && oomAfter > oomBefore) {
|
|
39
|
+
rec.oomEvidence = { source: "cgroup", detail: "memory.events oom_kill " + oomBefore + " -> " + oomAfter };
|
|
40
|
+
} else if (signal === "SIGKILL" || code === 137) {
|
|
41
|
+
const pid = child && child.pid;
|
|
42
|
+
const hit = kernelLog().split("\n").find((l) => pid && new RegExp("(?:Killed process|oom-kill:.*pid=|Memory cgroup out of memory: Killed process) ?" + pid + "\\b").test(l));
|
|
43
|
+
if (hit) rec.oomEvidence = { source: "kernel_log", detail: hit.trim().slice(0, 300) };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
write(rec);
|
|
47
|
+
if (signal) {
|
|
48
|
+
const n = (require("os").constants.signals || {})[signal];
|
|
49
|
+
process.exit(128 + (n || 9));
|
|
50
|
+
}
|
|
51
|
+
process.exit(code === null ? 1 : code);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
child = cp.spawn(cmd, args, { stdio: "inherit" });
|
|
55
|
+
} catch (e) {
|
|
56
|
+
process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
|
|
57
|
+
finish(127, null, String(e && e.message));
|
|
58
|
+
}
|
|
59
|
+
for (const s of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(s, () => { try { child.kill(s); } catch {} });
|
|
60
|
+
child.on("error", (e) => {
|
|
61
|
+
process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
|
|
62
|
+
if (!child.pid) finish(127, null, String(e && e.message));
|
|
63
|
+
});
|
|
64
|
+
child.on("exit", (code, signal) => finish(code, signal));
|
|
65
|
+
`});var ar=a(()=>{"use strict";oe();d();R()});var lr=a(()=>{"use strict";ie()});var cr=a(()=>{"use strict"});var Ss,Cs,ur=a(()=>{"use strict";Z();Ss=10*6e4,Cs=60*6e4});var dr=a(()=>{"use strict"});var ve=a(()=>{"use strict"});var pr=a(()=>{"use strict"});var mr=a(()=>{"use strict";ve();pr()});var fr=a(()=>{"use strict";rr();sr();ar();R();ie();lr();cr();ur();dr();mr();ve();d()});var gr=a(()=>{"use strict";fr();d()});var Nt,Kt,hr=a(()=>{"use strict";Ve();E();v();Q();te();_e();oe();Qe();gr();d();Nt=500*1024*1024,Kt=4*1024*1024*1024});var te=a(()=>{"use strict";hr()});import{homedir as Wt}from"node:os";import Mt from"node:path";var yr,Ee=a(()=>{"use strict";yr=Mt.join(Wt(),".kynver",".env")});var kr=a(()=>{"use strict"});var Rr=a(()=>{"use strict";kr()});var _r=a(()=>{"use strict"});var xr=a(()=>{"use strict";d()});var Se=a(()=>{"use strict";Rr();_r();xr()});var br=a(()=>{"use strict"});var vr=a(()=>{"use strict";br()});var se=a(()=>{"use strict";Ee();b();E();Se();vr()});var Er=a(()=>{"use strict";v();v()});var Sr=a(()=>{"use strict";Ee();Se();se()});var Ce=a(()=>{"use strict"});var Cr=a(()=>{"use strict";ye();v();Er();E();se();Sr();ke();Ce();re()});function S(e){let r=e.trim().toLowerCase();return Vt[r]??r}var Or,Yt,Vt,ae=a(()=>{"use strict";Or=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Yt=Or.join("|"),Vt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});var Ar=a(()=>{"use strict";b()});var wr=a(()=>{"use strict";Ar()});var Pr=a(()=>{"use strict"});var Ir=a(()=>{"use strict";Pr()});import{existsSync as qt,mkdirSync as dc,readFileSync as Jt,writeFileSync as pc}from"node:fs";import{homedir as zt,totalmem as fc}from"node:os";import Oe from"node:path";function Xt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:x(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:x(e.defaultRepo.trim())}:{}}}function N(){if(!qt(Tr))return{};try{return Xt(JSON.parse(Jt(Tr,"utf8")))}catch{return{}}}var Nr,Tr,Pc,Ic,Tc,E=a(()=>{"use strict";ye();b();ke();v();Q();te();_e();se();Cr();ae();re();wr();Ce();Ir();Nr=Oe.join(zt(),".kynver"),Tr=Oe.join(Nr,"config.json"),Pc=Oe.join(Nr,"credentials");Ic=500*1024*1024,Tc=4*1024*1024*1024});var lt=/^claude[-_]/i,ct=/^(?:opus|sonnet|haiku)\b/i;function Ue(e){let r=e.trim();return lt.test(r)||ct.test(r)}function Le(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function fe(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Fe(e){return e.trim().toLowerCase().startsWith("gemini-")}function ut(e){return Le(e)?"codex":Ue(e)?"claude":Fe(e)?"gemini":(fe(e),"cursor")}function dt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function pt(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?Ue(n)||Le(n)||fe(n)||Fe(n)?{lane:t,model:n,provider:ut(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function f(e){let r=typeof e=="string"?e.trim():"";return r?dt(r)??pt(r):null}function ge(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!fe(r.model)):!1}E();var Kr={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function K(e){return Kr[e]}function Wr(){return Object.values(Kr)}import{existsSync as cn}from"node:fs";import{homedir as un}from"node:os";import H from"node:path";import{createHash as Ur}from"node:crypto";import{statSync as ln}from"node:fs";import{spawnSync as Lr}from"node:child_process";import{existsSync as Br,readFileSync as Zt}from"node:fs";import C from"node:path";var $=class extends Error{constructor(t){super(`${t} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=t;this.name="UnresolvableWindowsShimError"}shimPath},Qt=".COM;.EXE;.BAT;.CMD";function en(e){return e.includes("/")||e.includes("\\")}function rn(e){return(e.PATHEXT||Qt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function tn(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function nn(e,r={}){let t=r.env??process.env,n=r.exists??Br,o=rn(t),s=C.win32.extname(e)!=="",i=l=>s?[l]:o.map(c=>`${l}${c}`);if(en(e)||C.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of tn(t).split(";").map(c=>c.trim()).filter(Boolean)){let c=i(C.win32.join(l,e)).find(u=>n(u));if(c)return c}return null}var Mr=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,on=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function Dr(e){return e.replace(/^[\\/]+/,"")}function sn(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=on.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Mr.exec(n);if(o)return Dr(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?Mr.exec(i):null;if(l)return Dr(l[1])}return null}function an(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=nn(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=C.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(me=>Zt(me,"utf8")),i=r.exists??Br,l;try{l=s(n)}catch{throw new $(n)}let c=sn(l);if(!c)throw new $(n);let u=C.win32.dirname(n),p=C.win32.join(u,c);if(!i(p))throw new $(n);let F=C.win32.join(u,"node.exe");return{executable:i(F)?F:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function O(e,r,t={}){let n=an(e,t);return[n.executable,[...n.prefixArgs,...r]]}function y(e){try{let r=ln(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Ur("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function W(e){return Ur("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=O(e,r),i=Lr(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let l=(i.stderr||i.stdout||"").trim(),c=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:l?`${c}: ${l.slice(0,200)}`:c}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function le(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=O(e,r);return Lr(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var dn="codex";function pn(){let e=un();return[process.env.CODEX_HOME?.trim()?H.join(H.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,H.join(e,".codex","auth.json"),H.join(e,".config","codex","auth.json")].filter(t=>!!t)}function mn(e){return H.dirname(e)}function fn(e){let r,t;for(let n of pn()){if(!cn(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:mn(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Fr(e=new Date().toISOString()){let r=g(dn,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:W("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=fn(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as gn}from"node:fs";import{homedir as hn}from"node:os";import Ae from"node:path";function yn(){let e=process.env.HERMES_HOME?.trim(),r=e?Ae.resolve(e):Ae.join(hn(),".hermes");return Ae.join(r,"auth.json")}function ce(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=yn(),o=gn(n),s=le(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function j(e=new Date().toISOString()){let r=Fr(e);if(r.ready)return{...r,path:"codex_cli"};let t=ce(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var $r=["low","medium","high"],Hr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function jr(e,r){let t=K(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function kn(e,r){let t=K(e.providerId),n=K(r.providerId),o=$r.indexOf(t.costTier)-$r.indexOf(n.costTier);if(o!==0)return o;let s=Hr[e.binding.authSource]-Hr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function we(e){let r=Wr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&jr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(kn)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return jr(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as Rn}from"node:fs";import{homedir as _n}from"node:os";import xn from"node:path";var bn="claude";function vn(){let e=_n();return[xn.join(e,".claude",".credentials.json")]}function Yr(e=new Date().toISOString()){let r=g(bn,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:W("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=vn().find(i=>Rn(i)),o=le(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as Tn}from"node:fs";import{homedir as In}from"node:os";import D from"node:path";R();import{closeSync as yu,existsSync as An,mkdirSync as ku,openSync as Ru,statSync as _u,unlinkSync as xu}from"node:fs";d();import M from"node:path";he();import{existsSync as Y,readdirSync as En}from"node:fs";import A from"node:path";var Sn=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Cn(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function On(e){let r=A.join(e,"versions");if(!Y(r))return null;let t=null,n=-1;for(let o of En(r,{withFileTypes:!0})){if(!o.isDirectory()||!Sn.test(o.name))continue;let s=Cn(o.name);s==null||s<=n||(n=s,t=A.join(r,o.name))}return t}function Pe(e){let r=e?.trim()||A.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=A.join(r,"node.exe"),n=A.join(r,"index.js");if(Y(t)&&Y(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=On(r);if(!o)return null;let s=A.join(o,"node.exe"),i=A.join(o,"index.js");return!Y(s)||!Y(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function wn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:k(),bundledVersionDir:t}}function Vr(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&An(M.join(M.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Pe(M.dirname(e)):t?{nodeExe:e,indexJs:M.join(M.dirname(e),"index.js"),versionDir:M.dirname(e)}:Pe();if(o)return wn(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:k()}}import{spawnSync as Pn}from"node:child_process";function Ie(e,r=process.env){try{let t;try{t=Vr(e)}catch{t={executable:e,prefixArgs:[]}}let n=Pn(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function Te(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(D.join(t,".config","cursor","auth.json")),r.push(D.join(t,".cursor-agent","auth.json")));let n=In();if(r.push(D.join(n,".config","cursor","auth.json")),r.push(D.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(D.join(o,"cursor-agent","auth.json")),s&&r.push(D.join(s,"cursor","auth.json"))}return r}var Nn="agent";function Gr(e=new Date().toISOString()){let r=g(Nn,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:W("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Te().find(l=>Tn(l)),o=Ie(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as Kn,readFileSync as Wn}from"node:fs";import{homedir as Mn}from"node:os";import Ne from"node:path";var Dn=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Bn(){let e=process.env.HERMES_HOME?.trim(),r=e?Ne.resolve(e):Ne.join(Mn(),".hermes");return Ne.join(r,".env")}function Un(e){try{let r=Wn(e,"utf8"),t=[];for(let n of Dn)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function qr(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Bn(),o=Kn(n),s=o?Un(n):[],l=s.some(u=>u.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",c=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:c?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Jr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=j(r),n={codex:t,cursor:Gr(r),claude:Yr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:qr(r),hermesOpenAiCodex:ce(r),codexAdapterPath:t.path,readyCount:o}}var Ln=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],Fn=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function Ke(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function $n(e){let r=Ke(e,"executorRef").toLowerCase(),t=Ke(e,"title").toLowerCase(),n=Ke(e,"description").toLowerCase(),o=`${r}
|
|
2
66
|
${t}
|
|
3
|
-
${n}`;return
|
|
67
|
+
${n}`;return Ln.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":Fn.some(s=>s.test(o))?"low":"elevated"}function Hn(e){let r=K(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 jn(e){let r=e.inventory??Jr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function w(e){let r=Hn({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 zr(e){let r=e.task??{},t=$n(r),n=jn({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=B;if(o==="codex"||o==="provider:codex"){let u=n.bindings.codex;if(!u.ready){let p=we({inventory:n,riskClass:t});return w(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 w({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 w({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 w({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=we({inventory:n,riskClass:t});if(l)return w({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 w({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:c.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...c.ready?{}:{escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}})}R();d();var Xr="kynver",Zr=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Yn=Zr.map(e=>`mcp__${Xr}__${e}`);var q="claude-sonnet-4-6",J="claude-opus-4-8";R();d();R();d();var Sd=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";function Gn(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}var U=Gn();R();d();var We="openai-compatible",np=600*1e3;R();d();var P="gemini";function I(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var L="gemini-api";var Cp=600*1e3;var rt="claude-sonnet-4-6",z="composer-2.5";function m(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function zn(e){if(!e)return;let r=m(e,"workerModelOverride")||m(e,"modelOverride");return r||`${m(e,"title")}
|
|
4
68
|
${m(e,"description")}
|
|
5
|
-
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
69
|
+
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function Qr(e){return e.toLowerCase()}function pe(e=N()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||rt}function ue(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-")?P:"cursor"}function Xn(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:z,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:q,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:I(),provider:P,rule:n&&n!==P?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:I(),provider:L,rule:n&&n!==L?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function et(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 Zn=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function tt(e,r,t){return Zn.has(e)?J:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?J:q}function nt(e){let r=Qr(m(e,"executorRef")),t=m(e,"title").toLowerCase(),n=m(e,"priority")||"normal",o=Qr(m(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=tt(o,r,t);return{provider:"claude",model:i,rule:i===J?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:U,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:U},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=f(m(e,"executorRef"));return{provider:We,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=f(m(e,"executorRef"));return{provider:L,...i?.model?{model:i.model}:{model:I()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=f(m(e,"executorRef"));return{provider:P,...i?.model?{model:i.model}:{model:I()},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:U,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 et(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(et(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=pe();return{model:s,provider:ue(s),rule:"default:global"}}function Qn(e){return e?f(m(e,"executorRef")):null}function eo(e){switch(S(e)){case P:case L:return I();case"claude":return q;case"codex":return U;case"cursor":return z;default:return}}var Me="explicit:cli_provider",ot="config:worker_provider";function it(e,r,t){let n=S(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:eo(n)??e.model,rule:t}}function ro(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Me?e:it(e,t,Me)}function to(e,r){if(r.explicitProvider?.trim()||De(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=S(t);return n===B||n===e.provider?e:it(e,n,ot)}function no(e){let r,t=Qn(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=Xn(c,e.explicitProvider);u?r=u:r={model:c,provider:e.explicitProvider?.trim()||ue(c),rule:"explicit:cli",requestedModel:c}}else if(n)r={model:n,provider:o||ue(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&de(e.task)){let c=zn(e.task),u,p;if(c)u=c,p="task:provider_override";else{let F=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Be=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",me=typeof e.task.title=="string"?e.task.title.toLowerCase():"";u=tt(F,Be,me),p=u===J?"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=nt(e.task);r={...c,requestedModel:c.model}}else{let c=pe();r={model:c,provider:e.explicitProvider?.trim()||ue(c),rule:"default:global",requestedModel:c}}r=ro(r,e.explicitProvider),r=to(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&S(e.configuredProvider)!==B&&r.rule==="config:worker_provider",i=st({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===Me||i.rule===ot||_(i.provider)&&(e.explicitProviderIsOperatorOverride||de(e.task))||i.provider===We||i.provider===P||i.provider===L||i.provider==="codex")return i;let l=zr({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??U:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function oo(e,r,t){return e||r||t||pe()||q}ae();ae();var B="cursor",io=new Set(["claude","opus","anthropic"]),so=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function X(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function _(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return io.has(r)?!0:r.includes("claude")||r.includes("opus")}function de(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&_(r))return!0;let t=X(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(X(e,"executorRef"));if(n?.provider&&_(n.provider)||n?.model&&_(ao(n.model)))return!0;let o=X(e,"description");if(so.some(i=>i.test(o)))return!0;let s=X(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function ao(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function lo(e,r){return{provider:B,model:z,rule:`policy:cursor_default${r}`,requestedModel:e}}var co=["explicit:","executor_ref:","factory:","task:"];function uo(e){return co.some(r=>e.startsWith(r))}function De(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||f(X(e,"executorRef"))?.provider?!0:de(e)}function st(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&_(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||uo(r.rule)||De(t)||!_(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return lo(r.model,o)}function po(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function at(e){return e?.trim()||void 0}function mo(e){let r=po(e.task),t=f(r),n=e.explicitProvider?.trim().toLowerCase(),o=at(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=at(e.routing.model),p={provider:c,model:u,rule:e.routing.rule};return s&&s!=="cursor"||r&&ge(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&&!_(c)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${l}) but routing resolved model=${u} (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:p}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:p}:{ok:!0,resolved:p}}export{z as CURSOR_DEFAULT_MODEL,rt as GLOBAL_DEFAULT_MODEL,mo as assessDispatchModelGuard,ge as executorRefRequestsNonCursorWorker,nt as inferModelRoutingFromTask,f as parseExecutorRefRoutingIntent,pe as resolveGlobalDefaultModel,oo as resolveModelFallback,no as resolveWorkerLaunch};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readFile as Ee}from"node:fs/promises";import{homedir as ve}from"node:os";import m from"node:path";import{existsSync as L,readFileSync as le}from"node:fs";import k from"node:path";import{existsSync as C,readFileSync as D}from"node:fs";import{homedir as oe}from"node:os";import c from"node:path";import{fileURLToPath as se}from"node:url";import{spawnSync as ne}from"node:child_process";import{homedir as T}from"node:os";import I from"node:path";function ee(e){return e==="~"?T():e.startsWith("~/")||e.startsWith("~\\")?I.join(T(),e.slice(2)):e}function h(e){return I.resolve(ee(e))}function K(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var re=["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"],Ye=new Set(re);var te=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Ue=new Set(te);function _(e,r){try{let t=ne("git",r,K({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}var ie=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"];function ae(e){let r=c.join(e,"package.json");if(!C(r))return null;try{let t=JSON.parse(D(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function G(e){return ae(e)==="kynver"}function V(e){let r=c.resolve(e);if(!C(r))return null;let t=_(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?c.resolve(n):null}function ce(e=import.meta.url){let r=c.dirname(se(e));for(let t=0;t<8;t+=1){let n=c.join(r,"package.json");if(C(n))try{if(JSON.parse(D(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=c.dirname(r);if(o===r)break;r=o}return null}function R(e,r,t,n,o){if(!t)return;let s=c.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!G(s)||(e.add(s),r.push({repo:s,source:n}))}function ue(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];R(t,n,V(r),"cwd_git",{requireMonorepo:!1});let o=ce(e?.runtimeModuleUrl??import.meta.url);o&&R(t,n,V(o),"runtime_checkout");let s=oe();for(let l of ie)R(t,n,h(c.join(s,l)),"well_known_path");let a=c.resolve(e?.cwd??process.cwd());return n.filter(l=>{if(l.source!=="runtime_checkout"||!G(l.repo))return!0;let i=c.resolve(l.repo);return a===i||a.startsWith(`${i}${c.sep}`)})}function $(e){return ue(e)[0]??null}var U={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},j=Object.keys(U),y={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},pe={"@kynver-app/runtime":"packages/kynver-runtime/package.json","@kynver-app/openclaw-agent-os":"packages/kynver-openclaw-agent-os/package.json","@kynver-app/mcp-agent-os":"packages/kynver-mcp-agent-os/package.json"};function Y(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function E(e,r){let t=Y(e),n=Y(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}function W(e,r){return E(e,r)>=0}function me(e){let r=null;for(let t of e)(!r||E(t,r)>0)&&(r=t);return r}function de(e){try{let r=JSON.parse(le(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function ge(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=k.resolve(o);if(L(k.join(s,"packages/kynver-runtime/package.json"))&&L(k.join(s,"package.json")))return s}return $({cwd:e})?.repo??null}function H(e={}){let r=e.cwd??process.cwd(),t=ge(r,e.repoRoot);if(!t)return{};let n={};for(let o of j){let s=k.join(t,pe[o]),a=de(s);a&&(n[o]={version:a,source:"repo",path:s})}return n}function fe(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function ye(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,a=[];return s&&W(s,t)?(a.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${fe(r).join("; ")}.`),a.push("Do not publish npm packages or wait on an operator release."),a):(n?a.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):a.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&a.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&s&&a.push(`Repo checkout reports ${s}; rebuild/link repo source if you develop from the monorepo.`),a)}function ke(e){if(e.length===0)return{version:null,source:"unknown"};let r=me(e.map(n=>n.version));if(!r)return{version:null,source:"unknown"};let t=e.find(n=>n.version===r)??e[0];return{version:t.version,source:t.source}}function M(e={}){let r=e.undetectedPolicy??"skip",t=(i,u)=>i?typeof i=="string"?{version:i,source:u}:i:null,n=j.map(i=>{let u=U[i],g=[],
|
|
2
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function B(e={}){let r=M(e);if(!r.ok)throw new A(r);return r}var Pe=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function d(e){let r=e?.trim();return r||null}function Se(e){return[...new Set(e.filter(r=>!!r))]}function he(){let e=ve(),r=d(process.env.KYNVER_OPENCLAW_NPM_ROOT)??d(process.env.OPENCLAW_NPM_ROOT)??m.join(e,".openclaw","npm"),t=d(process.env.KYNVER_NPM_GLOBAL_ROOT)??d(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(d(process.env.NPM_CONFIG_PREFIX)?m.join(d(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):m.join(e,".npm-global","lib","node_modules"));return Se([m.join(r,"lib","node_modules"),m.join(r,"node_modules"),t.endsWith("node_modules")?t:m.join(t,"lib","node_modules")])}async function _e(e){try{let r=JSON.parse(await Ee(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function Re(e){let r=he(),t=new Set,n=[];for(let o of r){let s=m.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function F(e=new Date().toISOString()){let r={};for(let t of Pe){let n=null;for(let o of Re(t)){let s=await _e(o);s&&(!n||E(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{existsSync as Ce,readFileSync as Ae}from"node:fs";import{dirname as w,join as X}from"node:path";import{fileURLToPath as J}from"node:url";function Me(e){let r=w(J(e));for(let t=0;t<6;t+=1){if(Ce(X(r,"package.json")))return r;let n=w(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${w(J(e))}`)}function we(e=import.meta.url){let r=X(Me(e),"package.json"),t=JSON.parse(Ae(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var z=we();function
|
|
1
|
+
import{readFile as Ee}from"node:fs/promises";import{homedir as ve}from"node:os";import m from"node:path";import{existsSync as L,readFileSync as le}from"node:fs";import k from"node:path";import{existsSync as C,readFileSync as D}from"node:fs";import{homedir as oe}from"node:os";import c from"node:path";import{fileURLToPath as se}from"node:url";import{spawnSync as ne}from"node:child_process";import{homedir as T}from"node:os";import I from"node:path";function ee(e){return e==="~"?T():e.startsWith("~/")||e.startsWith("~\\")?I.join(T(),e.slice(2)):e}function h(e){return I.resolve(ee(e))}function K(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var re=["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"],Ye=new Set(re);var te=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Ue=new Set(te);function _(e,r){try{let t=ne("git",r,K({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}var ie=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"];function ae(e){let r=c.join(e,"package.json");if(!C(r))return null;try{let t=JSON.parse(D(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function G(e){return ae(e)==="kynver"}function V(e){let r=c.resolve(e);if(!C(r))return null;let t=_(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?c.resolve(n):null}function ce(e=import.meta.url){let r=c.dirname(se(e));for(let t=0;t<8;t+=1){let n=c.join(r,"package.json");if(C(n))try{if(JSON.parse(D(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=c.dirname(r);if(o===r)break;r=o}return null}function R(e,r,t,n,o){if(!t)return;let s=c.resolve(t);e.has(s)||(o?.requireMonorepo??!0)&&!G(s)||(e.add(s),r.push({repo:s,source:n}))}function ue(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];R(t,n,V(r),"cwd_git",{requireMonorepo:!1});let o=ce(e?.runtimeModuleUrl??import.meta.url);o&&R(t,n,V(o),"runtime_checkout");let s=oe();for(let l of ie)R(t,n,h(c.join(s,l)),"well_known_path");let a=c.resolve(e?.cwd??process.cwd());return n.filter(l=>{if(l.source!=="runtime_checkout"||!G(l.repo))return!0;let i=c.resolve(l.repo);return a===i||a.startsWith(`${i}${c.sep}`)})}function $(e){return ue(e)[0]??null}var U={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},j=Object.keys(U),y={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},pe={"@kynver-app/runtime":"packages/kynver-runtime/package.json","@kynver-app/openclaw-agent-os":"packages/kynver-openclaw-agent-os/package.json","@kynver-app/mcp-agent-os":"packages/kynver-mcp-agent-os/package.json"};function Y(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function E(e,r){let t=Y(e),n=Y(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}function W(e,r){return E(e,r)>=0}function me(e){let r=null;for(let t of e)(!r||E(t,r)>0)&&(r=t);return r}function de(e){try{let r=JSON.parse(le(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function ge(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=k.resolve(o);if(L(k.join(s,"packages/kynver-runtime/package.json"))&&L(k.join(s,"package.json")))return s}return $({cwd:e})?.repo??null}function H(e={}){let r=e.cwd??process.cwd(),t=ge(r,e.repoRoot);if(!t)return{};let n={};for(let o of j){let s=k.join(t,pe[o]),a=de(s);a&&(n[o]={version:a,source:"repo",path:s})}return n}function fe(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function ye(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,a=[];return s&&W(s,t)?(a.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${fe(r).join("; ")}.`),a.push("Do not publish npm packages or wait on an operator release."),a):(n?a.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):a.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&a.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&s&&a.push(`Repo checkout reports ${s}; rebuild/link repo source if you develop from the monorepo.`),a)}function ke(e){if(e.length===0)return{version:null,source:"unknown"};let r=me(e.map(n=>n.version));if(!r)return{version:null,source:"unknown"};let t=e.find(n=>n.version===r)??e[0];return{version:t.version,source:t.source}}function M(e={}){let r=e.undetectedPolicy??"skip",t=(i,u)=>i?typeof i=="string"?{version:i,source:u}:i:null,n=j.map(i=>{let u=U[i],g=[],b=t(e.installed?.[i],"installed"),v=t(e.repo?.[i],"repo"),N=t(e.self?.[i],"self");b&&g.push(b),v&&g.push(v),N&&g.push(N);let{version:p,source:f}=ke(g),q=v?.version??null,O=!!p,P=!O&&r==="skip",S=O?W(p,u):P,Q=S?[]:ye({packageName:i,minimumVersion:u,effectiveVersion:p,effectiveSource:f,repoVersion:q}),Z=P?`${y[i]} is not installed \u2014 memory-cost minimum ${u} applies when this package is present.`:S?`${y[i]} ${p} meets memory-cost minimum ${u} (${f}).`:`${y[i]} is below memory-cost minimum ${u}`+(p?` (effective ${p} via ${f})`:" (no version detected)")+".";return{packageName:i,displayName:y[i],minimumVersion:u,effectiveVersion:p,effectiveSource:f,ok:S,skipped:P,summary:Z,remediation:Q}}),o=n.filter(i=>!i.ok),s=n.filter(i=>i.effectiveVersion).length,a=o.length===0,l=a?s===0?"No managed AgentOS packages detected \u2014 memory-cost version guard has nothing to enforce.":s===n.length?"All managed AgentOS packages meet memory-cost minimum versions.":`Detected AgentOS packages meet memory-cost minimum versions (${s}/${n.length} present).`:`Memory-cost package guard blocked ${o.length} stale package(s): ${o.map(i=>`${i.packageName} < ${i.minimumVersion}`).join("; ")}.`;return{ok:a,summary:l,packages:n}}var A=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
2
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function B(e={}){let r=M(e);if(!r.ok)throw new A(r);return r}var Pe=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function d(e){let r=e?.trim();return r||null}function Se(e){return[...new Set(e.filter(r=>!!r))]}function he(){let e=ve(),r=d(process.env.KYNVER_OPENCLAW_NPM_ROOT)??d(process.env.OPENCLAW_NPM_ROOT)??m.join(e,".openclaw","npm"),t=d(process.env.KYNVER_NPM_GLOBAL_ROOT)??d(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(d(process.env.NPM_CONFIG_PREFIX)?m.join(d(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):m.join(e,".npm-global","lib","node_modules"));return Se([m.join(r,"lib","node_modules"),m.join(r,"node_modules"),t.endsWith("node_modules")?t:m.join(t,"lib","node_modules")])}async function _e(e){try{let r=JSON.parse(await Ee(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function Re(e){let r=he(),t=new Set,n=[];for(let o of r){let s=m.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function F(e=new Date().toISOString()){let r={};for(let t of Pe){let n=null;for(let o of Re(t)){let s=await _e(o);s&&(!n||E(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{existsSync as Ce,readFileSync as Ae}from"node:fs";import{dirname as w,join as X}from"node:path";import{fileURLToPath as J}from"node:url";function Me(e){let r=w(J(e));for(let t=0;t<6;t+=1){if(Ce(X(r,"package.json")))return r;let n=w(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${w(J(e))}`)}function we(e=import.meta.url){let r=X(Me(e),"package.json"),t=JSON.parse(Ae(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var z=we();function xe(e){let r={};for(let[t,n]of Object.entries(e))n?.version&&(r[t]={version:n.version,source:"installed",path:n.path});return r}async function x(e={}){let[r,t]=await Promise.all([F(),Promise.resolve(H({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:z;return n["@kynver-app/runtime"]={version:o,source:"self"},e.selfPackageName&&e.selfVersion&&e.selfPackageName!=="@kynver-app/runtime"&&(n[e.selfPackageName]={version:e.selfVersion,source:"self"}),{installed:xe(r),repo:t,self:n,undetectedPolicy:"skip"}}async function be(e={}){let r=await x(e);return M(r)}async function Ne(e={}){let r=await x(e);return B(r)}export{x as buildMemoryCostPackageGuardInput,Ne as enforceMemoryCostPackageGuardAtStartup,be as evaluateMemoryCostPackageGuardAtStartup};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var O=["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"],J=new Set(O);var M=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],F=new Set(M);var E={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},N=Object.keys(E),m={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"};function h(t){let e=t.trim().split("-")[0]?.split("+")[0];if(!e)return null;let n=e.split(".");if(n.length<1||n.length>3)return null;let r=n.map(s=>Number.parseInt(s,10));if(r.some(s=>!Number.isFinite(s)||s<0))return null;for(;r.length<3;)r.push(0);return[r[0],r[1],r[2]]}function k(t,e){let n=h(t),r=h(e);if(!n||!r)return 0;for(let s=0;s<3;s+=1){if(n[s]>r[s])return 1;if(n[s]<r[s])return-1}return 0}function R(t,e){return k(t,e)>=0}function K(t){let e=null;for(let n of t)(!e||k(n,e)>0)&&(e=n);return e}function I(t){return t==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${t}`]}function D(t){let{packageName:e,minimumVersion:n,effectiveVersion:r,effectiveSource:s,repoVersion:a}=t,i=[];return a&&R(a,n)?(i.push(`Use the monorepo checkout (${a}) instead of a stale npm install: ${I(e).join("; ")}.`),i.push("Do not publish npm packages or wait on an operator release."),i):(r?i.push(`Upgrade ${e} from ${r} to >= ${n} (npm install -g ${e}@latest or align OpenClaw npm prefix).`):i.push(`Install ${e} >= ${n} before running memory-heavy AgentOS paths.`),e==="@kynver-app/runtime"&&i.push("Repo-source alternative: npm run kynver:build && npm run kynver"),s==="installed"&&a&&i.push(`Repo checkout reports ${a}; rebuild/link repo source if you develop from the monorepo.`),i)}function $(t){if(t.length===0)return{version:null,source:"unknown"};let e=K(t.map(r=>r.version));if(!e)return{version:null,source:"unknown"};let n=t.find(r=>r.version===e)??t[0];return{version:n.version,source:n.source}}function A(t={}){let e=t.undetectedPolicy??"skip",n=(o,u)=>o?typeof o=="string"?{version:o,source:u}:o:null,r=N.map(o=>{let u=E[o],l=[],S=n(t.installed?.[o],"installed"),f=n(t.repo?.[o],"repo"),v=n(t.self?.[o],"self");S&&l.push(S),f&&l.push(f),v&&l.push(v);let{version:c,source:p}=$(l),P=f?.version??null,_=!!c,g=!_&&e==="skip",y=_?R(c,u):g,x=y?[]:D({packageName:o,minimumVersion:u,effectiveVersion:c,effectiveSource:p,repoVersion:P}),b=g?`${m[o]} is not installed \u2014 memory-cost minimum ${u} applies when this package is present.`:y?`${m[o]} ${c} meets memory-cost minimum ${u} (${p}).`:`${m[o]} is below memory-cost minimum ${u}`+(c?` (effective ${c} via ${p})`:" (no version detected)")+".";return{packageName:o,displayName:m[o],minimumVersion:u,effectiveVersion:c,effectiveSource:p,ok:y,skipped:g,summary:b,remediation:x}}),s=r.filter(o=>!o.ok),a=r.filter(o=>o.effectiveVersion).length,i=s.length===0,C=i?a===0?"No managed AgentOS packages detected \u2014 memory-cost version guard has nothing to enforce.":a===r.length?"All managed AgentOS packages meet memory-cost minimum versions.":`Detected AgentOS packages meet memory-cost minimum versions (${a}/${r.length} present).`:`Memory-cost package guard blocked ${s.length} stale package(s): ${s.map(o=>`${o.packageName} < ${o.minimumVersion}`).join("; ")}.`;return{ok:i,summary:C,packages:r}}var d=class extends Error{result;constructor(e){let n=[e.summary,...e.packages.filter(r=>!r.ok).flatMap(r=>[`- ${r.summary}`,...r.remediation.map(s=>` \u2192 ${s}`)])];super(n.join(`
|
|
2
2
|
`)),this.name="MemoryCostPackageVersionGuardError",this.result=e}};function V(t={}){let e=A(t);if(!e.ok)throw new d(e);return e}export{E as MEMORY_COST_PACKAGE_MIN_VERSIONS,d as MemoryCostPackageVersionGuardError,V as assertMemoryCostPackageVersionGuard,k as compareSemver,A as evaluateMemoryCostPackageVersionGuard};
|