@kynver-app/runtime 0.2.56 → 0.2.59
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 +9 -4
- package/dist/cli.js +106 -89
- package/dist/index.js +130 -114
- package/dist/local-run-store/index.js +1 -1
- package/dist/server/cleanup.js +1 -1
- package/dist/server/db-credentials.js +1 -2
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +4 -4
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +1 -1
- package/dist/server/model-routing.js +4 -4
- package/dist/server/monitor.js +1 -1
- package/dist/server/worker-policy.js +2 -2
- package/dist/worker-broker/index.js +4 -4
- 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 he}from"node:os";import ye from"node:path";function xr(e){return e==="~"?he():e.startsWith("~/")||e.startsWith("~\\")?ye.join(he(),e.slice(2)):e}function v(e){return ye.resolve(xr(e))}var x=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Sr,Zt,Er,en,G=a(()=>{"use strict";Sr=["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"],Zt=new Set(Sr),Er=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY"],en=new Set(Er)});var q=a(()=>{"use strict";x();d();G()});var z=a(()=>{"use strict";q();x()});var b=a(()=>{"use strict"});var N=a(()=>{"use strict"});var Re=a(()=>{"use strict"});var gn,hn,J=a(()=>{"use strict";gn=25*1024*1024*1024,hn=12*1024*1024*1024});var _n,vn,be=a(()=>{"use strict";J();_n=5*1024*1024*1024,vn=10*1024*1024*1024});var An,wn,X=a(()=>{"use strict";be();J();An=30*1024*1024*1024,wn=15*1024*1024*1024});var _e=a(()=>{"use strict";d()});import Ar from"node:path";var Dn,Q=a(()=>{"use strict";x();_e();Dn=Ar.join(".openclaw","harness")});var K=a(()=>{"use strict";k();b();N();W();Q()});var Se=a(()=>{"use strict";k();Q();K();d()});var ee=a(()=>{"use strict";Se();d()});var Ee=a(()=>{"use strict";ee();d()});var Oe=a(()=>{"use strict"});var Ce=a(()=>{"use strict";Oe();d()});var Ae=a(()=>{"use strict"});var we=a(()=>{"use strict";Ae()});var Pe=a(()=>{"use strict";we();d()});var Ie=a(()=>{"use strict"});var Ne=a(()=>{"use strict"});var Te=a(()=>{"use strict"});var re=a(()=>{"use strict"});var Ke=a(()=>{"use strict"});var We=a(()=>{"use strict";re();Ke()});var Be=a(()=>{"use strict";Ce();Pe();Ie();Ne();q();Te();We();re();d()});var Me=a(()=>{"use strict";Be()});var Br,Mr,De=a(()=>{"use strict";Re();k();b();N();W();X();ee();Ee();Me();d();Br=500*1024*1024,Mr=4*1024*1024*1024});var W=a(()=>{"use strict";De()});import{homedir as Dr}from"node:os";import Ur from"node:path";var Ue,te=a(()=>{"use strict";Ue=Ur.join(Dr(),".kynver",".env")});var Le=a(()=>{"use strict"});var Fe=a(()=>{"use strict";Le()});var $e=a(()=>{"use strict"});var ne=a(()=>{"use strict";Fe();$e()});var He=a(()=>{"use strict"});var je=a(()=>{"use strict";He()});var B=a(()=>{"use strict";te();x();k();ne();je()});var Ye=a(()=>{"use strict";b();b()});var Ve=a(()=>{"use strict";te();ne();B()});var Ge=a(()=>{"use strict";z();b();Ye();k();B();Ve();d();K()});import{existsSync as Gr,mkdirSync as Ks,readFileSync as qr,writeFileSync as Ws}from"node:fs";import{homedir as zr,totalmem as Ms}from"node:os";import oe from"node:path";function Jr(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:v(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:v(e.defaultRepo.trim())}:{}}}function S(){if(!Gr(qe))return{};try{return Jr(JSON.parse(qr(qe,"utf8")))}catch{return{}}}var ze,qe,zs,Js,Xs,k=a(()=>{"use strict";z();x();d();b();N();W();X();B();Ge();K();ze=oe.join(zr(),".kynver"),qe=oe.join(ze,"config.json"),zs=oe.join(ze,"credentials");Js=500*1024*1024,Xs=4*1024*1024*1024});var Rr=/^claude[-_]/i,br=/^(?:opus|sonnet|haiku)\b/i;function fe(e){let r=e.trim();return Rr.test(r)||br.test(r)}function ge(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Y(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function kr(e){return ge(e)?"codex":fe(e)?"claude":(Y(e),"cursor")}function _r(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"}:null:null}function vr(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?fe(n)||ge(n)||Y(n)?{lane:t,model:n,provider:kr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function h(e){let r=typeof e=="string"?e.trim():"";return r?_r(r)??vr(r):null}function V(e){let r=h(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Y(r.model)):!1}k();var Je={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 E(e){return Je[e]}function Xe(){return Object.values(Je)}import{existsSync as Qr}from"node:fs";import{homedir as Zr}from"node:os";import C from"node:path";import{createHash as Qe}from"node:crypto";import{statSync as Xr}from"node:fs";import{spawnSync as Ze}from"node:child_process";function y(e){try{let r=Xr(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Qe("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function O(e){return Qe("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function p(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function m(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Ze(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 M(e,r,t={}){let n=t.timeoutMs??8e3;try{return Ze(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 et="codex";function rt(){let e=Zr();return[process.env.CODEX_HOME?.trim()?C.join(C.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,C.join(e,".codex","auth.json"),C.join(e,".config","codex","auth.json")].filter(t=>!!t)}function tt(e){return C.dirname(e)}function nt(e){let r,t;for(let n of rt()){if(!Qr(n))continue;r??=n;let o=m(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:tt(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??m(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function er(e=new Date().toISOString()){let r=p(et,["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}=nt(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 ot}from"node:fs";import{homedir as it}from"node:os";import ie from"node:path";function st(){let e=process.env.HERMES_HOME?.trim(),r=e?ie.resolve(e):ie.join(it(),".hermes");return ie.join(r,"auth.json")}function D(e=new Date().toISOString()){let r=p("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=m(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=st(),o=ot(n),i=M(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 A(e=new Date().toISOString()){let r=er(e);if(r.ready)return{...r,path:"codex_cli"};let t=D(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 rr=["low","medium","high"],tr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function nr(e,r){let t=E(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function at(e,r){let t=E(e.providerId),n=E(r.providerId),o=rr.indexOf(t.costTier)-rr.indexOf(n.costTier);if(o!==0)return o;let i=tr[e.binding.authSource]-tr[r.binding.authSource];return i!==0?i:e.providerId.localeCompare(r.providerId)}function se(e){let r=Xe().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&nr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(at)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let i=e.inventory.bindings[o],s;return nr(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 lt}from"node:fs";import{homedir as ct}from"node:os";import ut from"node:path";var dt="claude";function pt(){let e=ct();return[ut.join(e,".claude",".credentials.json")]}function or(e=new Date().toISOString()){let r=p(dt,["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=m(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=pt().find(s=>lt(s)),o=M(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 mt}from"node:fs";import{homedir as ft}from"node:os";import ae from"node:path";var gt="agent";function ht(){let e=ft(),r=[ae.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(ae.join(t,"cursor-agent","auth.json")),n&&r.push(ae.join(n,"cursor","auth.json"))}return r}function ir(e=new Date().toISOString()){let r=p(gt,["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=m(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ht().find(i=>mt(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 yt,readFileSync as Rt}from"node:fs";import{homedir as bt}from"node:os";import le from"node:path";var kt=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function _t(){let e=process.env.HERMES_HOME?.trim(),r=e?le.resolve(e):le.join(bt(),".hermes");return le.join(r,".env")}function vt(e){try{let r=Rt(e,"utf8"),t=[];for(let n of kt)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function sr(e=new Date().toISOString()){let r=p("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=m(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=_t(),o=yt(n),i=o?vt(n):[],l=i.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${i.length?`keys: ${i.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function ar(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=A(r),n={codex:t,cursor:ir(r),claude:or(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:sr(r),hermesOpenAiCodex:D(r),codexAdapterPath:t.path,readyCount:o}}var xt=[/\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],St=[/\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 ce(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Et(e){let r=ce(e,"executorRef").toLowerCase(),t=ce(e,"title").toLowerCase(),n=ce(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 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}
|
|
2
2
|
${t}
|
|
3
|
-
${n}`;return
|
|
4
|
-
${
|
|
5
|
-
${
|
|
3
|
+
${n}`;return At.some(i=>i.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":wt.some(i=>i.test(o))?"low":"elevated"}function It(e){let r=S(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 Nt(e){let r=e.inventory??dr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function b(e){let r=It({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 pr(e){let r=e.task??{},t=Pt(r),n=Nt({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:I())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),i=e.explicitModel?.trim()||void 0,s=fe;if(o==="codex"||o==="provider:codex"){let u=n.bindings.codex;if(!u.ready){let h=ce({inventory:n,riskClass:t});return b(h?{providerId:h.providerId,binding:h.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:i,escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"}:{providerId:s,binding:n.bindings[s],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:i,escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"})}return b({providerId:"codex",binding:u,riskClass:t,routingRule:"orchestration:explicit_codex",model:i})}if(o==="cursor"||o==="provider:cursor"){let u=n.bindings.cursor;if(u.ready)return b({providerId:"cursor",binding:u,riskClass:t,routingRule:"orchestration:explicit_cursor",model:i})}if(o==="claude"||o==="provider:claude"){let u=n.bindings.claude;if(u.ready)return b({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:i})}let l=ce({inventory:n,riskClass:t});if(l)return b({providerId:l.providerId,binding:l.binding,riskClass:t,routingRule:`orchestration:cost_aware_${l.providerId}`,model:i,escalatedFrom:l.escalatedFrom,escalatedReason:l.escalatedReason});let c=n.bindings.codex;return b({providerId:s,binding:n.bindings[s],riskClass:t,routingRule:c.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:i,...c.ready?{}:{escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}})}X();d();var mr="kynver",fr=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Tt=fr.map(e=>`mcp__${mr}__${e}`);var H="claude-sonnet-4-6",N="claude-opus-4-8";d();d();var gl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Kt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var j=Kt();d();var ge="openai-compatible",Fl=600*1e3;d();var C="gemini";function A(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var T="gemini-api";var eu=600*1e3;var yr="claude-sonnet-4-6",G="composer-2.5";function p(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Dt(e){if(!e)return;let r=p(e,"workerModelOverride")||p(e,"modelOverride");return r||`${p(e,"title")}
|
|
4
|
+
${p(e,"description")}
|
|
5
|
+
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function gr(e){return e.toLowerCase()}function q(e=E()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||yr}function Y(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-")?C:"cursor"}function Ut(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:G,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:H,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:A(),provider:C,rule:n&&n!==C?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:A(),provider:T,rule:n&&n!==T?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function hr(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 Lt=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Rr(e,r,t){return Lt.has(e)?N:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?N:H}function _r(e){let r=gr(p(e,"executorRef")),t=p(e,"title").toLowerCase(),n=p(e,"priority")||"normal",o=gr(p(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let s=Rr(o,r,t);return{provider:"claude",model:s,rule:s===N?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:j,rule:"lane:codex_orchestration"};if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let s=m(p(e,"executorRef"));return{provider:ge,...s?.model?{model:s.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let s=m(p(e,"executorRef"));return{provider:T,...s?.model?{model:s.model}:{model:A()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let s=m(p(e,"executorRef"));return{provider:C,...s?.model?{model:s.model}:{model:A()},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:j,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 hr(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(hr(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 i=q();return{model:i,provider:Y(i),rule:"default:global"}}function Ft(e){return e?m(p(e,"executorRef")):null}function $t(e){let r,t=Ft(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=Ut(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||Y(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||Y(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&V(e.task)){let l=Dt(e.task),c,u;if(l)c=l,u="task:provider_override";else{let h=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",he=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",vr=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Rr(h,he,vr),u=c===N?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=_r(e.task);r={...l,requestedModel:l.model}}else{let l=q();r={model:l,provider:e.explicitProvider?.trim()||Y(l),rule:"default:global",requestedModel:l}}let i=kr({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});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"||R(i.provider)&&(e.explicitProviderIsOperatorOverride||V(e.task))||i.provider===ge||i.provider===C||i.provider===T)return i;let s=pr({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:s.provider,model:s.provider==="codex"?s.model??i.model??j:i.model,rule:s.rule,requestedModel:i.requestedModel,orchestrationAudit:s.audit}}function Ht(e,r,t){return e||r||t||q()||H}var fe="cursor";var jt=new Set(["claude","opus","anthropic"]),Yt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function W(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function R(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return jt.has(r)?!0:r.includes("claude")||r.includes("opus")}function V(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&R(r))return!0;let t=W(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(W(e,"executorRef"));if(n?.provider&&R(n.provider)||n?.model&&R(Vt(n.model)))return!0;let o=W(e,"description");if(Yt.some(s=>s.test(o)))return!0;let i=W(e,"title");return!!/\[use-claude-worker\]/i.test(i)}function Vt(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Gt(e,r){return{provider:fe,model:G,rule:`policy:cursor_default${r}`,requestedModel:e}}var qt=["explicit:","executor_ref:","factory:","task:"];function zt(e){return qt.some(r=>e.startsWith(r))}function Jt(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||m(W(e,"executorRef"))?.provider?!0:V(e)}function kr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&R(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||zt(r.rule)||Jt(t)||!R(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Gt(r.model,o)}function Xt(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function br(e){return e?.trim()||void 0}function Qt(e){let r=Xt(e.task),t=m(r),n=e.explicitProvider?.trim().toLowerCase(),o=br(e.explicitModel??void 0),i=n||t?.provider,s=o||t?.model,l=n||o?"cli":t?.rule??"none";if(!i&&!s)return{ok:!0};!i&&s&&(/^claude[-_]/i.test(s)||/^(?:opus|sonnet|haiku)\b/i.test(s))&&(i="claude");let c=e.routing.provider,u=br(e.routing.model),h={provider:c,model:u,rule:e.routing.rule};return i&&i!=="cursor"||r&&J(r)||n&&n!=="cursor"?c==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${i??"non-cursor"}${s?` model=${s}`:""} (${l}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:i,model:s,source:l},resolved:h}:s&&u&&s!==u&&!R(c)?{ok:!1,error:`model_routing_mismatch: requested model=${s} (${l}) but routing resolved model=${u} (${e.routing.rule})`,requested:{provider:i,model:s,source:l},resolved:h}:{ok:!0,requested:{provider:i,model:s,source:l},resolved:h}:{ok:!0,resolved:h}}export{G as CURSOR_DEFAULT_MODEL,yr as GLOBAL_DEFAULT_MODEL,Qt as assessDispatchModelGuard,J as executorRefRequestsNonCursorWorker,_r as inferModelRoutingFromTask,m as parseExecutorRefRoutingIntent,q as resolveGlobalDefaultModel,Ht as resolveModelFallback,$t as resolveWorkerLaunch};
|
package/dist/server/monitor.js
CHANGED
|
@@ -4,5 +4,5 @@ var l=(e,r,n)=>()=>{if(n)throw n[0];try{return e&&(r=e(e=0)),r}catch(t){throw n=
|
|
|
4
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 Dr,xe=l(()=>{"use strict";pe();p();Dr=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 ve(e){let r=_e(e[0]);return!!(r&&Mr.has(r))}function Hr(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function $r(e){if(!e||e.includes("*"))return null;let r=Hr(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Ee(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 Lr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function jr(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 Yr(e){let r=!1,n=e.map((o,s)=>{let i=Lr(o),a=e[s-1];return a&&Se.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),t=jr(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||!Fr.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 Vr(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 Gr(e){let r=e.trim(),n=W(r),t=N(n.command);if(!t.length||!ve(t))return{segment:r,changed:!1};let o=Yr(t);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return n.wrapped?{segment:Vr(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=Gr(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&&ve(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 zr(e){let{pattern:r,target:n}=Oe(e);return r?J(n)?{kind:"rg_exclude_syntax",pattern:r,target:n}:Ee(n)?{kind:"bad_scope",pattern:r,target:n}:{kind:"not_repo_search",pattern:r,target:n}:{kind:"not_repo_search"}}function Jr(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&&Ee(n)?{command:`rg -g ${n} "${r}" .`,changed:!0}:null}function qr(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 Xr(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?Xr(e.command):null)||null;if(r){let n=zr(r),t=qr(n);if(t)return t;let o=Jr(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 Mr,Fr,Se,we=l(()=>{"use strict";Mr=new Set(["rg","ripgrep","grep"]),Fr=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 v(e,r=200){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function en(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 E(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function rn(e){let r=e.metadata;if(!E(r))return null;let n=r.vulnerabilities;if(!E(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 nn(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 tn(e,r){let n=e.error;if(E(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?v(o.split(`
|
|
5
5
|
`).find(Boolean)??o,160):"npm audit failed"}function on(e){let r=`${e.stdout}
|
|
6
6
|
${e.stderr}`.trim(),n=en(r);if(!n||!E(n)){let o=v(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(E(n.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${tn(n,e.stderr)}`};let t=rn(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:nn(t),audit:t}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function sn(e){return Zr.test(e)}function an(e){let r=W(e).command;return Ie.test(e)||Ie.test(r)||Ae(e)}function ln(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&&Qr.test(t)){let i=v(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=v(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(sn(e.command)){let i=r.trim()||t.trim()||n.trim();return on({exitCode:e.exitCode,stdout:i,stderr:n})}if(an(e.command))return ln({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=v(t||r||n||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Zr,Ie,Qr,Ne=l(()=>{"use strict";we();Zr=/\bnpm\s+audit\b/i,Ie=/\b(rg|ripgrep)\b/i,Qr=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as un,readFileSync as cn}from"node:fs";function dn(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function mn(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 fn(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 pn(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function gn(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 hn(e,r){let n=pn(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=gn(r)??e.usage?.model;e.usage={...t!==void 0?{inputTokens:t}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function yn(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 bn(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(!un(e))return r;let n=cn(e,"utf8").split(`
|
|
7
|
-
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=dn(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=mn(a);u&&(r.currentTool=u)}let i=yn(o);i&&bn(r,Pe({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&fn(r,o),hn(r,o)}return r}var Te=l(()=>{"use strict";Ne();p()});function Rn(e,r=240){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function Ke(e){let r=(e??"").trim();if(!r)return null;for(let n of kn)if(n.test.test(r))return{blocked:!0,reason:`${n.label}: ${Rn(r)}`};return null}var kn,Ue=l(()=>{"use strict";kn=[{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 xn(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 Sn(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Be(e.head)}function _n(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||xn(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,n=Be(e.headCommit)??Sn(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:_n(s,r,n)}}var Me=l(()=>{"use strict"});var x=l(()=>{"use strict"});var vn,wt,En,It,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"],wt=new Set(vn),En=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY"],It=new Set(En)});import{spawnSync as $e}from"node:child_process";function Cn(e,r,n={}){let t=$e("git",r,G({cwd:e,encoding:"utf8"}));if(t.status!==0&&!n.allowFailure){let o=An(e,r,t);if(n.throwError)throw new Error(o);V(o)}return t.stdout||""}function An(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 Le(e){return Cn(e,["status","--short"],{allowFailure:!0}).split(`
|
|
7
|
+
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=dn(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=mn(a);u&&(r.currentTool=u)}let i=yn(o);i&&bn(r,Pe({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&fn(r,o),hn(r,o)}return r}var Te=l(()=>{"use strict";Ne();p()});function Rn(e,r=240){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function Ke(e){let r=(e??"").trim();if(!r)return null;for(let n of kn)if(n.test.test(r))return{blocked:!0,reason:`${n.label}: ${Rn(r)}`};return null}var kn,Ue=l(()=>{"use strict";kn=[{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 xn(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 Sn(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Be(e.head)}function _n(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||xn(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,n=Be(e.headCommit)??Sn(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:_n(s,r,n)}}var Me=l(()=>{"use strict"});var x=l(()=>{"use strict"});var vn,wt,En,It,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"],wt=new Set(vn),En=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],It=new Set(En)});import{spawnSync as $e}from"node:child_process";function Cn(e,r,n={}){let t=$e("git",r,G({cwd:e,encoding:"utf8"}));if(t.status!==0&&!n.allowFailure){let o=An(e,r,t);if(n.throwError)throw new Error(o);V(o)}return t.stdout||""}function An(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 Le(e){return Cn(e,["status","--short"],{allowFailure:!0}).split(`
|
|
8
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};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
${n}`,s=Ar(e.personaSlug);return!!(r.startsWith(Er)||r===Or||r.startsWith("daemon-review:")||s&&C.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||wr(r,i)||V(i))||r.startsWith(Cr)&&e.parentTaskId&&s&&C.has(s)||e.planId&&!e.parentTaskId&&s&&C.has(s)&&V(i)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&C.has(s))}var Ir=/^claude[-_]/i,Nr=/^(?:opus|sonnet|haiku)\b/i;function he(e){let r=e.trim();return Ir.test(r)||Nr.test(r)}function ye(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Re(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Tr(e){return ye(e)?"codex":he(e)?"claude":(Re(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(),i=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:i,rule:i?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:i,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:i,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:i,rule:"executor_ref:provider_cursor"}:null:null}function Kr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(i=>i.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?he(n)||ye(n)||Re(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 A(e){let r=typeof e=="string"?e.trim():"";return r?Wr(r)??Kr(r):null}p();a();var st="kynver",Qe=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],at=Qe.map(e=>`mcp__${st}__${e}`);a();a();var $a=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function ct(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var ut=ct();a();var hl=600*1e3;var Ze="composer-2.5";var m="cursor",dt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible"};function rr(e){let r=e.trim().toLowerCase();return dt[r]??r}var pt=new Set(["claude","opus","anthropic"]),mt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function b(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function u(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return pt.has(r)?!0:r.includes("claude")||r.includes("opus")}function ie(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&u(r))return!0;let t=b(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=A(b(e,"executorRef"));if(n?.provider&&u(n.provider)||n?.model&&u(ft(n.model)))return!0;let i=b(e,"description");if(mt.some(l=>l.test(i)))return!0;let s=b(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function ft(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function gt(e,r){return{provider:m,model:Ze,rule:`policy:cursor_default${r}`,requestedModel:e}}var ht=["explicit:","executor_ref:","factory:","task:"];function yt(e){return ht.some(r=>e.startsWith(r))}function tr(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||A(b(e,"executorRef"))?.provider?!0:ie(e)}function er(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&u(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||yt(r.rule)||tr(t)||!u(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return gt(r.model,i)}function Rt(e,r=m){let t=e?.trim();return t?rr(t):r}function vt(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(m)?[...new Set(r.map(t=>u(t)?m:t))]:r.every(t=>u(t))?[m]:r}var bt=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,_t=/\b(npm run build\b|next build\b)\b/i,kt=/\b(vercel (build|deploy|--prod))\b/i,xt=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function se(e){let r=e.trim();return r?xt.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:kt.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:_t.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:bt.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var M="heavy_verification_token_required";import{spawnSync as Ft}from"node:child_process";a();import{closeSync as wt,existsSync as k,mkdirSync as Pt,openSync as It,readdirSync as sr,readFileSync as Nt,statSync as Tt,unlinkSync as ar,writeFileSync as Wt}from"node:fs";import ce from"node:path";import{mkdirSync as Et}from"node:fs";import{tmpdir as Ot}from"node:os";import U from"node:path";import{homedir as St}from"node:os";import nr from"node:path";function or(){let e=process.env.KYNVER_STATE_ROOT;return e?nr.resolve(e):nr.join(St(),".kynver","state")}function Ct(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function At(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?U.resolve(e):Ct()?U.join(Ot(),"kynver","state","heavy-verification"):U.join(or(),"heavy-verification")}function ae(){return U.join(At(),"slots")}function _(){let e=ae();return Et(e,{recursive:!0}),e}var x=120*6e4,ir=1;function Kt(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function F(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function L(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Kt(e,ir):ir}function Dt(e){return`slot-${e}`}function Bt(e,r=ae()){return ce.join(r,`${e}.json`)}function ue(e){if(!k(e))return null;try{let r=JSON.parse(Nt(e,"utf8"));if(typeof r.slotId=="string"&&typeof r.pid=="number"&&typeof r.acquiredAt=="string"&&typeof r.command=="string")return r}catch{return null}return null}function lr(e,r=x){if(!e||!Y(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function cr(e,r){let t=ue(e);if(t)return lr(t,r);if(!k(e))return!0;try{return Date.now()-Tt(e).mtimeMs>r}catch{return!0}}function Mt(e,r){if(cr(e,r))try{ar(e)}catch{}}function Ut(e){return Pt(e,{recursive:!0}),e}function de(e={}){let r=Ut(e.slotsDir??_()),t=e.staleMs??x,n=0;for(let i of sr(r)){if(!i.endsWith(".json"))continue;let s=ce.join(r,i),l=k(s);Mt(s,t),l&&!k(s)&&(n+=1)}return n}function Lt(e={}){let r=e.slotsDir??_(),t=e.staleMs??x;de({slotsDir:r,staleMs:t});let n=[];for(let i of sr(r)){if(!i.endsWith(".json"))continue;let s=ue(ce.join(r,i));s&&!lr(s,t)&&n.push(s)}return n}function le(e={}){return Lt(e).length}function S(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??_(),n=r.staleMs??x,i=r.maxSlots??L();de({slotsDir:t,staleMs:n});for(let l=0;l<i;l+=1){let c=Dt(l),h=Bt(c,t),dr=ue(h);if(cr(h,n))try{ar(h)}catch{}else if(dr||k(h))continue;let pr={slotId:c,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let y=It(h,"wx");Wt(y,JSON.stringify(pr,null,2),"utf8"),wt(y);let mr=le({slotsDir:t,staleMs:n});return{admitted:!0,slotId:c,activeSlots:mr,maxSlots:i,reason:null}}catch(y){if(y.code==="EEXIST")continue;throw y}}let s=le({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function H(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??_(),n=r.staleMs??x,i=r.maxSlots??L();de({slotsDir:t,staleMs:n});let s=le({slotsDir:t,staleMs:n}),l=s<i;return{admitted:l,slotId:null,activeSlots:s,maxSlots:i,reason:l?null:`heavy verification at capacity (${s}/${i} slots); waiting for ${e}`}}function Ht(e){e<=0||Ft(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ur(e,r,t=2e3,n={}){let i=Date.now()+Math.max(0,r),s=S(e,n);for(;!s.admitted&&Date.now()<i;)Ht(Math.min(t,i-Date.now())),s=S(e,n);return s}function $t(e,r={}){let t=se(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...H(e),slotId:null}};if(F())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...H(e),slotId:null}};let n=r.waitMs??0,i=n>0?ur(e,n,r.pollMs):S(e);return i.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:i}:{allowed:!1,outcome:M,commandClass:t.commandClass,reason:t.reason??i.reason??M,verificationGate:i}}export{m as DEFAULT_WORKER_PROVIDER,M as HEAVY_VERIFICATION_TOKEN_REQUIRED,j as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Sr as auditReviewWorkerCredentialScope,_r as auditWorkerEnv,f as buildWorkerSpawnEnv,se as classifyHeavyShellCommand,er as enforceCursorWorkerProvider,$t as gateWorkerShellCommand,u as isClaudeFamilyProvider,R as isForbiddenWorkerEnvKey,Pr as isHarnessExpertReviewWorker,ge as isNoProdCredentialReviewEnvironment,pe as listForbiddenWorkerEnvKeys,me as listOperatorAllowedWorkerEnvKeys,rr as normalizeWorkerProviderName,vt as preferCursorExecutor,Rt as resolveConfiguredWorkerProvider,E as scrubWorkerEnv,ie as taskAllowsClaudeWorker,tr as taskExpressesWorkerProviderPreference};
|
|
1
|
+
var i=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function H(e){let r=e[kr];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function v(e,r={}){return yr.has(e)?!0:_r.has(e)||r.operatorAllow?.has(e)||br.some(t=>e.endsWith(t))?!1:vr.some(t=>e.endsWith(t))}function pe(e){let r=H(e);return Object.keys(e).filter(t=>v(t,{operatorAllow:r})).sort()}function me(e){let r=H(e);return r.size===0?[]:Object.keys(e).filter(t=>r.has(t)&&!v(t,{operatorAllow:r})&&v(t)).sort()}function O(e){let r=H(e),t={...e};for(let n of Object.keys(t))v(n,{operatorAllow:r})&&delete t[n];return t}function xr(e){let r=pe(e),t=me(e);return{forbiddenPresent:r,safe:r.length===0,...t.length?{operatorAllowedActive:t}:{}}}var hr,yr,vr,Rr,_r,br,kr,C=i(()=>{"use strict";hr=["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"],yr=new Set(hr),vr=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],Rr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],_r=new Set(Rr),br=["_PUBLIC_KEY"],kr="KYNVER_WORKER_ENV_ALLOW"});var g=i(()=>{"use strict"});function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=i(()=>{"use strict"});var q=i(()=>{"use strict";g();a();C()});var z=i(()=>{"use strict";q();g()});var p=i(()=>{"use strict"});var P=i(()=>{"use strict"});var _e=i(()=>{"use strict"});var gn,hn,J=i(()=>{"use strict";gn=25*1024*1024*1024,hn=12*1024*1024*1024});var bn,kn,be=i(()=>{"use strict";J();bn=5*1024*1024*1024,kn=10*1024*1024*1024});var An,wn,X=i(()=>{"use strict";be();J();An=30*1024*1024*1024,wn=15*1024*1024*1024});var xe=i(()=>{"use strict";a()});import Ur from"node:path";var Bn,Q=i(()=>{"use strict";g();xe();Bn=Ur.join(".openclaw","harness")});var N=i(()=>{"use strict";m();p();P();T();Q()});var Oe=i(()=>{"use strict";m();Q();N();a()});var ee=i(()=>{"use strict";Oe();a()});var Ce=i(()=>{"use strict";ee();a()});var Ae=i(()=>{"use strict"});var we=i(()=>{"use strict";Ae();a()});var Pe=i(()=>{"use strict"});var Ie=i(()=>{"use strict";Pe()});var Ne=i(()=>{"use strict";Ie();a()});var Te=i(()=>{"use strict"});var We=i(()=>{"use strict"});var Ke=i(()=>{"use strict"});var re=i(()=>{"use strict"});var Me=i(()=>{"use strict"});var De=i(()=>{"use strict";re();Me()});var Be=i(()=>{"use strict";we();Ne();Te();We();q();Ke();De();re();a()});var Ue=i(()=>{"use strict";Be()});var Gr,qr,Le=i(()=>{"use strict";_e();m();p();P();T();X();ee();Ce();Ue();a();Gr=500*1024*1024,qr=4*1024*1024*1024});var T=i(()=>{"use strict";Le()});import{homedir as zr}from"node:os";import Jr from"node:path";var Fe,te=i(()=>{"use strict";Fe=Jr.join(zr(),".kynver",".env")});var $e=i(()=>{"use strict"});var He=i(()=>{"use strict";$e()});var je=i(()=>{"use strict"});var ne=i(()=>{"use strict";He();je()});var Ve=i(()=>{"use strict"});var Ye=i(()=>{"use strict";Ve()});var K=i(()=>{"use strict";te();g();m();ne();Ye()});var Ge=i(()=>{"use strict";p();p()});var qe=i(()=>{"use strict";te();ne();K()});var ze=i(()=>{"use strict";z();p();Ge();m();K();qe();a();N()});import{homedir as ot,totalmem as Ts}from"node:os";import oe from"node:path";var Je,Vs,Ys,Gs,qs,m=i(()=>{"use strict";z();g();a();p();P();T();X();K();ze();N();Je=oe.join(ot(),".kynver"),Vs=oe.join(Je,"config.json"),Ys=oe.join(Je,"credentials"),Gs=500*1024*1024,qs=4*1024*1024*1024});C();C();var j="KYNVER_NO_PROD_DB_CREDENTIALS",Er=["KYNVER_ENV_FILE"],Sr=new Set(["1","true","yes","on"]);function ge(e){let r=e[j]?.trim().toLowerCase();return r!==void 0&&Sr.has(r)}function d(e,r={}){let t=O(e);if(!r.reviewWorker)return t;let n={...t,[j]:"1"};for(let o of Er)delete n[o];return n}var fe=["DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL"];function Or(e,r={}){let t=d(e,r),n=Object.keys(t).filter(c=>c.endsWith("_SECRET")||c.endsWith("_API_KEY")||fe.includes(c)),o=fe.every(c=>t[c]===void 0),s=r.reviewWorker?t.KYNVER_ENV_FILE===void 0:!0,l=ge(t);return{reviewMode:!!r.reviewWorker,noProdFlagPresent:r.reviewWorker?l:!0,forbiddenKeysAfterScrub:n.sort(),productionDbKeysAbsent:o,envFilePointerStripped:s,safe:o&&n.length===0&&s&&(!r.reviewWorker||l)}}var Cr="expert-lane-pr-review:",Ar="plan-review-task",wr="scheduledjob:",A=new Set(["lorentz","dalton","rhea","sentinel"]);function Pr(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function V(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|risk register|signoff|verification|evidence|prove|gate)\b/.test(e)}function Ir(e,r){return e.startsWith("factory:")?e.includes("lb")||V(r):!1}function Nr(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
|
|
2
|
+
${n}`,s=Pr(e.personaSlug);return!!(r.startsWith(Cr)||r===Ar||r.startsWith("daemon-review:")||s&&A.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||Ir(r,o)||V(o))||r.startsWith(wr)&&e.parentTaskId&&s&&A.has(s)||e.planId&&!e.parentTaskId&&s&&A.has(s)&&V(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&A.has(s))}var Tr=/^claude[-_]/i,Wr=/^(?:opus|sonnet|haiku)\b/i;function he(e){let r=e.trim();return Tr.test(r)||Wr.test(r)}function ye(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ve(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Re(e){return e.trim().toLowerCase().startsWith("gemini-")}function Kr(e){return ye(e)?"codex":he(e)?"claude":Re(e)?"gemini":(ve(e),"cursor")}function Mr(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 Dr(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?he(n)||ye(n)||ve(n)||Re(n)?{lane:t,model:n,provider:Kr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function w(e){let r=typeof e=="string"?e.trim():"";return r?Mr(r)??Dr(r):null}m();a();var Ze="kynver",er=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],lt=er.map(e=>`mcp__${Ze}__${e}`);a();a();var Ga=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function ut(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var dt=ut();a();var Rl=600*1e3;a();var Nl=600*1e3;var rr="composer-2.5";var f="cursor",gt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"};function nr(e){let r=e.trim().toLowerCase();return gt[r]??r}var ht=new Set(["claude","opus","anthropic"]),yt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function b(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function u(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return ht.has(r)?!0:r.includes("claude")||r.includes("opus")}function ie(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&u(r))return!0;let t=b(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=w(b(e,"executorRef"));if(n?.provider&&u(n.provider)||n?.model&&u(vt(n.model)))return!0;let o=b(e,"description");if(yt.some(l=>l.test(o)))return!0;let s=b(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function vt(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Rt(e,r){return{provider:f,model:rr,rule:`policy:cursor_default${r}`,requestedModel:e}}var _t=["explicit:","executor_ref:","factory:","task:"];function bt(e){return _t.some(r=>e.startsWith(r))}function or(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||w(b(e,"executorRef"))?.provider?!0:ie(e)}function tr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&u(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||bt(r.rule)||or(t)||!u(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Rt(r.model,o)}function kt(e,r=f){let t=e?.trim();return t?nr(t):r}function xt(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(f)?[...new Set(r.map(t=>u(t)?f:t))]:r.every(t=>u(t))?[f]:r}var Et=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,St=/\b(npm run build\b|next build\b)\b/i,Ot=/\b(vercel (build|deploy|--prod))\b/i,Ct=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function se(e){let r=e.trim();return r?Ct.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:Ot.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:St.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:Et.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var B="heavy_verification_token_required";import{spawnSync as Vt}from"node:child_process";a();import{closeSync as Tt,existsSync as x,mkdirSync as Wt,openSync as Kt,readdirSync as lr,readFileSync as Mt,statSync as Dt,unlinkSync as cr,writeFileSync as Bt}from"node:fs";import ce from"node:path";import{mkdirSync as wt}from"node:fs";import{tmpdir as Pt}from"node:os";import U from"node:path";import{homedir as At}from"node:os";import ir from"node:path";function sr(){let e=process.env.KYNVER_STATE_ROOT;return e?ir.resolve(e):ir.join(At(),".kynver","state")}function It(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Nt(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?U.resolve(e):It()?U.join(Pt(),"kynver","state","heavy-verification"):U.join(sr(),"heavy-verification")}function ae(){return U.join(Nt(),"slots")}function k(){let e=ae();return wt(e,{recursive:!0}),e}var E=120*6e4,ar=1;function Ut(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function F(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function L(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Ut(e,ar):ar}function Lt(e){return`slot-${e}`}function Ft(e,r=ae()){return ce.join(r,`${e}.json`)}function ue(e){if(!x(e))return null;try{let r=JSON.parse(Mt(e,"utf8"));if(typeof r.slotId=="string"&&typeof r.pid=="number"&&typeof r.acquiredAt=="string"&&typeof r.command=="string")return r}catch{return null}return null}function ur(e,r=E){if(!e||!Y(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function dr(e,r){let t=ue(e);if(t)return ur(t,r);if(!x(e))return!0;try{return Date.now()-Dt(e).mtimeMs>r}catch{return!0}}function $t(e,r){if(dr(e,r))try{cr(e)}catch{}}function Ht(e){return Wt(e,{recursive:!0}),e}function de(e={}){let r=Ht(e.slotsDir??k()),t=e.staleMs??E,n=0;for(let o of lr(r)){if(!o.endsWith(".json"))continue;let s=ce.join(r,o),l=x(s);$t(s,t),l&&!x(s)&&(n+=1)}return n}function jt(e={}){let r=e.slotsDir??k(),t=e.staleMs??E;de({slotsDir:r,staleMs:t});let n=[];for(let o of lr(r)){if(!o.endsWith(".json"))continue;let s=ue(ce.join(r,o));s&&!ur(s,t)&&n.push(s)}return n}function le(e={}){return jt(e).length}function S(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??k(),n=r.staleMs??E,o=r.maxSlots??L();de({slotsDir:t,staleMs:n});for(let l=0;l<o;l+=1){let c=Lt(l),h=Ft(c,t),mr=ue(h);if(dr(h,n))try{cr(h)}catch{}else if(mr||x(h))continue;let fr={slotId:c,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let y=Kt(h,"wx");Bt(y,JSON.stringify(fr,null,2),"utf8"),Tt(y);let gr=le({slotsDir:t,staleMs:n});return{admitted:!0,slotId:c,activeSlots:gr,maxSlots:o,reason:null}}catch(y){if(y.code==="EEXIST")continue;throw y}}let s=le({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function $(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??k(),n=r.staleMs??E,o=r.maxSlots??L();de({slotsDir:t,staleMs:n});let s=le({slotsDir:t,staleMs:n}),l=s<o;return{admitted:l,slotId:null,activeSlots:s,maxSlots:o,reason:l?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}function Yt(e){e<=0||Vt(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function pr(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=S(e,n);for(;!s.admitted&&Date.now()<o;)Yt(Math.min(t,o-Date.now())),s=S(e,n);return s}function Gt(e,r={}){let t=se(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...$(e),slotId:null}};if(F())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...$(e),slotId:null}};let n=r.waitMs??0,o=n>0?pr(e,n,r.pollMs):S(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:B,commandClass:t.commandClass,reason:t.reason??o.reason??B,verificationGate:o}}export{f as DEFAULT_WORKER_PROVIDER,B as HEAVY_VERIFICATION_TOKEN_REQUIRED,j as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Or as auditReviewWorkerCredentialScope,xr as auditWorkerEnv,d as buildWorkerSpawnEnv,se as classifyHeavyShellCommand,tr as enforceCursorWorkerProvider,Gt as gateWorkerShellCommand,u as isClaudeFamilyProvider,v as isForbiddenWorkerEnvKey,Nr as isHarnessExpertReviewWorker,ge as isNoProdCredentialReviewEnvironment,pe as listForbiddenWorkerEnvKeys,me as listOperatorAllowedWorkerEnvKeys,nr as normalizeWorkerProviderName,xt as preferCursorExecutor,kt as resolveConfiguredWorkerProvider,O as scrubWorkerEnv,ie as taskAllowsClaudeWorker,or as taskExpressesWorkerProviderPreference};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import $ from"node:net";import{chmodSync as U,unlinkSync as
|
|
2
|
-
`}function R(t){let e;try{e=JSON.parse(t)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let r=e,o=typeof r.id=="string"?r.id:"";if(r.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:o};if(!o)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(r.op==="list_tools")return{ok:!0,request:{v:1,id:o,op:"list_tools"}};if(r.op==="call_tool"){if(typeof r.name!="string"||!r.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:o};let n=r.args&&typeof r.args=="object"&&!Array.isArray(r.args)?r.args:{};return{ok:!0,request:{v:1,id:o,op:"call_tool",name:r.name,args:n}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:o}}var b="kynver",l=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],ee=l.map(t=>`mcp__${b}__${t}`),N={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};function w(t){if(!t||t.length===0)return[...l];let e=new Set;for(let r of t)for(let o of N[r]??[])e.add(o);return l.filter(r=>e.has(r))}var I="X-Kynver-Job-Token",y={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function K(t){return`/api/agent-os/by-id/${encodeURIComponent(t.agentOsId)}/worker`}async function c(t,e,r){let o=await t.fetchImpl(`${t.apiBaseUrl}${e}`,{method:r?.method??"GET",headers:{[I]:t.token,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r.body)}:{}});if(!o.ok)throw new Error(`request failed (${o.status})`);return o.json()}function p(t){return typeof t=="string"&&t.trim()?t.trim():void 0}async function h(t,e,r){let o=K(t);switch(e){case"agent_os_context_envelope":{let n=new URLSearchParams({task:t.taskId}),s=p(r.memoryQuery);s&&n.set("memoryQuery",s);let i=p(r.mode);return i&&n.set("mode",i),c(t,`${o}/context-envelope?${n.toString()}`)}case"agent_os_search_memory":{let n=new URLSearchParams({q:String(r.query??"")});return typeof r.k=="number"&&n.set("k",String(r.k)),c(t,`${o}/memory-search?${n.toString()}`)}case"agent_os_search_skills":{let n=new URLSearchParams,s=p(r.query);s&&n.set("q",s),typeof r.limit=="number"&&n.set("limit",String(r.limit));let i=n.toString();return c(t,`${o}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return c(t,`${o}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return c(t,`${o}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...p(r.eventKey)?{eventKey:p(r.eventKey)}:{}}})}}function u(t){return l.includes(t)}import{createHash as C}from"node:crypto";import{chmodSync as A,mkdirSync as
|
|
1
|
+
import $ from"node:net";import{chmodSync as U,unlinkSync as V}from"node:fs";var k=1,B="KYNVER_WORKER_BROKER_SOCKET",f=1048576,_=1;function g(t){return`${JSON.stringify(t)}
|
|
2
|
+
`}function R(t){let e;try{e=JSON.parse(t)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let r=e,o=typeof r.id=="string"?r.id:"";if(r.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:o};if(!o)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(r.op==="list_tools")return{ok:!0,request:{v:1,id:o,op:"list_tools"}};if(r.op==="call_tool"){if(typeof r.name!="string"||!r.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:o};let n=r.args&&typeof r.args=="object"&&!Array.isArray(r.args)?r.args:{};return{ok:!0,request:{v:1,id:o,op:"call_tool",name:r.name,args:n}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:o}}var b="kynver",l=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],ee=l.map(t=>`mcp__${b}__${t}`),N={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};function w(t){if(!t||t.length===0)return[...l];let e=new Set;for(let r of t)for(let o of N[r]??[])e.add(o);return l.filter(r=>e.has(r))}var I="X-Kynver-Job-Token",y={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}};function K(t){return`/api/agent-os/by-id/${encodeURIComponent(t.agentOsId)}/worker`}async function c(t,e,r){let o=await t.fetchImpl(`${t.apiBaseUrl}${e}`,{method:r?.method??"GET",headers:{[I]:t.token,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r.body)}:{}});if(!o.ok)throw new Error(`request failed (${o.status})`);return o.json()}function p(t){return typeof t=="string"&&t.trim()?t.trim():void 0}async function h(t,e,r){let o=K(t);switch(e){case"agent_os_context_envelope":{let n=new URLSearchParams({task:t.taskId}),s=p(r.memoryQuery);s&&n.set("memoryQuery",s);let i=p(r.mode);return i&&n.set("mode",i),c(t,`${o}/context-envelope?${n.toString()}`)}case"agent_os_search_memory":{let n=new URLSearchParams({q:String(r.query??"")});return typeof r.k=="number"&&n.set("k",String(r.k)),c(t,`${o}/memory-search?${n.toString()}`)}case"agent_os_search_skills":{let n=new URLSearchParams,s=p(r.query);s&&n.set("q",s),typeof r.limit=="number"&&n.set("limit",String(r.limit));let i=n.toString();return c(t,`${o}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return c(t,`${o}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return c(t,`${o}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...p(r.eventKey)?{eventKey:p(r.eventKey)}:{}}})}}function u(t){return l.includes(t)}import{createHash as C}from"node:crypto";import{chmodSync as A,mkdirSync as D}from"node:fs";import v from"node:os";import m from"node:path";var q=100,S="\\\\.\\pipe\\";function P(t,e){return C("sha256").update(t).digest("hex").slice(0,e)}function L(t){let e=t.platform??process.platform,r=P(t.agentOsId,12),o=P(t.workerKey,16);if(e==="win32")return{socketPath:`${S}kynver-worker-${r}-${o}`,socketDir:null,isNamedPipe:!0,relocated:!1};let n=t.homeDir??v.homedir(),s=m.join(n,".kynver","brokers",r),i=m.join(s,`${o}.sock`);if(Buffer.byteLength(i,"utf8")<=q)return{socketPath:i,socketDir:s,isNamedPipe:!1,relocated:!1};let d=m.join(t.tmpDir??v.tmpdir(),`kynver-brokers-${r}`);return{socketPath:m.join(d,`${o}.sock`),socketDir:d,isNamedPipe:!1,relocated:!0}}function O(t){t.socketDir&&(D(t.socketDir,{recursive:!0,mode:448}),A(t.socketDir,448))}function M(t){return t.startsWith(S)}var W=class t{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(e){if(typeof e.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=e,this.now=e.now??Date.now,this.fetchImpl=e.fetchImpl??fetch,this.grantedTools=w(e.capabilities),this.server=$.createServer(r=>{this.handleConnection(r)}),this.server.on("error",()=>{})}static async start(e){let r=new t(e);if(O(e.address),await new Promise((o,n)=>{r.server.once("error",n),r.server.listen(e.address.socketPath,()=>{r.server.removeListener("error",n),o()})}),!e.address.isNamedPipe)try{U(e.address.socketPath,384)}catch{}return r}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(u).map(e=>y[e])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let e of this.sockets)e.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(e=>this.server.close(()=>e())),!this.opts.address.isNamedPipe)try{V(this.opts.address.socketPath)}catch{}}}refuse(e,r){this.opts.onRefusal?.(e,r)}async handleConnection(e){this.sockets.add(e),e.on("close",()=>{this.sockets.delete(e),this.connections.delete(e)});for(let n of this.connections)(n.destroyed||n.readableEnded)&&this.connections.delete(n);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(e,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),e.end();return}this.connections.add(e);let r=await this.opts.identity.verify({socket:e,workerPid:this.opts.workerPid});if(!r.ok){this.refuse("identity_refused",r.detail),this.write(e,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),e.end();return}let o="";e.setEncoding("utf8"),e.on("data",n=>{if(o+=n,Buffer.byteLength(o,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(e,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),e.end();return}let s=o.indexOf(`
|
|
3
3
|
`);for(;s>=0;){let i=o.slice(0,s);o=o.slice(s+1),i.trim()&&this.handleLine(e,i),s=o.indexOf(`
|
|
4
|
-
`)}})}write(e,r){if(!e.destroyed)try{e.write(g(r))}catch{}}async handleLine(e,r){let o=R(r);if(!o.ok){this.refuse(o.reason,o.error),this.write(e,{id:o.id,ok:!1,reason:o.reason,error:o.error});return}let{request:n}=o;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(e,{id:n.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(e,{id:n.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(n.op==="list_tools"){this.write(e,{id:n.id,ok:!0,tools:this.toolDescriptors});return}if(!u(n.name)){this.refuse("unknown_tool",n.name),this.write(e,{id:n.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${n.name}`});return}if(!this.grantedTools.includes(n.name)){this.refuse("capability_not_granted",n.name),this.write(e,{id:n.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${n.name}`});return}try{let s=await h({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},n.name,n.args??{});this.write(e,{id:n.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(e,{id:n.id,ok:!1,reason:"upstream_error",error:i})}}};var x={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function
|
|
4
|
+
`)}})}write(e,r){if(!e.destroyed)try{e.write(g(r))}catch{}}async handleLine(e,r){let o=R(r);if(!o.ok){this.refuse(o.reason,o.error),this.write(e,{id:o.id,ok:!1,reason:o.reason,error:o.error});return}let{request:n}=o;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(e,{id:n.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(e,{id:n.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(n.op==="list_tools"){this.write(e,{id:n.id,ok:!0,tools:this.toolDescriptors});return}if(!u(n.name)){this.refuse("unknown_tool",n.name),this.write(e,{id:n.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${n.name}`});return}if(!this.grantedTools.includes(n.name)){this.refuse("capability_not_granted",n.name),this.write(e,{id:n.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${n.name}`});return}try{let s=await h({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},n.name,n.args??{});this.write(e,{id:n.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(e,{id:n.id,ok:!1,reason:"upstream_error",error:i})}}};var x={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})};function j(){return x}import F from"node:net";var J=6e4,E=class t{socket;pending=new Map;timeoutMs;buffer="";nextId=1;closedReason=null;constructor(e,r){this.socket=e,this.timeoutMs=r,e.setEncoding("utf8"),e.on("data",o=>this.onData(o)),e.on("close",()=>this.failAll("worker tools connection closed")),e.on("error",o=>this.failAll(o.message))}static connect(e,r=J){return new Promise((o,n)=>{let s=F.createConnection(e),i=d=>{s.destroy(),n(d)};s.once("error",i),s.once("connect",()=>{s.removeListener("error",i),o(new t(s,r))})})}onData(e){this.buffer+=e;let r=this.buffer.indexOf(`
|
|
5
5
|
`);for(;r>=0;){let o=this.buffer.slice(0,r);this.buffer=this.buffer.slice(r+1),o.trim()&&this.dispatch(o),r=this.buffer.indexOf(`
|
|
6
6
|
`)}}dispatch(e){let r;try{r=JSON.parse(e)}catch{return}if(!r.id){let n="error"in r?r.error:"worker tools unavailable";this.failAll(n);return}let o=this.pending.get(r.id);o&&(this.pending.delete(r.id),clearTimeout(o.timer),o.resolve(r))}failAll(e){this.closedReason??=e;for(let[r,o]of this.pending)this.pending.delete(r),clearTimeout(o.timer),o.reject(new Error(e))}send(e){if(this.closedReason)return Promise.reject(new Error(this.closedReason));let r=String(this.nextId++);return new Promise((o,n)=>{let s=setTimeout(()=>{this.pending.delete(r),n(new Error("worker tools request timed out"))},this.timeoutMs);s.unref?.(),this.pending.set(r,{resolve:o,reject:n,timer:s}),this.socket.write(`${JSON.stringify({v:1,id:r,...e})}
|
|
7
|
-
`,i=>{i&&(this.pending.delete(r),clearTimeout(s),n(i))})})}async listTools(){let e=await this.send({op:"list_tools"});if(!e.ok)throw new Error(e.error);return"tools"in e?e.tools:[]}async callTool(e,r){let o=await this.send({op:"call_tool",name:e,args:r});return o.ok?{ok:!0,result:"result"in o?o.result:null}:{ok:!1,error:o.error}}close(){this.failAll("worker tools client closed"),this.socket.destroy()}};var a=new Map;function Y(t,e){let r=a.get(t);r&&r.close(),a.set(t,e)}function X(t){return a.get(t)}async function T(t){let e=a.get(t);return e?(a.delete(t),await e.close(),!0):!1}function H(t){T(t).catch(()=>{})}async function Q(){let t=[...a.values()];a.clear(),await Promise.all(t.map(e=>e.close().catch(()=>{})))}function
|
|
7
|
+
`,i=>{i&&(this.pending.delete(r),clearTimeout(s),n(i))})})}async listTools(){let e=await this.send({op:"list_tools"});if(!e.ok)throw new Error(e.error);return"tools"in e?e.tools:[]}async callTool(e,r){let o=await this.send({op:"call_tool",name:e,args:r});return o.ok?{ok:!0,result:"result"in o?o.result:null}:{ok:!1,error:o.error}}close(){this.failAll("worker tools client closed"),this.socket.destroy()}};var a=new Map;function Y(t,e){let r=a.get(t);r&&r.close(),a.set(t,e)}function X(t){return a.get(t)}async function T(t){let e=a.get(t);return e?(a.delete(t),await e.close(),!0):!1}function H(t){T(t).catch(()=>{})}async function Q(){let t=[...a.values()];a.clear(),await Promise.all(t.map(e=>e.close().catch(()=>{})))}function G(){return a.size}export{x as SCOPED_WORKER_BROKER_IDENTITY,_ as WORKER_BROKER_MAX_CONCURRENT_CONNECTIONS,f as WORKER_BROKER_MAX_LINE_BYTES,k as WORKER_BROKER_PROTOCOL_VERSION,B as WORKER_BROKER_SOCKET_ENV,y as WORKER_TOOL_DESCRIPTORS,W as WorkerBroker,E as WorkerBrokerClient,Q as closeAllWorkerBrokers,T as closeWorkerBroker,H as closeWorkerBrokerSync,g as encodeBrokerFrame,O as ensureWorkerBrokerSocketDir,h as executeWorkerTool,X as getWorkerBroker,M as isNamedPipePath,u as isWorkerToolName,R as parseBrokerRequest,Y as registerWorkerBroker,L as resolveWorkerBrokerAddress,j as resolveWorkerBrokerIdentity,G as workerBrokerCount};
|