@kynver-app/runtime 0.2.13 → 0.2.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +53 -53
- package/dist/harness-verify.d.ts +8 -0
- package/dist/index.js +66 -66
- package/dist/server/adapter-contract.d.ts +1 -0
- package/dist/server/adapter-contract.js +1 -0
- package/dist/server/cleanup.js +7 -7
- package/dist/server/context-budget.d.ts +2 -0
- package/dist/server/context-budget.js +19 -0
- package/dist/server/db-credentials.d.ts +3 -0
- package/dist/server/db-credentials.js +2 -0
- package/dist/server/dispatch-routing.d.ts +3 -0
- package/dist/server/dispatch-routing.js +5 -0
- package/dist/worktree-base-ref.d.ts +34 -0
- package/package.json +27 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var s=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var d=s(()=>{"use strict"});var yr,Mt,br,Ut,Y=s(()=>{"use strict";yr=["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"],Mt=new Set(yr),br=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN"],Ut=new Set(br)});var G=s(()=>{"use strict";d();Y()});var E=s(()=>{"use strict"});var z=s(()=>{"use strict";G();E()});var v=s(()=>{"use strict"});var P=s(()=>{"use strict"});var me=s(()=>{"use strict"});var en,rn,J=s(()=>{"use strict";en=25*1024*1024*1024,rn=12*1024*1024*1024});var an,ln,pe=s(()=>{"use strict";J();an=5*1024*1024*1024,ln=10*1024*1024*1024});var fn,gn,q=s(()=>{"use strict";pe();J();fn=30*1024*1024*1024,gn=15*1024*1024*1024});var ge=s(()=>{"use strict";d()});import kr from"node:path";var Sn,X=s(()=>{"use strict";E();ge();Sn=kr.join(".openclaw","harness")});var I=s(()=>{"use strict";R();v();P();N();X()});var be=s(()=>{"use strict";R();X();I();d()});var Q=s(()=>{"use strict";be();d()});var ve=s(()=>{"use strict";Q();d()});var Re=s(()=>{"use strict"});var ke=s(()=>{"use strict";Re();d()});var xe=s(()=>{"use strict"});var _e=s(()=>{"use strict";xe()});var Se=s(()=>{"use strict";_e();d()});var Ee=s(()=>{"use strict"});var Ce=s(()=>{"use strict"});var Oe=s(()=>{"use strict"});var ee=s(()=>{"use strict"});var Ae=s(()=>{"use strict"});var Pe=s(()=>{"use strict";ee();Ae()});var we=s(()=>{"use strict";ke();Se();Ee();Ce();G();Oe();Pe();ee();d()});var Ie=s(()=>{"use strict";we()});var Pr,wr,Ne=s(()=>{"use strict";me();R();v();P();N();q();Q();ve();Ie();d();Pr=500*1024*1024,wr=4*1024*1024*1024});var N=s(()=>{"use strict";Ne()});import{homedir as Ir}from"node:os";import Nr from"node:path";var Be,re=s(()=>{"use strict";Be=Nr.join(Ir(),".kynver",".env")});var De=s(()=>{"use strict"});var Ke=s(()=>{"use strict";De()});var Te=s(()=>{"use strict"});var te=s(()=>{"use strict";Ke();Te()});var We=s(()=>{"use strict"});var Me=s(()=>{"use strict";We()});var B=s(()=>{"use strict";re();E();R();te();Me()});var Ue=s(()=>{"use strict";v();v()});var Le=s(()=>{"use strict";re();te();B()});var Fe=s(()=>{"use strict";z();v();Ue();R();B();Le();d();I()});import{existsSync as Lr,mkdirSync as ks,readFileSync as Fr,writeFileSync as xs}from"node:fs";import{homedir as $r,totalmem as Ss}from"node:os";import ne from"node:path";function x(){if(!Lr($e))return{};try{return JSON.parse(Fr($e,"utf8"))}catch{return{}}}var He,$e,Ts,Ws,Ms,R=s(()=>{"use strict";z();E();d();v();P();N();q();B();Fe();I();He=ne.join($r(),".kynver"),$e=ne.join(He,"config.json"),Ts=ne.join(He,"credentials");Ws=500*1024*1024,Ms=4*1024*1024*1024});var mr=/^claude[-_]/i,pr=/^(?:opus|sonnet|haiku)\b/i;function ce(e){let r=e.trim();return mr.test(r)||pr.test(r)}function de(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function H(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function fr(e){return de(e)?"codex":ce(e)?"claude":(H(e),"cursor")}function gr(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==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:null:null}function hr(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?ce(n)||de(n)||H(n)?{lane:t,model:n,provider:fr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function b(e){let r=typeof e=="string"?e.trim():"";return r?gr(r)??hr(r):null}function j(e){let r=b(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!H(r.model)):!1}R();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},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function _(e){return je[e]}function Ye(){return Object.values(je)}import{existsSync as jr}from"node:fs";import{homedir as Yr}from"node:os";import C from"node:path";import{createHash as Ve}from"node:crypto";import{statSync as Hr}from"node:fs";import{spawnSync as Ge}from"node:child_process";function g(e){try{let r=Hr(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Ve("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function S(e){return Ve("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function m(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function p(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Ge(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(),a=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:i?`${a}: ${i.slice(0,200)}`:a}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function D(e,r,t={}){let n=t.timeoutMs??8e3;try{return Ge(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 Vr="codex";function Gr(){let e=Yr();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 zr(e){return C.dirname(e)}function Jr(e){let r,t;for(let n of Gr()){if(!jr(n))continue;r??=n;let o=p(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:zr(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??p(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function ze(e=new Date().toISOString()){let r=m(Vr,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:S("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}=Jr(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?g(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 qr}from"node:fs";import{homedir as Xr}from"node:os";import oe from"node:path";function Zr(){let e=process.env.HERMES_HOME?.trim(),r=e?oe.resolve(e):oe.join(Xr(),".hermes");return oe.join(r,"auth.json")}function K(e=new Date().toISOString()){let r=m("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=p(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Zr(),o=qr(n),i=D(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),a=t.ok&&i.ok;return{path:"hermes_openai_codex",ready:a,authSource:a?"subscription_hermes":"none",sessionFingerprint:o?g(n):void 0,checkedAt:e,note:a?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,i.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function O(e=new Date().toISOString()){let r=ze(e);if(r.ready)return{...r,path:"codex_cli"};let t=K(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 Je=["low","medium","high"],qe={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Xe(e,r){let t=_(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Qr(e,r){let t=_(e.providerId),n=_(r.providerId),o=Je.indexOf(t.costTier)-Je.indexOf(n.costTier);if(o!==0)return o;let i=qe[e.binding.authSource]-qe[r.binding.authSource];return i!==0?i:e.providerId.localeCompare(r.providerId)}function ie(e){let r=Ye().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&Xe(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Qr)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let i=e.inventory.bindings[o],a;return Xe(o,e.riskClass)?i.ready||(a=i.note??`${o} not bound`):a=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:a}}import{existsSync as et}from"node:fs";import{homedir as rt}from"node:os";import tt from"node:path";var nt="claude";function ot(){let e=rt();return[tt.join(e,".claude",".credentials.json")]}function Ze(e=new Date().toISOString()){let r=m(nt,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:S("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=p(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ot().find(a=>et(a)),o=D(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?g(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 it}from"node:fs";import{homedir as st}from"node:os";import at from"node:path";var lt="agent";function ut(){let e=st();return[at.join(e,".config","cursor","auth.json")]}function Qe(e=new Date().toISOString()){let r=m(lt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:S("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=p(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ut().find(i=>it(i)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?g(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 ct,readFileSync as dt}from"node:fs";import{homedir as mt}from"node:os";import se from"node:path";var pt=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function ft(){let e=process.env.HERMES_HOME?.trim(),r=e?se.resolve(e):se.join(mt(),".hermes");return se.join(r,".env")}function gt(e){try{let r=dt(e,"utf8"),t=[];for(let n of pt)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function er(e=new Date().toISOString()){let r=m("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=p(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ft(),o=ct(n),i=o?gt(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?g(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 rr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=O(r),n={codex:t,cursor:Qe(r),claude:Ze(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()},hermes:er(r),hermesOpenAiCodex:K(r),codexAdapterPath:t.path,readyCount:o}}var ht=[/\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],yt=[/\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 ae(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function bt(e){let r=ae(e,"executorRef").toLowerCase(),t=ae(e,"title").toLowerCase(),n=ae(e,"description").toLowerCase(),o=`${r}
|
|
2
|
+
${t}
|
|
3
|
+
${n}`;return ht.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":yt.some(i=>i.test(o))?"low":"elevated"}function vt(e){let r=_(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 Rt(e){let r=e.inventory??rr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function k(e){let r=vt({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 tr(e){let r=e.task??{},t=bt(r),n=Rt({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:O())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),i=e.explicitModel?.trim()||void 0,a=le;if(o==="codex"||o==="provider:codex"){let u=n.bindings.codex;if(!u.ready){let f=ie({inventory:n,riskClass:t});return k(f?{providerId:f.providerId,binding:f.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:i,escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"}:{providerId:a,binding:n.bindings[a],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:i,escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"})}return k({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 k({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 k({providerId:"claude",binding:u,riskClass:t,routingRule:"orchestration:explicit_claude",model:i})}let l=ie({inventory:n,riskClass:t});if(l)return k({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 k({providerId:a,binding:n.bindings[a],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"}})}Y();d();var T="claude-sonnet-4-6",A="claude-opus-4-8";d();d();var Ya=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function xt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var W=xt();var sr="claude-sonnet-4-6",L="composer-2.5";function h(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function _t(e){if(!e)return;let r=h(e,"workerModelOverride")||h(e,"modelOverride");return r||`${h(e,"title")}
|
|
4
|
+
${h(e,"description")}
|
|
5
|
+
${h(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function or(e){return e.toLowerCase()}function F(e=x()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||sr}function M(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":"cursor"}function St(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:L,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:T,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function ir(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 Et=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function ar(e,r,t){return Et.has(e)?A:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?A:T}function lr(e){let r=or(h(e,"executorRef")),t=h(e,"title").toLowerCase(),n=h(e,"priority")||"normal",o=or(h(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let a=ar(o,r,t);return{provider:"claude",model:a,rule:a===A?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:W,rule:"lane:codex_orchestration"};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:W,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 ir(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(ir(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=F();return{model:i,provider:M(i),rule:"default:global"}}function Ct(e){return e?b(h(e,"executorRef")):null}function Ot(e){let r,t=Ct(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=St(l,e.explicitProvider);c?r=c:r={model:l,provider:e.explicitProvider?.trim()||M(l),rule:"explicit:cli",requestedModel:l}}else if(n)r={model:n,provider:o||M(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&U(e.task)){let l=_t(e.task),c,u;if(l)c=l,u="task:provider_override";else{let f=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",ue=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",dr=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=ar(f,ue,dr),u=c===A?"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=lr(e.task);r={...l,requestedModel:l.model}}else{let l=F();r={model:l,provider:e.explicitProvider?.trim()||M(l),rule:"default:global",requestedModel:l}}let i=ur({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"||y(i.provider)&&(e.explicitProviderIsOperatorOverride||U(e.task)))return i;let a=tr({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??W:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function At(e,r,t){return e||r||t||F()||T}var le="cursor",Pt=new Set(["claude","opus","anthropic"]),wt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function $(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function y(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return Pt.has(r)?!0:r.includes("claude")||r.includes("opus")}function U(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&y(r))return!0;let t=$(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=b($(e,"executorRef"));if(n?.provider&&y(n.provider)||n?.model&&y(It(n.model)))return!0;let o=$(e,"description");if(wt.some(a=>a.test(o)))return!0;let i=$(e,"title");return!!/\[use-claude-worker\]/i.test(i)}function It(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Nt(e,r){return{provider:le,model:L,rule:`policy:cursor_default${r}`,requestedModel:e}}function ur(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&y(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(U(t)||r.rule==="explicit:cli"&&y(r.provider)||!y(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Nt(r.model,o)}function Bt(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function cr(e){return e?.trim()||void 0}function Dt(e){let r=Bt(e.task),t=b(r),n=e.explicitProvider?.trim().toLowerCase(),o=cr(e.explicitModel??void 0),i=n||t?.provider,a=o||t?.model,l=n||o?"cli":t?.rule??"none";if(!i&&!a)return{ok:!0};!i&&a&&(/^claude[-_]/i.test(a)||/^(?:opus|sonnet|haiku)\b/i.test(a))&&(i="claude");let c=e.routing.provider,u=cr(e.routing.model),f={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"}${a?` model=${a}`:""} (${l}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:i,model:a,source:l},resolved:f}:a&&u&&a!==u&&!y(c)?{ok:!1,error:`model_routing_mismatch: requested model=${a} (${l}) but routing resolved model=${u} (${e.routing.rule})`,requested:{provider:i,model:a,source:l},resolved:f}:{ok:!0,requested:{provider:i,model:a,source:l},resolved:f}:{ok:!0,resolved:f}}export{L as CURSOR_DEFAULT_MODEL,sr as GLOBAL_DEFAULT_MODEL,Dt as assessDispatchModelGuard,j as executorRefRequestsNonCursorWorker,lr as inferModelRoutingFromTask,b as parseExecutorRefRoutingIntent,F as resolveGlobalDefaultModel,At as resolveModelFallback,Ot as resolveWorkerLaunch};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree base-ref resolution + self-heal.
|
|
3
|
+
*
|
|
4
|
+
* Live incident (7-day event breakdown, 2026-08-05): 75 of 82 spawn-failure
|
|
5
|
+
* claim releases — 91% of the week's compensator load — were
|
|
6
|
+
* `git worktree add … unknown failed: fatal: invalid reference: unknown`.
|
|
7
|
+
* The run-metadata repair path (`run-metadata-retention.ts`) synthesizes
|
|
8
|
+
* rebuilt run.json records with `baseCommit: "unknown"`, and the supervisor
|
|
9
|
+
* passed that literal to git; every spawn in a repaired run then failed
|
|
10
|
+
* forever, each failure burning an attempt (the failure text was not
|
|
11
|
+
* infrastructure-classified) and minting over-attempt recovery children.
|
|
12
|
+
*
|
|
13
|
+
* This resolver picks the first candidate ref that git can verify —
|
|
14
|
+
* the recorded baseCommit (unless it is the known-invalid marker), the
|
|
15
|
+
* run's base branch, `origin/main`, `origin/HEAD` — and reports when the
|
|
16
|
+
* pick differs from the record so the caller can PERSIST the repair
|
|
17
|
+
* (self-heal: one resolution fixes the run for all subsequent spawns).
|
|
18
|
+
*/
|
|
19
|
+
/** Marker the metadata-repair path historically stamped on rebuilt runs. */
|
|
20
|
+
export declare const INVALID_BASE_COMMIT_MARKER = "unknown";
|
|
21
|
+
export interface ResolveWorktreeBaseRefInput {
|
|
22
|
+
baseCommit?: string | null;
|
|
23
|
+
base?: string | null;
|
|
24
|
+
/** Verify a ref resolves to a commit; injectable for tests. */
|
|
25
|
+
verifyRef: (ref: string) => boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ResolvedWorktreeBaseRef {
|
|
28
|
+
ref: string;
|
|
29
|
+
/** True when the pick differs from the recorded baseCommit — persist it. */
|
|
30
|
+
repaired: boolean;
|
|
31
|
+
/** Which candidate won (for the spawn log). */
|
|
32
|
+
source: "baseCommit" | "base" | "origin/main" | "origin/HEAD";
|
|
33
|
+
}
|
|
34
|
+
export declare function resolveWorktreeBaseRef(input: ResolveWorktreeBaseRefInput): ResolvedWorktreeBaseRef;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kynver-app/runtime",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.16",
|
|
4
4
|
"description": "Kynver AgentOS local execution runtime and CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -99,6 +99,31 @@
|
|
|
99
99
|
"types": "./dist/chat/command-auth-proof.d.ts",
|
|
100
100
|
"import": "./dist/chat/command-auth-proof.js",
|
|
101
101
|
"default": "./dist/chat/command-auth-proof.js"
|
|
102
|
+
},
|
|
103
|
+
"./node-runtime-policy": {
|
|
104
|
+
"types": "./dist/node-runtime-policy.d.ts",
|
|
105
|
+
"import": "./dist/node-runtime-policy.js",
|
|
106
|
+
"default": "./dist/node-runtime-policy.js"
|
|
107
|
+
},
|
|
108
|
+
"./server/context-budget": {
|
|
109
|
+
"types": "./dist/server/context-budget.d.ts",
|
|
110
|
+
"import": "./dist/server/context-budget.js",
|
|
111
|
+
"default": "./dist/server/context-budget.js"
|
|
112
|
+
},
|
|
113
|
+
"./server/adapter-contract": {
|
|
114
|
+
"types": "./dist/server/adapter-contract.d.ts",
|
|
115
|
+
"import": "./dist/server/adapter-contract.js",
|
|
116
|
+
"default": "./dist/server/adapter-contract.js"
|
|
117
|
+
},
|
|
118
|
+
"./server/dispatch-routing": {
|
|
119
|
+
"types": "./dist/server/dispatch-routing.d.ts",
|
|
120
|
+
"import": "./dist/server/dispatch-routing.js",
|
|
121
|
+
"default": "./dist/server/dispatch-routing.js"
|
|
122
|
+
},
|
|
123
|
+
"./server/db-credentials": {
|
|
124
|
+
"types": "./dist/server/db-credentials.d.ts",
|
|
125
|
+
"import": "./dist/server/db-credentials.js",
|
|
126
|
+
"default": "./dist/server/db-credentials.js"
|
|
102
127
|
}
|
|
103
128
|
},
|
|
104
129
|
"files": [
|
|
@@ -108,7 +133,7 @@
|
|
|
108
133
|
"README.md"
|
|
109
134
|
],
|
|
110
135
|
"scripts": {
|
|
111
|
-
"build": "esbuild src/cli.ts src/index.ts src/node-runtime-policy.ts src/local-run-store/index.ts src/worker-persona-catalog.ts src/instruction-bundle/contract.ts src/chat/command-auth-proof.ts src/server/monitor.ts src/server/landing.ts src/server/worker-policy.ts src/server/orchestration.ts src/server/heavy-verification.ts src/server/memory-cost.ts src/server/pr-evidence.ts src/server/default-repo.ts src/server/cleanup.ts src/server/repo-search.ts src/server/harness-notice.ts src/server/memory-cost-enforce.ts src/server/wsl-crash-dumps.ts --bundle --platform=node --format=esm --packages=external --outbase=src --outdir=dist --minify && tsc -p tsconfig.json --emitDeclarationOnly && node scripts/chmod-cli-bin.mjs",
|
|
136
|
+
"build": "esbuild src/cli.ts src/index.ts src/node-runtime-policy.ts src/local-run-store/index.ts src/worker-persona-catalog.ts src/instruction-bundle/contract.ts src/chat/command-auth-proof.ts src/server/monitor.ts src/server/landing.ts src/server/worker-policy.ts src/server/orchestration.ts src/server/heavy-verification.ts src/server/memory-cost.ts src/server/pr-evidence.ts src/server/default-repo.ts src/server/cleanup.ts src/server/repo-search.ts src/server/harness-notice.ts src/server/memory-cost-enforce.ts src/server/wsl-crash-dumps.ts src/server/context-budget.ts src/server/adapter-contract.ts src/server/dispatch-routing.ts src/server/db-credentials.ts --bundle --platform=node --format=esm --packages=external --outbase=src --outdir=dist --minify && tsc -p tsconfig.json --emitDeclarationOnly && node scripts/chmod-cli-bin.mjs",
|
|
112
137
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
113
138
|
"test": "vitest run --config vitest.config.ts",
|
|
114
139
|
"prepublishOnly": "node ../../scripts/npm-publish-guard.mjs && npm run build"
|