@kynver-app/runtime 0.2.16 → 0.2.18

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.
@@ -1 +1,2 @@
1
- var o=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function L(e){let r=e[gr];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function h(e,r={}){return ur.has(e)?!0:pr.has(e)||r.operatorAllow?.has(e)||fr.some(t=>e.endsWith(t))?!1:dr.some(t=>e.endsWith(t))}function ce(e){let r=L(e);return Object.keys(e).filter(t=>h(t,{operatorAllow:r})).sort()}function ue(e){let r=L(e);return r.size===0?[]:Object.keys(e).filter(t=>r.has(t)&&!h(t,{operatorAllow:r})&&h(t)).sort()}function S(e){let r=L(e),t={...e};for(let n of Object.keys(t))h(n,{operatorAllow:r})&&delete t[n];return t}function hr(e){let r=ce(e),t=ue(e);return{forbiddenPresent:r,safe:r.length===0,...t.length?{operatorAllowedActive:t}:{}}}var cr,ur,dr,mr,pr,fr,gr,E=o(()=>{"use strict";cr=["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"],ur=new Set(cr),dr=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],mr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN"],pr=new Set(mr),fr=["_PUBLIC_KEY"],gr="KYNVER_WORKER_ENV_ALLOW"});function $(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=o(()=>{"use strict"});var V=o(()=>{"use strict";a();E()});var v=o(()=>{"use strict"});var Y=o(()=>{"use strict";V();v()});var m=o(()=>{"use strict"});var C=o(()=>{"use strict"});var ye=o(()=>{"use strict"});var Qt,Zt,G=o(()=>{"use strict";Qt=25*1024*1024*1024,Zt=12*1024*1024*1024});var on,sn,ve=o(()=>{"use strict";G();on=5*1024*1024*1024,sn=10*1024*1024*1024});var mn,pn,z=o(()=>{"use strict";ve();G();mn=30*1024*1024*1024,pn=15*1024*1024*1024});var Re=o(()=>{"use strict";a()});import Ir from"node:path";var kn,J=o(()=>{"use strict";v();Re();kn=Ir.join(".openclaw","harness")});var A=o(()=>{"use strict";p();m();C();w();J()});var _e=o(()=>{"use strict";p();J();A();a()});var X=o(()=>{"use strict";_e();a()});var Se=o(()=>{"use strict";X();a()});var Ee=o(()=>{"use strict"});var Ce=o(()=>{"use strict";Ee();a()});var Oe=o(()=>{"use strict"});var Ae=o(()=>{"use strict";Oe()});var we=o(()=>{"use strict";Ae();a()});var Ie=o(()=>{"use strict"});var Pe=o(()=>{"use strict"});var Ne=o(()=>{"use strict"});var Q=o(()=>{"use strict"});var De=o(()=>{"use strict"});var Be=o(()=>{"use strict";Q();De()});var Te=o(()=>{"use strict";Ce();we();Ie();Pe();V();Ne();Be();Q();a()});var We=o(()=>{"use strict";Te()});var Ur,Mr,Ke=o(()=>{"use strict";ye();p();m();C();w();z();X();Se();We();a();Ur=500*1024*1024,Mr=4*1024*1024*1024});var w=o(()=>{"use strict";Ke()});import{homedir as Lr}from"node:os";import Fr from"node:path";var Ue,Z=o(()=>{"use strict";Ue=Fr.join(Lr(),".kynver",".env")});var Me=o(()=>{"use strict"});var Le=o(()=>{"use strict";Me()});var Fe=o(()=>{"use strict"});var ee=o(()=>{"use strict";Le();Fe()});var He=o(()=>{"use strict"});var $e=o(()=>{"use strict";He()});var P=o(()=>{"use strict";Z();v();p();ee();$e()});var je=o(()=>{"use strict";m();m()});var Ve=o(()=>{"use strict";Z();ee();P()});var Ye=o(()=>{"use strict";Y();m();je();p();P();Ve();a();A()});import{homedir as Jr,totalmem as vs}from"node:os";import re from"node:path";var Ge,Is,Ps,Ns,Ds,p=o(()=>{"use strict";Y();v();a();m();C();w();z();P();Ye();A();Ge=re.join(Jr(),".kynver"),Is=re.join(Ge,"config.json"),Ps=re.join(Ge,"credentials"),Ns=500*1024*1024,Ds=4*1024*1024*1024});E();E();var F="KYNVER_NO_PROD_DB_CREDENTIALS",yr=["KYNVER_ENV_FILE"],vr=new Set(["1","true","yes","on"]);function me(e){let r=e[F]?.trim().toLowerCase();return r!==void 0&&vr.has(r)}function y(e,r={}){let t=S(e);if(!r.reviewWorker)return t;let n={...t,[F]:"1"};for(let i of yr)delete n[i];return n}var de=["DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL"];function br(e,r={}){let t=y(e,r),n=Object.keys(t).filter(u=>u.endsWith("_SECRET")||u.endsWith("_API_KEY")||de.includes(u)),i=de.every(u=>t[u]===void 0),s=r.reviewWorker?t.KYNVER_ENV_FILE===void 0:!0,l=me(t);return{reviewMode:!!r.reviewWorker,noProdFlagPresent:r.reviewWorker?l:!0,forbiddenKeysAfterScrub:n.sort(),productionDbKeysAbsent:i,envFilePointerStripped:s,safe:i&&n.length===0&&s&&(!r.reviewWorker||l)}}var Rr="expert-lane-pr-review:",xr="plan-review-task",kr="scheduledjob:";function pe(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function _r(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(Rr)||r===xr||r.startsWith("daemon-review:"))return!0;if(r.startsWith(kr)&&e.parentTaskId){let n=pe(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}let t=(e.title??"").toLowerCase();if(t.includes("expert pr review"))return!0;if(e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))){let n=pe(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var Sr=/^claude[-_]/i,Er=/^(?:opus|sonnet|haiku)\b/i;function fe(e){let r=e.trim();return Sr.test(r)||Er.test(r)}function ge(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function he(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Cr(e){return ge(e)?"codex":fe(e)?"claude":(he(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(),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==="cursor"||n==="composer"?{provider:"cursor",model:i,rule:"executor_ref:provider_cursor"}:null:null}function Ar(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?fe(n)||ge(n)||he(n)?{lane:t,model:n,provider:Cr(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?Or(r)??Ar(r):null}p();a();a();a();var Oa=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function et(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var rt=et();var qe="composer-2.5";var d="cursor",tt=new Set(["claude","opus","anthropic"]),nt=[/\[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 c(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return tt.has(r)?!0:r.includes("claude")||r.includes("opus")}function te(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&c(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=H(B(e,"executorRef"));if(n?.provider&&c(n.provider)||n?.model&&c(ot(n.model)))return!0;let i=B(e,"description");if(nt.some(l=>l.test(i)))return!0;let s=B(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function ot(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function it(e,r){return{provider:d,model:qe,rule:`policy:cursor_default${r}`,requestedModel:e}}function Xe(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&c(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(te(t)||r.rule==="explicit:cli"&&c(r.provider)||!c(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return it(r.model,i)}function st(e,r=d){let t=e?.trim();return t?c(t)?d:t==="codex"?"codex":t:r}function at(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(d)?[...new Set(r.map(t=>c(t)?d:t))]:r.every(t=>c(t))?[d]:r}var lt=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,ct=/\b(npm run build\b|next build\b)\b/i,ut=/\b(vercel (build|deploy|--prod))\b/i,dt=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function ne(e){let r=e.trim();return r?dt.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:ut.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:ct.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:lt.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 T="heavy_verification_token_required";import{spawnSync as wt}from"node:child_process";a();import{closeSync as yt,existsSync as x,mkdirSync as vt,openSync as bt,readdirSync as rr,readFileSync as Rt,statSync as xt,unlinkSync as tr,writeFileSync as kt}from"node:fs";import se from"node:path";import{mkdirSync as pt}from"node:fs";import{tmpdir as ft}from"node:os";import W from"node:path";import{homedir as mt}from"node:os";import Qe from"node:path";function Ze(){let e=process.env.KYNVER_STATE_ROOT;return e?Qe.resolve(e):Qe.join(mt(),".kynver","state")}function gt(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function ht(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?W.resolve(e):gt()?W.join(ft(),"kynver","state","heavy-verification"):W.join(Ze(),"heavy-verification")}function oe(){return W.join(ht(),"slots")}function R(){let e=oe();return pt(e,{recursive:!0}),e}var k=120*6e4,er=1;function _t(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function U(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function K(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?_t(e,er):er}function St(e){return`slot-${e}`}function Et(e,r=oe()){return se.join(r,`${e}.json`)}function ae(e){if(!x(e))return null;try{let r=JSON.parse(Rt(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 nr(e,r=k){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function or(e,r){let t=ae(e);if(t)return nr(t,r);if(!x(e))return!0;try{return Date.now()-xt(e).mtimeMs>r}catch{return!0}}function Ct(e,r){if(or(e,r))try{tr(e)}catch{}}function Ot(e){return vt(e,{recursive:!0}),e}function le(e={}){let r=Ot(e.slotsDir??R()),t=e.staleMs??k,n=0;for(let i of rr(r)){if(!i.endsWith(".json"))continue;let s=se.join(r,i),l=x(s);Ct(s,t),l&&!x(s)&&(n+=1)}return n}function At(e={}){let r=e.slotsDir??R(),t=e.staleMs??k;le({slotsDir:r,staleMs:t});let n=[];for(let i of rr(r)){if(!i.endsWith(".json"))continue;let s=ae(se.join(r,i));s&&!nr(s,t)&&n.push(s)}return n}function ie(e={}){return At(e).length}function _(e,r={}){if(U())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:K(),reason:null};let t=r.slotsDir??R(),n=r.staleMs??k,i=r.maxSlots??K();le({slotsDir:t,staleMs:n});for(let l=0;l<i;l+=1){let u=St(l),f=Et(u,t),sr=ae(f);if(or(f,n))try{tr(f)}catch{}else if(sr||x(f))continue;let ar={slotId:u,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let g=bt(f,"wx");kt(g,JSON.stringify(ar,null,2),"utf8"),yt(g);let lr=ie({slotsDir:t,staleMs:n});return{admitted:!0,slotId:u,activeSlots:lr,maxSlots:i,reason:null}}catch(g){if(g.code==="EEXIST")continue;throw g}}let s=ie({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function M(e,r={}){if(U())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:K(),reason:null};let t=r.slotsDir??R(),n=r.staleMs??k,i=r.maxSlots??K();le({slotsDir:t,staleMs:n});let s=ie({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 It(e){e<=0||wt(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ir(e,r,t=2e3,n={}){let i=Date.now()+Math.max(0,r),s=_(e,n);for(;!s.admitted&&Date.now()<i;)It(Math.min(t,i-Date.now())),s=_(e,n);return s}function Pt(e,r={}){let t=ne(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...M(e),slotId:null}};if(U())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...M(e),slotId:null}};let n=r.waitMs??0,i=n>0?ir(e,n,r.pollMs):_(e);return i.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:i}:{allowed:!1,outcome:T,commandClass:t.commandClass,reason:t.reason??i.reason??T,verificationGate:i}}export{d as DEFAULT_WORKER_PROVIDER,T as HEAVY_VERIFICATION_TOKEN_REQUIRED,F as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,br as auditReviewWorkerCredentialScope,hr as auditWorkerEnv,y as buildWorkerSpawnEnv,ne as classifyHeavyShellCommand,Xe as enforceCursorWorkerProvider,Pt as gateWorkerShellCommand,c as isClaudeFamilyProvider,h as isForbiddenWorkerEnvKey,_r as isHarnessExpertReviewWorker,me as isNoProdCredentialReviewEnvironment,ce as listForbiddenWorkerEnvKeys,ue as listOperatorAllowedWorkerEnvKeys,at as preferCursorExecutor,st as resolveConfiguredWorkerProvider,S as scrubWorkerEnv,te as taskAllowsClaudeWorker};
1
+ var o=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function F(e){let r=e[hr];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function h(e,r={}){return dr.has(e)?!0:pr.has(e)||r.operatorAllow?.has(e)||gr.some(t=>e.endsWith(t))?!1:mr.some(t=>e.endsWith(t))}function de(e){let r=F(e);return Object.keys(e).filter(t=>h(t,{operatorAllow:r})).sort()}function me(e){let r=F(e);return r.size===0?[]:Object.keys(e).filter(t=>r.has(t)&&!h(t,{operatorAllow:r})&&h(t)).sort()}function _(e){let r=F(e),t={...e};for(let n of Object.keys(t))h(n,{operatorAllow:r})&&delete t[n];return t}function yr(e){let r=de(e),t=me(e);return{forbiddenPresent:r,safe:r.length===0,...t.length?{operatorAllowedActive:t}:{}}}var ur,dr,mr,fr,pr,gr,hr,E=o(()=>{"use strict";ur=["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"],dr=new Set(ur),mr=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],fr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN"],pr=new Set(fr),gr=["_PUBLIC_KEY"],hr="KYNVER_WORKER_ENV_ALLOW"});function V(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=o(()=>{"use strict"});var G=o(()=>{"use strict";a();E()});var v=o(()=>{"use strict"});var z=o(()=>{"use strict";G();v()});var m=o(()=>{"use strict"});var O=o(()=>{"use strict"});var ve=o(()=>{"use strict"});var rn,tn,J=o(()=>{"use strict";rn=25*1024*1024*1024,tn=12*1024*1024*1024});var ln,cn,be=o(()=>{"use strict";J();ln=5*1024*1024*1024,cn=10*1024*1024*1024});var gn,hn,q=o(()=>{"use strict";be();J();gn=30*1024*1024*1024,hn=15*1024*1024*1024});var xe=o(()=>{"use strict";a()});import Dr from"node:path";var En,X=o(()=>{"use strict";v();xe();En=Dr.join(".openclaw","harness")});var w=o(()=>{"use strict";f();m();O();I();X()});var _e=o(()=>{"use strict";f();X();w();a()});var Z=o(()=>{"use strict";_e();a()});var Ee=o(()=>{"use strict";Z();a()});var Ce=o(()=>{"use strict"});var Oe=o(()=>{"use strict";Ce();a()});var Ae=o(()=>{"use strict"});var we=o(()=>{"use strict";Ae()});var Ie=o(()=>{"use strict";we();a()});var Pe=o(()=>{"use strict"});var Ne=o(()=>{"use strict"});var De=o(()=>{"use strict"});var ee=o(()=>{"use strict"});var Be=o(()=>{"use strict"});var Te=o(()=>{"use strict";ee();Be()});var We=o(()=>{"use strict";Oe();Ie();Pe();Ne();G();De();Te();ee();a()});var Ke=o(()=>{"use strict";We()});var Fr,Hr,Ue=o(()=>{"use strict";ve();f();m();O();I();q();Z();Ee();Ke();a();Fr=500*1024*1024,Hr=4*1024*1024*1024});var I=o(()=>{"use strict";Ue()});import{homedir as $r}from"node:os";import jr from"node:path";var Me,re=o(()=>{"use strict";Me=jr.join($r(),".kynver",".env")});var Le=o(()=>{"use strict"});var Fe=o(()=>{"use strict";Le()});var He=o(()=>{"use strict"});var te=o(()=>{"use strict";Fe();He()});var $e=o(()=>{"use strict"});var je=o(()=>{"use strict";$e()});var N=o(()=>{"use strict";re();v();f();te();je()});var Ve=o(()=>{"use strict";m();m()});var Ye=o(()=>{"use strict";re();te();N()});var Ge=o(()=>{"use strict";z();m();Ve();f();N();Ye();a();w()});import{homedir as Qr,totalmem as xs}from"node:os";import ne from"node:path";var ze,Ds,Bs,Ts,Ws,f=o(()=>{"use strict";z();v();a();m();O();I();q();N();Ge();w();ze=ne.join(Qr(),".kynver"),Ds=ne.join(ze,"config.json"),Bs=ne.join(ze,"credentials"),Ts=500*1024*1024,Ws=4*1024*1024*1024});E();E();var H="KYNVER_NO_PROD_DB_CREDENTIALS",vr=["KYNVER_ENV_FILE"],br=new Set(["1","true","yes","on"]);function pe(e){let r=e[H]?.trim().toLowerCase();return r!==void 0&&br.has(r)}function y(e,r={}){let t=_(e);if(!r.reviewWorker)return t;let n={...t,[H]:"1"};for(let i of vr)delete n[i];return n}var fe=["DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL"];function Rr(e,r={}){let t=y(e,r),n=Object.keys(t).filter(u=>u.endsWith("_SECRET")||u.endsWith("_API_KEY")||fe.includes(u)),i=fe.every(u=>t[u]===void 0),s=r.reviewWorker?t.KYNVER_ENV_FILE===void 0:!0,l=pe(t);return{reviewMode:!!r.reviewWorker,noProdFlagPresent:r.reviewWorker?l:!0,forbiddenKeysAfterScrub:n.sort(),productionDbKeysAbsent:i,envFilePointerStripped:s,safe:i&&n.length===0&&s&&(!r.reviewWorker||l)}}var xr="expert-lane-pr-review:",kr="plan-review-task",Sr="scheduledjob:",C=new Set(["lorentz","dalton","rhea","sentinel"]);function _r(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function $(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 Er(e,r){return e.startsWith("factory:")?e.includes("lb")||$(r):!1}function Cr(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),i=`${t}
2
+ ${n}`,s=_r(e.personaSlug);return!!(r.startsWith(xr)||r===kr||r.startsWith("daemon-review:")||s&&C.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||Er(r,i)||$(i))||r.startsWith(Sr)&&e.parentTaskId&&s&&C.has(s)||e.planId&&!e.parentTaskId&&s&&C.has(s)&&$(i)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&C.has(s))}var Or=/^claude[-_]/i,Ar=/^(?:opus|sonnet|haiku)\b/i;function ge(e){let r=e.trim();return Or.test(r)||Ar.test(r)}function he(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ye(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function wr(e){return he(e)?"codex":ge(e)?"claude":(ye(e),"cursor")}function Ir(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==="cursor"||n==="composer"?{provider:"cursor",model:i,rule:"executor_ref:provider_cursor"}:null:null}function Pr(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?ge(n)||he(n)||ye(n)?{lane:t,model:n,provider:wr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function j(e){let r=typeof e=="string"?e.trim():"";return r?Ir(r)??Pr(r):null}f();a();a();a();var Ia=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function nt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var ot=nt();var Xe="composer-2.5";var d="cursor",it=new Set(["claude","opus","anthropic"]),st=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function T(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function c(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return it.has(r)?!0:r.includes("claude")||r.includes("opus")}function oe(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&c(r))return!0;let t=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=j(T(e,"executorRef"));if(n?.provider&&c(n.provider)||n?.model&&c(at(n.model)))return!0;let i=T(e,"description");if(st.some(l=>l.test(i)))return!0;let s=T(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function at(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function lt(e,r){return{provider:d,model:Xe,rule:`policy:cursor_default${r}`,requestedModel:e}}function Qe(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&c(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(oe(t)||r.rule==="explicit:cli"&&c(r.provider)||!c(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return lt(r.model,i)}function ct(e,r=d){let t=e?.trim();return t?c(t)?d:t==="codex"?"codex":t:r}function ut(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(d)?[...new Set(r.map(t=>c(t)?d:t))]:r.every(t=>c(t))?[d]:r}var dt=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,mt=/\b(npm run build\b|next build\b)\b/i,ft=/\b(vercel (build|deploy|--prod))\b/i,pt=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function ie(e){let r=e.trim();return r?pt.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:ft.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:mt.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:dt.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 W="heavy_verification_token_required";import{spawnSync as Nt}from"node:child_process";a();import{closeSync as Rt,existsSync as x,mkdirSync as xt,openSync as kt,readdirSync as tr,readFileSync as St,statSync as _t,unlinkSync as nr,writeFileSync as Et}from"node:fs";import le from"node:path";import{mkdirSync as ht}from"node:fs";import{tmpdir as yt}from"node:os";import K from"node:path";import{homedir as gt}from"node:os";import Ze from"node:path";function er(){let e=process.env.KYNVER_STATE_ROOT;return e?Ze.resolve(e):Ze.join(gt(),".kynver","state")}function vt(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function bt(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?K.resolve(e):vt()?K.join(yt(),"kynver","state","heavy-verification"):K.join(er(),"heavy-verification")}function se(){return K.join(bt(),"slots")}function R(){let e=se();return ht(e,{recursive:!0}),e}var k=120*6e4,rr=1;function Ct(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function M(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function U(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Ct(e,rr):rr}function Ot(e){return`slot-${e}`}function At(e,r=se()){return le.join(r,`${e}.json`)}function ce(e){if(!x(e))return null;try{let r=JSON.parse(St(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 or(e,r=k){if(!e||!V(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function ir(e,r){let t=ce(e);if(t)return or(t,r);if(!x(e))return!0;try{return Date.now()-_t(e).mtimeMs>r}catch{return!0}}function wt(e,r){if(ir(e,r))try{nr(e)}catch{}}function It(e){return xt(e,{recursive:!0}),e}function ue(e={}){let r=It(e.slotsDir??R()),t=e.staleMs??k,n=0;for(let i of tr(r)){if(!i.endsWith(".json"))continue;let s=le.join(r,i),l=x(s);wt(s,t),l&&!x(s)&&(n+=1)}return n}function Pt(e={}){let r=e.slotsDir??R(),t=e.staleMs??k;ue({slotsDir:r,staleMs:t});let n=[];for(let i of tr(r)){if(!i.endsWith(".json"))continue;let s=ce(le.join(r,i));s&&!or(s,t)&&n.push(s)}return n}function ae(e={}){return Pt(e).length}function S(e,r={}){if(M())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:U(),reason:null};let t=r.slotsDir??R(),n=r.staleMs??k,i=r.maxSlots??U();ue({slotsDir:t,staleMs:n});for(let l=0;l<i;l+=1){let u=Ot(l),p=At(u,t),ar=ce(p);if(ir(p,n))try{nr(p)}catch{}else if(ar||x(p))continue;let lr={slotId:u,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let g=kt(p,"wx");Et(g,JSON.stringify(lr,null,2),"utf8"),Rt(g);let cr=ae({slotsDir:t,staleMs:n});return{admitted:!0,slotId:u,activeSlots:cr,maxSlots:i,reason:null}}catch(g){if(g.code==="EEXIST")continue;throw g}}let s=ae({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function L(e,r={}){if(M())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:U(),reason:null};let t=r.slotsDir??R(),n=r.staleMs??k,i=r.maxSlots??U();ue({slotsDir:t,staleMs:n});let s=ae({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 Dt(e){e<=0||Nt(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function sr(e,r,t=2e3,n={}){let i=Date.now()+Math.max(0,r),s=S(e,n);for(;!s.admitted&&Date.now()<i;)Dt(Math.min(t,i-Date.now())),s=S(e,n);return s}function Bt(e,r={}){let t=ie(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...L(e),slotId:null}};if(M())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...L(e),slotId:null}};let n=r.waitMs??0,i=n>0?sr(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:W,commandClass:t.commandClass,reason:t.reason??i.reason??W,verificationGate:i}}export{d as DEFAULT_WORKER_PROVIDER,W as HEAVY_VERIFICATION_TOKEN_REQUIRED,H as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Rr as auditReviewWorkerCredentialScope,yr as auditWorkerEnv,y as buildWorkerSpawnEnv,ie as classifyHeavyShellCommand,Qe as enforceCursorWorkerProvider,Bt as gateWorkerShellCommand,c as isClaudeFamilyProvider,h as isForbiddenWorkerEnvKey,Cr as isHarnessExpertReviewWorker,pe as isNoProdCredentialReviewEnvironment,de as listForbiddenWorkerEnvKeys,me as listOperatorAllowedWorkerEnvKeys,ut as preferCursorExecutor,ct as resolveConfiguredWorkerProvider,_ as scrubWorkerEnv,oe as taskAllowsClaudeWorker};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kynver-app/runtime",
3
- "version": "0.2.16",
3
+ "version": "0.2.18",
4
4
  "description": "Kynver AgentOS local execution runtime and CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -99,31 +99,6 @@
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"
127
102
  }
128
103
  },
129
104
  "files": [
@@ -133,7 +108,7 @@
133
108
  "README.md"
134
109
  ],
135
110
  "scripts": {
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",
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",
137
112
  "typecheck": "tsc -p tsconfig.json --noEmit",
138
113
  "test": "vitest run --config vitest.config.ts",
139
114
  "prepublishOnly": "node ../../scripts/npm-publish-guard.mjs && npm run build"
@@ -1 +0,0 @@
1
- export { getAdapterContextContract, listAdapterContextContracts, type AdapterContextCapability, type AdapterContextContract, type AdapterContextContractId, } from "../orchestration-providers/adapter-contract.js";
@@ -1 +0,0 @@
1
- var o={"kynver-harness":{adapterId:"kynver-harness",displayName:"Kynver Harness (native)",capabilities:["instruction_policy","persona_context","memory_quality_capture","context_envelope_goal","context_envelope_plan","context_envelope_task","context_envelope_memories","context_envelope_persona"],requiredCapabilities:[],compatibilityNotes:"Context injected via SYSTEM prompt block (buildPrompt). instruction_policy and persona_context are rendered as markdown sections before the task block. context_envelope_* fields (goal/plan/task/memories/persona) are available for dispatch-time injection into the task description \u2014 parity with hermes for shared envelope fields. memory_quality_capture feeds the MARM P7 runtime prompt block."},hermes:{adapterId:"hermes",displayName:"Hermes Forge CLI",capabilities:["context_envelope_goal","context_envelope_plan","context_envelope_task","context_envelope_memories","context_envelope_persona"],requiredCapabilities:[],compatibilityNotes:"External CLI adapter. Context delivered via --context flag or stdin JSON envelope. Does not receive instruction_policy or persona_context / memory_quality_capture (MARM-internal). kynver-harness is the Kynver-native equivalent and covers all hermes capabilities plus richer local context."},cursor:{adapterId:"cursor",displayName:"Cursor / Composer",capabilities:["instruction_policy","persona_context","context_envelope_goal","context_envelope_plan","context_envelope_task","context_envelope_memories"],requiredCapabilities:[],compatibilityNotes:"Context injected via SYSTEM prompt block. Cursor does not receive context_envelope_sessions (no standard block for session history). context_envelope_persona is not forwarded (persona block is absorbed into persona_context markdown)."},codex:{adapterId:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",capabilities:["instruction_policy","context_envelope_goal","context_envelope_plan","context_envelope_task","context_envelope_memories"],requiredCapabilities:[],compatibilityNotes:"Context injected via --instructions flag or system prompt. persona_context not forwarded (Codex has no persona-aware memory lane). memory_quality_capture not surfaced (no MARM completion verification hook on Codex path). context_envelope_sessions and context_envelope_persona omitted."},claude:{adapterId:"claude",displayName:"Claude Code CLI",capabilities:["instruction_policy","persona_context","memory_quality_capture","context_envelope_goal","context_envelope_plan","context_envelope_task","context_envelope_memories","context_envelope_sessions","context_envelope_persona"],requiredCapabilities:[],compatibilityNotes:"Full context injection via SYSTEM prompt block. Supports all capabilities including session summaries and the full persona block. Equivalent to kynver-harness in capability coverage."}};function n(e){let t=o[e];return t||{adapterId:e,displayName:`Unknown adapter (${e})`,capabilities:[],requiredCapabilities:[],compatibilityNotes:"Unknown adapter \u2014 no context-envelope routing performed."}}function a(){return Object.values(o)}export{n as getAdapterContextContract,a as listAdapterContextContracts};
@@ -1,2 +0,0 @@
1
- export { buildPrompt, buildPromptWithReceipt, RUNTIME_PROMPT_ENFORCEMENT, type BuildPromptInput, } from "../prompt.js";
2
- export { RUNTIME_CONTEXT_BUDGET_RECEIPT_SCHEMA_VERSION, RUNTIME_CONTEXT_BUDGET_RECEIPT_V2_SCHEMA_VERSION, buildContextBudgetReceiptV2, estimateTokensFromChars, finalizeReceiptTotals, isRuntimeContextBudgetReceiptV2, sectionReceiptFromMarkdown, upgradeReceiptToV2, type BuildContextBudgetReceiptV2Input, type ContextBudgetReceiptSurface, type ContextEnvelopeMode, type RuntimeContextActiveStateLookup, type RuntimeContextActiveStateLookupKind, type RuntimeContextActiveStateLookupStatus, type RuntimeContextBudgetReceipt, type RuntimeContextBudgetReceiptSchemaVersion, type RuntimeContextBudgetReceiptV2, type RuntimeContextRehydrationKind, type RuntimeContextRehydrationRoute, type RuntimeContextSection, type RuntimeContextSectionReceipt, type UsefulContextCoverage, } from "../context-budget-receipt.js";
@@ -1,19 +0,0 @@
1
- function g(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}var w="embedded-1",S=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],b={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
2
- `),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
3
- `),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
4
- `),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
5
- `)},v={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},f={version:w,generatedAt:"1970-01-01T00:00:00.000Z",personas:S,instructions:b,policyThresholds:v};var _=f;function i(e){let t=_.instructions[e];if(typeof t=="string"&&t.trim())return t;let r=f.instructions[e];return typeof r=="string"?r:""}var P="runtime-context-budget-receipt.v1",h="runtime-context-budget-receipt.v2";function R(e){return!Number.isFinite(e)||e<=0?0:Math.ceil(e/4)}function s(e,t,r){let o=t?.length??0;return{section:e,chars:o,estimatedTokens:R(o),...r}}function x(e,t){let r=e.reduce((n,a)=>n+a.chars,0),o=e.reduce((n,a)=>n+a.estimatedTokens,0),l=e.reduce((n,a)=>n+(a.omittedCount??0),0),c=e.reduce((n,a)=>n+(a.duplicatesCollapsed??0),0);return{totalChars:r,estimatedTokens:o,duplicatesCollapsed:t?.duplicatesCollapsed??c,omittedCount:t?.omittedCount??l}}function u(e){let t=x(e.sections,{duplicatesCollapsed:e.duplicatesCollapsed,omittedCount:e.omittedCount});return{schemaVersion:h,surface:e.surface,agentOsId:e.agentOsId?.trim()||null,taskId:e.taskId?.trim()||null,planId:e.planId?.trim()||null,personaSlug:e.personaSlug?.trim().toLowerCase()||null,mode:e.mode,generatedAt:e.generatedAt,...t,finalSerializedChars:e.finalSerializedChars,finalSerializedTokens:R(e.finalSerializedChars),usefulContextCoverage:e.usefulContextCoverage,budgetSatisfied:e.budgetSatisfied??!0,overBudgetReason:e.overBudgetReason??null,activeStateLookups:e.activeStateLookups??[],sections:e.sections}}function E(e,t){return u({surface:t.surface,agentOsId:t.agentOsId??e.agentOsId,taskId:t.taskId??e.taskId,planId:t.planId??e.planId,personaSlug:t.personaSlug??e.personaSlug,mode:t.mode??e.mode,generatedAt:t.generatedAt??e.generatedAt,finalSerializedChars:t.finalSerializedChars,sections:e.sections,usefulContextCoverage:t.usefulContextCoverage,activeStateLookups:t.activeStateLookups??e.activeStateLookups,duplicatesCollapsed:t.duplicatesCollapsed??e.duplicatesCollapsed,omittedCount:t.omittedCount??e.omittedCount,budgetSatisfied:t.budgetSatisfied,overBudgetReason:t.overBudgetReason})}function T(e){return e.schemaVersion===h}var p=2e5,C=500;function I(e){let t=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",r=!!e.model?.toLowerCase().includes("haiku"),o=r?"compact":"full",l=r?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",c=[...i(`worker.prompt.progress.${o}`).split(`
6
- `),l],n=i(`worker.prompt.merge_gate.${o}`).split(`
7
- `),a=i(`worker.prompt.plan_artifacts.${o}`).split(`
8
- `);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",t,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.",...i("worker.prompt.core_rules").split(`
9
- `),"",...c,"",...n,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...g({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
10
- `)}function B(e){let t=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",r=!!e.model?.toLowerCase().includes("haiku"),o=r?"compact":"full",l=r?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",c=[...i(`worker.prompt.progress.${o}`).split(`
11
- `),l],n=i(`worker.prompt.merge_gate.${o}`).split(`
12
- `),a=i(`worker.prompt.plan_artifacts.${o}`).split(`
13
- `),d=e.repairTargetPrUrl?g({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}).join(`
14
- `):null;return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",t,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.",...i("worker.prompt.core_rules").split(`
15
- `),c.join(`
16
- `),n.join(`
17
- `),a.join(`
18
- `),d,e.task].filter(m=>!!m).join(`
19
- `)}function O(e){let t=I(e),r=B(e),o=e.surface??"runtime_prompt",l=[s("structural",r),s("memory_preview",e.runtimeEnvelopeMarkdown),s("task_envelope",e.contextEnvelopeMarkdown),s("persona",e.personaMarkdown),s("instruction_policy",e.instructionPolicyMarkdown),s("memory_quality",e.memoryQualityMarkdown)],c=e.enforcementEnabled??!1,n=t.length,a=Buffer.byteLength(t,"utf8"),d=n>p,m=d?p>=C:n>=C,k=d?`runtime_prompt exceeds hard cap: ${n} chars (${a} UTF-8 bytes) > ${p} (${c?"active":"shadow"} mode; no truncation applied)`:null,y=u({surface:o,agentOsId:e.agentOsId??null,taskId:e.taskId??null,planId:e.planId??null,personaSlug:e.personaSlug??null,mode:e.mode??"routine",generatedAt:e.generatedAt??new Date(0).toISOString(),finalSerializedChars:n,sections:l,usefulContextCoverage:{requiredOperatingRuleSlugsPresent:[],requiredOperatingRuleDenominator:0,activeTaskHandlePresent:!!e.taskId,planHandlePresent:!!e.planId,selectedHandles:[],omittedHandles:[],expansionRoutes:[],memoryQualityTraceId:null},budgetSatisfied:!d&&m,overBudgetReason:k});return{prompt:t,receipt:y}}var L={hardCapChars:p,safeFloorChars:C};export{P as RUNTIME_CONTEXT_BUDGET_RECEIPT_SCHEMA_VERSION,h as RUNTIME_CONTEXT_BUDGET_RECEIPT_V2_SCHEMA_VERSION,L as RUNTIME_PROMPT_ENFORCEMENT,u as buildContextBudgetReceiptV2,I as buildPrompt,O as buildPromptWithReceipt,R as estimateTokensFromChars,x as finalizeReceiptTotals,T as isRuntimeContextBudgetReceiptV2,s as sectionReceiptFromMarkdown,E as upgradeReceiptToV2};
@@ -1,3 +0,0 @@
1
- export { resolveProductionDatabaseUrl, type DbCredentialResolution, type DbCredentialFailure, type DbCredentialSource, } from "../db-credential-resolver.js";
2
- export { discoverProductionDbEnvFilePaths, expandHomePath } from "../db-credential-env-paths.js";
3
- export { safeDatabaseUrlHint } from "../db-url-hint.js";
@@ -1,2 +0,0 @@
1
- import{execFileSync as m,spawnSync as I}from"node:child_process";import*as f from"node:fs";import*as P from"node:path";import*as N from"node:fs";import{homedir as O}from"node:os";import*as c from"node:path";function D(e){return e.startsWith("~/")?c.join(O(),e.slice(2)):e}function R(e={}){let n=e.env??process.env,o=e.cwd??process.cwd(),r=e.homeDir??(n.HOME?.trim()||n.USERPROFILE?.trim()||O()),t=new Set,s=[],l=E=>{let i=c.resolve(D(E));t.has(i)||(t.add(i),s.push(i))},d=n.KYNVER_ENV_FILE?.trim();d&&l(d);let _=o;for(let E=0;E<12;E+=1){l(c.join(_,".env"));let i=c.dirname(_);if(i===_)break;_=i}l(c.join(r,".kynver",".env"));try{let E=c.join(r,".kynver","config.json");if(N.existsSync(E)){let A=JSON.parse(N.readFileSync(E,"utf8")).defaultRepo?.trim();A&&l(c.join(A,".env"))}}catch{}return s}function u(e){if(!e?.trim())return"(not set)";try{let n=new URL(e),o=(n.pathname||"").replace(/^\//,"").split("?")[0]||"(no database name)";return`${n.hostname} / ${o}`}catch{return"(invalid URL)"}}var b=["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"],k=new Set(b);var T=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN"],B=new Set(T);var K="KYNVER_NO_PROD_DB_CREDENTIALS";var C=new Set(["1","true","yes","on"]);function v(e){let n=e[K]?.trim().toLowerCase();return n!==void 0&&C.has(n)}var p=["KYNVER_PRODUCTION_DATABASE_URL","PRODUCTION_DATABASE_URL"],S=[...p];function a(e,n){return e[n]?.trim()||void 0}function h(e){if(!f.existsSync(e))return{};let n={},o=new Set(S);for(let r of f.readFileSync(e,"utf8").split(`
2
- `)){let t=r.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);if(!t||!o.has(t[1]))continue;let s=t[1];n[s]=t[2].replace(/^["']|["']$/g,"").trim()}return n}function g(e){for(let n of p){let o=a(e,n);if(o)return{ok:!0,databaseUrl:o,source:`env:${n}`,hint:u(o)}}return null}function Y(e,n){for(let o of R({cwd:e,env:n})){let r=h(o);for(let t of S){let s=r[t]?.trim();if(s)return{ok:!0,databaseUrl:s,source:`env-file:${t}`,hint:`${u(s)} (${P.basename(o)})`}}}return null}function L(e){let n=process.platform==="win32"?"neon.cmd":"neon",o=["connection-string",e.branch,"--prisma","-o","json","--no-color","--no-analytics"];e.projectId&&o.push("--project-id",e.projectId),e.databaseName&&o.push("--database-name",e.databaseName),e.roleName&&o.push("--role-name",e.roleName),e.pooled&&o.push("--pooled");let r;try{let t=I(n,o,{encoding:"utf8",env:process.env,timeout:3e4});if(t.status!==0)return null;r=(t.stdout||"").trim()}catch{try{r=m("neonctl",o,{encoding:"utf8",env:process.env,timeout:3e4}).trim()}catch{return null}}if(!r)return null;try{let t=JSON.parse(r),s=typeof t.connection_uri=="string"&&t.connection_uri||typeof t.connection_string=="string"&&t.connection_string||typeof t.connectionString=="string"&&t.connectionString;if(s)return s}catch{}return/^postgres(ql)?:\/\//i.test(r)?r:null}function U(e,n){let o=a(e,"KYNVER_NEON_BRANCH")||a(e,"NEON_BRANCH")||"production",r=n({branch:o,projectId:a(e,"KYNVER_NEON_PROJECT_ID")||a(e,"NEON_PROJECT_ID"),databaseName:a(e,"KYNVER_NEON_DATABASE_NAME")||a(e,"NEON_DATABASE_NAME"),roleName:a(e,"KYNVER_NEON_ROLE_NAME")||a(e,"NEON_ROLE_NAME"),pooled:a(e,"KYNVER_NEON_POOLED")==="1"||a(e,"NEON_POOLED")==="1"});return r?{ok:!0,databaseUrl:r,source:"neon-cli",hint:u(r)}:null}function w(e={}){let n=e.env??process.env;if(v(n))return{ok:!1,reason:"Production database credentials are blocked in this harness worker (KYNVER_NO_PROD_DB_CREDENTIALS). Review workers must use scoped AgentOS APIs \u2014 not direct prod DB access.",attempted:[]};let o=e.cwd??process.cwd(),r=e.neonConnectionString??L,t=[],s=R({cwd:o,env:n}),l=U(n,r);if(t.push("neon-cli"),l)return l;for(let i of p)t.push(`env:${i}`);let d=g(n);if(d)return d;for(let i of S)t.push(`env-file:${i}`);let _=Y(o,n);return _||{ok:!1,reason:"No production database credentials found. Authenticate Neon CLI (`neon auth`), set KYNVER_NEON_* / NEON_* project hints, or provide PRODUCTION_DATABASE_URL / KYNVER_PRODUCTION_DATABASE_URL (process env, KYNVER_ENV_FILE, ~/.kynver/.env, or selective .env keys in the repo / defaultRepo checkout)."+(s.length>0?` Searched env files: ${s.slice(0,6).join(", ")}${s.length>6?"\u2026":""}.`:""),attempted:t}}export{R as discoverProductionDbEnvFilePaths,D as expandHomePath,w as resolveProductionDatabaseUrl,u as safeDatabaseUrlHint};
@@ -1,3 +0,0 @@
1
- export { parseExecutorRefRoutingIntent, executorRefRequestsNonCursorWorker, type ExecutorRefRoutingIntent, } from "../executor-ref-routing.js";
2
- export { assessDispatchModelGuard, type DispatchModelGuardInput, type DispatchModelGuardResult, } from "../dispatch-model-guard.js";
3
- export { GLOBAL_DEFAULT_MODEL, CURSOR_DEFAULT_MODEL, inferModelRoutingFromTask, resolveGlobalDefaultModel, resolveModelFallback, resolveWorkerLaunch, type ModelRoutingDecision, } from "../model-routing.js";
@@ -1,5 +0,0 @@
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};