@nexus-cortex/core 4.102.0 → 4.104.0

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.
Files changed (37) hide show
  1. package/.env.defaults +24 -1
  2. package/dist/config/RuntimeConfigRegistry.d.ts.map +1 -1
  3. package/dist/config/RuntimeConfigRegistry.js +3 -0
  4. package/dist/config/RuntimeConfigRegistry.js.map +1 -1
  5. package/dist/config/SettingsLoader.d.ts.map +1 -1
  6. package/dist/config/SettingsLoader.js +3 -0
  7. package/dist/config/SettingsLoader.js.map +1 -1
  8. package/dist/config/SettingsSchema.d.ts +3 -0
  9. package/dist/config/SettingsSchema.d.ts.map +1 -1
  10. package/dist/config/SettingsSchema.js +30 -3
  11. package/dist/config/SettingsSchema.js.map +1 -1
  12. package/dist/config/effectiveConfig.d.ts.map +1 -1
  13. package/dist/config/effectiveConfig.js +14 -0
  14. package/dist/config/effectiveConfig.js.map +1 -1
  15. package/dist/middleware/HelperModelMiddleware.d.ts.map +1 -1
  16. package/dist/middleware/HelperModelMiddleware.js +19 -13
  17. package/dist/middleware/HelperModelMiddleware.js.map +1 -1
  18. package/dist/middleware/helpers/adapters/ChatCompletionsAPIHelperAdapter.d.ts.map +1 -1
  19. package/dist/middleware/helpers/adapters/ChatCompletionsAPIHelperAdapter.js +24 -12
  20. package/dist/middleware/helpers/adapters/ChatCompletionsAPIHelperAdapter.js.map +1 -1
  21. package/dist/middleware/helpers/helperFrame.d.ts +3 -0
  22. package/dist/middleware/helpers/helperFrame.d.ts.map +1 -1
  23. package/dist/middleware/helpers/helperFrame.js.map +1 -1
  24. package/dist/models/registry/ModelAliasResolver.d.ts.map +1 -1
  25. package/dist/models/registry/ModelAliasResolver.js +6 -4
  26. package/dist/models/registry/ModelAliasResolver.js.map +1 -1
  27. package/dist/orchestrator/CortexOrchestrator.d.ts +2 -0
  28. package/dist/orchestrator/CortexOrchestrator.d.ts.map +1 -1
  29. package/dist/orchestrator/CortexOrchestrator.js +11 -5
  30. package/dist/orchestrator/CortexOrchestrator.js.map +1 -1
  31. package/dist/orchestrator/SubAgentManager.js +1 -1
  32. package/dist/orchestrator/SubAgentManager.js.map +1 -1
  33. package/dist/training/mentorRole.d.ts +63 -0
  34. package/dist/training/mentorRole.d.ts.map +1 -0
  35. package/dist/training/mentorRole.js +70 -0
  36. package/dist/training/mentorRole.js.map +1 -0
  37. package/package.json +3 -3
