@kynver-app/runtime 0.2.15 → 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/server/adapter-contract.d.ts +1 -0
- package/dist/server/adapter-contract.js +1 -0
- 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/package.json +27 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getAdapterContextContract, listAdapterContextContracts, type AdapterContextCapability, type AdapterContextContract, type AdapterContextContractId, } from "../orchestration-providers/adapter-contract.js";
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1,2 @@
|
|
|
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";
|
|
@@ -0,0 +1,19 @@
|
|
|
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};
|
|
@@ -0,0 +1,3 @@
|
|
|
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";
|
|
@@ -0,0 +1,2 @@
|
|
|
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};
|
|
@@ -0,0 +1,3 @@
|
|
|
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";
|
|
@@ -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};
|
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"
|