@kynver-app/runtime 0.2.59 → 0.2.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/cli.js +95 -91
- package/dist/index.js +119 -115
- package/dist/local-run-store/index.js +7 -7
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +3 -3
- package/dist/server/model-routing.js +3 -3
- package/dist/server/monitor.js +7 -7
- package/dist/server/worker-policy.js +2 -2
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
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 ke}from"node:os";import be from"node:path";function Ar(e){return e==="~"?ke():e.startsWith("~/")||e.startsWith("~\\")?be.join(ke(),e.slice(2)):e}function v(e){return be.resolve(Ar(e))}var x=a(()=>{"use strict"});var d=a(()=>{"use strict"});var wr,sn,Pr,an,X=a(()=>{"use strict";wr=["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"],sn=new Set(wr),Pr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],an=new Set(Pr)});var Q=a(()=>{"use strict";x();d();X()});var Z=a(()=>{"use strict";Q();x()});var _=a(()=>{"use strict"});var K=a(()=>{"use strict"});var ve=a(()=>{"use strict"});var bn,vn,ee=a(()=>{"use strict";bn=25*1024*1024*1024,vn=12*1024*1024*1024});var Cn,An,xe=a(()=>{"use strict";ee();Cn=5*1024*1024*1024,An=10*1024*1024*1024});var Wn,Kn,re=a(()=>{"use strict";xe();ee();Wn=30*1024*1024*1024,Kn=15*1024*1024*1024});var Se=a(()=>{"use strict";d()});import Tr from"node:path";var jn,te=a(()=>{"use strict";x();Se();jn=Tr.join(".openclaw","harness")});var B=a(()=>{"use strict";k();_();K();D();te()});var Ae=a(()=>{"use strict";k();te();B();d()});var oe=a(()=>{"use strict";Ae();d()});var we=a(()=>{"use strict";oe();d()});var Pe=a(()=>{"use strict"});var Ie=a(()=>{"use strict";Pe();d()});var Ne=a(()=>{"use strict"});var Te=a(()=>{"use strict";Ne()});var We=a(()=>{"use strict";Te();d()});var Ke=a(()=>{"use strict"});var Me=a(()=>{"use strict"});var Be=a(()=>{"use strict"});var ie=a(()=>{"use strict"});var De=a(()=>{"use strict"});var Ue=a(()=>{"use strict";ie();De()});var Le=a(()=>{"use strict";Ie();We();Ke();Me();Q();Be();Ue();ie();d()});var Fe=a(()=>{"use strict";Le()});var Fr,$r,$e=a(()=>{"use strict";ve();k();_();K();D();re();oe();we();Fe();d();Fr=500*1024*1024,$r=4*1024*1024*1024});var D=a(()=>{"use strict";$e()});import{homedir as Hr}from"node:os";import jr from"node:path";var He,se=a(()=>{"use strict";He=jr.join(Hr(),".kynver",".env")});var je=a(()=>{"use strict"});var Ye=a(()=>{"use strict";je()});var Ve=a(()=>{"use strict"});var ae=a(()=>{"use strict";Ye();Ve()});var Ge=a(()=>{"use strict"});var qe=a(()=>{"use strict";Ge()});var U=a(()=>{"use strict";se();x();k();ae();qe()});var ze=a(()=>{"use strict";_();_()});var Je=a(()=>{"use strict";se();ae();U()});var Xe=a(()=>{"use strict";Z();_();ze();k();U();Je();d();B()});import{existsSync as Qr,mkdirSync as Ls,readFileSync as Zr,writeFileSync as Fs}from"node:fs";import{homedir as et,totalmem as Hs}from"node:os";import le from"node:path";function rt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function E(){if(!Qr(Qe))return{};try{return rt(JSON.parse(Zr(Qe,"utf8")))}catch{return{}}}var Ze,Qe,ra,ta,na,k=a(()=>{"use strict";Z();x();d();_();K();D();re();U();Xe();B();Ze=le.join(et(),".kynver"),Qe=le.join(Ze,"config.json"),ra=le.join(Ze,"credentials");ta=500*1024*1024,na=4*1024*1024*1024});var xr=/^claude[-_]/i,Er=/^(?:opus|sonnet|haiku)\b/i;function ye(e){let r=e.trim();return xr.test(r)||Er.test(r)}function Re(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function z(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function _e(e){return e.trim().toLowerCase().startsWith("gemini-")}function Sr(e){return Re(e)?"codex":ye(e)?"claude":_e(e)?"gemini":(z(e),"cursor")}function Or(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==="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 Cr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?ye(n)||Re(n)||z(n)||_e(n)?{lane:t,model:n,provider:Sr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Or(r)??Cr(r):null}function J(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!z(r.model)):!1}k();var er={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 S(e){return er[e]}function rr(){return Object.values(er)}import{existsSync as nt}from"node:fs";import{homedir as ot}from"node:os";import P from"node:path";import{createHash as tr}from"node:crypto";import{statSync as tt}from"node:fs";import{spawnSync as nr}from"node:child_process";function y(e){try{let r=tt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function O(e){return tr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function f(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function g(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=nr(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let i=(o.stderr||o.stdout||"").trim(),s=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:i?`${s}: ${i.slice(0,200)}`:s}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function L(e,r,t={}){let n=t.timeoutMs??8e3;try{return nr(e,r,{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 it="codex";function st(){let e=ot();return[process.env.CODEX_HOME?.trim()?P.join(P.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,P.join(e,".codex","auth.json"),P.join(e,".config","codex","auth.json")].filter(t=>!!t)}function at(e){return P.dirname(e)}function lt(e){let r,t;for(let n of st()){if(!nt(n))continue;r??=n;let o=g(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:at(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??g(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function or(e=new Date().toISOString()){let r=f(it,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:O("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}=lt(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 ut}from"node:fs";import{homedir as ct}from"node:os";import ue from"node:path";function dt(){let e=process.env.HERMES_HOME?.trim(),r=e?ue.resolve(e):ue.join(ct(),".hermes");return ue.join(r,"auth.json")}function F(e=new Date().toISOString()){let r=f("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=g(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=dt(),o=ut(n),i=L(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),s=t.ok&&i.ok;return{path:"hermes_openai_codex",ready:s,authSource:s?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:s?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,i.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function I(e=new Date().toISOString()){let r=or(e);if(r.ready)return{...r,path:"codex_cli"};let t=F(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 ir=["low","medium","high"],sr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function ar(e,r){let t=S(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function pt(e,r){let t=S(e.providerId),n=S(r.providerId),o=ir.indexOf(t.costTier)-ir.indexOf(n.costTier);if(o!==0)return o;let i=sr[e.binding.authSource]-sr[r.binding.authSource];return i!==0?i:e.providerId.localeCompare(r.providerId)}function ce(e){let r=rr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&ar(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(pt)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let i=e.inventory.bindings[o],s;return ar(o,e.riskClass)?i.ready||(s=i.note??`${o} not bound`):s=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:s}}import{existsSync as mt}from"node:fs";import{homedir as ft}from"node:os";import gt from"node:path";var ht="claude";function yt(){let e=ft();return[gt.join(e,".claude",".credentials.json")]}function lr(e=new Date().toISOString()){let r=f(ht,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:O("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=g(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=yt().find(s=>mt(s)),o=L(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),i=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:i?"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 Rt}from"node:fs";import{homedir as _t}from"node:os";import de from"node:path";var kt="agent";function bt(){let e=_t(),r=[de.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(de.join(t,"cursor-agent","auth.json")),n&&r.push(de.join(n,"cursor","auth.json"))}return r}function ur(e=new Date().toISOString()){let r=f(kt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:O("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=g(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=bt().find(i=>Rt(i)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as vt,readFileSync as xt}from"node:fs";import{homedir as Et}from"node:os";import pe from"node:path";var St=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Ot(){let e=process.env.HERMES_HOME?.trim(),r=e?pe.resolve(e):pe.join(Et(),".hermes");return pe.join(r,".env")}function Ct(e){try{let r=xt(e,"utf8"),t=[];for(let n of St)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function cr(e=new Date().toISOString()){let r=f("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=g(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Ot(),o=vt(n),i=o?Ct(n):[],l=i.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 (${i.length?`keys: ${i.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function dr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=I(r),n={codex:t,cursor:ur(r),claude:lr(r)},o=Object.values(n).filter(i=>i.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:cr(r),hermesOpenAiCodex:F(r),codexAdapterPath:t.path,readyCount:o}}var At=[/\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],wt=[/\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 me(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Pt(e){let r=me(e,"executorRef").toLowerCase(),t=me(e,"title").toLowerCase(),n=me(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 Ee}from"node:os";import Se from"node:path";function Mr(e){return e==="~"?Ee():e.startsWith("~/")||e.startsWith("~\\")?Se.join(Ee(),e.slice(2)):e}function S(e){return Se.resolve(Mr(e))}var O=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Br,_n,Dr,kn,ee=a(()=>{"use strict";Br=["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"],_n=new Set(Br),Dr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],kn=new Set(Dr)});var re=a(()=>{"use strict";O();d();ee()});var te=a(()=>{"use strict";re();O()});var _=a(()=>{"use strict"});var L=a(()=>{"use strict"});var Oe=a(()=>{"use strict"});var Wn,Kn,ne=a(()=>{"use strict";Wn=25*1024*1024*1024,Kn=12*1024*1024*1024});var Ln,Fn,Ce=a(()=>{"use strict";ne();Ln=5*1024*1024*1024,Fn=10*1024*1024*1024});var Gn,qn,oe=a(()=>{"use strict";Ce();ne();Gn=30*1024*1024*1024,qn=15*1024*1024*1024});var Pe=a(()=>{"use strict";d()});import Fr from"node:path";var no,ie=a(()=>{"use strict";O();Pe();no=Fr.join(".openclaw","harness")});var $=a(()=>{"use strict";k();_();L();H();ie()});var Ne=a(()=>{"use strict";k();ie();$();d()});var ae=a(()=>{"use strict";Ne();d()});var Te=a(()=>{"use strict";ae();d()});var We=a(()=>{"use strict"});var Ke=a(()=>{"use strict";We();d()});var Me=a(()=>{"use strict"});var Be=a(()=>{"use strict";Me()});var De=a(()=>{"use strict";Be();d()});var Ue=a(()=>{"use strict"});var Le=a(()=>{"use strict"});var Fe=a(()=>{"use strict"});var le=a(()=>{"use strict"});var $e=a(()=>{"use strict"});var He=a(()=>{"use strict";le();$e()});var je=a(()=>{"use strict";Ke();De();Ue();Le();re();Fe();He();le();d()});var Ye=a(()=>{"use strict";je()});var zr,Jr,Ve=a(()=>{"use strict";Oe();k();_();L();H();oe();ae();Te();Ye();d();zr=500*1024*1024,Jr=4*1024*1024*1024});var H=a(()=>{"use strict";Ve()});import{homedir as Xr}from"node:os";import Qr from"node:path";var Ge,ue=a(()=>{"use strict";Ge=Qr.join(Xr(),".kynver",".env")});var qe=a(()=>{"use strict"});var ze=a(()=>{"use strict";qe()});var Je=a(()=>{"use strict"});var ce=a(()=>{"use strict";ze();Je()});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe()});var j=a(()=>{"use strict";ue();O();k();ce();Qe()});var Ze=a(()=>{"use strict";_();_()});var er=a(()=>{"use strict";ue();ce();j()});var rr=a(()=>{"use strict";te();_();Ze();k();j();er();d();$()});function b(e){let r=e.trim().toLowerCase();return at[r]??r}var tr,st,at,Y=a(()=>{"use strict";tr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],st=tr.join("|"),at={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"}});import{existsSync as ut,mkdirSync as ea,readFileSync as ct,writeFileSync as ra}from"node:fs";import{homedir as dt,totalmem as na}from"node:os";import de from"node:path";function pt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:S(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:S(e.defaultRepo.trim())}:{}}}function C(){if(!ut(nr))return{};try{return pt(JSON.parse(ct(nr,"utf8")))}catch{return{}}}var or,nr,ha,Ra,ya,k=a(()=>{"use strict";te();O();d();_();L();H();oe();j();rr();Y();$();or=de.join(dt(),".kynver"),nr=de.join(or,"config.json"),ha=de.join(or,"credentials");Ra=500*1024*1024,ya=4*1024*1024*1024});var Ir=/^claude[-_]/i,Nr=/^(?:opus|sonnet|haiku)\b/i;function be(e){let r=e.trim();return Ir.test(r)||Nr.test(r)}function ve(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Q(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function xe(e){return e.trim().toLowerCase().startsWith("gemini-")}function Tr(e){return ve(e)?"codex":be(e)?"claude":xe(e)?"gemini":(Q(e),"cursor")}function Wr(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 Kr(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?be(n)||ve(n)||Q(n)||xe(n)?{lane:t,model:n,provider:Tr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Wr(r)??Kr(r):null}function Z(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Q(r.model)):!1}k();var ir={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 A(e){return ir[e]}function sr(){return Object.values(ir)}import{existsSync as ft}from"node:fs";import{homedir as gt}from"node:os";import W from"node:path";import{createHash as ar}from"node:crypto";import{statSync as mt}from"node:fs";import{spawnSync as lr}from"node:child_process";function R(e){try{let r=mt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return ar("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function P(e){return ar("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=lr(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function V(e,r,t={}){let n=t.timeoutMs??8e3;try{return lr(e,r,{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 ht="codex";function Rt(){let e=gt();return[process.env.CODEX_HOME?.trim()?W.join(W.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,W.join(e,".codex","auth.json"),W.join(e,".config","codex","auth.json")].filter(t=>!!t)}function yt(e){return W.dirname(e)}function _t(e){let r,t;for(let n of Rt()){if(!ft(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:yt(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 ur(e=new Date().toISOString()){let r=g(ht,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:P("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}=_t(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?R(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 kt}from"node:fs";import{homedir as bt}from"node:os";import pe from"node:path";function vt(){let e=process.env.HERMES_HOME?.trim(),r=e?pe.resolve(e):pe.join(bt(),".hermes");return pe.join(r,"auth.json")}function G(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=vt(),o=kt(n),s=V(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?R(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 K(e=new Date().toISOString()){let r=ur(e);if(r.ready)return{...r,path:"codex_cli"};let t=G(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 cr=["low","medium","high"],dr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function pr(e,r){let t=A(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function xt(e,r){let t=A(e.providerId),n=A(r.providerId),o=cr.indexOf(t.costTier)-cr.indexOf(n.costTier);if(o!==0)return o;let s=dr[e.binding.authSource]-dr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function me(e){let r=sr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&pr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(xt)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return pr(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 Et}from"node:fs";import{homedir as St}from"node:os";import Ot from"node:path";var Ct="claude";function At(){let e=St();return[Ot.join(e,".claude",".credentials.json")]}function mr(e=new Date().toISOString()){let r=g(Ct,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:P("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=At().find(i=>Et(i)),o=V(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?R(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 Pt}from"node:fs";import{homedir as wt}from"node:os";import fe from"node:path";var It="agent";function Nt(){let e=wt(),r=[fe.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(fe.join(t,"cursor-agent","auth.json")),n&&r.push(fe.join(n,"cursor","auth.json"))}return r}function fr(e=new Date().toISOString()){let r=g(It,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:P("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=Nt().find(s=>Pt(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?R(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as Tt,readFileSync as Wt}from"node:fs";import{homedir as Kt}from"node:os";import ge from"node:path";var Mt=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Bt(){let e=process.env.HERMES_HOME?.trim(),r=e?ge.resolve(e):ge.join(Kt(),".hermes");return ge.join(r,".env")}function Dt(e){try{let r=Wt(e,"utf8"),t=[];for(let n of Mt)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function gr(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=Bt(),o=Tt(n),s=o?Dt(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?R(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 hr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=K(r),n={codex:t,cursor:fr(r),claude:mr(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:gr(r),hermesOpenAiCodex:G(r),codexAdapterPath:t.path,readyCount:o}}var Ut=[/\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],Lt=[/\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 he(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ft(e){let r=he(e,"executorRef").toLowerCase(),t=he(e,"title").toLowerCase(),n=he(e,"description").toLowerCase(),o=`${r}
|
|
2
2
|
${t}
|
|
3
|
-
${n}`;return
|
|
3
|
+
${n}`;return Ut.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":Lt.some(s=>s.test(o))?"low":"elevated"}function $t(e){let r=A(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 Ht(e){let r=e.inventory??hr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function v(e){let r=$t({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 Rr(e){let r=e.task??{},t=Ft(r),n=Ht({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:K())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=w;if(o==="codex"||o==="provider:codex"){let u=n.bindings.codex;if(!u.ready){let f=me({inventory:n,riskClass:t});return v(f?{providerId:f.providerId,binding:f.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 v({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 v({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 v({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=me({inventory:n,riskClass:t});if(l)return v({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 v({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"}})}ee();d();var yr="kynver",_r=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],jt=_r.map(e=>`mcp__${yr}__${e}`);var M="claude-sonnet-4-6",B="claude-opus-4-8";d();d();var wl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Vt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var I=Vt();d();var Re="openai-compatible",tu=600*1e3;d();var x="gemini";function E(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var N="gemini-api";var gu=600*1e3;var vr="claude-sonnet-4-6",D="composer-2.5";function p(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function zt(e){if(!e)return;let r=p(e,"workerModelOverride")||p(e,"modelOverride");return r||`${p(e,"title")}
|
|
4
4
|
${p(e,"description")}
|
|
5
|
-
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
5
|
+
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function kr(e){return e.toLowerCase()}function X(e=C()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||vr}function z(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-")?x:"cursor"}function Jt(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:D,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:M,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:E(),provider:x,rule:n&&n!==x?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:E(),provider:N,rule:n&&n!==N?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function br(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 Xt=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function xr(e,r,t){return Xt.has(e)?B:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?B:M}function Er(e){let r=kr(p(e,"executorRef")),t=p(e,"title").toLowerCase(),n=p(e,"priority")||"normal",o=kr(p(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=xr(o,r,t);return{provider:"claude",model:i,rule:i===B?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:I,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=m(p(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:I},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=m(p(e,"executorRef"));return{provider:Re,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=m(p(e,"executorRef"));return{provider:N,...i?.model?{model:i.model}:{model:E()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=m(p(e,"executorRef"));return{provider:x,...i?.model?{model:i.model}:{model:E()},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:I,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 br(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(br(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=X();return{model:s,provider:z(s),rule:"default:global"}}function Qt(e){return e?m(p(e,"executorRef")):null}function Zt(e){switch(b(e)){case x:case N:return E();case"claude":return M;case"codex":return I;case"cursor":return D;default:return}}var ye="explicit:cli_provider",Sr="config:worker_provider";function Or(e,r,t){let n=b(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:Zt(n)??e.model,rule:t}}function en(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==ye?e:Or(e,t,ye)}function rn(e,r){if(r.explicitProvider?.trim()||_e(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=b(t);return n===w||n===e.provider?e:Or(e,n,Sr)}function tn(e){let r,t=Qt(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=Jt(c,e.explicitProvider);u?r=u:r={model:c,provider:e.explicitProvider?.trim()||z(c),rule:"explicit:cli",requestedModel:c}}else if(n)r={model:n,provider:o||z(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&J(e.task)){let c=zt(e.task),u,f;if(c)u=c,f="task:provider_override";else{let ke=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Pr=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",wr=typeof e.task.title=="string"?e.task.title.toLowerCase():"";u=xr(ke,Pr,wr),f=u===B?"factory:claude_review":"factory:claude_implementation"}r={model:u,provider:"claude",rule:f,requestedModel:u}}else if(e.task&&Object.keys(e.task).length>0){let c=Er(e.task);r={...c,requestedModel:c.model}}else{let c=X();r={model:c,provider:e.explicitProvider?.trim()||z(c),rule:"default:global",requestedModel:c}}r=en(r,e.explicitProvider),r=rn(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&b(e.configuredProvider)!==w&&r.rule==="config:worker_provider",i=Cr({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===ye||i.rule===Sr||y(i.provider)&&(e.explicitProviderIsOperatorOverride||J(e.task))||i.provider===Re||i.provider===x||i.provider===N||i.provider==="codex")return i;let l=Rr({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:l.provider,model:l.provider==="codex"?l.model??i.model??I:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function nn(e,r,t){return e||r||t||X()||M}Y();Y();var w="cursor",on=new Set(["claude","opus","anthropic"]),sn=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function U(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function y(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return on.has(r)?!0:r.includes("claude")||r.includes("opus")}function J(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&y(r))return!0;let t=U(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=m(U(e,"executorRef"));if(n?.provider&&y(n.provider)||n?.model&&y(an(n.model)))return!0;let o=U(e,"description");if(sn.some(i=>i.test(o)))return!0;let s=U(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function an(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function ln(e,r){return{provider:w,model:D,rule:`policy:cursor_default${r}`,requestedModel:e}}var un=["explicit:","executor_ref:","factory:","task:"];function cn(e){return un.some(r=>e.startsWith(r))}function _e(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||m(U(e,"executorRef"))?.provider?!0:J(e)}function Cr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&y(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||cn(r.rule)||_e(t)||!y(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return ln(r.model,o)}function dn(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Ar(e){return e?.trim()||void 0}function pn(e){let r=dn(e.task),t=m(r),n=e.explicitProvider?.trim().toLowerCase(),o=Ar(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=Ar(e.routing.model),f={provider:c,model:u,rule:e.routing.rule};return s&&s!=="cursor"||r&&Z(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:f}:i&&u&&i!==u&&!y(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:f}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:f}:{ok:!0,resolved:f}}export{D as CURSOR_DEFAULT_MODEL,vr as GLOBAL_DEFAULT_MODEL,pn as assessDispatchModelGuard,Z as executorRefRequestsNonCursorWorker,Er as inferModelRoutingFromTask,m as parseExecutorRefRoutingIntent,X as resolveGlobalDefaultModel,nn as resolveModelFallback,tn as resolveWorkerLaunch};
|
|
@@ -1,5 +1,5 @@
|
|
|
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 ke}from"node:os";import be from"node:path";function Ar(e){return e==="~"?ke():e.startsWith("~/")||e.startsWith("~\\")?be.join(ke(),e.slice(2)):e}function v(e){return be.resolve(Ar(e))}var x=a(()=>{"use strict"});var d=a(()=>{"use strict"});var wr,sn,Pr,an,X=a(()=>{"use strict";wr=["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"],sn=new Set(wr),Pr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],an=new Set(Pr)});var Q=a(()=>{"use strict";x();d();X()});var Z=a(()=>{"use strict";Q();x()});var _=a(()=>{"use strict"});var K=a(()=>{"use strict"});var ve=a(()=>{"use strict"});var bn,vn,ee=a(()=>{"use strict";bn=25*1024*1024*1024,vn=12*1024*1024*1024});var Cn,An,xe=a(()=>{"use strict";ee();Cn=5*1024*1024*1024,An=10*1024*1024*1024});var Wn,Kn,re=a(()=>{"use strict";xe();ee();Wn=30*1024*1024*1024,Kn=15*1024*1024*1024});var Se=a(()=>{"use strict";d()});import Tr from"node:path";var jn,te=a(()=>{"use strict";x();Se();jn=Tr.join(".openclaw","harness")});var B=a(()=>{"use strict";k();_();K();D();te()});var Ae=a(()=>{"use strict";k();te();B();d()});var oe=a(()=>{"use strict";Ae();d()});var we=a(()=>{"use strict";oe();d()});var Pe=a(()=>{"use strict"});var Ie=a(()=>{"use strict";Pe();d()});var Ne=a(()=>{"use strict"});var Te=a(()=>{"use strict";Ne()});var We=a(()=>{"use strict";Te();d()});var Ke=a(()=>{"use strict"});var Me=a(()=>{"use strict"});var Be=a(()=>{"use strict"});var ie=a(()=>{"use strict"});var De=a(()=>{"use strict"});var Ue=a(()=>{"use strict";ie();De()});var Le=a(()=>{"use strict";Ie();We();Ke();Me();Q();Be();Ue();ie();d()});var Fe=a(()=>{"use strict";Le()});var Fr,$r,$e=a(()=>{"use strict";ve();k();_();K();D();re();oe();we();Fe();d();Fr=500*1024*1024,$r=4*1024*1024*1024});var D=a(()=>{"use strict";$e()});import{homedir as Hr}from"node:os";import jr from"node:path";var He,se=a(()=>{"use strict";He=jr.join(Hr(),".kynver",".env")});var je=a(()=>{"use strict"});var Ye=a(()=>{"use strict";je()});var Ve=a(()=>{"use strict"});var ae=a(()=>{"use strict";Ye();Ve()});var Ge=a(()=>{"use strict"});var qe=a(()=>{"use strict";Ge()});var U=a(()=>{"use strict";se();x();k();ae();qe()});var ze=a(()=>{"use strict";_();_()});var Je=a(()=>{"use strict";se();ae();U()});var Xe=a(()=>{"use strict";Z();_();ze();k();U();Je();d();B()});import{existsSync as Qr,mkdirSync as Ls,readFileSync as Zr,writeFileSync as Fs}from"node:fs";import{homedir as et,totalmem as Hs}from"node:os";import le from"node:path";function rt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function E(){if(!Qr(Qe))return{};try{return rt(JSON.parse(Zr(Qe,"utf8")))}catch{return{}}}var Ze,Qe,ra,ta,na,k=a(()=>{"use strict";Z();x();d();_();K();D();re();U();Xe();B();Ze=le.join(et(),".kynver"),Qe=le.join(Ze,"config.json"),ra=le.join(Ze,"credentials");ta=500*1024*1024,na=4*1024*1024*1024});var xr=/^claude[-_]/i,Er=/^(?:opus|sonnet|haiku)\b/i;function ye(e){let r=e.trim();return xr.test(r)||Er.test(r)}function Re(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function z(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function _e(e){return e.trim().toLowerCase().startsWith("gemini-")}function Sr(e){return Re(e)?"codex":ye(e)?"claude":_e(e)?"gemini":(z(e),"cursor")}function Or(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==="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 Cr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?ye(n)||Re(n)||z(n)||_e(n)?{lane:t,model:n,provider:Sr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Or(r)??Cr(r):null}function J(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!z(r.model)):!1}k();var er={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 S(e){return er[e]}function rr(){return Object.values(er)}import{existsSync as nt}from"node:fs";import{homedir as ot}from"node:os";import P from"node:path";import{createHash as tr}from"node:crypto";import{statSync as tt}from"node:fs";import{spawnSync as nr}from"node:child_process";function y(e){try{let r=tt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return tr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function O(e){return tr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function f(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function g(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=nr(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let i=(o.stderr||o.stdout||"").trim(),s=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:i?`${s}: ${i.slice(0,200)}`:s}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function L(e,r,t={}){let n=t.timeoutMs??8e3;try{return nr(e,r,{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 it="codex";function st(){let e=ot();return[process.env.CODEX_HOME?.trim()?P.join(P.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,P.join(e,".codex","auth.json"),P.join(e,".config","codex","auth.json")].filter(t=>!!t)}function at(e){return P.dirname(e)}function lt(e){let r,t;for(let n of st()){if(!nt(n))continue;r??=n;let o=g(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:at(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??g(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function or(e=new Date().toISOString()){let r=f(it,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:O("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}=lt(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 ut}from"node:fs";import{homedir as ct}from"node:os";import ue from"node:path";function dt(){let e=process.env.HERMES_HOME?.trim(),r=e?ue.resolve(e):ue.join(ct(),".hermes");return ue.join(r,"auth.json")}function F(e=new Date().toISOString()){let r=f("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=g(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=dt(),o=ut(n),i=L(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),s=t.ok&&i.ok;return{path:"hermes_openai_codex",ready:s,authSource:s?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:s?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,i.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function I(e=new Date().toISOString()){let r=or(e);if(r.ready)return{...r,path:"codex_cli"};let t=F(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 ir=["low","medium","high"],sr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function ar(e,r){let t=S(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function pt(e,r){let t=S(e.providerId),n=S(r.providerId),o=ir.indexOf(t.costTier)-ir.indexOf(n.costTier);if(o!==0)return o;let i=sr[e.binding.authSource]-sr[r.binding.authSource];return i!==0?i:e.providerId.localeCompare(r.providerId)}function ce(e){let r=rr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&ar(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(pt)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let i=e.inventory.bindings[o],s;return ar(o,e.riskClass)?i.ready||(s=i.note??`${o} not bound`):s=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:s}}import{existsSync as mt}from"node:fs";import{homedir as ft}from"node:os";import gt from"node:path";var ht="claude";function yt(){let e=ft();return[gt.join(e,".claude",".credentials.json")]}function lr(e=new Date().toISOString()){let r=f(ht,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:O("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=g(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=yt().find(s=>mt(s)),o=L(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),i=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:i?"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 Rt}from"node:fs";import{homedir as _t}from"node:os";import de from"node:path";var kt="agent";function bt(){let e=_t(),r=[de.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(de.join(t,"cursor-agent","auth.json")),n&&r.push(de.join(n,"cursor","auth.json"))}return r}function ur(e=new Date().toISOString()){let r=f(kt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:O("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=g(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=bt().find(i=>Rt(i)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as vt,readFileSync as xt}from"node:fs";import{homedir as Et}from"node:os";import pe from"node:path";var St=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Ot(){let e=process.env.HERMES_HOME?.trim(),r=e?pe.resolve(e):pe.join(Et(),".hermes");return pe.join(r,".env")}function Ct(e){try{let r=xt(e,"utf8"),t=[];for(let n of St)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function cr(e=new Date().toISOString()){let r=f("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=g(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Ot(),o=vt(n),i=o?Ct(n):[],l=i.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 (${i.length?`keys: ${i.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function dr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=I(r),n={codex:t,cursor:ur(r),claude:lr(r)},o=Object.values(n).filter(i=>i.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:cr(r),hermesOpenAiCodex:F(r),codexAdapterPath:t.path,readyCount:o}}var At=[/\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],wt=[/\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 me(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Pt(e){let r=me(e,"executorRef").toLowerCase(),t=me(e,"title").toLowerCase(),n=me(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 Ee}from"node:os";import Se from"node:path";function Mr(e){return e==="~"?Ee():e.startsWith("~/")||e.startsWith("~\\")?Se.join(Ee(),e.slice(2)):e}function S(e){return Se.resolve(Mr(e))}var O=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Br,_n,Dr,kn,ee=a(()=>{"use strict";Br=["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"],_n=new Set(Br),Dr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],kn=new Set(Dr)});var re=a(()=>{"use strict";O();d();ee()});var te=a(()=>{"use strict";re();O()});var _=a(()=>{"use strict"});var L=a(()=>{"use strict"});var Oe=a(()=>{"use strict"});var Wn,Kn,ne=a(()=>{"use strict";Wn=25*1024*1024*1024,Kn=12*1024*1024*1024});var Ln,Fn,Ce=a(()=>{"use strict";ne();Ln=5*1024*1024*1024,Fn=10*1024*1024*1024});var Gn,qn,oe=a(()=>{"use strict";Ce();ne();Gn=30*1024*1024*1024,qn=15*1024*1024*1024});var Pe=a(()=>{"use strict";d()});import Fr from"node:path";var no,ie=a(()=>{"use strict";O();Pe();no=Fr.join(".openclaw","harness")});var $=a(()=>{"use strict";k();_();L();H();ie()});var Ne=a(()=>{"use strict";k();ie();$();d()});var ae=a(()=>{"use strict";Ne();d()});var Te=a(()=>{"use strict";ae();d()});var We=a(()=>{"use strict"});var Ke=a(()=>{"use strict";We();d()});var Me=a(()=>{"use strict"});var Be=a(()=>{"use strict";Me()});var De=a(()=>{"use strict";Be();d()});var Ue=a(()=>{"use strict"});var Le=a(()=>{"use strict"});var Fe=a(()=>{"use strict"});var le=a(()=>{"use strict"});var $e=a(()=>{"use strict"});var He=a(()=>{"use strict";le();$e()});var je=a(()=>{"use strict";Ke();De();Ue();Le();re();Fe();He();le();d()});var Ye=a(()=>{"use strict";je()});var zr,Jr,Ve=a(()=>{"use strict";Oe();k();_();L();H();oe();ae();Te();Ye();d();zr=500*1024*1024,Jr=4*1024*1024*1024});var H=a(()=>{"use strict";Ve()});import{homedir as Xr}from"node:os";import Qr from"node:path";var Ge,ue=a(()=>{"use strict";Ge=Qr.join(Xr(),".kynver",".env")});var qe=a(()=>{"use strict"});var ze=a(()=>{"use strict";qe()});var Je=a(()=>{"use strict"});var ce=a(()=>{"use strict";ze();Je()});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe()});var j=a(()=>{"use strict";ue();O();k();ce();Qe()});var Ze=a(()=>{"use strict";_();_()});var er=a(()=>{"use strict";ue();ce();j()});var rr=a(()=>{"use strict";te();_();Ze();k();j();er();d();$()});function b(e){let r=e.trim().toLowerCase();return at[r]??r}var tr,st,at,Y=a(()=>{"use strict";tr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],st=tr.join("|"),at={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"}});import{existsSync as ut,mkdirSync as ea,readFileSync as ct,writeFileSync as ra}from"node:fs";import{homedir as dt,totalmem as na}from"node:os";import de from"node:path";function pt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:S(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:S(e.defaultRepo.trim())}:{}}}function C(){if(!ut(nr))return{};try{return pt(JSON.parse(ct(nr,"utf8")))}catch{return{}}}var or,nr,ha,Ra,ya,k=a(()=>{"use strict";te();O();d();_();L();H();oe();j();rr();Y();$();or=de.join(dt(),".kynver"),nr=de.join(or,"config.json"),ha=de.join(or,"credentials");Ra=500*1024*1024,ya=4*1024*1024*1024});var Ir=/^claude[-_]/i,Nr=/^(?:opus|sonnet|haiku)\b/i;function be(e){let r=e.trim();return Ir.test(r)||Nr.test(r)}function ve(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Q(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function xe(e){return e.trim().toLowerCase().startsWith("gemini-")}function Tr(e){return ve(e)?"codex":be(e)?"claude":xe(e)?"gemini":(Q(e),"cursor")}function Wr(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 Kr(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?be(n)||ve(n)||Q(n)||xe(n)?{lane:t,model:n,provider:Tr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Wr(r)??Kr(r):null}function Z(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Q(r.model)):!1}k();var ir={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 A(e){return ir[e]}function sr(){return Object.values(ir)}import{existsSync as ft}from"node:fs";import{homedir as gt}from"node:os";import W from"node:path";import{createHash as ar}from"node:crypto";import{statSync as mt}from"node:fs";import{spawnSync as lr}from"node:child_process";function R(e){try{let r=mt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return ar("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function P(e){return ar("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=lr(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function V(e,r,t={}){let n=t.timeoutMs??8e3;try{return lr(e,r,{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 ht="codex";function Rt(){let e=gt();return[process.env.CODEX_HOME?.trim()?W.join(W.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,W.join(e,".codex","auth.json"),W.join(e,".config","codex","auth.json")].filter(t=>!!t)}function yt(e){return W.dirname(e)}function _t(e){let r,t;for(let n of Rt()){if(!ft(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:yt(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 ur(e=new Date().toISOString()){let r=g(ht,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:P("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}=_t(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?R(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 kt}from"node:fs";import{homedir as bt}from"node:os";import pe from"node:path";function vt(){let e=process.env.HERMES_HOME?.trim(),r=e?pe.resolve(e):pe.join(bt(),".hermes");return pe.join(r,"auth.json")}function G(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=vt(),o=kt(n),s=V(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?R(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 K(e=new Date().toISOString()){let r=ur(e);if(r.ready)return{...r,path:"codex_cli"};let t=G(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 cr=["low","medium","high"],dr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function pr(e,r){let t=A(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function xt(e,r){let t=A(e.providerId),n=A(r.providerId),o=cr.indexOf(t.costTier)-cr.indexOf(n.costTier);if(o!==0)return o;let s=dr[e.binding.authSource]-dr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function me(e){let r=sr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&pr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(xt)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return pr(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 Et}from"node:fs";import{homedir as St}from"node:os";import Ot from"node:path";var Ct="claude";function At(){let e=St();return[Ot.join(e,".claude",".credentials.json")]}function mr(e=new Date().toISOString()){let r=g(Ct,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:P("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=At().find(i=>Et(i)),o=V(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?R(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 Pt}from"node:fs";import{homedir as wt}from"node:os";import fe from"node:path";var It="agent";function Nt(){let e=wt(),r=[fe.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(fe.join(t,"cursor-agent","auth.json")),n&&r.push(fe.join(n,"cursor","auth.json"))}return r}function fr(e=new Date().toISOString()){let r=g(It,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:P("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=Nt().find(s=>Pt(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?R(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as Tt,readFileSync as Wt}from"node:fs";import{homedir as Kt}from"node:os";import ge from"node:path";var Mt=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Bt(){let e=process.env.HERMES_HOME?.trim(),r=e?ge.resolve(e):ge.join(Kt(),".hermes");return ge.join(r,".env")}function Dt(e){try{let r=Wt(e,"utf8"),t=[];for(let n of Mt)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function gr(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=Bt(),o=Tt(n),s=o?Dt(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?R(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 hr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=K(r),n={codex:t,cursor:fr(r),claude:mr(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:gr(r),hermesOpenAiCodex:G(r),codexAdapterPath:t.path,readyCount:o}}var Ut=[/\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],Lt=[/\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 he(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ft(e){let r=he(e,"executorRef").toLowerCase(),t=he(e,"title").toLowerCase(),n=he(e,"description").toLowerCase(),o=`${r}
|
|
2
2
|
${t}
|
|
3
|
-
${n}`;return
|
|
3
|
+
${n}`;return Ut.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":Lt.some(s=>s.test(o))?"low":"elevated"}function $t(e){let r=A(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 Ht(e){let r=e.inventory??hr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function v(e){let r=$t({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 Rr(e){let r=e.task??{},t=Ft(r),n=Ht({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:K())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=w;if(o==="codex"||o==="provider:codex"){let u=n.bindings.codex;if(!u.ready){let f=me({inventory:n,riskClass:t});return v(f?{providerId:f.providerId,binding:f.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 v({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 v({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 v({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=me({inventory:n,riskClass:t});if(l)return v({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 v({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"}})}ee();d();var yr="kynver",_r=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],jt=_r.map(e=>`mcp__${yr}__${e}`);var M="claude-sonnet-4-6",B="claude-opus-4-8";d();d();var wl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Vt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var I=Vt();d();var Re="openai-compatible",tu=600*1e3;d();var x="gemini";function E(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var N="gemini-api";var gu=600*1e3;var vr="claude-sonnet-4-6",D="composer-2.5";function p(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function zt(e){if(!e)return;let r=p(e,"workerModelOverride")||p(e,"modelOverride");return r||`${p(e,"title")}
|
|
4
4
|
${p(e,"description")}
|
|
5
|
-
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
5
|
+
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function kr(e){return e.toLowerCase()}function X(e=C()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||vr}function z(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-")?x:"cursor"}function Jt(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:D,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:M,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:E(),provider:x,rule:n&&n!==x?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:E(),provider:N,rule:n&&n!==N?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function br(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 Xt=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function xr(e,r,t){return Xt.has(e)?B:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?B:M}function Er(e){let r=kr(p(e,"executorRef")),t=p(e,"title").toLowerCase(),n=p(e,"priority")||"normal",o=kr(p(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=xr(o,r,t);return{provider:"claude",model:i,rule:i===B?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:I,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=m(p(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:I},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=m(p(e,"executorRef"));return{provider:Re,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=m(p(e,"executorRef"));return{provider:N,...i?.model?{model:i.model}:{model:E()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=m(p(e,"executorRef"));return{provider:x,...i?.model?{model:i.model}:{model:E()},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:I,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 br(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(br(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=X();return{model:s,provider:z(s),rule:"default:global"}}function Qt(e){return e?m(p(e,"executorRef")):null}function Zt(e){switch(b(e)){case x:case N:return E();case"claude":return M;case"codex":return I;case"cursor":return D;default:return}}var ye="explicit:cli_provider",Sr="config:worker_provider";function Or(e,r,t){let n=b(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:Zt(n)??e.model,rule:t}}function en(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==ye?e:Or(e,t,ye)}function rn(e,r){if(r.explicitProvider?.trim()||_e(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=b(t);return n===w||n===e.provider?e:Or(e,n,Sr)}function tn(e){let r,t=Qt(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=Jt(c,e.explicitProvider);u?r=u:r={model:c,provider:e.explicitProvider?.trim()||z(c),rule:"explicit:cli",requestedModel:c}}else if(n)r={model:n,provider:o||z(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&J(e.task)){let c=zt(e.task),u,f;if(c)u=c,f="task:provider_override";else{let ke=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Pr=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",wr=typeof e.task.title=="string"?e.task.title.toLowerCase():"";u=xr(ke,Pr,wr),f=u===B?"factory:claude_review":"factory:claude_implementation"}r={model:u,provider:"claude",rule:f,requestedModel:u}}else if(e.task&&Object.keys(e.task).length>0){let c=Er(e.task);r={...c,requestedModel:c.model}}else{let c=X();r={model:c,provider:e.explicitProvider?.trim()||z(c),rule:"default:global",requestedModel:c}}r=en(r,e.explicitProvider),r=rn(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&b(e.configuredProvider)!==w&&r.rule==="config:worker_provider",i=Cr({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===ye||i.rule===Sr||y(i.provider)&&(e.explicitProviderIsOperatorOverride||J(e.task))||i.provider===Re||i.provider===x||i.provider===N||i.provider==="codex")return i;let l=Rr({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:l.provider,model:l.provider==="codex"?l.model??i.model??I:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function nn(e,r,t){return e||r||t||X()||M}Y();Y();var w="cursor",on=new Set(["claude","opus","anthropic"]),sn=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function U(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function y(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return on.has(r)?!0:r.includes("claude")||r.includes("opus")}function J(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&y(r))return!0;let t=U(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=m(U(e,"executorRef"));if(n?.provider&&y(n.provider)||n?.model&&y(an(n.model)))return!0;let o=U(e,"description");if(sn.some(i=>i.test(o)))return!0;let s=U(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function an(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function ln(e,r){return{provider:w,model:D,rule:`policy:cursor_default${r}`,requestedModel:e}}var un=["explicit:","executor_ref:","factory:","task:"];function cn(e){return un.some(r=>e.startsWith(r))}function _e(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||m(U(e,"executorRef"))?.provider?!0:J(e)}function Cr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&y(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||cn(r.rule)||_e(t)||!y(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return ln(r.model,o)}function dn(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Ar(e){return e?.trim()||void 0}function pn(e){let r=dn(e.task),t=m(r),n=e.explicitProvider?.trim().toLowerCase(),o=Ar(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=Ar(e.routing.model),f={provider:c,model:u,rule:e.routing.rule};return s&&s!=="cursor"||r&&Z(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:f}:i&&u&&i!==u&&!y(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:f}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:f}:{ok:!0,resolved:f}}export{D as CURSOR_DEFAULT_MODEL,vr as GLOBAL_DEFAULT_MODEL,pn as assessDispatchModelGuard,Z as executorRefRequestsNonCursorWorker,Er as inferModelRoutingFromTask,m as parseExecutorRefRoutingIntent,X as resolveGlobalDefaultModel,nn as resolveModelFallback,tn as resolveWorkerLaunch};
|
package/dist/server/monitor.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var l=(e,r,n)=>()=>{if(n)throw n[0];try{return e&&(r=e(e=0)),r}catch(t){throw n=[t],t}};function Y(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function me(e){let r=e.trim();if(!r)return null;let n=Y(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Y(s[1]??"");u&&t.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Y(r.slice(i,a+1));u&&t.push(u)}return t.length>0?t[t.length-1]:null}function fe(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?me(r)??(r.trim()||null):r;let n=typeof e.summary=="string"?e.summary.trim():"";if(!n)return null;let t=me(n);return t||n}var pe=l(()=>{"use strict"});import{existsSync as Tr,mkdirSync as
|
|
1
|
+
var l=(e,r,n)=>()=>{if(n)throw n[0];try{return e&&(r=e(e=0)),r}catch(t){throw n=[t],t}};function Y(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function me(e){let r=e.trim();if(!r)return null;let n=Y(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Y(s[1]??"");u&&t.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Y(r.slice(i,a+1));u&&t.push(u)}return t.length>0?t[t.length-1]:null}function fe(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?me(r)??(r.trim()||null):r;let n=typeof e.summary=="string"?e.summary.trim():"";if(!n)return null;let t=me(n);return t||n}var pe=l(()=>{"use strict"});import{existsSync as Tr,mkdirSync as ct,readFileSync as Ur,readdirSync as dt,renameSync as mt,rmSync as ft,statSync as ge,writeFileSync as pt}from"node:fs";function V(e){console.error(e),process.exit(1)}function G(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function O(e){try{return JSON.parse(e)}catch{return null}}function w(e){try{return ge(e).size}catch{return 0}}function I(e){try{return ge(e).mtime.toISOString()}catch{return null}}function he(e,r){return Tr(e)?Ur(e,"utf8").split(`
|
|
2
2
|
`).slice(-r).join(`
|
|
3
|
-
`):""}function P(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ye(e){let r=null,n=-1/0;for(let t of e){if(!t)continue;let o=Date.parse(t);Number.isFinite(o)&&o>n&&(n=o,r=t)}return r}function z(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var p=l(()=>{"use strict"});import{existsSync as
|
|
4
|
-
`).filter(Boolean);for(let s of o){let i=O(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),m=Date.parse(u);Number.isFinite(m)&&m>n?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:t}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),be(r.lastHeartbeatPhase)&&(r.terminalFinalResult=fe(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var
|
|
5
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
6
|
-
${e.stderr}`.trim(),n=
|
|
7
|
-
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=
|
|
8
|
-
`).map(r=>r.trim()).filter(Boolean)}function T(e,r){try{let n=$e("git",r,G({cwd:e,encoding:"utf8"}));return{status:n.status,stdout:n.stdout||"",stderr:n.stderr||"",error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}function He(e,r,n){let t=T(e,["merge-base","--is-ancestor",r,n]);return t.status===0?{isAncestor:!0,error:null}:t.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:t.error||t.stderr||t.stdout||`git exited ${t.status}`}}function je(e,r="origin/main"){let n=typeof r=="string"?{base:r}:r,t=n.baseCommit?.trim()||n.base?.trim()||"origin/main",o=n.baseCommit?.trim()||null;if(!e)return Z(t,"missing worktree path");let s=T(e,["rev-parse","HEAD"]);if(s.status!==0)return Z(t,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=T(e,["rev-parse",t]);if(f.status!==0)return Z(t,f.error||f.stderr||f.stdout||`failed to resolve ${t}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=He(e,i,a),m=He(e,a,i),d=u.error||m.error||void 0;if(u.isAncestor==null||m.isAncestor==null)return{checked:!1,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let c=u.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:c,...d?{error:d}:{}}}function Z(e,r,n=null){return{checked:!1,base:e,head:n,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ee=l(()=>{"use strict";x();p();Fe()});function C(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function On(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function wn(e){if(C(e.headCommit)||C(e.prUrl)||C(e.artifactBundlePath)||C(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&C(r.head))}function Ye(e){return On(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:wn(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function Ve(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Ge=l(()=>{"use strict"});function re(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function ze(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function K(e){let r=e.trim();if(!r)return null;let n=re(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=re(s[1]??"");d&&t.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=re(r.slice(i,a+1));d&&t.push(d)}if(t.length===0)return null;let u=t[t.length-1],m=ze(u);for(let d of t){let c=ze(d);c>m&&(u=d,m=c)}return u}var ne=l(()=>{"use strict"});function Je(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function qe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function In(e){return new Set(e.map(r=>qe(Je(r)??r)).filter(Boolean))}function Xe(e,r,n){let t=Je(e)??e;if(!t)return"unrelated";let o=qe(t);return In(r).has(o)?"contract":n?(n.outcome==="skipped"||n.outcome==="blocked")&&n.reason?.trim()?"support":(n.outcome==="merged","unrelated"):"unrelated"}var Ze=l(()=>{"use strict"});function S(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Pn(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function b(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:S(e)}function U(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Qe(e){let r=null;if(typeof e=="string"){let o=K(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let n=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(n))return[];let t=[];for(let o of n){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=b(String(s.prUrl??s.pr_url??"")),a=S(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||t.push({prUrl:i,outcome:a,mergeCommit:S(s.mergeCommit??s.merge_commit),reason:S(s.reason)})}return t}function er(e,r){let n=[],t=b(S(e.prUrl)??"");if(t&&n.push(t),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&n.push(s)}return[...new Set(n)]}function rr(e){let{contract:r,snapshot:n}=e,t=e.finalResult??n.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Pn(t))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?b(S(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let c=er(n,t);if(!(t&&typeof t=="object"&&!Array.isArray(t)&&t.supersedesOriginalTargetPr===!0)){for(let y of c)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let h=Qe(t).find(y=>y.prUrl===s);if(!h||h.outcome!=="merged"&&!(h.reason?.trim()&&(h.outcome==="skipped"||h.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Qe(t),a=new Map(i.map(c=>[U(c.prUrl),c])),u=new Set(r.targetPrUrls.map(c=>U(b(c)??c)).filter(Boolean)),m=er(n,t);if(r.landingOnly)for(let c of m){let f=a.get(U(c)),g=Xe(c,r.targetPrUrls,f);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${c}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let d=[];for(let c of r.targetPrUrls){let f=U(b(c)??c),g=a.get(f);if(!g){d.push(f);continue}g.outcome!=="merged"&&!g.reason?.trim()&&d.push(f)}return d.length>0?{blocked:!0,reason:d.every(c=>a.has(c))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${d.join(", ")}`}:{blocked:!1}}function nr(e){if(e.blocked)return e.detail??e.reason}var tr=l(()=>{"use strict";ne();Ze()});function Wn(e){let r=Date.now();if(e.completionBlocker&&!or(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Kn(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ye(o);if(s.blocked){let i=Ve(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=rr({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=nr(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Tn(e))return{state:"done",reason:"empty abandoned worker record"};let o=Ke(e.error);if(o)return{state:"blocked",reason:o.reason};let s=De({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let n=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(n)&&r-n>Nn)return{state:"needs_attention",reason:`no first stream event ${z(n)}s after start`};let t=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(t)&&r-t>B?{state:"stale",reason:`no log/event/heartbeat activity for ${z(t)}s`}:{state:"ok",reason:"recent activity"}}function or(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Tn(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Kn(e){let r=null;if(typeof e=="string"?r=K(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let n=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(n)?n.some(t=>!t||typeof t!="object"||Array.isArray(t)?!1:String(t.outcome??"").trim()==="merged"):!1}function Un(e,r,n){let t=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&t!==void 0&&t!==null?t:r||(t??ke(n))}function sr(e,r={}){let n=We(e.stdoutPath),t=Re(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Un(e,n.finalResult,t),i=o?!1:P(e.pid),a=w(e.stdoutPath),u=w(e.stderrPath),m=w(e.heartbeatPath),d=Le(e.worktreePath),c=je(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=ye([n.lastEventAt,t.lastHeartbeatAt,I(e.stdoutPath),I(e.stderrPath),I(e.heartbeatPath)]),g=n.error||!i&&!s&&he(e.stderrPath,10).trim()||void 0,h=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=or(h)?null:h,Nr=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,j=Wn({alive:i,finalResult:s,firstEventAt:n.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:t.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:d,gitAncestry:c,completionBlocker:y,landingContract:Nr,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),Wr=y||j.state==="blocked"?"blocked":o||j.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:Wr,attention:j,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,firstEventAt:n.firstEventAt,lastEventAt:n.lastEventAt,lastActivityAt:f,currentTool:o?null:n.currentTool,heartbeatCount:t.heartbeatCount,lastHeartbeatAt:t.lastHeartbeatAt,lastHeartbeatPhase:t.lastHeartbeatPhase,lastHeartbeatSummary:t.lastHeartbeatSummary,heartbeatBlocker:t.heartbeatBlocker,timestampAnomalies:t.timestampAnomalies,finalResult:s,error:g,changedFiles:d,gitAncestry:c,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:n.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function ir(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function ar(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Nn,B,A=l(()=>{"use strict";xe();Te();Ue();Me();ee();Ge();tr();ne();p();Nn=18e4,B=6e5});var te=l(()=>{"use strict";ee();x()});var k=l(()=>{"use strict"});var D=l(()=>{"use strict"});var dr=l(()=>{"use strict"});var fo,po,oe=l(()=>{"use strict";fo=25*1024*1024*1024,po=12*1024*1024*1024});var ko,Ro,mr=l(()=>{"use strict";oe();ko=5*1024*1024*1024,Ro=10*1024*1024*1024});var Co,Ao,se=l(()=>{"use strict";mr();oe();Co=30*1024*1024*1024,Ao=15*1024*1024*1024});var fr=l(()=>{"use strict";M();p()});var pr=l(()=>{"use strict";A()});var $n,Ln,yr=l(()=>{"use strict";dr();_();k();D();F();se();M();fr();pr();p();$n=500*1024*1024,Ln=4*1024*1024*1024});var F=l(()=>{"use strict";yr()});import{homedir as Yn}from"node:os";import Vn from"node:path";var br,le=l(()=>{"use strict";br=Vn.join(Yn(),".kynver",".env")});var kr=l(()=>{"use strict"});var Rr=l(()=>{"use strict";kr()});var xr=l(()=>{"use strict"});var ue=l(()=>{"use strict";Rr();xr()});var Sr=l(()=>{"use strict"});var _r=l(()=>{"use strict";Sr()});var H=l(()=>{"use strict";le();x();_();ue();_r()});var vr=l(()=>{"use strict";k();k()});var Er=l(()=>{"use strict";le();ue();H()});var Cr=l(()=>{"use strict";p()});import Xn from"node:path";var Gs,ce=l(()=>{"use strict";x();Cr();Gs=Xn.join(".openclaw","harness")});var L=l(()=>{"use strict";_();k();D();F();ce()});var Or=l(()=>{"use strict";te();k();vr();_();H();Er();p();L()});import{homedir as tt,totalmem as bi}from"node:os";import de from"node:path";var wr,Ii,Pi,Ni,Wi,_=l(()=>{"use strict";te();x();p();k();D();F();se();H();Or();L();wr=de.join(tt(),".kynver"),Ii=de.join(wr,"config.json"),Pi=de.join(wr,"credentials"),Ni=500*1024*1024,Wi=4*1024*1024*1024});var Ir=l(()=>{"use strict";_();ce();L();p()});var M=l(()=>{"use strict";Ir();p()});A();var lr="kynver-harness:",Bn="@runner:";function ur(e){return e?.trim()?e.trim():null}function Dn(e){let r=ur(e);if(!r?.startsWith(lr))return null;let n=r.slice(lr.length),t=n.indexOf(Bn);return t>=0?n.slice(0,t).trim()||null:n.trim()||null}function cr(e,r){let n=ur(r);return n?Dn(e)===n:!1}A();p();function Mn(e){let{worker:r,status:n,taskLease:t}=e,o=t?.leaseOwner??null;if(r.dispatched&&t){if(t.status==="running"&&o&&!cr(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=t.leaseToken?.trim()??"";if(t.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(t.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(n.attention.state==="stale")return{health:"stale",reason:n.attention.reason};let s=n.lastHeartbeatAt?Date.parse(n.lastHeartbeatAt):NaN;return n.alive&&Number.isFinite(s)&&Date.now()-s>B?{health:"stale",reason:`heartbeat older than ${Math.floor(B/1e3)}s`}:n.alive&&r.pid&&!P(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:t?.status==="running"&&!n.alive&&n.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:n.attention.reason||"worker within expected lifecycle bounds"}}M();function Pr(e){return!!e.completionReportedAt?.trim()}A();function ot(e){let{worker:r,status:n}=e,t=[];r.localOnly&&t.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&t.push("missing agentOsId/taskId linkage"),Pr(r)&&t.push("completion already acknowledged"),r.completionBlocker&&t.push(r.completionBlocker),n.heartbeatBlocker&&n.alive&&t.push(`worker heartbeat blocker: ${n.heartbeatBlocker}`),n.attention.state==="blocked"&&t.push(n.attention.reason||"worker attention blocked"),ar(n)&&t.push(n.attention.reason||"landing gate blocked");let o=ir(n),s;return o?n.finalResult?s="final_result":n.alive?s="terminal_status":s="process_exited":t.push("worker has not reached a terminal condition"),{eligible:o&&t.length===0,terminalVerified:o,terminalReason:s,blockers:t}}export{ot as assessAutoCompleteEligibility,Mn as classifyWorkerHealth,sr as computeWorkerStatus};
|
|
3
|
+
`):""}function P(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ye(e){let r=null,n=-1/0;for(let t of e){if(!t)continue;let o=Date.parse(t);Number.isFinite(o)&&o>n&&(n=o,r=t)}return r}function z(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var p=l(()=>{"use strict"});import{existsSync as Br,readFileSync as Dr}from"node:fs";function be(e){return e==="complete"}function ke(e){return be(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Re(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Br(e))return r;let n=Date.now()+Mr,t=new Date(n).toISOString(),o=Dr(e,"utf8").split(`
|
|
4
|
+
`).filter(Boolean);for(let s of o){let i=O(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),m=Date.parse(u);Number.isFinite(m)&&m>n?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:t}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),be(r.lastHeartbeatPhase)&&(r.terminalFinalResult=fe(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var Mr,xe=l(()=>{"use strict";pe();p();Mr=6e4});function _e(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function N(e){if(!e)return[];let r=[],n="",t,o=!1;for(let s of e){if(o){n+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(t){s===t?t=void 0:n+=s;continue}if(s==='"'||s==="'"){t=s;continue}if(/\s/.test(s)){n&&(r.push(n),n="");continue}n+=s}return n&&r.push(n),r}function Ee(e){let r=_e(e[0]);return!!(r&&Fr.has(r))}function Lr(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function $r(e){if(!e||e.includes("*"))return null;let r=Lr(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function ve(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function J(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function jr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Yr(e){let r=[];for(let n=1;n<e.length;n+=1){let t=e[n];if(t){if(t==="--"){r.push(...e.slice(n+1));break}if(t.startsWith("-")){if(t.includes("="))continue;Se.has(t)&&(n+=1);continue}r.push(t)}}return r}function Vr(e){let r=!1,n=e.map((o,s)=>{let i=jr(o),a=e[s-1];return a&&Se.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),t=Yr(n);if(t.length===2){let[o,s]=t;if(J(s))return{argv:[n[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=$r(s);if(i)return{argv:[n[0]??"rg","-g",i,o,"."],changed:!0}}return r&&t.length===1?{argv:[...n,"."],changed:!0}:{argv:n,changed:r}}function Ce(e){for(let r=1;r<e.length;r+=1){let n=e[r];if(n&&(n==="-c"||n==="-lc"||n==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(n)))return r+1}return-1}function W(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let n=N(r);if(!n.length)return{command:r,wrapped:!1};let t=_e(n[0]);if(!t||!Hr.has(t))return{command:r,wrapped:!1};let o=Ce(n);if(o<0||o>=n.length)return{command:r,wrapped:!1};let s=n.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function Gr(e,r){let n=e.trim(),t=N(n),o=Ce(t);if(o<0)return r;let s=t.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function zr(e){let r=e.trim(),n=W(r),t=N(n.command);if(!t.length||!Ee(t))return{segment:r,changed:!1};let o=Vr(t);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return n.wrapped?{segment:Gr(r,s),changed:!0}:{segment:s,changed:!0}}function q(e){let r=e.trim();if(!r)return{command:r,changed:!1};let n=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",t=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=t.map(i=>{let a=zr(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(n),changed:!0}:{command:r,changed:!1}}function Ae(e){let r=W(e).command,n=N(r.trim());return n.length&&Ee(n)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Oe(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let n=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return n?{pattern:n[1],target:n[2]?.trim()}:{}}function Jr(e){let{pattern:r,target:n}=Oe(e);return r?J(n)?{kind:"rg_exclude_syntax",pattern:r,target:n}:ve(n)?{kind:"bad_scope",pattern:r,target:n}:{kind:"not_repo_search",pattern:r,target:n}:{kind:"not_repo_search"}}function qr(e){let{pattern:r,target:n}=Oe(e);if(!r)return null;if(J(n)){let t=`${n.trim()}/**`;return{command:`rg "${r}" -g '${t}' .`,changed:!0}}return n&&ve(n)?{command:`rg -g ${n} "${r}" .`,changed:!0}:null}function Xr(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function Zr(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function X(e){let r=e.meta?.trim()||(e.command?Zr(e.command):null)||null;if(r){let n=Jr(r),t=Xr(n);if(t)return t;let o=qr(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let n=q(e.command);if(n.changed)return`Ripgrep scope may be invalid. Retry with: \`${n.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var Fr,Hr,Se,we=l(()=>{"use strict";Fr=new Set(["rg","ripgrep","grep"]),Hr=new Set(["bash","sh","dash","zsh"]),Se=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function E(e,r=200){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function rn(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let n=r.indexOf("{"),t=r.lastIndexOf("}");if(n>=0&&t>n)try{return JSON.parse(r.slice(n,t+1))}catch{return null}return null}function v(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function nn(e){let r=e.metadata;if(!v(r))return null;let n=r.vulnerabilities;if(!v(n))return null;let t=s=>typeof n[s]=="number"?n[s]:0,o={info:t("info"),low:t("low"),moderate:t("moderate"),high:t("high"),critical:t("critical"),total:t("total")};return typeof n.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function tn(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let n=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${n}) \u2014 remediation required`}function on(e,r){let n=e.error;if(v(n)){let s=typeof n.summary=="string"?n.summary.trim():"",i=typeof n.code=="string"?n.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let t=typeof e.message=="string"?e.message.trim():"";if(t)return t;let o=r.trim();return o?E(o.split(`
|
|
5
|
+
`).find(Boolean)??o,160):"npm audit failed"}function sn(e){let r=`${e.stdout}
|
|
6
|
+
${e.stderr}`.trim(),n=rn(r);if(!n||!v(n)){let o=E(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(v(n.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${on(n,e.stderr)}`};let t=nn(n);return t?e.exitCode===0&&t.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:t}:{kind:"audit_findings",exitCode:e.exitCode,summary:tn(t),audit:t}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function an(e){return Qr.test(e)}function ln(e){let r=W(e).command;return Ie.test(e)||Ie.test(r)||Ae(e)}function un(e){let r=X({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let t=(e.stderr||e.interleaved).trim();if(t&&en.test(t)){let i=E(t,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=q(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let n=E(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${n}`}}function Pe(e){let r=e.stdout??"",n=e.stderr??"",t=e.interleavedOutput??"";if(an(e.command)){let i=r.trim()||t.trim()||n.trim();return sn({exitCode:e.exitCode,stdout:i,stderr:n})}if(ln(e.command))return un({command:e.command,exitCode:e.exitCode,stdout:r,stderr:n,interleaved:t});let o=X({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=E(t||r||n||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Qr,Ie,en,Ne=l(()=>{"use strict";we();Qr=/\bnpm\s+audit\b/i,Ie=/\b(rg|ripgrep)\b/i,en=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as cn,readFileSync as dn}from"node:fs";function mn(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function fn(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let n=r.slice(0,-8);return n.length?n:r}return null}function pn(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function R(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function gn(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function hn(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let n=Object.keys(r)[0];if(n?.trim())return n.trim()}}function yn(e,r){let n=gn(r);if(!n)return;let t=R(n.input_tokens)??R(n.inputTokens)??R(n.prompt_tokens),o=R(n.output_tokens)??R(n.outputTokens)??R(n.completion_tokens);if(t===void 0&&o===void 0)return;let s=hn(r)??e.usage?.model;e.usage={...t!==void 0?{inputTokens:t}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function bn(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let n=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!n||typeof n!="object"||Array.isArray(n))return null;let t=n,o=t.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=t.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let u=a,m=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:m,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function kn(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function We(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!cn(e))return r;let n=dn(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=mn(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let u=a.find(m=>m?.type==="tool_use");u&&(r.currentTool=String(u.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,u=fn(a);u&&(r.currentTool=u)}let i=bn(o);i&&kn(r,Pe({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&pn(r,o),yn(r,o)}return r}var Ke=l(()=>{"use strict";Ne();p()});function xn(e,r=240){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function Te(e){let r=(e??"").trim();if(!r)return null;for(let n of Rn)if(n.test.test(r))return{blocked:!0,reason:`${n.label}: ${xn(r)}`};return null}var Rn,Ue=l(()=>{"use strict";Rn=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Sn(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function _n(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Be(e.head)}function En(e,r,n){let t=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&t.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&n){let o=n.length>12?n.slice(0,12):n;t.push(`commit ${o} ahead of base with no final result`)}return t.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),t.join(": ")}function De(e){if(e.alive||Sn(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,n=Be(e.headCommit)??_n(e.gitAncestry),t=r>0,o=!!n;if(!t&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=t&&o?"both":t?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:n,attentionReason:En(s,r,n)}}var Me=l(()=>{"use strict"});var x=l(()=>{"use strict"});var vn,Pt,Cn,Nt,Fe=l(()=>{"use strict";vn=["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"],Pt=new Set(vn),Cn=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Nt=new Set(Cn)});import{spawnSync as Le}from"node:child_process";function An(e,r,n={}){let t=Le("git",r,G({cwd:e,encoding:"utf8"}));if(t.status!==0&&!n.allowFailure){let o=On(e,r,t);if(n.throwError)throw new Error(o);V(o)}return t.stdout||""}function On(e,r,n){let t=typeof n.stderr=="string"&&n.stderr.trim()||typeof n.stdout=="string"&&n.stdout.trim()||n.error?.message||`exit ${n.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${t}`}function $e(e){return An(e,["status","--short"],{allowFailure:!0}).split(`
|
|
8
|
+
`).map(r=>r.trim()).filter(Boolean)}function K(e,r){try{let n=Le("git",r,G({cwd:e,encoding:"utf8"}));return{status:n.status,stdout:n.stdout||"",stderr:n.stderr||"",error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}function He(e,r,n){let t=K(e,["merge-base","--is-ancestor",r,n]);return t.status===0?{isAncestor:!0,error:null}:t.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:t.error||t.stderr||t.stdout||`git exited ${t.status}`}}function je(e,r="origin/main"){let n=typeof r=="string"?{base:r}:r,t=n.baseCommit?.trim()||n.base?.trim()||"origin/main",o=n.baseCommit?.trim()||null;if(!e)return Z(t,"missing worktree path");let s=K(e,["rev-parse","HEAD"]);if(s.status!==0)return Z(t,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=K(e,["rev-parse",t]);if(f.status!==0)return Z(t,f.error||f.stderr||f.stdout||`failed to resolve ${t}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=He(e,i,a),m=He(e,a,i),d=u.error||m.error||void 0;if(u.isAncestor==null||m.isAncestor==null)return{checked:!1,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let c=u.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:c,...d?{error:d}:{}}}function Z(e,r,n=null){return{checked:!1,base:e,head:n,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ee=l(()=>{"use strict";x();p();Fe()});function C(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function wn(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function In(e){if(C(e.headCommit)||C(e.prUrl)||C(e.artifactBundlePath)||C(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&C(r.head))}function Ye(e){return wn(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:In(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function Ve(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Ge=l(()=>{"use strict"});function re(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function ze(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function T(e){let r=e.trim();if(!r)return null;let n=re(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=re(s[1]??"");d&&t.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=re(r.slice(i,a+1));d&&t.push(d)}if(t.length===0)return null;let u=t[t.length-1],m=ze(u);for(let d of t){let c=ze(d);c>m&&(u=d,m=c)}return u}var ne=l(()=>{"use strict"});function Je(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function qe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pn(e){return new Set(e.map(r=>qe(Je(r)??r)).filter(Boolean))}function Xe(e,r,n){let t=Je(e)??e;if(!t)return"unrelated";let o=qe(t);return Pn(r).has(o)?"contract":n?(n.outcome==="skipped"||n.outcome==="blocked")&&n.reason?.trim()?"support":(n.outcome==="merged","unrelated"):"unrelated"}var Ze=l(()=>{"use strict"});function S(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Nn(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function b(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:S(e)}function U(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Qe(e){let r=null;if(typeof e=="string"){let o=T(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let n=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(n))return[];let t=[];for(let o of n){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=b(String(s.prUrl??s.pr_url??"")),a=S(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||t.push({prUrl:i,outcome:a,mergeCommit:S(s.mergeCommit??s.merge_commit),reason:S(s.reason)})}return t}function er(e,r){let n=[],t=b(S(e.prUrl)??"");if(t&&n.push(t),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&n.push(s)}return[...new Set(n)]}function rr(e){let{contract:r,snapshot:n}=e,t=e.finalResult??n.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Nn(t))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?b(S(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let c=er(n,t);if(!(t&&typeof t=="object"&&!Array.isArray(t)&&t.supersedesOriginalTargetPr===!0)){for(let y of c)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let h=Qe(t).find(y=>y.prUrl===s);if(!h||h.outcome!=="merged"&&!(h.reason?.trim()&&(h.outcome==="skipped"||h.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Qe(t),a=new Map(i.map(c=>[U(c.prUrl),c])),u=new Set(r.targetPrUrls.map(c=>U(b(c)??c)).filter(Boolean)),m=er(n,t);if(r.landingOnly)for(let c of m){let f=a.get(U(c)),g=Xe(c,r.targetPrUrls,f);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${c}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let d=[];for(let c of r.targetPrUrls){let f=U(b(c)??c),g=a.get(f);if(!g){d.push(f);continue}g.outcome!=="merged"&&!g.reason?.trim()&&d.push(f)}return d.length>0?{blocked:!0,reason:d.every(c=>a.has(c))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${d.join(", ")}`}:{blocked:!1}}function nr(e){if(e.blocked)return e.detail??e.reason}var tr=l(()=>{"use strict";ne();Ze()});function Kn(e){let r=Date.now();if(e.completionBlocker&&!or(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Un(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ye(o);if(s.blocked){let i=Ve(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=rr({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=nr(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Tn(e))return{state:"done",reason:"empty abandoned worker record"};let o=Te(e.error);if(o)return{state:"blocked",reason:o.reason};let s=De({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let n=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(n)&&r-n>Wn)return{state:"needs_attention",reason:`no first stream event ${z(n)}s after start`};let t=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(t)&&r-t>B?{state:"stale",reason:`no log/event/heartbeat activity for ${z(t)}s`}:{state:"ok",reason:"recent activity"}}function or(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Tn(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Un(e){let r=null;if(typeof e=="string"?r=T(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let n=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(n)?n.some(t=>!t||typeof t!="object"||Array.isArray(t)?!1:String(t.outcome??"").trim()==="merged"):!1}function Bn(e,r,n){let t=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&t!==void 0&&t!==null?t:r||(t??ke(n))}function sr(e,r={}){let n=We(e.stdoutPath),t=Re(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Bn(e,n.finalResult,t),i=o?!1:P(e.pid),a=w(e.stdoutPath),u=w(e.stderrPath),m=w(e.heartbeatPath),d=$e(e.worktreePath),c=je(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=ye([n.lastEventAt,t.lastHeartbeatAt,I(e.stdoutPath),I(e.stderrPath),I(e.heartbeatPath)]),g=n.error||!i&&!s&&he(e.stderrPath,10).trim()||void 0,h=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=or(h)?null:h,Wr=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,j=Kn({alive:i,finalResult:s,firstEventAt:n.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:t.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:d,gitAncestry:c,completionBlocker:y,landingContract:Wr,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),Kr=y||j.state==="blocked"?"blocked":o||j.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:Kr,attention:j,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,firstEventAt:n.firstEventAt,lastEventAt:n.lastEventAt,lastActivityAt:f,currentTool:o?null:n.currentTool,heartbeatCount:t.heartbeatCount,lastHeartbeatAt:t.lastHeartbeatAt,lastHeartbeatPhase:t.lastHeartbeatPhase,lastHeartbeatSummary:t.lastHeartbeatSummary,heartbeatBlocker:t.heartbeatBlocker,timestampAnomalies:t.timestampAnomalies,finalResult:s,error:g,changedFiles:d,gitAncestry:c,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:n.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function ir(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function ar(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Wn,B,A=l(()=>{"use strict";xe();Ke();Ue();Me();ee();Ge();tr();ne();p();Wn=18e4,B=6e5});var te=l(()=>{"use strict";ee();x()});var k=l(()=>{"use strict"});var D=l(()=>{"use strict"});var dr=l(()=>{"use strict"});var go,ho,oe=l(()=>{"use strict";go=25*1024*1024*1024,ho=12*1024*1024*1024});var xo,So,mr=l(()=>{"use strict";oe();xo=5*1024*1024*1024,So=10*1024*1024*1024});var Oo,wo,se=l(()=>{"use strict";mr();oe();Oo=30*1024*1024*1024,wo=15*1024*1024*1024});var fr=l(()=>{"use strict";M();p()});var pr=l(()=>{"use strict";A()});var $n,jn,yr=l(()=>{"use strict";dr();_();k();D();F();se();M();fr();pr();p();$n=500*1024*1024,jn=4*1024*1024*1024});var F=l(()=>{"use strict";yr()});import{homedir as Vn}from"node:os";import Gn from"node:path";var br,le=l(()=>{"use strict";br=Gn.join(Vn(),".kynver",".env")});var kr=l(()=>{"use strict"});var Rr=l(()=>{"use strict";kr()});var xr=l(()=>{"use strict"});var ue=l(()=>{"use strict";Rr();xr()});var Sr=l(()=>{"use strict"});var _r=l(()=>{"use strict";Sr()});var H=l(()=>{"use strict";le();x();_();ue();_r()});var Er=l(()=>{"use strict";k();k()});var vr=l(()=>{"use strict";le();ue();H()});var Cr=l(()=>{"use strict";p()});import Zn from"node:path";var Js,ce=l(()=>{"use strict";x();Cr();Js=Zn.join(".openclaw","harness")});var $=l(()=>{"use strict";_();k();D();F();ce()});var Or=l(()=>{"use strict";te();k();Er();_();H();vr();p();$()});var ot,gi,wr=l(()=>{"use strict";ot=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],gi=ot.join("|")});import{homedir as st,totalmem as _i}from"node:os";import de from"node:path";var Ir,Ui,Bi,Di,Mi,_=l(()=>{"use strict";te();x();p();k();D();F();se();H();Or();wr();$();Ir=de.join(st(),".kynver"),Ui=de.join(Ir,"config.json"),Bi=de.join(Ir,"credentials"),Di=500*1024*1024,Mi=4*1024*1024*1024});var Pr=l(()=>{"use strict";_();ce();$();p()});var M=l(()=>{"use strict";Pr();p()});A();var lr="kynver-harness:",Dn="@runner:";function ur(e){return e?.trim()?e.trim():null}function Mn(e){let r=ur(e);if(!r?.startsWith(lr))return null;let n=r.slice(lr.length),t=n.indexOf(Dn);return t>=0?n.slice(0,t).trim()||null:n.trim()||null}function cr(e,r){let n=ur(r);return n?Mn(e)===n:!1}A();p();function Fn(e){let{worker:r,status:n,taskLease:t}=e,o=t?.leaseOwner??null;if(r.dispatched&&t){if(t.status==="running"&&o&&!cr(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=t.leaseToken?.trim()??"";if(t.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(t.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(n.attention.state==="stale")return{health:"stale",reason:n.attention.reason};let s=n.lastHeartbeatAt?Date.parse(n.lastHeartbeatAt):NaN;return n.alive&&Number.isFinite(s)&&Date.now()-s>B?{health:"stale",reason:`heartbeat older than ${Math.floor(B/1e3)}s`}:n.alive&&r.pid&&!P(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:t?.status==="running"&&!n.alive&&n.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:n.attention.reason||"worker within expected lifecycle bounds"}}M();function Nr(e){return!!e.completionReportedAt?.trim()}A();function it(e){let{worker:r,status:n}=e,t=[];r.localOnly&&t.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&t.push("missing agentOsId/taskId linkage"),Nr(r)&&t.push("completion already acknowledged"),r.completionBlocker&&t.push(r.completionBlocker),n.heartbeatBlocker&&n.alive&&t.push(`worker heartbeat blocker: ${n.heartbeatBlocker}`),n.attention.state==="blocked"&&t.push(n.attention.reason||"worker attention blocked"),ar(n)&&t.push(n.attention.reason||"landing gate blocked");let o=ir(n),s;return o?n.finalResult?s="final_result":n.alive?s="terminal_status":s="process_exited":t.push("worker has not reached a terminal condition"),{eligible:o&&t.length===0,terminalVerified:o,terminalReason:s,blockers:t}}export{it as assessAutoCompleteEligibility,Fn as classifyWorkerHealth,sr as computeWorkerStatus};
|