@@ -39,6 +39,7 @@ import { resolveToolProfile, resolveToolAnchor, resolveFrameProfile, resolveLift
39
39
  import { sliceReadFile, decideSliceBlock } from './sliceBlock.js';
40
40
  import { TurnEvidence, evaluateEndTurnGates, buildMissingEndTurnReminder } from './endTurnGates.js';
41
41
  import { collectWorkspaceDelta, detectCheckCommand, runCheck, resolveJudgeGroundingConfig } from '../training/judgeEvidence.js';
42
+ import { resolveMentorRoleConfig, describeMentorWire } from '../training/mentorRole.js';
42
43
  import { resolveOuterToolDeadlineMs } from './outerToolTimeout.js';
43
44
  import { resolveTurnDeadlineMs, timeBudgetState, timeBudgetWarnNudge } from './timeBudget.js';
44
45
  import { readStagedDoctrine, applyCuratedDoctrine, runOrientForStaging, withTimeout } from './doctrineCuration.js';
@@ -185,6 +186,10 @@ export class CortexOrchestrator {
185
186
  loopBlockCounts = new Map();
186
187
  loopBlockEscalate = false;
187
188
  liftPlanDelivered = false; // LIFT_MENTOR_PLANNER: bounded mentor-planner at the lift, one-shot
189
+ /** MENTOR ROLE: what the wire carried for a mentor surface (banked on every mentor event; see mentorRole.ts). */
190
+ mentorWire(surface, effort, budget) {
191
+ return describeMentorWire(resolveMentorRoleConfig(surface, process.env, { modelId: this.config.reactiveMentorship?.helperModelId, effort, outputBudgetTokens: budget }));
192
+ }
188
193
  cachedEnvReport; // ENV_RECON_COMMAND output; cached for the lift planner, REFRESHED for the judges (HB-JUDGE-GROUNDING)
189
194
  taskStartMs = 0; // HB-JUDGE-GROUNDING: the user-turn start — the workspace delta is 'files changed since here'
190
195
  endTurnResolverRejects = 0; // endTurnResolver: GAP vetoes so far this task (bounded by maxRejects → fallback-accept)
@@ -439,7 +444,7 @@ export class CortexOrchestrator {
439
444
  kind: 'lift_plan',
440
445
  // OBSERVABILITY (resolver-AB follow-up): bank the plan TEXT + latency, not just counts —
441
446
  // so a k=5 run can score plan QUALITY (and read the reasoning behind a RETIRE).
442
- detail: { fired: true, planChars: plan.length, retire, criteriaStated, latencyMs, planText: plan.slice(0, 4000) },
447
+ detail: { fired: true, planChars: plan.length, retire, criteriaStated, latencyMs, mentor: this.mentorWire('lift-plan', resolveLiftPlanConfig().effort, resolveLiftPlanConfig().outputBudgetTokens), planText: plan.slice(0, 4000) },
443
448
  }).catch(() => { });
444
449
  if (this.config.debug) {
445
450
  console.log(`[LiftPlan] plan delivered at lift (${plan.length} chars, retire=${retire}, criteria=${criteriaStated})`);
@@ -608,6 +613,7 @@ export class CortexOrchestrator {
608
613
  planChars: verdict.plan.length, rejects: this.endTurnResolverRejects, parsed: verdict.parsed,
609
614
  latencyMs, rawLen: (text ?? '').length,
610
615
  deltaChars: workspaceDelta.length, checkRan: !!checkResult, checkPassed: checkResult ? /→ PASSED/.test(checkResult) : null,
616
+ mentor: this.mentorWire('endturn-resolver', cfg.effort, cfg.outputBudgetTokens),
611
617
  planText: verdict.plan.slice(0, 4000),
612
618
  workProductSample: workProduct.slice(0, 1500),
613
619
  attestation: attestation.slice(0, 800),
@@ -681,7 +687,7 @@ export class CortexOrchestrator {
681
687
  kind: 'deadline_exit_mentor',
682
688
  detail: {
683
689
  decision: v.decision, parsed: v.parsed, remainingMs, latencyMs: Date.now() - t0,
684
- detailText: v.detail.slice(0, 2000), workProductSample: workProduct.slice(0, 1200),
690
+ detailText: v.detail.slice(0, 2000), workProductSample: workProduct.slice(0, 1200), mentor: this.mentorWire('deadline-exit-mentor', cfg.effort, outputBudgetTokens),
685
691
  },
686
692
  }).catch(() => { });
687
693
  switch (v.decision) {
@@ -3137,7 +3143,7 @@ export class CortexOrchestrator {
3137
3143
  this.pendingTurnPrediction = {
3138
3144
  sessionId: this.currentSessionId,
3139
3145
  turnNumber: this.turnNumber,
3140
- predictorModel: process.env.HELPER_MODEL_ID || 'deepseek-v4-flash',
3146
+ predictorModel: process.env.HELPER_MODEL_ID || 'deepseek-flash',
3141
3147
  summary: turnSummaryData.summary || null,
3142
3148
  prediction: turnSummaryData.prediction,
3143
3149
  predictedAtMs: Date.now(),
@@ -4882,7 +4888,7 @@ export class CortexOrchestrator {
4882
4888
  this.pendingTurnPrediction = {
4883
4889
  sessionId: this.currentSessionId,
4884
4890
  turnNumber: this.turnNumber,
4885
- predictorModel: process.env.HELPER_MODEL_ID || 'deepseek-v4-flash',
4891
+ predictorModel: process.env.HELPER_MODEL_ID || 'deepseek-flash',
4886
4892
  summary: turnSummaryData.summary || null,
4887
4893
  prediction: turnSummaryData.prediction,
4888
4894
  predictedAtMs: Date.now(),
@@ -7760,7 +7766,7 @@ export class CortexOrchestrator {
7760
7766
  ? `Tool "${toolUse.name}" is DISABLED: repeated loop interventions have not broken the pattern. A senior engineer reviewed your situation and gave this exit plan:\n\n${plan}\n\nFollow this instead of retrying "${toolUse.name}".`
7761
7767
  : `Tool "${toolUse.name}" is DISABLED: repeated loop interventions have not broken this pattern. Stop retrying "${toolUse.name}", re-read the task requirements, and take a fundamentally different approach.`;
7762
7768
  if (store)
7763
- void store.recordEvent({ sessionId: this.currentSessionId ?? 'unknown', kind: 'loop_tool_block', toolName: toolUse.name, detail: { trigger: this.loopBlockTrigger, escalated: true, consulted: !!plan, verdict } }).catch(() => { });
7769
+ void store.recordEvent({ sessionId: this.currentSessionId ?? 'unknown', kind: 'loop_tool_block', toolName: toolUse.name, detail: { trigger: this.loopBlockTrigger, escalated: true, consulted: !!plan, verdict, mentor: this.mentorWire('loop-exit-planner', resolveLoopExitConfig().effort, resolveLoopExitConfig().outputBudgetTokens) } }).catch(() => { });
7764
7770
  if (this.config.debug)
7765
7771
  console.log(`[LoopBlock] ESCALATED ${toolUse.name} → exit-planner (${plan ? verdict + ' plan delivered' : 'fail-open'})`);
7766
7772
  return { tool_use_id: toolUse.id, tool_name: toolUse.name, content, is_error: true, metadata: { loopToolBlock: true, escalated: true, verdict } };