@kynver-app/runtime 0.2.69 → 0.2.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +95 -94
- package/dist/index.js +119 -118
- package/dist/local-run-store/index.js +7 -7
- package/dist/provider-terminal-failure.js +1 -0
- package/dist/server/cleanup.js +14 -14
- package/dist/server/context-budget.js +5 -5
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +3 -3
- package/dist/server/model-routing.js +3 -3
- package/dist/server/monitor.js +7 -7
- package/dist/server/prompt.js +5 -5
- package/dist/server/worker-policy.js +2 -2
- package/dist/worker-broker/index.js +7 -7
- package/package.json +7 -2
|
@@ -1,19 +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
|
|
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 v="embedded-1",b=[{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"}],w={"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
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
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
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
|
-
`)},
|
|
5
|
+
`)},S={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},f={version:v,generatedAt:"1970-01-01T00:00:00.000Z",personas:b,instructions:w,policyThresholds:S};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 k(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
6
|
`),l],n=i(`worker.prompt.merge_gate.${o}`).split(`
|
|
7
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(`
|
|
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.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...i("worker.prompt.core_rules").split(`
|
|
9
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
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
11
|
`),l],n=i(`worker.prompt.merge_gate.${o}`).split(`
|
|
12
12
|
`),a=i(`worker.prompt.plan_artifacts.${o}`).split(`
|
|
13
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(`
|
|
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.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...i("worker.prompt.core_rules").split(`
|
|
15
15
|
`),c.join(`
|
|
16
16
|
`),n.join(`
|
|
17
17
|
`),a.join(`
|
|
18
18
|
`),d,e.task].filter(m=>!!m).join(`
|
|
19
|
-
`)}function O(e){let t=
|
|
19
|
+
`)}function O(e){let t=k(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,I=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:I});return{prompt:t,receipt:y}}var N={hardCapChars:p,safeFloorChars:C};export{P as RUNTIME_CONTEXT_BUDGET_RECEIPT_SCHEMA_VERSION,h as RUNTIME_CONTEXT_BUDGET_RECEIPT_V2_SCHEMA_VERSION,N as RUNTIME_PROMPT_ENFORCEMENT,u as buildContextBudgetReceiptV2,k as buildPrompt,O as buildPromptWithReceipt,R as estimateTokensFromChars,x as finalizeReceiptTotals,T as isRuntimeContextBudgetReceiptV2,s as sectionReceiptFromMarkdown,E as upgradeReceiptToV2};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var r=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(o){throw n=[o],o}};import{homedir as
|
|
1
|
+
var r=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(o){throw n=[o],o}};import{homedir as $}from"node:os";import L from"node:path";function Ie(e){return e==="~"?$():e.startsWith("~/")||e.startsWith("~\\")?L.join($(),e.slice(2)):e}function l(e){return L.resolve(Ie(e))}var c=r(()=>{"use strict"});function H(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var s=r(()=>{"use strict"});var Pe,Rr,Ne,kr,j=r(()=>{"use strict";Pe=["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"],Rr=new Set(Pe),Ne=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],kr=new Set(Ne)});import{spawnSync as Ue}from"node:child_process";function _(e,t){try{let n=Ue("git",t,H({cwd:e,encoding:"utf8"}));return{status:n.status,stdout:n.stdout||"",stderr:n.stderr||"",error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}var g=r(()=>{"use strict";c();s();j()});var v=r(()=>{"use strict";g()});import{existsSync as C,readFileSync as V}from"node:fs";import{homedir as Te}from"node:os";import i from"node:path";import{fileURLToPath as De}from"node:url";function Be(e){let t=i.join(e,"package.json");if(!C(t))return null;try{let n=JSON.parse(V(t,"utf8"));return typeof n.name=="string"?n.name.trim():null}catch{return null}}function G(e){return Be(e)==="kynver"}function Y(e){let t=i.resolve(e);if(!C(t))return null;let n=_(t,["rev-parse","--show-toplevel"]);if(n.status!==0)return null;let o=n.stdout.trim();return o.length?i.resolve(o):null}function Me(e=import.meta.url){let t=i.dirname(De(e));for(let n=0;n<8;n+=1){let o=i.join(t,"package.json");if(C(o))try{if(JSON.parse(V(o,"utf8")).name==="@kynver-app/runtime")return t}catch{}let a=i.dirname(t);if(a===t)break;t=a}return null}function E(e,t,n,o,a){if(!n)return;let u=i.resolve(n);e.has(u)||(a?.requireMonorepo??!0)&&!G(u)||(e.add(u),t.push({repo:u,source:o}))}function Fe(e){let t=e?.cwd??process.cwd(),n=new Set,o=[];E(n,o,Y(t),"cwd_git",{requireMonorepo:!1});let a=Me(e?.runtimeModuleUrl??import.meta.url);a&&E(n,o,Y(a),"runtime_checkout");let u=Te();for(let p of We)E(n,o,l(i.join(u,p)),"well_known_path");let M=i.resolve(e?.cwd??process.cwd());return o.filter(p=>{if(p.source!=="runtime_checkout"||!G(p.repo))return!0;let F=i.resolve(p.repo);return M===F||M.startsWith(`${F}${i.sep}`)})}function A(e){return Fe(e)[0]??null}var We,h=r(()=>{"use strict";g();c();v();We=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});var w=r(()=>{"use strict";s()});var d=r(()=>{"use strict"});var y=r(()=>{"use strict"});var z=r(()=>{"use strict"});var Vr,Gr,O=r(()=>{"use strict";Vr=25*1024*1024*1024,Gr=12*1024*1024*1024});var Zr,Qr,J=r(()=>{"use strict";O();Zr=5*1024*1024*1024,Qr=10*1024*1024*1024});var sn,an,I=r(()=>{"use strict";J();O();sn=30*1024*1024*1024,an=15*1024*1024*1024});var X=r(()=>{"use strict";s()});import $e from"node:path";var hn,P=r(()=>{"use strict";c();X();hn=$e.join(".openclaw","harness")});var R=r(()=>{"use strict";m();d();y();k();P()});var ee=r(()=>{"use strict";m();P();R();s()});var K=r(()=>{"use strict";ee();s()});var re=r(()=>{"use strict";K();s()});var ne=r(()=>{"use strict"});var te=r(()=>{"use strict";ne();s()});var oe=r(()=>{"use strict"});var se=r(()=>{"use strict";oe()});var x=r(()=>{"use strict"});var ie=r(()=>{"use strict";se();s();x()});var ae=r(()=>{"use strict";x()});var ue=r(()=>{"use strict"});var le=r(()=>{"use strict"});var U=r(()=>{"use strict"});var ce=r(()=>{"use strict"});var de=r(()=>{"use strict";U();ce()});var me=r(()=>{"use strict";te();ie();x();ae();ue();g();le();de();U();s()});var fe=r(()=>{"use strict";me()});var Xe,Ze,pe=r(()=>{"use strict";z();m();d();y();k();I();K();re();fe();s();Xe=500*1024*1024,Ze=4*1024*1024*1024});var k=r(()=>{"use strict";pe()});import{homedir as Qe}from"node:os";import er from"node:path";var ge,T=r(()=>{"use strict";ge=er.join(Qe(),".kynver",".env")});var he=r(()=>{"use strict"});var ye=r(()=>{"use strict";he()});var be=r(()=>{"use strict"});var D=r(()=>{"use strict";ye();be()});var Re=r(()=>{"use strict"});var ke=r(()=>{"use strict";Re()});var S=r(()=>{"use strict";T();c();m();D();ke()});var _e=r(()=>{"use strict";d();d()});var ve=r(()=>{"use strict";T();D();S()});var Ce=r(()=>{"use strict";h();d();_e();m();S();ve();w();R()});var sr,ds,Ae=r(()=>{"use strict";sr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],ds=sr.join("|")});import{existsSync as ir,mkdirSync as Rs,readFileSync as ar,writeFileSync as ks}from"node:fs";import{homedir as ur,totalmem as Ss}from"node:os";import W from"node:path";function lr(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:l(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:l(e.defaultRepo.trim())}:{}}}function f(){if(!ir(we))return{};try{return lr(JSON.parse(ar(we,"utf8")))}catch{return{}}}var Oe,we,Ts,Ds,Ws,m=r(()=>{"use strict";h();c();w();d();y();k();I();S();Ce();Ae();R();Oe=W.join(ur(),".kynver"),we=W.join(Oe,"config.json"),Ts=W.join(Oe,"credentials");Ds=500*1024*1024,Ws=4*1024*1024*1024});m();h();c();v();import cr from"node:path";function dr(e){return cr.resolve(l(e.trim()))}function B(e,t,n){let o=e?.trim();return o?{repo:dr(o),source:t,persistedInConfig:n}:null}function mr(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function fr(e={}){let t=e.env??process.env,n=e.config??f(),o=B(n.defaultRepo,"config",!0);if(o)return o;let a=B(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(a)return a;let u=B(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return u||mr(A({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}export{fr as resolveDefaultRepo};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Se}from"node:os";import Oe from"node:path";function Dr(e){return e==="~"?Se():e.startsWith("~/")||e.startsWith("~\\")?Oe.join(Se(),e.slice(2)):e}function S(e){return Oe.resolve(Dr(e))}var O=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Ur,bn,Lr,xn,re=a(()=>{"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"],bn=new Set(Ur),Lr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],xn=new Set(Lr)});var L=a(()=>{"use strict";O();d();re()});var Ce=a(()=>{"use strict";L()});var te=a(()=>{"use strict";L();O();Ce()});var ne=a(()=>{"use strict";d()});var _=a(()=>{"use strict"});var F=a(()=>{"use strict"});var Ae=a(()=>{"use strict"});var Hn,jn,oe=a(()=>{"use strict";Hn=25*1024*1024*1024,jn=12*1024*1024*1024});var zn,Jn,Pe=a(()=>{"use strict";oe();zn=5*1024*1024*1024,Jn=10*1024*1024*1024});var to,no,ie=a(()=>{"use strict";Pe();oe();to=30*1024*1024*1024,no=15*1024*1024*1024});var Ie=a(()=>{"use strict";d()});import jr from"node:path";var mo,se=a(()=>{"use strict";O();Ie();mo=jr.join(".openclaw","harness")});var H=a(()=>{"use strict";k();_();F();j();se()});var Te=a(()=>{"use strict";k();se();H();d()});var le=a(()=>{"use strict";Te();d()});var Ke=a(()=>{"use strict";le();d()});var Me=a(()=>{"use strict"});var Be=a(()=>{"use strict";Me();d()});var De=a(()=>{"use strict"});var Ue=a(()=>{"use strict";De()});var Le=a(()=>{"use strict";Ue();d()});var Fe=a(()=>{"use strict"});var $e=a(()=>{"use strict"});var He=a(()=>{"use strict"});var ce=a(()=>{"use strict"});var je=a(()=>{"use strict"});var Ye=a(()=>{"use strict";ce();je()});var Ve=a(()=>{"use strict";Be();Le();Fe();$e();L();He();Ye();ce();d()});var Ge=a(()=>{"use strict";Ve()});var Qr,Zr,qe=a(()=>{"use strict";Ae();k();_();F();j();ie();le();Ke();Ge();d();Qr=500*1024*1024,Zr=4*1024*1024*1024});var j=a(()=>{"use strict";qe()});import{homedir as et}from"node:os";import rt from"node:path";var ze,ue=a(()=>{"use strict";ze=rt.join(et(),".kynver",".env")});var Je=a(()=>{"use strict"});var Xe=a(()=>{"use strict";Je()});var Qe=a(()=>{"use strict"});var de=a(()=>{"use strict";Xe();Qe()});var Ze=a(()=>{"use strict"});var er=a(()=>{"use strict";Ze()});var Y=a(()=>{"use strict";ue();O();k();de();er()});var rr=a(()=>{"use strict";_();_()});var tr=a(()=>{"use strict";ue();de();Y()});var nr=a(()=>{"use strict";te();_();rr();k();Y();tr();ne();H()});function v(e){let r=e.trim().toLowerCase();return ut[r]??r}var or,ct,ut,V=a(()=>{"use strict";or=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],ct=or.join("|"),ut={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{existsSync as pt,mkdirSync as ua,readFileSync as mt,writeFileSync as da}from"node:fs";import{homedir as ft,totalmem as ma}from"node:os";import pe from"node:path";function gt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:S(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:S(e.defaultRepo.trim())}:{}}}function C(){if(!pt(ir))return{};try{return gt(JSON.parse(mt(ir,"utf8")))}catch{return{}}}var sr,ir,Oa,Ca,Aa,k=a(()=>{"use strict";te();O();ne();_();F();j();ie();Y();nr();V();H();sr=pe.join(ft(),".kynver"),ir=pe.join(sr,"config.json"),Oa=pe.join(sr,"credentials");Ca=500*1024*1024,Aa=4*1024*1024*1024});var Wr=/^claude[-_]/i,Tr=/^(?:opus|sonnet|haiku)\b/i;function be(e){let r=e.trim();return Wr.test(r)||Tr.test(r)}function xe(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Z(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Ee(e){return e.trim().toLowerCase().startsWith("gemini-")}function Kr(e){return xe(e)?"codex":be(e)?"claude":Ee(e)?"gemini":(Z(e),"cursor")}function Mr(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Br(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?be(n)||xe(n)||Z(n)||Ee(n)?{lane:t,model:n,provider:Kr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Mr(r)??Br(r):null}function ee(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Z(r.model)):!1}k();var ar={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function A(e){return ar[e]}function lr(){return Object.values(ar)}import{existsSync as Rt}from"node:fs";import{homedir as yt}from"node:os";import T from"node:path";import{createHash as cr}from"node:crypto";import{statSync as ht}from"node:fs";import{spawnSync as ur}from"node:child_process";function R(e){try{let r=ht(e),t=`${e}|${r.size}|${r.mtimeMs}`;return cr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function P(e){return cr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=ur(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function G(e,r,t={}){let n=t.timeoutMs??8e3;try{return ur(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 _t="codex";function kt(){let e=yt();return[process.env.CODEX_HOME?.trim()?T.join(T.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,T.join(e,".codex","auth.json"),T.join(e,".config","codex","auth.json")].filter(t=>!!t)}function vt(e){return T.dirname(e)}function bt(e){let r,t;for(let n of kt()){if(!Rt(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:vt(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function dr(e=new Date().toISOString()){let r=g(_t,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:P("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=bt(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?R(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as xt}from"node:fs";import{homedir as Et}from"node:os";import me from"node:path";function St(){let e=process.env.HERMES_HOME?.trim(),r=e?me.resolve(e):me.join(Et(),".hermes");return me.join(r,"auth.json")}function q(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=St(),o=xt(n),s=G(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?R(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function K(e=new Date().toISOString()){let r=dr(e);if(r.ready)return{...r,path:"codex_cli"};let t=q(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 pr=["low","medium","high"],mr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function fr(e,r){let t=A(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Ot(e,r){let t=A(e.providerId),n=A(r.providerId),o=pr.indexOf(t.costTier)-pr.indexOf(n.costTier);if(o!==0)return o;let s=mr[e.binding.authSource]-mr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function fe(e){let r=lr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&fr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Ot)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return fr(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as Ct}from"node:fs";import{homedir as At}from"node:os";import Pt from"node:path";var wt="claude";function It(){let e=At();return[Pt.join(e,".claude",".credentials.json")]}function gr(e=new Date().toISOString()){let r=g(wt,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:P("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=It().find(i=>Ct(i)),o=G(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?R(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as Nt}from"node:fs";import{homedir as Wt}from"node:os";import ge from"node:path";var Tt="agent";function Kt(){let e=Wt(),r=[ge.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(ge.join(t,"cursor-agent","auth.json")),n&&r.push(ge.join(n,"cursor","auth.json"))}return r}function hr(e=new Date().toISOString()){let r=g(Tt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:P("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Kt().find(s=>Nt(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?R(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as Mt,readFileSync as Bt}from"node:fs";import{homedir as Dt}from"node:os";import he from"node:path";var Ut=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Lt(){let e=process.env.HERMES_HOME?.trim(),r=e?he.resolve(e):he.join(Dt(),".hermes");return he.join(r,".env")}function Ft(e){try{let r=Bt(e,"utf8"),t=[];for(let n of Ut)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rr(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Lt(),o=Mt(n),s=o?Ft(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?R(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function yr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=K(r),n={codex:t,cursor:hr(r),claude:gr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rr(r),hermesOpenAiCodex:q(r),codexAdapterPath:t.path,readyCount:o}}var $t=[/\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],Ht=[/\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 Re(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function jt(e){let r=Re(e,"executorRef").toLowerCase(),t=Re(e,"title").toLowerCase(),n=Re(e,"description").toLowerCase(),o=`${r}
|
|
1
|
+
var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Oe}from"node:os";import Ce from"node:path";function Ur(e){return e==="~"?Oe():e.startsWith("~/")||e.startsWith("~\\")?Ce.join(Oe(),e.slice(2)):e}function S(e){return Ce.resolve(Ur(e))}var O=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Lr,Sn,Fr,On,te=a(()=>{"use strict";Lr=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],Sn=new Set(Lr),Fr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],On=new Set(Fr)});var L=a(()=>{"use strict";O();d();te()});var Ae=a(()=>{"use strict";L()});var ne=a(()=>{"use strict";L();O();Ae()});var oe=a(()=>{"use strict";d()});var k=a(()=>{"use strict"});var F=a(()=>{"use strict"});var Pe=a(()=>{"use strict"});var Vn,Gn,ie=a(()=>{"use strict";Vn=25*1024*1024*1024,Gn=12*1024*1024*1024});var Qn,Zn,we=a(()=>{"use strict";ie();Qn=5*1024*1024*1024,Zn=10*1024*1024*1024});var io,so,se=a(()=>{"use strict";we();ie();io=30*1024*1024*1024,so=15*1024*1024*1024});var Ne=a(()=>{"use strict";d()});import Yr from"node:path";var ho,ae=a(()=>{"use strict";O();Ne();ho=Yr.join(".openclaw","harness")});var H=a(()=>{"use strict";_();k();F();j();ae()});var Ke=a(()=>{"use strict";_();ae();H();d()});var ce=a(()=>{"use strict";Ke();d()});var Me=a(()=>{"use strict";ce();d()});var Be=a(()=>{"use strict"});var De=a(()=>{"use strict";Be();d()});var Ue=a(()=>{"use strict"});var Le=a(()=>{"use strict";Ue()});var Y=a(()=>{"use strict"});var Fe=a(()=>{"use strict";Le();d();Y()});var $e=a(()=>{"use strict";Y()});var He=a(()=>{"use strict"});var je=a(()=>{"use strict"});var ue=a(()=>{"use strict"});var Ye=a(()=>{"use strict"});var Ve=a(()=>{"use strict";ue();Ye()});var Ge=a(()=>{"use strict";De();Fe();Y();$e();He();L();je();Ve();ue();d()});var qe=a(()=>{"use strict";Ge()});var rt,tt,ze=a(()=>{"use strict";Pe();_();k();F();j();se();ce();Me();qe();d();rt=500*1024*1024,tt=4*1024*1024*1024});var j=a(()=>{"use strict";ze()});import{homedir as nt}from"node:os";import ot from"node:path";var Je,de=a(()=>{"use strict";Je=ot.join(nt(),".kynver",".env")});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe()});var Ze=a(()=>{"use strict"});var pe=a(()=>{"use strict";Qe();Ze()});var er=a(()=>{"use strict"});var rr=a(()=>{"use strict";er()});var V=a(()=>{"use strict";de();O();_();pe();rr()});var tr=a(()=>{"use strict";k();k()});var nr=a(()=>{"use strict";de();pe();V()});var or=a(()=>{"use strict";ne();k();tr();_();V();nr();oe();H()});function v(e){let r=e.trim().toLowerCase();return mt[r]??r}var ir,pt,mt,G=a(()=>{"use strict";ir=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],pt=ir.join("|"),mt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{existsSync as gt,mkdirSync as ya,readFileSync as ht,writeFileSync as Ra}from"node:fs";import{homedir as yt,totalmem as _a}from"node:os";import me from"node:path";function Rt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:S(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:S(e.defaultRepo.trim())}:{}}}function C(){if(!gt(sr))return{};try{return Rt(JSON.parse(ht(sr,"utf8")))}catch{return{}}}var ar,sr,Ta,Wa,Ka,_=a(()=>{"use strict";ne();O();oe();k();F();j();se();V();or();G();H();ar=me.join(yt(),".kynver"),sr=me.join(ar,"config.json"),Ta=me.join(ar,"credentials");Wa=500*1024*1024,Ka=4*1024*1024*1024});var Wr=/^claude[-_]/i,Kr=/^(?:opus|sonnet|haiku)\b/i;function xe(e){let r=e.trim();return Wr.test(r)||Kr.test(r)}function Ee(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ee(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Se(e){return e.trim().toLowerCase().startsWith("gemini-")}function Mr(e){return Ee(e)?"codex":xe(e)?"claude":Se(e)?"gemini":(ee(e),"cursor")}function Br(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Dr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?xe(n)||Ee(n)||ee(n)||Se(n)?{lane:t,model:n,provider:Mr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Br(r)??Dr(r):null}function re(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ee(r.model)):!1}_();var lr={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function A(e){return lr[e]}function cr(){return Object.values(lr)}import{existsSync as _t}from"node:fs";import{homedir as vt}from"node:os";import W from"node:path";import{createHash as ur}from"node:crypto";import{statSync as kt}from"node:fs";import{spawnSync as dr}from"node:child_process";function y(e){try{let r=kt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return ur("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function P(e){return ur("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=dr(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function q(e,r,t={}){let n=t.timeoutMs??8e3;try{return dr(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 bt="codex";function xt(){let e=vt();return[process.env.CODEX_HOME?.trim()?W.join(W.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,W.join(e,".codex","auth.json"),W.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Et(e){return W.dirname(e)}function St(e){let r,t;for(let n of xt()){if(!_t(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Et(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function pr(e=new Date().toISOString()){let r=g(bt,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:P("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=St(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as Ot}from"node:fs";import{homedir as Ct}from"node:os";import fe from"node:path";function At(){let e=process.env.HERMES_HOME?.trim(),r=e?fe.resolve(e):fe.join(Ct(),".hermes");return fe.join(r,"auth.json")}function z(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=At(),o=Ot(n),s=q(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function K(e=new Date().toISOString()){let r=pr(e);if(r.ready)return{...r,path:"codex_cli"};let t=z(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 mr=["low","medium","high"],fr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function gr(e,r){let t=A(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Pt(e,r){let t=A(e.providerId),n=A(r.providerId),o=mr.indexOf(t.costTier)-mr.indexOf(n.costTier);if(o!==0)return o;let s=fr[e.binding.authSource]-fr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ge(e){let r=cr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&gr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Pt)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return gr(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as wt}from"node:fs";import{homedir as It}from"node:os";import Nt from"node:path";var Tt="claude";function Wt(){let e=It();return[Nt.join(e,".claude",".credentials.json")]}function hr(e=new Date().toISOString()){let r=g(Tt,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:P("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Wt().find(i=>wt(i)),o=q(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as Kt}from"node:fs";import{homedir as Mt}from"node:os";import he from"node:path";var Bt="agent";function Dt(){let e=Mt(),r=[he.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(he.join(t,"cursor-agent","auth.json")),n&&r.push(he.join(n,"cursor","auth.json"))}return r}function yr(e=new Date().toISOString()){let r=g(Bt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:P("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Dt().find(s=>Kt(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as Ut,readFileSync as Lt}from"node:fs";import{homedir as Ft}from"node:os";import ye from"node:path";var $t=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Ht(){let e=process.env.HERMES_HOME?.trim(),r=e?ye.resolve(e):ye.join(Ft(),".hermes");return ye.join(r,".env")}function jt(e){try{let r=Lt(e,"utf8"),t=[];for(let n of $t)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rr(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Ht(),o=Ut(n),s=o?jt(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function kr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=K(r),n={codex:t,cursor:yr(r),claude:hr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rr(r),hermesOpenAiCodex:z(r),codexAdapterPath:t.path,readyCount:o}}var Yt=[/\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],Vt=[/\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 Re(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Gt(e){let r=Re(e,"executorRef").toLowerCase(),t=Re(e,"title").toLowerCase(),n=Re(e,"description").toLowerCase(),o=`${r}
|
|
2
2
|
${t}
|
|
3
|
-
${n}`;return
|
|
3
|
+
${n}`;return Yt.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":Vt.some(s=>s.test(o))?"low":"elevated"}function qt(e){let r=A(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function zt(e){let r=e.inventory??kr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function b(e){let r=qt({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 _r(e){let r=e.task??{},t=Gt(r),n=zt({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:K())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=w;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let f=ge({inventory:n,riskClass:t});return b(f?{providerId:f.providerId,binding:f.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return b({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return b({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return b({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=ge({inventory:n,riskClass:t});if(l)return b({providerId:l.providerId,binding:l.binding,riskClass:t,routingRule:`orchestration:cost_aware_${l.providerId}`,model:s,escalatedFrom:l.escalatedFrom,escalatedReason:l.escalatedReason});let u=n.bindings.codex;return b({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:u.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...u.ready?{}:{escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"}})}te();d();var vr="kynver",br=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Jt=br.map(e=>`mcp__${vr}__${e}`);var M="claude-sonnet-4-6",B="claude-opus-4-8";d();d();var Gl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";function Qt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}var I=Qt();d();var ke="openai-compatible",kc=600*1e3;d();var x="gemini";function E(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var N="gemini-api";var Nc=600*1e3;var Sr="claude-sonnet-4-6",D="composer-2.5";function p(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function rn(e){if(!e)return;let r=p(e,"workerModelOverride")||p(e,"modelOverride");return r||`${p(e,"title")}
|
|
4
4
|
${p(e,"description")}
|
|
5
|
-
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
5
|
+
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function xr(e){return e.toLowerCase()}function Z(e=C()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Sr}function X(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?x:"cursor"}function tn(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:D,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:M,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:E(),provider:x,rule:n&&n!==x?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:E(),provider:N,rule:n&&n!==N?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Er(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 nn=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Or(e,r,t){return nn.has(e)?B:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?B:M}function Cr(e){let r=xr(p(e,"executorRef")),t=p(e,"title").toLowerCase(),n=p(e,"priority")||"normal",o=xr(p(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Or(o,r,t);return{provider:"claude",model:i,rule:i===B?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:I,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=m(p(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:I},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=m(p(e,"executorRef"));return{provider:ke,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=m(p(e,"executorRef"));return{provider:N,...i?.model?{model:i.model}:{model:E()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=m(p(e,"executorRef"));return{provider:x,...i?.model?{model:i.model}:{model:E()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:I,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Er(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Er(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Z();return{model:s,provider:X(s),rule:"default:global"}}function on(e){return e?m(p(e,"executorRef")):null}function sn(e){switch(v(e)){case x:case N:return E();case"claude":return M;case"codex":return I;case"cursor":return D;default:return}}var _e="explicit:cli_provider",Ar="config:worker_provider";function Pr(e,r,t){let n=v(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:sn(n)??e.model,rule:t}}function an(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==_e?e:Pr(e,t,_e)}function ln(e,r){if(r.explicitProvider?.trim()||ve(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=v(t);return n===w||n===e.provider?e:Pr(e,n,Ar)}function cn(e){let r,t=on(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 u=e.explicitModel.trim(),c=tn(u,e.explicitProvider);c?r=c:r={model:u,provider:e.explicitProvider?.trim()||X(u),rule:"explicit:cli",requestedModel:u}}else if(n)r={model:n,provider:o||X(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Q(e.task)){let u=rn(e.task),c,f;if(u)c=u,f="task:provider_override";else{let be=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Nr=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",Tr=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Or(be,Nr,Tr),f=c===B?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:f,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let u=Cr(e.task);r={...u,requestedModel:u.model}}else{let u=Z();r={model:u,provider:e.explicitProvider?.trim()||X(u),rule:"default:global",requestedModel:u}}r=an(r,e.explicitProvider),r=ln(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&v(e.configuredProvider)!==w&&r.rule==="config:worker_provider",i=wr({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===_e||i.rule===Ar||R(i.provider)&&(e.explicitProviderIsOperatorOverride||Q(e.task))||i.provider===ke||i.provider===x||i.provider===N||i.provider==="codex")return i;let l=_r({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:l.provider,model:l.provider==="codex"?l.model??i.model??I:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function un(e,r,t){return e||r||t||Z()||M}G();G();var w="cursor",dn=new Set(["claude","opus","anthropic"]),pn=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function U(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function R(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return dn.has(r)?!0:r.includes("claude")||r.includes("opus")}function Q(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&R(r))return!0;let t=U(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=m(U(e,"executorRef"));if(n?.provider&&R(n.provider)||n?.model&&R(mn(n.model)))return!0;let o=U(e,"description");if(pn.some(i=>i.test(o)))return!0;let s=U(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function mn(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function fn(e,r){return{provider:w,model:D,rule:`policy:cursor_default${r}`,requestedModel:e}}var gn=["explicit:","executor_ref:","factory:","task:"];function hn(e){return gn.some(r=>e.startsWith(r))}function ve(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||m(U(e,"executorRef"))?.provider?!0:Q(e)}function wr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&R(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||hn(r.rule)||ve(t)||!R(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return fn(r.model,o)}function yn(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Ir(e){return e?.trim()||void 0}function Rn(e){let r=yn(e.task),t=m(r),n=e.explicitProvider?.trim().toLowerCase(),o=Ir(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,l=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let u=e.routing.provider,c=Ir(e.routing.model),f={provider:u,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&re(r)||n&&n!=="cursor"?u==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${l}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:f}:i&&c&&i!==c&&!R(u)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${l}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:f}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:f}:{ok:!0,resolved:f}}export{D as CURSOR_DEFAULT_MODEL,Sr as GLOBAL_DEFAULT_MODEL,Rn as assessDispatchModelGuard,re as executorRefRequestsNonCursorWorker,Cr as inferModelRoutingFromTask,m as parseExecutorRefRoutingIntent,Z as resolveGlobalDefaultModel,un as resolveModelFallback,cn as resolveWorkerLaunch};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Se}from"node:os";import Oe from"node:path";function Dr(e){return e==="~"?Se():e.startsWith("~/")||e.startsWith("~\\")?Oe.join(Se(),e.slice(2)):e}function S(e){return Oe.resolve(Dr(e))}var O=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Ur,bn,Lr,xn,re=a(()=>{"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"],bn=new Set(Ur),Lr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],xn=new Set(Lr)});var L=a(()=>{"use strict";O();d();re()});var Ce=a(()=>{"use strict";L()});var te=a(()=>{"use strict";L();O();Ce()});var ne=a(()=>{"use strict";d()});var _=a(()=>{"use strict"});var F=a(()=>{"use strict"});var Ae=a(()=>{"use strict"});var Hn,jn,oe=a(()=>{"use strict";Hn=25*1024*1024*1024,jn=12*1024*1024*1024});var zn,Jn,Pe=a(()=>{"use strict";oe();zn=5*1024*1024*1024,Jn=10*1024*1024*1024});var to,no,ie=a(()=>{"use strict";Pe();oe();to=30*1024*1024*1024,no=15*1024*1024*1024});var Ie=a(()=>{"use strict";d()});import jr from"node:path";var mo,se=a(()=>{"use strict";O();Ie();mo=jr.join(".openclaw","harness")});var H=a(()=>{"use strict";k();_();F();j();se()});var Te=a(()=>{"use strict";k();se();H();d()});var le=a(()=>{"use strict";Te();d()});var Ke=a(()=>{"use strict";le();d()});var Me=a(()=>{"use strict"});var Be=a(()=>{"use strict";Me();d()});var De=a(()=>{"use strict"});var Ue=a(()=>{"use strict";De()});var Le=a(()=>{"use strict";Ue();d()});var Fe=a(()=>{"use strict"});var $e=a(()=>{"use strict"});var He=a(()=>{"use strict"});var ce=a(()=>{"use strict"});var je=a(()=>{"use strict"});var Ye=a(()=>{"use strict";ce();je()});var Ve=a(()=>{"use strict";Be();Le();Fe();$e();L();He();Ye();ce();d()});var Ge=a(()=>{"use strict";Ve()});var Qr,Zr,qe=a(()=>{"use strict";Ae();k();_();F();j();ie();le();Ke();Ge();d();Qr=500*1024*1024,Zr=4*1024*1024*1024});var j=a(()=>{"use strict";qe()});import{homedir as et}from"node:os";import rt from"node:path";var ze,ue=a(()=>{"use strict";ze=rt.join(et(),".kynver",".env")});var Je=a(()=>{"use strict"});var Xe=a(()=>{"use strict";Je()});var Qe=a(()=>{"use strict"});var de=a(()=>{"use strict";Xe();Qe()});var Ze=a(()=>{"use strict"});var er=a(()=>{"use strict";Ze()});var Y=a(()=>{"use strict";ue();O();k();de();er()});var rr=a(()=>{"use strict";_();_()});var tr=a(()=>{"use strict";ue();de();Y()});var nr=a(()=>{"use strict";te();_();rr();k();Y();tr();ne();H()});function v(e){let r=e.trim().toLowerCase();return ut[r]??r}var or,ct,ut,V=a(()=>{"use strict";or=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],ct=or.join("|"),ut={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{existsSync as pt,mkdirSync as ua,readFileSync as mt,writeFileSync as da}from"node:fs";import{homedir as ft,totalmem as ma}from"node:os";import pe from"node:path";function gt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:S(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:S(e.defaultRepo.trim())}:{}}}function C(){if(!pt(ir))return{};try{return gt(JSON.parse(mt(ir,"utf8")))}catch{return{}}}var sr,ir,Oa,Ca,Aa,k=a(()=>{"use strict";te();O();ne();_();F();j();ie();Y();nr();V();H();sr=pe.join(ft(),".kynver"),ir=pe.join(sr,"config.json"),Oa=pe.join(sr,"credentials");Ca=500*1024*1024,Aa=4*1024*1024*1024});var Wr=/^claude[-_]/i,Tr=/^(?:opus|sonnet|haiku)\b/i;function be(e){let r=e.trim();return Wr.test(r)||Tr.test(r)}function xe(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Z(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Ee(e){return e.trim().toLowerCase().startsWith("gemini-")}function Kr(e){return xe(e)?"codex":be(e)?"claude":Ee(e)?"gemini":(Z(e),"cursor")}function Mr(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Br(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?be(n)||xe(n)||Z(n)||Ee(n)?{lane:t,model:n,provider:Kr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Mr(r)??Br(r):null}function ee(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!Z(r.model)):!1}k();var ar={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function A(e){return ar[e]}function lr(){return Object.values(ar)}import{existsSync as Rt}from"node:fs";import{homedir as yt}from"node:os";import T from"node:path";import{createHash as cr}from"node:crypto";import{statSync as ht}from"node:fs";import{spawnSync as ur}from"node:child_process";function R(e){try{let r=ht(e),t=`${e}|${r.size}|${r.mtimeMs}`;return cr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function P(e){return cr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=ur(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function G(e,r,t={}){let n=t.timeoutMs??8e3;try{return ur(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 _t="codex";function kt(){let e=yt();return[process.env.CODEX_HOME?.trim()?T.join(T.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,T.join(e,".codex","auth.json"),T.join(e,".config","codex","auth.json")].filter(t=>!!t)}function vt(e){return T.dirname(e)}function bt(e){let r,t;for(let n of kt()){if(!Rt(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:vt(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function dr(e=new Date().toISOString()){let r=g(_t,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:P("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=bt(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?R(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as xt}from"node:fs";import{homedir as Et}from"node:os";import me from"node:path";function St(){let e=process.env.HERMES_HOME?.trim(),r=e?me.resolve(e):me.join(Et(),".hermes");return me.join(r,"auth.json")}function q(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=St(),o=xt(n),s=G(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?R(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function K(e=new Date().toISOString()){let r=dr(e);if(r.ready)return{...r,path:"codex_cli"};let t=q(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 pr=["low","medium","high"],mr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function fr(e,r){let t=A(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Ot(e,r){let t=A(e.providerId),n=A(r.providerId),o=pr.indexOf(t.costTier)-pr.indexOf(n.costTier);if(o!==0)return o;let s=mr[e.binding.authSource]-mr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function fe(e){let r=lr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&fr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Ot)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return fr(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as Ct}from"node:fs";import{homedir as At}from"node:os";import Pt from"node:path";var wt="claude";function It(){let e=At();return[Pt.join(e,".claude",".credentials.json")]}function gr(e=new Date().toISOString()){let r=g(wt,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:P("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=It().find(i=>Ct(i)),o=G(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?R(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as Nt}from"node:fs";import{homedir as Wt}from"node:os";import ge from"node:path";var Tt="agent";function Kt(){let e=Wt(),r=[ge.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(ge.join(t,"cursor-agent","auth.json")),n&&r.push(ge.join(n,"cursor","auth.json"))}return r}function hr(e=new Date().toISOString()){let r=g(Tt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:P("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Kt().find(s=>Nt(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?R(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as Mt,readFileSync as Bt}from"node:fs";import{homedir as Dt}from"node:os";import he from"node:path";var Ut=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Lt(){let e=process.env.HERMES_HOME?.trim(),r=e?he.resolve(e):he.join(Dt(),".hermes");return he.join(r,".env")}function Ft(e){try{let r=Bt(e,"utf8"),t=[];for(let n of Ut)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rr(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Lt(),o=Mt(n),s=o?Ft(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?R(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function yr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=K(r),n={codex:t,cursor:hr(r),claude:gr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rr(r),hermesOpenAiCodex:q(r),codexAdapterPath:t.path,readyCount:o}}var $t=[/\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],Ht=[/\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 Re(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function jt(e){let r=Re(e,"executorRef").toLowerCase(),t=Re(e,"title").toLowerCase(),n=Re(e,"description").toLowerCase(),o=`${r}
|
|
1
|
+
var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Oe}from"node:os";import Ce from"node:path";function Ur(e){return e==="~"?Oe():e.startsWith("~/")||e.startsWith("~\\")?Ce.join(Oe(),e.slice(2)):e}function S(e){return Ce.resolve(Ur(e))}var O=a(()=>{"use strict"});var d=a(()=>{"use strict"});var Lr,Sn,Fr,On,te=a(()=>{"use strict";Lr=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],Sn=new Set(Lr),Fr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],On=new Set(Fr)});var L=a(()=>{"use strict";O();d();te()});var Ae=a(()=>{"use strict";L()});var ne=a(()=>{"use strict";L();O();Ae()});var oe=a(()=>{"use strict";d()});var k=a(()=>{"use strict"});var F=a(()=>{"use strict"});var Pe=a(()=>{"use strict"});var Vn,Gn,ie=a(()=>{"use strict";Vn=25*1024*1024*1024,Gn=12*1024*1024*1024});var Qn,Zn,we=a(()=>{"use strict";ie();Qn=5*1024*1024*1024,Zn=10*1024*1024*1024});var io,so,se=a(()=>{"use strict";we();ie();io=30*1024*1024*1024,so=15*1024*1024*1024});var Ne=a(()=>{"use strict";d()});import Yr from"node:path";var ho,ae=a(()=>{"use strict";O();Ne();ho=Yr.join(".openclaw","harness")});var H=a(()=>{"use strict";_();k();F();j();ae()});var Ke=a(()=>{"use strict";_();ae();H();d()});var ce=a(()=>{"use strict";Ke();d()});var Me=a(()=>{"use strict";ce();d()});var Be=a(()=>{"use strict"});var De=a(()=>{"use strict";Be();d()});var Ue=a(()=>{"use strict"});var Le=a(()=>{"use strict";Ue()});var Y=a(()=>{"use strict"});var Fe=a(()=>{"use strict";Le();d();Y()});var $e=a(()=>{"use strict";Y()});var He=a(()=>{"use strict"});var je=a(()=>{"use strict"});var ue=a(()=>{"use strict"});var Ye=a(()=>{"use strict"});var Ve=a(()=>{"use strict";ue();Ye()});var Ge=a(()=>{"use strict";De();Fe();Y();$e();He();L();je();Ve();ue();d()});var qe=a(()=>{"use strict";Ge()});var rt,tt,ze=a(()=>{"use strict";Pe();_();k();F();j();se();ce();Me();qe();d();rt=500*1024*1024,tt=4*1024*1024*1024});var j=a(()=>{"use strict";ze()});import{homedir as nt}from"node:os";import ot from"node:path";var Je,de=a(()=>{"use strict";Je=ot.join(nt(),".kynver",".env")});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe()});var Ze=a(()=>{"use strict"});var pe=a(()=>{"use strict";Qe();Ze()});var er=a(()=>{"use strict"});var rr=a(()=>{"use strict";er()});var V=a(()=>{"use strict";de();O();_();pe();rr()});var tr=a(()=>{"use strict";k();k()});var nr=a(()=>{"use strict";de();pe();V()});var or=a(()=>{"use strict";ne();k();tr();_();V();nr();oe();H()});function v(e){let r=e.trim().toLowerCase();return mt[r]??r}var ir,pt,mt,G=a(()=>{"use strict";ir=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],pt=ir.join("|"),mt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{existsSync as gt,mkdirSync as ya,readFileSync as ht,writeFileSync as Ra}from"node:fs";import{homedir as yt,totalmem as _a}from"node:os";import me from"node:path";function Rt(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:S(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:S(e.defaultRepo.trim())}:{}}}function C(){if(!gt(sr))return{};try{return Rt(JSON.parse(ht(sr,"utf8")))}catch{return{}}}var ar,sr,Ta,Wa,Ka,_=a(()=>{"use strict";ne();O();oe();k();F();j();se();V();or();G();H();ar=me.join(yt(),".kynver"),sr=me.join(ar,"config.json"),Ta=me.join(ar,"credentials");Wa=500*1024*1024,Ka=4*1024*1024*1024});var Wr=/^claude[-_]/i,Kr=/^(?:opus|sonnet|haiku)\b/i;function xe(e){let r=e.trim();return Wr.test(r)||Kr.test(r)}function Ee(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ee(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Se(e){return e.trim().toLowerCase().startsWith("gemini-")}function Mr(e){return Ee(e)?"codex":xe(e)?"claude":Se(e)?"gemini":(ee(e),"cursor")}function Br(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Dr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?xe(n)||Ee(n)||ee(n)||Se(n)?{lane:t,model:n,provider:Mr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function m(e){let r=typeof e=="string"?e.trim():"";return r?Br(r)??Dr(r):null}function re(e){let r=m(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ee(r.model)):!1}_();var lr={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}};function A(e){return lr[e]}function cr(){return Object.values(lr)}import{existsSync as _t}from"node:fs";import{homedir as vt}from"node:os";import W from"node:path";import{createHash as ur}from"node:crypto";import{statSync as kt}from"node:fs";import{spawnSync as dr}from"node:child_process";function y(e){try{let r=kt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return ur("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function P(e){return ur("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=dr(e,r,{encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function q(e,r,t={}){let n=t.timeoutMs??8e3;try{return dr(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 bt="codex";function xt(){let e=vt();return[process.env.CODEX_HOME?.trim()?W.join(W.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,W.join(e,".codex","auth.json"),W.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Et(e){return W.dirname(e)}function St(e){let r,t;for(let n of xt()){if(!_t(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Et(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function pr(e=new Date().toISOString()){let r=g(bt,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:P("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=St(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as Ot}from"node:fs";import{homedir as Ct}from"node:os";import fe from"node:path";function At(){let e=process.env.HERMES_HOME?.trim(),r=e?fe.resolve(e):fe.join(Ct(),".hermes");return fe.join(r,"auth.json")}function z(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=At(),o=Ot(n),s=q(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function K(e=new Date().toISOString()){let r=pr(e);if(r.ready)return{...r,path:"codex_cli"};let t=z(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 mr=["low","medium","high"],fr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function gr(e,r){let t=A(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Pt(e,r){let t=A(e.providerId),n=A(r.providerId),o=mr.indexOf(t.costTier)-mr.indexOf(n.costTier);if(o!==0)return o;let s=fr[e.binding.authSource]-fr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ge(e){let r=cr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&gr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Pt)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return gr(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as wt}from"node:fs";import{homedir as It}from"node:os";import Nt from"node:path";var Tt="claude";function Wt(){let e=It();return[Nt.join(e,".claude",".credentials.json")]}function hr(e=new Date().toISOString()){let r=g(Tt,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:P("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Wt().find(i=>wt(i)),o=q(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as Kt}from"node:fs";import{homedir as Mt}from"node:os";import he from"node:path";var Bt="agent";function Dt(){let e=Mt(),r=[he.join(e,".config","cursor","auth.json")];if(process.platform==="win32"){let t=process.env.LOCALAPPDATA?.trim(),n=process.env.APPDATA?.trim();t&&r.push(he.join(t,"cursor-agent","auth.json")),n&&r.push(he.join(n,"cursor","auth.json"))}return r}function yr(e=new Date().toISOString()){let r=g(Bt,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:P("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Dt().find(s=>Kt(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as Ut,readFileSync as Lt}from"node:fs";import{homedir as Ft}from"node:os";import ye from"node:path";var $t=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Ht(){let e=process.env.HERMES_HOME?.trim(),r=e?ye.resolve(e):ye.join(Ft(),".hermes");return ye.join(r,".env")}function jt(e){try{let r=Lt(e,"utf8"),t=[];for(let n of $t)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Rr(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Ht(),o=Ut(n),s=o?jt(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function kr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=K(r),n={codex:t,cursor:yr(r),claude:hr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:Rr(r),hermesOpenAiCodex:z(r),codexAdapterPath:t.path,readyCount:o}}var Yt=[/\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],Vt=[/\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 Re(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Gt(e){let r=Re(e,"executorRef").toLowerCase(),t=Re(e,"title").toLowerCase(),n=Re(e,"description").toLowerCase(),o=`${r}
|
|
2
2
|
${t}
|
|
3
|
-
${n}`;return
|
|
3
|
+
${n}`;return Yt.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":Vt.some(s=>s.test(o))?"low":"elevated"}function qt(e){let r=A(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function zt(e){let r=e.inventory??kr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function b(e){let r=qt({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 _r(e){let r=e.task??{},t=Gt(r),n=zt({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:K())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=w;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let f=ge({inventory:n,riskClass:t});return b(f?{providerId:f.providerId,binding:f.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return b({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return b({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return b({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=ge({inventory:n,riskClass:t});if(l)return b({providerId:l.providerId,binding:l.binding,riskClass:t,routingRule:`orchestration:cost_aware_${l.providerId}`,model:s,escalatedFrom:l.escalatedFrom,escalatedReason:l.escalatedReason});let u=n.bindings.codex;return b({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:u.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...u.ready?{}:{escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"}})}te();d();var vr="kynver",br=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Jt=br.map(e=>`mcp__${vr}__${e}`);var M="claude-sonnet-4-6",B="claude-opus-4-8";d();d();var Gl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";function Qt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}var I=Qt();d();var ke="openai-compatible",kc=600*1e3;d();var x="gemini";function E(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var N="gemini-api";var Nc=600*1e3;var Sr="claude-sonnet-4-6",D="composer-2.5";function p(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function rn(e){if(!e)return;let r=p(e,"workerModelOverride")||p(e,"modelOverride");return r||`${p(e,"title")}
|
|
4
4
|
${p(e,"description")}
|
|
5
|
-
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function
|
|
5
|
+
${p(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function xr(e){return e.toLowerCase()}function Z(e=C()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Sr}function X(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?x:"cursor"}function tn(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:D,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:M,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:E(),provider:x,rule:n&&n!==x?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:E(),provider:N,rule:n&&n!==N?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Er(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 nn=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Or(e,r,t){return nn.has(e)?B:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?B:M}function Cr(e){let r=xr(p(e,"executorRef")),t=p(e,"title").toLowerCase(),n=p(e,"priority")||"normal",o=xr(p(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Or(o,r,t);return{provider:"claude",model:i,rule:i===B?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:I,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=m(p(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:I},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=m(p(e,"executorRef"));return{provider:ke,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=m(p(e,"executorRef"));return{provider:N,...i?.model?{model:i.model}:{model:E()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=m(p(e,"executorRef"));return{provider:x,...i?.model?{model:i.model}:{model:E()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:I,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Er(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Er(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Z();return{model:s,provider:X(s),rule:"default:global"}}function on(e){return e?m(p(e,"executorRef")):null}function sn(e){switch(v(e)){case x:case N:return E();case"claude":return M;case"codex":return I;case"cursor":return D;default:return}}var _e="explicit:cli_provider",Ar="config:worker_provider";function Pr(e,r,t){let n=v(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:sn(n)??e.model,rule:t}}function an(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==_e?e:Pr(e,t,_e)}function ln(e,r){if(r.explicitProvider?.trim()||ve(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=v(t);return n===w||n===e.provider?e:Pr(e,n,Ar)}function cn(e){let r,t=on(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 u=e.explicitModel.trim(),c=tn(u,e.explicitProvider);c?r=c:r={model:u,provider:e.explicitProvider?.trim()||X(u),rule:"explicit:cli",requestedModel:u}}else if(n)r={model:n,provider:o||X(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Q(e.task)){let u=rn(e.task),c,f;if(u)c=u,f="task:provider_override";else{let be=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",Nr=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",Tr=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Or(be,Nr,Tr),f=c===B?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:f,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let u=Cr(e.task);r={...u,requestedModel:u.model}}else{let u=Z();r={model:u,provider:e.explicitProvider?.trim()||X(u),rule:"default:global",requestedModel:u}}r=an(r,e.explicitProvider),r=ln(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&v(e.configuredProvider)!==w&&r.rule==="config:worker_provider",i=wr({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===_e||i.rule===Ar||R(i.provider)&&(e.explicitProviderIsOperatorOverride||Q(e.task))||i.provider===ke||i.provider===x||i.provider===N||i.provider==="codex")return i;let l=_r({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:l.provider,model:l.provider==="codex"?l.model??i.model??I:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function un(e,r,t){return e||r||t||Z()||M}G();G();var w="cursor",dn=new Set(["claude","opus","anthropic"]),pn=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function U(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function R(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return dn.has(r)?!0:r.includes("claude")||r.includes("opus")}function Q(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&R(r))return!0;let t=U(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=m(U(e,"executorRef"));if(n?.provider&&R(n.provider)||n?.model&&R(mn(n.model)))return!0;let o=U(e,"description");if(pn.some(i=>i.test(o)))return!0;let s=U(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function mn(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function fn(e,r){return{provider:w,model:D,rule:`policy:cursor_default${r}`,requestedModel:e}}var gn=["explicit:","executor_ref:","factory:","task:"];function hn(e){return gn.some(r=>e.startsWith(r))}function ve(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||m(U(e,"executorRef"))?.provider?!0:Q(e)}function wr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&R(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||hn(r.rule)||ve(t)||!R(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return fn(r.model,o)}function yn(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Ir(e){return e?.trim()||void 0}function Rn(e){let r=yn(e.task),t=m(r),n=e.explicitProvider?.trim().toLowerCase(),o=Ir(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,l=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let u=e.routing.provider,c=Ir(e.routing.model),f={provider:u,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&re(r)||n&&n!=="cursor"?u==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${l}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:f}:i&&c&&i!==c&&!R(u)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${l}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:f}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:f}:{ok:!0,resolved:f}}export{D as CURSOR_DEFAULT_MODEL,Sr as GLOBAL_DEFAULT_MODEL,Rn as assessDispatchModelGuard,re as executorRefRequestsNonCursorWorker,Cr as inferModelRoutingFromTask,m as parseExecutorRefRoutingIntent,Z as resolveGlobalDefaultModel,un as resolveModelFallback,cn as resolveWorkerLaunch};
|