learning
Classes
AbTestTracker
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:34
A/B Test Tracker implementation. Provides experiment management with deterministic variant assignment.
Implements
Constructors
Constructor
new AbTestTracker(): AbTestTracker;
Returns
Methods
assignVariant()
assignVariant(experimentId, traceId): ExperimentVariant | null;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:123
Assign a variant for a given trace ID (deterministic assignment). Uses consistent hashing to ensure same trace ID always gets same variant.
Parameters
experimentId
string
traceId
string
Returns
ExperimentVariant | null
Implementation of
completeExperiment()
completeExperiment(experimentId): void;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:103
Complete an experiment.
Parameters
experimentId
string
Returns
void
Implementation of
IAbTestTracker.completeExperiment
createExperiment()
createExperiment(definition): ExperimentDefinition;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:41
Create a new experiment.
Parameters
definition
Omit<ExperimentDefinition, "status" | "startedAt" | "endedAt">
Returns
Implementation of
IAbTestTracker.createExperiment
exportData()
exportData(): ExperimentExport;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:228
Export all experiment data.
Returns
Implementation of
getExperiment()
getExperiment(experimentId): ExperimentDefinition | null;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:221
Get experiment by ID.
Parameters
experimentId
string
Returns
ExperimentDefinition | null
Implementation of
getSummary()
getSummary(experimentId): ExperimentSummary | null;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:168
Get experiment summary with statistics.
Parameters
experimentId
string
Returns
ExperimentSummary | null
Implementation of
listExperiments()
listExperiments(filter?): readonly ExperimentDefinition[];
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:200
List all experiments.
Parameters
filter?
status?
tags?
readonly string[]
Returns
readonly ExperimentDefinition[]
Implementation of
IAbTestTracker.listExperiments
pauseExperiment()
pauseExperiment(experimentId): void;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:85
Pause a running experiment.
Parameters
experimentId
string
Returns
void
Implementation of
IAbTestTracker.pauseExperiment
recordOutcome()
recordOutcome(outcome): void;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:148
Record an outcome for an experiment.
Parameters
outcome
Returns
void
Implementation of
startExperiment()
startExperiment(experimentId): void;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:66
Start an experiment (sets status to running).
Parameters
experimentId
string
Returns
void
Implementation of
IAbTestTracker.startExperiment
FeedbackIntegration
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:208
Learning exports - Closed-loop feedback and routing improvement Split from index.ts for file size compliance (Issue #285)
Implements
Constructors
Constructor
new FeedbackIntegration(config?, collector?): FeedbackIntegration;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:225
Parameters
config?
Partial<FeedbackIntegrationConfig>
collector?
Returns
Methods
evictStaleEntries()
evictStaleEntries(): number;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:440
Evicts stale entries from decisionMap that exceed the configured TTL. Called on every recordRoutingDecision (throttled) and on reset.
Returns
number
Implementation of
IFeedbackIntegration.evictStaleEntries
getDecisionMapSize()
getDecisionMapSize(): number;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:475
Gets the current size of the decision map (for testing/monitoring).
Returns
number
Implementation of
IFeedbackIntegration.getDecisionMapSize
getEvictedEntryCount()
getEvictedEntryCount(): number;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:468
Gets the total number of evicted entries since creation or last reset.
Returns
number
Implementation of
IFeedbackIntegration.getEvictedEntryCount
getStats()
getStats(): FeedbackLoopStats;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:415
Get feedback statistics
Returns
Implementation of
onOutcomeProcessed()
onOutcomeProcessed(callback): () => void;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:419
Subscribe to outcome processed events
Parameters
callback
Returns
() => void
Implementation of
IFeedbackIntegration.onOutcomeProcessed
recordOutcome()
recordOutcome(params): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:329
Record a generic task outcome
Parameters
params
Returns
void
Implementation of
IFeedbackIntegration.recordOutcome
recordRoutingDecision()
recordRoutingDecision(decision, traceId?): string;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:244
Record a routing decision from CompositeRouter
Parameters
decision
traceId?
string
Returns
string
Implementation of
IFeedbackIntegration.recordRoutingDecision
recordStepOutcome()
recordStepOutcome(
routingDecisionId,
stepResult,
durationMs,
tokenUsage
): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:311
Record a step outcome from workflow execution
Parameters
routingDecisionId
string
stepResult
durationMs
number
tokenUsage
number
Returns
void
Implementation of
IFeedbackIntegration.recordStepOutcome
registerCompositeRouter()
registerCompositeRouter(router): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:423
Register CompositeRouter for bi-directional feedback
Parameters
router
Returns
void
Implementation of
IFeedbackIntegration.registerCompositeRouter
reset()
reset(): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:428
Reset all collected data
Returns
void
Implementation of
OutcomeFeedbackCollector
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:58
Learning exports - Closed-loop feedback and routing improvement Split from index.ts for file size compliance (Issue #285)
Implements
Constructors
Constructor
new OutcomeFeedbackCollector(config?): OutcomeFeedbackCollector;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:69
Parameters
config?
Partial<FeedbackCollectorConfig>
Returns
Methods
clearExpiredDecisions()
clearExpiredDecisions(): number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:250
Clear expired pending decisions.
Returns
number
Implementation of
IOutcomeFeedback.clearExpiredDecisions
computeReward()
computeReward(outcome): ComputedReward;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:170
Compute reward from an outcome.
Parameters
outcome
Returns
Implementation of
IOutcomeFeedback.computeReward
getPendingDecisions()
getPendingDecisions(): readonly FeedbackRoutingDecision[];
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:246
Get pending decisions (waiting for outcomes).
Returns
readonly FeedbackRoutingDecision[]
Implementation of
IOutcomeFeedback.getPendingDecisions
getStats()
getStats(): FeedbackLoopStats;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:227
Get feedback loop statistics.
Returns
Implementation of
onOutcomeProcessed()
onOutcomeProcessed(callback): () => void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:100
Subscribe to outcome processed events.
Parameters
callback
Returns
() => void
processOutcome()
processOutcome(traceId, partialOutcome): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:154
Process outcome for a trace ID (finds matching decision and computes reward).
Parameters
traceId
string
partialOutcome
Omit<TaskOutcome, "routingDecisionId">
Returns
void
Implementation of
IOutcomeFeedback.processOutcome
recordOutcome()
recordOutcome(outcome): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:133
Record an outcome for a routing decision.
Parameters
outcome
Returns
void
Implementation of
IOutcomeFeedback.recordOutcome
recordRoutingDecision()
recordRoutingDecision(decision): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:107
Record a routing decision for tracking.
Parameters
decision
Returns
void
Implementation of
IOutcomeFeedback.recordRoutingDecision
registerLinUCBBandit()
registerLinUCBBandit(bandit): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:84
Register LinUCB bandit for direct feedback.
Parameters
bandit
LinUCBBandit
Returns
void
registerPreferenceRouter()
registerPreferenceRouter(router): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:92
Register PreferenceRouter for direct feedback.
Parameters
router
Returns
void
reset()
reset(): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:282
Reset all state.
Returns
void
Implementation of
OutcomeStorageError
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:29
Error class for outcome storage operations.
Extends
Constructors
Constructor
new OutcomeStorageError(message, options?): OutcomeStorageError;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:30
Parameters
message
string
options?
Partial<Omit<{
cause?: Error;
code: ErrorCode;
context?: Record<string, unknown>;
}, "code">>
Returns
Overrides
Properties
cause
readonly cause: Error | undefined;
Defined in: packages/nexus-agents/src/core/errors.ts:105
Inherited from
code
readonly code: ErrorCode;
Defined in: packages/nexus-agents/src/core/errors.ts:103
Inherited from
context
readonly context: Record<string, unknown> | undefined;
Defined in: packages/nexus-agents/src/core/errors.ts:104
Inherited from
message
message: string;
Defined in: node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1075
Inherited from
name
name: string;
Defined in: node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1074
Inherited from
stack?
optional stack?: string;
Defined in: node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1076
Inherited from
stackTraceLimit
static stackTraceLimit: number;
Defined in: node_modules/.pnpm/@types+node@25.9.8/node_modules/@types/node/globals.d.ts:67
The Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
will affect any stack trace captured after the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
Inherited from
Methods
toJSON()
toJSON(): SerializedError;
Defined in: packages/nexus-agents/src/core/errors.ts:121
Serializes the error to a JSON-safe object.
Returns
Inherited from
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void;
Defined in: node_modules/.pnpm/@types+node@25.9.8/node_modules/@types/node/globals.d.ts:51
Creates a .stack property on targetObject, which when accessed returns
a string representing the location in the code at which
Error.captureStackTrace() was called.
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
The first line of the trace will be prefixed with
${myObject.name}: ${myObject.message}.
The optional constructorOpt argument accepts a function. If given, all frames
above constructorOpt, including constructorOpt, will be omitted from the
generated stack trace.
The constructorOpt argument is useful for hiding implementation
details of error generation from the user. For instance:
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
Parameters
targetObject
object
constructorOpt?
Function
Returns
void
Inherited from
prepareStackTrace()
static prepareStackTrace(err, stackTraces): any;
Defined in: node_modules/.pnpm/@types+node@25.9.8/node_modules/@types/node/globals.d.ts:55
Parameters
err
Error
stackTraces
CallSite[]
Returns
any
See
https://v8.dev/docs/stack-trace-api#customizing-stack-traces
Inherited from
PersistentStrategyDistiller
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:129
StrategyDistiller that persists distilled rules to a JSON file.
- Construction: hydrates from rules.json via Zod validation
- distill(): calls super.distill() then atomically saves snapshot
- Corruption: warn + start fresh (no partial loads)
Extends
Constructors
Constructor
new PersistentStrategyDistiller(
outcomeStore,
persistConfig?,
logger?,
distillerConfig?
): PersistentStrategyDistiller;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:135
Parameters
outcomeStore
persistConfig?
logger?
distillerConfig?
Partial<DistillerConfig>
Returns
Overrides
Properties
config
protected readonly config: DistillerConfig;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:228
Protected so PersistentStrategyDistiller hydrates legacy rules under the live thresholds.
Inherited from
Methods
checkPersistedTrigger()
checkPersistedTrigger(): boolean;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:155
An existing but unreadable rules.json is not overwritten by the first-route trigger: it may hold rules written by a newer build, or be recoverable by hand. It is logged and skipped; the in-process counter still distills.
Returns
boolean
Overrides
StrategyDistiller.checkPersistedTrigger
distill()
distill(): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:164
Override distill to persist rules after each run.
Returns
void
Overrides
getRules()
getRules(status?): readonly DistilledRule[];
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:323
Get rules filtered by status.
Parameters
status?
Returns
readonly DistilledRule[]
Inherited from
getStats()
getStats(): DistillerStats;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:330
Get distiller statistics.
Returns
Inherited from
loadRules()
protected loadRules(rules): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:389
Load pre-existing rules (e.g., from disk). Used by PersistentStrategyDistiller.
Parameters
rules
readonly DistilledRule[]
Returns
void
Inherited from
onOutcome()
onOutcome(): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:248
Called for each processed outcome. Triggers distillation at threshold.
This counter is per-process; checkPersistedTrigger covers the
cross-process case (#6512).
Returns
void
Inherited from
promote()
promote(routingMemory): number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:360
Promote high-confidence rules to RoutingMemory. Rules must be active, with sufficient observations and confidence.
Parameters
routingMemory
IRoutingMemory
Returns
number
Deprecated
No production caller (#5004 finding 4). DistilledRuleStage
is the single channel by which distilled rules reach routing; this
second channel into RoutingMemory is kept only so the deprecation is
non-breaking. Removal is tracked in #5467. Note the gate now compares
confidence = support × effect against promotionConfidence, so a rule
that would have promoted on sample size alone may no longer clear it.
Inherited from
restoreDistillState()
protected restoreDistillState(lastDistillAt, eligibleOutcomes): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:399
Restore last-distill state from a persisted snapshot (#6512), so the first-route trigger counts only outcomes newer than that snapshot.
Parameters
lastDistillAt
number
eligibleOutcomes
number | undefined
Returns
void
Inherited from
StrategyDistiller.restoreDistillState
SQLiteOutcomeStorage
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:84
SQLite-based outcome storage implementation.
Implements
Constructors
Constructor
new SQLiteOutcomeStorage(config): SQLiteOutcomeStorage;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:91
Parameters
config
Returns
Methods
close()
close(): void;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:363
Close the database connection.
Returns
void
getCounts()
getCounts(): Promise<Result<{
decisions: number;
outcomes: number;
rewards: number;
}, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:341
Get total record counts.
Returns
Promise<Result<{
decisions: number;
outcomes: number;
rewards: number;
}, OutcomeStorageError>>
Implementation of
getDecision()
getDecision(id): Promise<Result<StoredRoutingDecision | null, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:252
Get routing decision by ID.
Parameters
id
string
Returns
Promise<Result<StoredRoutingDecision | null, OutcomeStorageError>>
Implementation of
getDecisionsByRequestId()
getDecisionsByRequestId(requestId): Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:304
Get decisions by request ID (for audit trail integration).
Parameters
requestId
string
Returns
Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>
Implementation of
IOutcomeStorage.getDecisionsByRequestId
getModelStats()
getModelStats(): Promise<Result<StoredModelStats[], OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:278
Get aggregated statistics per model.
Returns
Promise<Result<StoredModelStats[], OutcomeStorageError>>
Implementation of
getOutcome()
getOutcome(decisionId): Promise<Result<StoredTaskOutcome | null, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:265
Get outcome for a routing decision.
Parameters
decisionId
string
Returns
Promise<Result<StoredTaskOutcome | null, OutcomeStorageError>>
Implementation of
getRecentDecisions()
getRecentDecisions(model, limit): Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:289
Get recent decisions for a model.
Parameters
model
"claude" | "gemini" | "codex" | "opencode"
limit
number
Returns
Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>
Implementation of
IOutcomeStorage.getRecentDecisions
initialize()
initialize(): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:115
Initialize the storage backend.
Returns
Promise<Result<void, OutcomeStorageError>>
initializeWithDatabase()
initializeWithDatabase(database): void;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:107
Initialize with an existing database instance (for testing).
Parameters
database
Returns
void
prune()
prune(olderThan): Promise<Result<number, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:318
Prune old records.
Parameters
olderThan
Date
Returns
Promise<Result<number, OutcomeStorageError>>
Implementation of
storeDecision()
storeDecision(decision): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:160
Store a routing decision.
Parameters
decision
Returns
Promise<Result<void, OutcomeStorageError>>
Implementation of
storeOutcome()
storeOutcome(outcome): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:194
Store a task outcome.
Parameters
outcome
Returns
Promise<Result<void, OutcomeStorageError>>
Implementation of
storeReward()
storeReward(reward): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:223
Store a computed reward.
Parameters
reward
Returns
Promise<Result<void, OutcomeStorageError>>
Implementation of
StrategyDistiller
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:226
Distills outcome patterns into routing rules.
Subscribe to OutcomeFeedbackCollector.onOutcomeProcessed() and call
onOutcome() for each processed outcome. Distillation triggers
automatically every triggerThreshold outcomes.
Extended by
Constructors
Constructor
new StrategyDistiller(
outcomeStore,
logger?,
config?
): StrategyDistiller;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:237
Parameters
outcomeStore
logger?
config?
Partial<DistillerConfig>
Returns
Properties
config
protected readonly config: DistillerConfig;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:228
Protected so PersistentStrategyDistiller hydrates legacy rules under the live thresholds.
Methods
checkPersistedTrigger()
checkPersistedTrigger(): boolean;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:273
First-route trigger against the persisted store (#6512).
The in-process counter above only fires after triggerThreshold outcomes
in ONE process, which short-lived CLI processes never reach. This checks
the store instead: distill when it holds at least triggerThreshold
eligible outcomes newer than the last distill (a hydrated snapshot’s
savedAt; no snapshot means all of them count). With no snapshot and zero
eligible outcomes it distills anyway, so the empty state is recorded as
“0 eligible, 0 rules, at
Before deciding, rules past ruleExpiryMs are expired, so a hydrated rule
that is out of date is never applied.
Runs at most once per instance; DistilledRuleStage calls it when it first
runs, so constructing a distiller stays cheap. Returns whether it distilled.
Returns
boolean
distill()
distill(): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:291
Run distillation on the eligible outcomes in the OutcomeStore (#6512).
Returns
void
getRules()
getRules(status?): readonly DistilledRule[];
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:323
Get rules filtered by status.
Parameters
status?
Returns
readonly DistilledRule[]
getStats()
getStats(): DistillerStats;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:330
Get distiller statistics.
Returns
loadRules()
protected loadRules(rules): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:389
Load pre-existing rules (e.g., from disk). Used by PersistentStrategyDistiller.
Parameters
rules
readonly DistilledRule[]
Returns
void
onOutcome()
onOutcome(): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:248
Called for each processed outcome. Triggers distillation at threshold.
This counter is per-process; checkPersistedTrigger covers the
cross-process case (#6512).
Returns
void
promote()
promote(routingMemory): number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:360
Promote high-confidence rules to RoutingMemory. Rules must be active, with sufficient observations and confidence.
Parameters
routingMemory
IRoutingMemory
Returns
number
Deprecated
No production caller (#5004 finding 4). DistilledRuleStage
is the single channel by which distilled rules reach routing; this
second channel into RoutingMemory is kept only so the deprecation is
non-breaking. Removal is tracked in #5467. Note the gate now compares
confidence = support × effect against promotionConfidence, so a rule
that would have promoted on sample size alone may no longer clear it.
restoreDistillState()
protected restoreDistillState(lastDistillAt, eligibleOutcomes): void;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:399
Restore last-distill state from a persisted snapshot (#6512), so the first-route trigger counts only outcomes newer than that snapshot.
Parameters
lastDistillAt
number
eligibleOutcomes
number | undefined
Returns
void
Interfaces
ComparisonResult
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:57
Result of a two-sample comparison test.
Properties
alpha
readonly alpha: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:63
Alpha level used for significance
difference
readonly difference: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:65
Difference in success rates (group1 - group2)
differenceCI
readonly differenceCI: ConfidenceInterval;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:67
Confidence interval for the difference
effectSize
readonly effectSize: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:69
Effect size (Cohen’s h for proportions)
n1
readonly n1: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:71
Sample sizes
n2
readonly n2: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:72
pValue
readonly pValue: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:59
P-value from the test
significant
readonly significant: boolean;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:61
Whether result is significant at alpha level
ComputedReward
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:185
Computed reward for bandit update.
Properties
components
readonly components: {
baseReward: number;
efficiencyBonus: number;
qualityBonus: number;
retryPenalty: number;
speedBonus: number;
};
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:189
Components that contributed to the reward
baseReward
readonly baseReward: number;
efficiencyBonus
readonly efficiencyBonus: number;
qualityBonus
readonly qualityBonus: number;
retryPenalty
readonly retryPenalty: number;
speedBonus
readonly speedBonus: number;
explanation
readonly explanation: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:197
Explanation of reward computation
reward
readonly reward: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:187
The reward value (0-1)
ConfidenceInterval
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:14
Confidence interval result with bounds and metadata.
Properties
confidence
readonly confidence: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:22
Confidence level (e.g., 0.95 for 95% CI)
estimate
readonly estimate: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:20
Point estimate (center of interval)
lower
readonly lower: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:16
Lower bound of the interval
measured
readonly measured: boolean;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:51
Whether the interval was computed from data (#5760 item 3).
false means the sample was empty and lower/upper/estimate carry no
information — they are whatever the empty branch happened to return, not a
result. Read this before reading the bounds.
The bounds alone cannot say it. meanConfidenceInterval([]) returned
lower === upper === 0 — the strongest possible precision claim, over no
data. proportionConfidenceInterval(0, 0) returned [0, 1], which is
honest by luck rather than by construction: a proportion’s domain happens
to be bounded, so its uninformative interval is expressible, and a mean’s
is not. calculateDifferenceCI divided by (total1 || 1) and produced a
finite interval from nothing at all.
Named for the vocabulary this repo already uses for exactly this —
tokensMeasured, policyEvaluated, gapsMeasured, routerTypeMeasured.
REQUIRED rather than optional so the compiler names every producer;
optional would let a new one stay silent, which is the state this removes.
Ratified 5 of 6 approvers at supermajority (#5760). Infinity and NaN
bounds were both rejected for the same reason: each serialises to null
in JSON, turning a loud in-process signal into a silent persisted one.
n
readonly n: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:24
Sample size used
standardError
readonly standardError: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:26
Standard error
upper
readonly upper: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:18
Upper bound of the interval
DistilledRule
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:30
A distilled routing rule extracted from outcome patterns.
Rules are fingerprinted by patternType:cli:category to prevent
duplicates and cap total rules at a bounded maximum.
Properties
action
readonly action: StrategyAction;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:40
What routing action to take
category
readonly category: string;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:38
Task category this rule applies to
cli
readonly cli: "claude" | "gemini" | "codex" | "opencode";
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:36
Which CLI this rule applies to
confidence
readonly confidence: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:50
Confidence 0-1 = support × effect (#5004 finding 3).
This is the value DistilledRuleStage.computeDelta multiplies the base
delta by, so it must answer “how much should routing move” — not “how
many samples did we see”. Before #5004 it was the sigmoid over
observations alone, and a rule at 62.5% failure penalised exactly as
hard as one at 100% given the same traffic.
createdAt
readonly createdAt: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:67
Epoch ms when rule was first created
effect
readonly effect: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:59
Effect size 0-1: how far metric sits past its detector threshold,
normalised over the remaining headroom — see effectFor. Persisted at
distill time because the threshold is config; recomputing it on load
would silently rescale old rules when the threshold changes.
id
readonly id: string;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:32
Fingerprint: ${patternType}:${cli}:${category}
metric
readonly metric: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:63
The metric value (failure rate, success rate, or p90/median ratio)
observationCount
readonly observationCount: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:61
Number of observations that informed this rule
patternType
readonly patternType: PatternType;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:34
What kind of pattern triggered this rule
status
readonly status: RuleStatus;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:65
Current lifecycle status
support
readonly support: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:52
Sample support 0-1: sigmoidConfidence(observationCount) (center=30).
tainted
readonly tainted: boolean;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:84
Reserved. No producer sets this to true (#5853).
It was documented as a security gate — “tainted rules never promote to
RoutingMemory” — but upsertRule writes the literal false and is the
only constructor of new rules, so both consumer branches that read it
were unreachable and have been removed. DistilledRuleStage, the channel
by which distilled rules actually reach routing, never checked it at all.
The field stays only because removing a required member of a published interface is breaking; removal is queued for the next major in #5867. Do not write a filter against it without first adding a producer — a check that cannot fail is not a check.
updatedAt
readonly updatedAt: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:69
Epoch ms when rule was last updated
DistillerConfig
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:88
Configuration for the strategy distiller.
Properties
failureRateThreshold
readonly failureRateThreshold: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:105
Failure rate above which a failure pattern is detected (default: 0.6)
latencyRatioThreshold
readonly latencyRatioThreshold: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:109
p90/median ratio above which a latency spike is detected (default: 2.0)
maxRules
readonly maxRules: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:111
Maximum number of rules to store (default: 90)
minObservationsForActive
readonly minObservationsForActive: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:94
Minimum observations before activating a rule (default: 5)
minObservationsForDraft
readonly minObservationsForDraft: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:92
Minimum observations before creating a draft rule (default: 3)
promotionConfidence
readonly promotionConfidence: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:103
Confidence threshold for promotion to RoutingMemory (default: 0.7).
Deprecated
Only read by StrategyDistiller.promote(), which has no
production caller — DistilledRuleStage is the single channel by which
distilled rules reach routing (#5004 finding 4). Removal is tracked in
#5467. The gate compares confidence, which is now support × effect.
ruleExpiryMs
readonly ruleExpiryMs: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:113
Rule expiry time in ms (default: 24h)
successRateThreshold
readonly successRateThreshold: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:107
Success rate above which a success pattern is detected (default: 0.8)
triggerThreshold
readonly triggerThreshold: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:90
Distill every N outcomes (default: 50)
DistillerStats
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:136
Statistics returned by StrategyDistiller.getStats().
Properties
eligibleOutcomesAtLastDistill?
readonly optional eligibleOutcomesAtLastDistill?: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:150
Eligible outcomes the last distillation trained on (#6512). Undefined when no distillation has run or been restored from a snapshot; 0 is a real measurement (a distill ran and nothing was eligible).
lastDistillAt
readonly lastDistillAt: number | undefined;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:142
Epoch ms of last distillation run
outcomesSinceLastDistill
readonly outcomesSinceLastDistill: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:144
Number of outcomes processed since last distillation
ruleCountByStatus
readonly ruleCountByStatus: Readonly<Record<RuleStatus, number>>;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:138
Number of rules in each status
totalRules
readonly totalRules: number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:140
Total number of rules
DistributionStats
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:78
Descriptive statistics for a distribution.
Properties
max
readonly max: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:84
mean
readonly mean: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:79
median
readonly median: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:80
min
readonly min: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:83
n
readonly n: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:85
percentiles
readonly percentiles: {
p25: number;
p5: number;
p50: number;
p75: number;
p95: number;
};
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:87
Percentiles: p5, p25, p50, p75, p95
p25
readonly p25: number;
p5
readonly p5: number;
p50
readonly p50: number;
p75
readonly p75: number;
p95
readonly p95: number;
stdDev
readonly stdDev: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:81
variance
readonly variance: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:82
ExperimentDefinition
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:37
Experiment definition.
Properties
description
readonly description: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:43
Description of the experiment’s hypothesis
endedAt
readonly endedAt: string | null;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:51
End timestamp (ISO 8601)
id
readonly id: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:39
Unique experiment identifier
minimumDetectableEffect
readonly minimumDetectableEffect: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:57
Minimum detectable effect size
minSampleSize
readonly minSampleSize: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:53
Minimum sample size per variant
name
readonly name: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:41
Human-readable name
primaryMetric
readonly primaryMetric: "successRate" | "avgReward" | "avgLatency";
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:55
Primary metric to optimize
startedAt
readonly startedAt: string | null;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:49
Start timestamp (ISO 8601)
status
readonly status: ExperimentStatus;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:45
Current status
tags
readonly tags: readonly string[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:59
Tags for categorization
variants
readonly variants: readonly ExperimentVariant[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:47
Experiment variants
ExperimentExport
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:187
Export format for experiment data.
Properties
experiments
readonly experiments: readonly ExperimentDefinition[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:191
All experiments
exportedAt
readonly exportedAt: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:189
Export timestamp
outcomes
readonly outcomes: readonly ExperimentOutcome[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:193
All outcomes
summaries
readonly summaries: readonly ExperimentSummary[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:195
Summaries for completed experiments
ExperimentOutcome
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:65
Recorded outcome for an experiment.
Properties
experimentId
readonly experimentId: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:67
Experiment ID
latencyMs
readonly latencyMs: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:77
Latency in milliseconds
metadata?
readonly optional metadata?: Record<string, unknown>;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:81
Additional metadata
reward
readonly reward: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:75
Reward value
success
readonly success: boolean;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:73
Whether the task succeeded
timestamp
readonly timestamp: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:79
Timestamp (ISO 8601)
traceId
readonly traceId: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:71
Routing decision trace ID
variantId
readonly variantId: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:69
Assigned variant ID
ExperimentResult
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:158
A/B test experiment result.
Properties
comparison
readonly comparison: ComparisonResult;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:166
Comparison between groups
control
readonly control: VariantResultSummary;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:162
Control group statistics
experimentId
readonly experimentId: string;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:160
Experiment identifier
hasMinimumSampleSize
readonly hasMinimumSampleSize: boolean;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:185
Whether experiment has enough data for valid conclusions
recommendedSampleSize
readonly recommendedSampleSize: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:187
Minimum recommended sample size per group
recommendedSampleSizeMeasured
readonly recommendedSampleSizeMeasured: boolean;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:204
Whether recommendedSampleSize was computed from a baseline the control actually measured.
false means the control has no observations, so the 0 baseline
calculateMinSampleSize was handed is a default, not a rate. The number it
returns is real arithmetic over a fabricated input and comes out several
times too small — in the direction that tells an operator to stop
collecting early, which is exactly the reader this field exists to warn.
Note the gate is control.n > 0, NOT control.successRate > 0: a control
of 0/50 is a measured baseline of 0.0 and a legitimate input here. That is
a different question from the one relativeImprovementMeasured
answers, which is whether a ratio over the control rate exists — hence
two markers rather than one shared flag (#5857).
relativeImprovement
readonly relativeImprovement: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:168
Relative improvement (treatment vs control)
relativeImprovementMeasured
readonly relativeImprovementMeasured: boolean;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:183
Whether relativeImprovement was computed from a control rate that could support a ratio.
false means the control measured 0 successes, so the relative improvement
is unbounded and the accompanying 0 is a placeholder — NOT “treatment and
control performed identically”, which is what 0 reads as on that scale. A
control of 0/50 is a real measurement; the ratio over it is the thing that
does not exist.
calculateRegret solved the same problem with null (#5255). This field
carries the same information without widening a public number to
number | null, which is a breaking change for readers.
treatment
readonly treatment: VariantResultSummary;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:164
Treatment group statistics
ExperimentSummary
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:111
Experiment summary with all variants and comparison.
Properties
experiment
readonly experiment: ExperimentDefinition;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:113
Experiment definition
hasMinimumSampleSize
readonly hasMinimumSampleSize: boolean;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:119
Whether experiment has reached minimum sample size
recommendation
readonly recommendation: "continue" | "stop_winner" | "stop_inconclusive";
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:121
Recommended action based on results
result
readonly result: ExperimentResult | null;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:117
Statistical comparison result
variantStats
readonly variantStats: readonly VariantStats[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:115
Statistics per variant
ExperimentVariant
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:21
Experiment variant configuration.
Properties
description
readonly description: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:27
Description of what this variant does
id
readonly id: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:23
Variant identifier
isControl
readonly isControl: boolean;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:31
Whether this is the control variant
name
readonly name: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:25
Human-readable name
trafficPercent
readonly trafficPercent: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:29
Traffic allocation percentage (0-100)
FeedbackCollectorConfig
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:238
Configuration for the feedback collector.
Properties
efficiencyWeight
readonly efficiencyWeight: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:250
Weight for efficiency in reward computation
enableAutoReward
readonly enableAutoReward: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:244
Enable automatic reward computation
maxHistorySize
readonly maxHistorySize: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:258
Maximum history entries (outcomes + decisions) to retain
maxPendingDecisions
readonly maxPendingDecisions: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:240
Maximum pending decisions to track
pendingTimeoutMs
readonly pendingTimeoutMs: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:242
Timeout for pending decisions (ms)
qualityWeight
readonly qualityWeight: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:246
Weight for quality in reward computation
retryPenalty
readonly retryPenalty: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:252
Penalty per retry in reward computation
speedWeight
readonly speedWeight: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:248
Weight for speed in reward computation
targetDurationMs
readonly targetDurationMs: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:254
Target duration for speed bonus (ms)
targetTokenUsage
readonly targetTokenUsage: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:256
Target token usage for efficiency bonus
FeedbackIntegrationConfig
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:53
Configuration for feedback integration.
Properties
decisionTtlMs?
readonly optional decisionTtlMs?: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:61
TTL for decision entries in milliseconds (default: 3600000 = 1 hour)
enableAutoFeedback
readonly enableAutoFeedback: boolean;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:55
Enable automatic feedback to routers (default: true)
enablePersistence?
readonly optional enablePersistence?: boolean;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:69
Enable persistent storage via SQLite (default: false). Requires outcomeStorage to be provided. (Source: Issue #560 - Wire SQLiteOutcomeStorage to feedback loop)
logger?
readonly optional logger?: ILogger;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:63
Logger instance
outcomeStorage?
readonly optional outcomeStorage?: IOutcomeStorage;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:75
SQLite outcome storage instance for cross-session learning. Only used when enablePersistence is true. (Source: Issue #560 - Wire SQLiteOutcomeStorage to feedback loop)
partialQualityThreshold
readonly partialQualityThreshold: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:59
Quality score threshold for partial success (default: 0.4)
successQualityThreshold
readonly successQualityThreshold: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:57
Quality score threshold for success (default: 0.7)
FeedbackLoopStats
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:203
Feedback loop statistics.
Properties
avgQualityScore
readonly avgQualityScore: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:213
Average quality score
avgReward
readonly avgReward: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:215
Average reward computed
decisionsByRouter
readonly decisionsByRouter: Record<RouterType, number>;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:221
Decisions by router type, counting ONLY decisions whose routerType was
measured (#5812). Before this, every unattributable decision was counted as
topsis, inflating the exact number this metric exists to report.
decisionsUnattributed
readonly decisionsUnattributed: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:230
Decisions whose routing stage could not be identified, and which therefore
appear in NO bucket of decisionsByRouter (#5812).
This is the field that makes routerTypeMeasured a fix rather than an
annotation: without it the unattributable population would still have to
land somewhere, and “somewhere” was topsis.
lastUpdatedAt
readonly lastUpdatedAt: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:232
Last update timestamp
outcomesByClass
readonly outcomesByClass: Record<OutcomeClass, number>;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:211
Outcomes by classification
pendingOutcomes
readonly pendingOutcomes: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:209
Decisions pending outcome
totalDecisions
readonly totalDecisions: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:205
Total routing decisions recorded
totalOutcomes
readonly totalOutcomes: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:207
Total outcomes recorded
FeedbackRoutingDecision
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:73
Recorded routing decision for feedback tracking.
Properties
armIndex?
readonly optional armIndex?: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:103
Arm index for LinUCB bandit
banditContext?
readonly optional banditContext?: BanditContext;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:105
Bandit context (for LinUCB decisions)
confidence?
readonly optional confidence?: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:111
Confidence score
domain?
readonly optional domain?: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:115
Task domain classification
id
readonly id: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:75
Unique decision ID
query
readonly query: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:79
Original query/task that was routed
queryFeatures?
readonly optional queryFeatures?: QueryFeatures;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:107
Query features (for preference routing)
routerType
readonly routerType: RouterType;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:81
Type of router used
routerTypeMeasured?
readonly optional routerTypeMeasured?: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:97
Whether routerType was MEASURED or is a fallback label (#5812).
getDecisiveRouterType tests four stage names and, when none of them
explains the decision, returns 'topsis' — byte-identical to its own
measured 'topsis' answer. routerType is therefore best-effort, and this
field is what qualifies it.
Three states, deliberately:
true— a stage was identified androuterTypenames it.false— no stage explained the decision;routerTypeis a fallback.- absent — a row written before this field existed. Read it as UNMEASURED, never as measured: a legacy row carries exactly as much evidence as the fallback does.
selectedModel
readonly selectedModel: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:99
Selected model/adapter name
selectedTier?
readonly optional selectedTier?: "strong" | "weak";
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:101
Selected model tier (strong/weak for preference routing)
timestamp
readonly timestamp: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:77
Timestamp of decision
traceId
readonly traceId: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:113
Trace ID to correlate with SwarmObserver events
ucbScore?
readonly optional ucbScore?: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:109
UCB score (for LinUCB)
IAbTestTracker
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:127
A/B test tracker interface.
Methods
assignVariant()
assignVariant(experimentId, traceId): ExperimentVariant | null;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:153
Assign a variant for a given trace ID (deterministic assignment).
Parameters
experimentId
string
traceId
string
Returns
ExperimentVariant | null
completeExperiment()
completeExperiment(experimentId): void;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:148
Complete an experiment.
Parameters
experimentId
string
Returns
void
createExperiment()
createExperiment(definition): ExperimentDefinition;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:131
Create a new experiment.
Parameters
definition
Omit<ExperimentDefinition, "status" | "startedAt" | "endedAt">
Returns
exportData()
exportData(): ExperimentExport;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:181
Export all experiment data.
Returns
getExperiment()
getExperiment(experimentId): ExperimentDefinition | null;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:176
Get experiment by ID.
Parameters
experimentId
string
Returns
ExperimentDefinition | null
getSummary()
getSummary(experimentId): ExperimentSummary | null;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:163
Get experiment summary with statistics.
Parameters
experimentId
string
Returns
ExperimentSummary | null
listExperiments()
listExperiments(filter?): readonly ExperimentDefinition[];
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:168
List all experiments.
Parameters
filter?
status?
tags?
readonly string[]
Returns
readonly ExperimentDefinition[]
pauseExperiment()
pauseExperiment(experimentId): void;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:143
Pause a running experiment.
Parameters
experimentId
string
Returns
void
recordOutcome()
recordOutcome(outcome): void;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:158
Record an outcome for an experiment.
Parameters
outcome
Returns
void
startExperiment()
startExperiment(experimentId): void;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:138
Start an experiment (sets status to running).
Parameters
experimentId
string
Returns
void
IFeedbackIntegration
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:98
Interface for feedback integration.
Methods
evictStaleEntries()
evictStaleEntries(): number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:126
Evict stale entries from decision map that exceed TTL
Returns
number
getDecisionMapSize()
getDecisionMapSize(): number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:132
Get current size of decision map
Returns
number
getEvictedEntryCount()
getEvictedEntryCount(): number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:129
Get total count of evicted entries since creation or last reset
Returns
number
getStats()
getStats(): FeedbackLoopStats;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:114
Get feedback statistics
Returns
onOutcomeProcessed()
onOutcomeProcessed(callback): () => void;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:117
Subscribe to outcome processed events
Parameters
callback
Returns
() => void
recordOutcome()
recordOutcome(params): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:111
Record a generic task outcome
Parameters
params
Returns
void
recordRoutingDecision()
recordRoutingDecision(decision, traceId?): string;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:100
Record a routing decision from CompositeRouter
Parameters
decision
traceId?
string
Returns
string
recordStepOutcome()
recordStepOutcome(
routingDecisionId,
stepResult,
durationMs,
tokenUsage
): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:103
Record a step outcome from workflow execution
Parameters
routingDecisionId
string
stepResult
durationMs
number
tokenUsage
number
Returns
void
registerCompositeRouter()
registerCompositeRouter(router): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:120
Register CompositeRouter for bi-directional feedback
Parameters
router
Returns
void
reset()
reset(): void;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:123
Reset all collected data
Returns
void
IOutcomeFeedback
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:296
Interface for outcome feedback collector.
Methods
clearExpiredDecisions()
clearExpiredDecisions(): number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:330
Clear expired pending decisions.
Returns
number
computeReward()
computeReward(outcome): ComputedReward;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:315
Compute reward from an outcome.
Parameters
outcome
Returns
getPendingDecisions()
getPendingDecisions(): readonly FeedbackRoutingDecision[];
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:325
Get pending decisions (waiting for outcomes).
Returns
readonly FeedbackRoutingDecision[]
getStats()
getStats(): FeedbackLoopStats;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:320
Get feedback loop statistics.
Returns
processOutcome()
processOutcome(traceId, outcome): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:310
Process outcome for a trace ID (finds matching decision and computes reward).
Parameters
traceId
string
outcome
Omit<TaskOutcome, "routingDecisionId">
Returns
void
recordOutcome()
recordOutcome(outcome): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:305
Record an outcome for a routing decision.
Parameters
outcome
Returns
void
recordRoutingDecision()
recordRoutingDecision(decision): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:300
Record a routing decision for tracking.
Parameters
decision
Returns
void
reset()
reset(): void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:335
Reset all state.
Returns
void
IOutcomeStorage
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:190
Interface for outcome storage implementations.
Methods
getCounts()
getCounts(): Promise<Result<{
decisions: number;
outcomes: number;
rewards: number;
}, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:246
Get total record counts.
Returns
Promise<Result<{
decisions: number;
outcomes: number;
rewards: number;
}, OutcomeStorageError>>
getDecision()
getDecision(id): Promise<Result<StoredRoutingDecision | null, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:209
Get routing decision by ID.
Parameters
id
string
Returns
Promise<Result<StoredRoutingDecision | null, OutcomeStorageError>>
getDecisionsByRequestId()
getDecisionsByRequestId(requestId): Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:234
Get decisions by request ID (for audit trail integration).
Parameters
requestId
string
Returns
Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>
getModelStats()
getModelStats(): Promise<Result<StoredModelStats[], OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:221
Get aggregated statistics per model.
Returns
Promise<Result<StoredModelStats[], OutcomeStorageError>>
getOutcome()
getOutcome(routingDecisionId): Promise<Result<StoredTaskOutcome | null, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:214
Get outcome for a routing decision.
Parameters
routingDecisionId
string
Returns
Promise<Result<StoredTaskOutcome | null, OutcomeStorageError>>
getRecentDecisions()
getRecentDecisions(model, limit): Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:226
Get recent decisions for a model.
Parameters
model
"claude" | "gemini" | "codex" | "opencode"
limit
number
Returns
Promise<Result<StoredRoutingDecision[], OutcomeStorageError>>
prune()
prune(olderThan): Promise<Result<number, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:241
Prune old records.
Parameters
olderThan
Date
Returns
Promise<Result<number, OutcomeStorageError>>
storeDecision()
storeDecision(decision): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:194
Store a routing decision.
Parameters
decision
Returns
Promise<Result<void, OutcomeStorageError>>
storeOutcome()
storeOutcome(outcome): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:199
Store a task outcome.
Parameters
outcome
Returns
Promise<Result<void, OutcomeStorageError>>
storeReward()
storeReward(reward): Promise<Result<void, OutcomeStorageError>>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:204
Store a computed reward.
Parameters
reward
Returns
Promise<Result<void, OutcomeStorageError>>
ISQLiteDatabase
Defined in: packages/nexus-agents/src/core/types/database-types.ts:57
Minimal interface for a SQLite database handle.
Satisfied by node:sqlite’s DatabaseSync via openSqliteDatabase (#5388).
~30 helper signatures and ~12 test doubles are written against this, which is
why swapping the engine underneath did not ripple outward.
Methods
close()
close(): void;
Defined in: packages/nexus-agents/src/core/types/database-types.ts:71
Close the database connection.
Returns
void
exec()
exec(sql): void;
Defined in: packages/nexus-agents/src/core/types/database-types.ts:61
Execute raw SQL statements (typically for DDL or multiple statements).
Parameters
sql
string
Returns
void
prepare()
prepare<T>(sql): ISQLiteStatement<T>;
Defined in: packages/nexus-agents/src/core/types/database-types.ts:66
Prepare a parameterized statement for execution.
Type Parameters
T
T = unknown
Parameters
sql
string
Returns
ISQLiteStatement
Defined in: packages/nexus-agents/src/core/types/database-types.ts:18
Minimal interface for a prepared SQLite statement.
Satisfied by node:sqlite’s StatementSync (#5388).
Type Parameters
T
T = unknown
Methods
all()
all(...params): T[];
Defined in: packages/nexus-agents/src/core/types/database-types.ts:34
Get all rows matching the statement.
Parameters
params
…unknown[]
Returns
T[]
get()
get(...params): T | undefined;
Defined in: packages/nexus-agents/src/core/types/database-types.ts:29
Get a single row matching the statement. Returns undefined if no match.
Parameters
params
…unknown[]
Returns
T | undefined
run()
run(...params): ISQLiteRunResult;
Defined in: packages/nexus-agents/src/core/types/database-types.ts:23
Execute the statement with the given parameters. Returns information about changes made.
Parameters
params
…unknown[]
Returns
ISQLiteRunResult
OutcomeStorageConfig
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:258
Configuration for SQLite outcome storage.
Properties
autoPruneInterval?
optional autoPruneInterval?: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:266
Auto-prune interval in ms (default: 3600000 = 1 hour)
dbPath
dbPath: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:260
Path to SQLite database file
logger?
optional logger?: ILogger;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:262
Optional logger instance
maxRecords?
optional maxRecords?: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:264
Maximum records to retain (default: 100000)
PerformanceMatrixEntry
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:210
Model performance matrix entry (model × task type).
Properties
avgLatencyMs
readonly avgLatencyMs: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:216
avgReward
readonly avgReward: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:215
model
readonly model: string;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:211
n
readonly n: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:213
successRate
readonly successRate: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:214
successRateCI
readonly successRateCI: ConfidenceInterval;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:217
taskType
readonly taskType: string;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:212
PersistentDistillerConfig
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:111
Learning exports - Closed-loop feedback and routing improvement Split from index.ts for file size compliance (Issue #285)
Properties
dataDir?
readonly optional dataDir?: string;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:115
Override the data directory (useful for testing).
filePath?
readonly optional filePath?: string;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:113
Override the file path (useful for testing).
QualitySignals
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:40
Quality signals extracted from task execution.
Properties
coherenceScore?
readonly optional coherenceScore?: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:54
Response coherence score (0-1)
completionRatio
readonly completionRatio: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:50
Task completion percentage (0-1)
lintErrors?
readonly optional lintErrors?: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:44
Number of lint errors (for code tasks)
retryCount
readonly retryCount: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:48
Number of retries required
testsPass?
readonly optional testsPass?: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:42
Whether code tests passed (for code tasks)
userApproved?
readonly optional userApproved?: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:46
Explicit user approval/rejection
validStructure?
readonly optional validStructure?: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:52
Whether output was valid JSON/structured (for structured output tasks)
RecordOutcomeParams
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:27
Parameters for recording an outcome.
Properties
durationMs
readonly durationMs: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:35
Execution duration in milliseconds
errorMessage?
readonly optional errorMessage?: string;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:43
Error message for failed outcomes (sanitized before persistence)
qualityScore
readonly qualityScore: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:33
Quality score (0-1)
retryCount?
readonly optional retryCount?: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:39
Number of retries (default: 0)
routingDecisionId
readonly routingDecisionId: string;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:29
Routing decision ID
success
readonly success: boolean;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:31
Whether the task succeeded
tokenUsage
readonly tokenUsage: number;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:37
Token usage
traceId?
readonly optional traceId?: string;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:41
Trace ID for correlation
RegretAnalysis
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:99
Regret analysis result comparing actual vs optimal decisions.
Properties
avgRegret
readonly avgRegret: number | null;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:115
Average regret per decision, or null when unmeasured — see above.
cumulativeRegret
readonly cumulativeRegret: number | null;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:113
Total cumulative regret, or null when no decision was comparable (#5255).
These three were plain number and returned 0/0/1 for an empty
decision set — which the dashboard rendered as “Cumulative Regret: 0.00”
and “Optimal Decision Rate: 100.0%” with a full progress bar. A perfect
routing record asserted over nothing is an absent measurement wearing a
good score, and the primary consumer of these numbers is the learning loop
itself, which has no way to consult a sibling flag.
null means UNMEASURED — no comparable decision existed. It does not mean
zero regret; that is 0, and the two are now distinguishable.
optimalRate
readonly optimalRate: number | null;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:121
Share of optimal decisions, or null when unmeasured — see above.
regretPerModel
readonly regretPerModel: Record<string, number>;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:123
Regret per model (how much worse each model performed vs best)
suboptimalDecisions
readonly suboptimalDecisions: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:119
Number of suboptimal decisions. Stays numeric: 0 is the true count.
totalDecisions
readonly totalDecisions: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:117
Number of decisions analyzed. Stays numeric: 0 is the true count.
StatisticalOptions
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:223
Options for statistical calculations.
Properties
alpha?
readonly optional alpha?: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:227
Alpha level for significance testing (default: 0.05)
confidence?
readonly optional confidence?: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:225
Confidence level for intervals (default: 0.95)
minSampleSize?
readonly optional minSampleSize?: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:229
Minimum sample size for valid inference (default: 30)
useContinuityCorrection?
readonly optional useContinuityCorrection?: boolean;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:231
Use continuity correction for proportions (default: true)
StoredModelStats
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:99
Aggregated model statistics from stored data.
Properties
avgLatencyMs
readonly avgLatencyMs: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:105
avgQualityScore
readonly avgQualityScore: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:104
avgReward
readonly avgReward: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:103
model
readonly model: "claude" | "gemini" | "codex" | "opencode";
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:100
successRate
readonly successRate: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:106
totalDecisions
readonly totalDecisions: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:101
totalOutcomes
readonly totalOutcomes: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:102
StoredReward
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:85
Stored computed reward record.
Properties
baseReward
readonly baseReward: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:89
efficiencyBonus
readonly efficiencyBonus: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:92
qualityBonus
readonly qualityBonus: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:90
retryPenalty
readonly retryPenalty: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:93
reward
readonly reward: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:88
routingDecisionId
readonly routingDecisionId: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:86
speedBonus
readonly speedBonus: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:91
timestamp
readonly timestamp: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:87
StoredRoutingDecision
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:48
Stored routing decision record.
Properties
alternativeModels
readonly alternativeModels: readonly ("claude" | "gemini" | "codex" | "opencode")[];
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:54
confidence
readonly confidence: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:55
id
readonly id: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:49
reason
readonly reason: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:56
requestId?
readonly optional requestId?: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:58
routerType
readonly routerType: RouterType;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:52
routerTypeMeasured?
readonly optional routerTypeMeasured?: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:65
Whether a router actually attributed this decision (#5915, closing the third step of #5812). Absent on a decision read back from a row written before the column existed, and absence reads as UNMEASURED everywhere — a legacy row carries no more evidence than the fallback does.
selectedModel
readonly selectedModel: "claude" | "gemini" | "codex" | "opencode";
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:53
taskProfile
readonly taskProfile: Record<string, unknown>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:57
timestamp
readonly timestamp: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:51
traceId
readonly traceId: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:50
StoredTaskOutcome
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:71
Stored task outcome record.
Properties
durationMs
readonly durationMs: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:77
errorMessage?
readonly optional errorMessage?: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:79
outcomeClass
readonly outcomeClass: OutcomeClass;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:74
qualityScore
readonly qualityScore: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:76
routingDecisionId
readonly routingDecisionId: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:72
success
readonly success: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:75
timestamp
readonly timestamp: string;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:73
tokenUsage
readonly tokenUsage: number;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:78
TaskOutcome
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:143
Task outcome for a routing decision.
Properties
durationMs
readonly durationMs: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:155
Execution duration in milliseconds
errorMessage?
readonly optional errorMessage?: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:159
Error message if failed
outcomeClass
readonly outcomeClass: OutcomeClass;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:149
Outcome classification
qualityScore
readonly qualityScore: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:153
Quality score (0-1)
qualitySignals
readonly qualitySignals: QualitySignals;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:161
Extracted quality signals
routingDecisionId
readonly routingDecisionId: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:145
Reference to the routing decision
success
readonly success: boolean;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:151
Overall success indicator
timestamp
readonly timestamp: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:147
Timestamp of outcome
tokenUsage
readonly tokenUsage: number;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:157
Token usage
traceId
readonly traceId: string;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:163
Trace ID for correlation
VariantStats
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:87
Variant statistics.
Properties
avgLatencyMs
readonly avgLatencyMs: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:101
Average latency in ms
avgReward
readonly avgReward: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:99
Average reward
n
readonly n: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:93
Number of observations
name
readonly name: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:91
Variant name
successes
readonly successes: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:95
Success count
successRate
readonly successRate: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:97
Success rate
sumLatencyMs
readonly sumLatencyMs: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:105
Sum of latencies (for incremental computation)
sumReward
readonly sumReward: number;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:103
Sum of rewards (for incremental computation)
variantId
readonly variantId: string;
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:89
Variant ID
WinLossAnalysis
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:129
Win/loss analysis comparing routing choices.
Properties
losses
readonly losses: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:135
Number of times this model lost (not best outcome)
model
readonly model: string;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:131
Model name
ties
readonly ties: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:137
Number of ties
winRate
readonly winRate: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:139
Win rate
winRateCI
readonly winRateCI: ConfidenceInterval;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:141
Confidence interval for win rate
wins
readonly wins: number;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:133
Number of times this model won (best outcome)
Type Aliases
EffectThresholds
type EffectThresholds = Pick<DistillerConfig,
| "failureRateThreshold"
| "successRateThreshold"
| "latencyRatioThreshold">;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:117
The detector thresholds effectFor normalises a metric against.
ExperimentStatus
type ExperimentStatus = "draft" | "running" | "paused" | "completed" | "archived";
Defined in: packages/nexus-agents/src/learning/ab-test-types.ts:16
Experiment status states.
OutcomeClass
type OutcomeClass = "success" | "partial" | "failure" | "timeout" | "error";
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:35
Task outcome classification.
OutcomeProcessedCallback
type OutcomeProcessedCallback = (decision, outcome, reward) => void;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:341
Callback for when an outcome is processed.
Parameters
decision
outcome
reward
Returns
void
PatternType
type PatternType = "failure-rate" | "success-rate" | "latency-spike";
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:19
The type of pattern detected from outcomes.
RouterType
type RouterType = "linucb" | "preference" | "quality" | "cascade" | "topsis";
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:30
Router type that made the routing decision.
NOTE: 'quality' has no producer — getDecisiveRouterType cannot return it,
so countDecisionsByRouter reports quality: 0 forever. It is not being
given a producer to justify its existence (#5812 panel: “do NOT invent a
producer — that is YAGNI backwards”). Removing a member of this union is a
breaking change, so 'quality' is documented as unreachable here and removed
in the same next-major change that adds an 'unattributed' member (#5914).
No @deprecated tag: the tag applies to the whole type alias, and
RouterType itself is not deprecated — no-deprecated would then fire at
every one of its call sites for a defect in one member.
RulesSnapshot
type RulesSnapshot = z.infer<typeof RulesSnapshotSchema>;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:70
Learning exports - Closed-loop feedback and routing improvement Split from index.ts for file size compliance (Issue #285)
RuleStatus
type RuleStatus = "draft" | "active" | "promoted" | "expired";
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:16
Status lifecycle for a distilled rule.
StrategyAction
type StrategyAction = "penalize" | "boost" | "avoid";
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:22
Action to take when a rule matches a routing candidate.
Variables
DEFAULT_DISTILLER_CONFIG
const DEFAULT_DISTILLER_CONFIG: DistillerConfig;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-types.ts:123
Default distiller configuration.
DEFAULT_FEEDBACK_COLLECTOR_CONFIG
const DEFAULT_FEEDBACK_COLLECTOR_CONFIG: FeedbackCollectorConfig;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:264
Default feedback collector configuration.
DEFAULT_FEEDBACK_INTEGRATION_CONFIG
const DEFAULT_FEEDBACK_INTEGRATION_CONFIG: FeedbackIntegrationConfig;
Defined in: packages/nexus-agents/src/learning/feedback-integration-types.ts:84
Default configuration.
DEFAULT_OUTCOME_STORAGE_CONFIG
const DEFAULT_OUTCOME_STORAGE_CONFIG: {
autoPruneInterval: 3600000;
maxRecords: 100000;
};
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:281
Default configuration values.
Type Declaration
autoPruneInterval
readonly autoPruneInterval: 3600000 = 3600000;
maxRecords
readonly maxRecords: 100000 = 100000;
DEFAULT_STATISTICAL_OPTIONS
const DEFAULT_STATISTICAL_OPTIONS: Required<StatisticalOptions>;
Defined in: packages/nexus-agents/src/learning/validation-stats-types.ts:237
Default statistical options.
FeedbackCollectorConfigSchema
const FeedbackCollectorConfigSchema: ZodObject<{
efficiencyWeight: ZodDefault<ZodNumber>;
enableAutoReward: ZodDefault<ZodBoolean>;
maxHistorySize: ZodDefault<ZodNumber>;
maxPendingDecisions: ZodDefault<ZodNumber>;
pendingTimeoutMs: ZodDefault<ZodNumber>;
qualityWeight: ZodDefault<ZodNumber>;
retryPenalty: ZodDefault<ZodNumber>;
speedWeight: ZodDefault<ZodNumber>;
targetDurationMs: ZodDefault<ZodNumber>;
targetTokenUsage: ZodDefault<ZodNumber>;
}, $strip>;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:280
Zod schema for feedback collector configuration.
FeedbackRoutingDecisionSchema
const FeedbackRoutingDecisionSchema: ZodObject<{
armIndex: ZodOptional<ZodNumber>;
banditContext: ZodOptional<ZodRecord<ZodString, ZodUnknown>>;
confidence: ZodOptional<ZodNumber>;
domain: ZodOptional<ZodString>;
id: ZodUUID;
query: ZodString;
queryFeatures: ZodOptional<ZodRecord<ZodString, ZodUnknown>>;
routerType: ZodEnum<{
cascade: "cascade";
linucb: "linucb";
preference: "preference";
quality: "quality";
topsis: "topsis";
}>;
routerTypeMeasured: ZodOptional<ZodBoolean>;
selectedModel: ZodString;
selectedTier: ZodOptional<ZodEnum<{
strong: "strong";
weak: "weak";
}>>;
timestamp: ZodISODateTime;
traceId: ZodString;
ucbScore: ZodOptional<ZodNumber>;
}, $strip>;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:121
Zod schema for routing decision.
OutcomeStorageConfigSchema
const OutcomeStorageConfigSchema: ZodObject<{
autoPruneInterval: ZodOptional<ZodNumber>;
dbPath: ZodString;
maxRecords: ZodOptional<ZodNumber>;
}, $strip>;
Defined in: packages/nexus-agents/src/learning/outcome-storage-types.ts:272
Zod schema for OutcomeStorageConfig validation.
QualitySignalsSchema
const QualitySignalsSchema: ZodObject<{
coherenceScore: ZodOptional<ZodNumber>;
completionRatio: ZodDefault<ZodNumber>;
lintErrors: ZodOptional<ZodNumber>;
retryCount: ZodDefault<ZodNumber>;
testsPass: ZodOptional<ZodBoolean>;
userApproved: ZodOptional<ZodBoolean>;
validStructure: ZodOptional<ZodBoolean>;
}, $strip>;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:60
Zod schema for quality signals.
RulesSnapshotSchema
const RulesSnapshotSchema: ZodObject<{
eligibleOutcomes: ZodOptional<ZodNumber>;
rules: ZodArray<ZodObject<{
action: ZodEnum<{
avoid: "avoid";
boost: "boost";
penalize: "penalize";
}>;
category: ZodString;
cli: ZodEnum<{
claude: "claude";
codex: "codex";
gemini: "gemini";
opencode: "opencode";
}>;
confidence: ZodNumber;
createdAt: ZodNumber;
effect: ZodOptional<ZodNumber>;
id: ZodString;
metric: ZodNumber;
observationCount: ZodNumber;
patternType: ZodEnum<{
failure-rate: "failure-rate";
latency-spike: "latency-spike";
success-rate: "success-rate";
}>;
status: ZodEnum<{
active: "active";
draft: "draft";
expired: "expired";
promoted: "promoted";
}>;
support: ZodOptional<ZodNumber>;
tainted: ZodBoolean;
updatedAt: ZodNumber;
}, $strip>>;
savedAt: ZodString;
version: ZodLiteral<1>;
}, $strip>;
Defined in: packages/nexus-agents/src/learning/strategy-distiller-persistence.ts:59
Versioned snapshot schema for atomic saves.
TaskOutcomeSchema
const TaskOutcomeSchema: ZodObject<{
durationMs: ZodNumber;
errorMessage: ZodOptional<ZodString>;
outcomeClass: ZodEnum<{
error: "error";
failure: "failure";
partial: "partial";
success: "success";
timeout: "timeout";
}>;
qualityScore: ZodNumber;
qualitySignals: ZodObject<{
coherenceScore: ZodOptional<ZodNumber>;
completionRatio: ZodDefault<ZodNumber>;
lintErrors: ZodOptional<ZodNumber>;
retryCount: ZodDefault<ZodNumber>;
testsPass: ZodOptional<ZodBoolean>;
userApproved: ZodOptional<ZodBoolean>;
validStructure: ZodOptional<ZodBoolean>;
}, $strip>;
routingDecisionId: ZodUUID;
success: ZodBoolean;
timestamp: ZodISODateTime;
tokenUsage: ZodNumber;
traceId: ZodString;
}, $strip>;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-types.ts:169
Zod schema for task outcome.
Functions
calculateDistributionStats()
function calculateDistributionStats(values): DistributionStats;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:173
Calculate descriptive statistics for a distribution.
Parameters
values
readonly number[]
Returns
calculateMinSampleSize()
function calculateMinSampleSize(
baselineRate,
minimumDetectableEffect,
options?
): number;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:349
Calculate minimum sample size for detecting a difference in proportions. Uses formula for two-proportion z-test power analysis.
Parameters
baselineRate
number
minimumDetectableEffect
number
options?
alpha?
number
power?
number
Returns
number
calculateRegret()
function calculateRegret(decisions): RegretAnalysis;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:228
Calculate regret analysis comparing actual decisions vs oracle (best possible).
Parameters
decisions
readonly {
actualReward: number;
chosenModel: string;
rewards: Record<string, number>;
}[]
Returns
calculateWinLoss()
function calculateWinLoss(
model,
decisions,
options?
): WinLossAnalysis;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:293
Calculate win/loss analysis for a model.
Parameters
model
string
decisions
readonly {
actualReward: number;
chosenModel: string;
rewards: Record<string, number>;
}[]
options?
StatisticalOptions = {}
Returns
compareProportions()
function compareProportions(
successes1,
total1,
successes2,
total2,
options?
): ComparisonResult;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:128
Compare two proportions using two-proportion z-test.
Parameters
successes1
number
total1
number
successes2
number
total2
number
options?
StatisticalOptions = {}
Returns
computeOutcomeReward()
function computeOutcomeReward(collector, outcome): ComputedReward;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:576
Helper to compute reward from outcome.
Parameters
collector
outcome
Returns
createAbTestTracker()
function createAbTestTracker(): IAbTestTracker;
Defined in: packages/nexus-agents/src/learning/ab-test-tracker.ts:417
Create a default A/B test tracker instance.
Returns
createFeedbackIntegration()
function createFeedbackIntegration(config?, collector?): IFeedbackIntegration;
Defined in: packages/nexus-agents/src/learning/feedback-integration.ts:566
Creates a FeedbackIntegration instance.
Parameters
config?
Partial<FeedbackIntegrationConfig>
collector?
Returns
createOutcomeFeedbackCollector()
function createOutcomeFeedbackCollector(config?): OutcomeFeedbackCollector;
Defined in: packages/nexus-agents/src/learning/outcome-feedback.ts:376
Create an OutcomeFeedbackCollector instance.
Parameters
config?
Partial<FeedbackCollectorConfig>
Returns
createOutcomeStorage()
function createOutcomeStorage(config): SQLiteOutcomeStorage;
Defined in: packages/nexus-agents/src/learning/outcome-storage.ts:374
Create an SQLite outcome storage instance.
Parameters
config
Returns
createRoutingDecision()
function createRoutingDecision(params): FeedbackRoutingDecision;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-helpers.ts:125
Create a routing decision record.
Parameters
params
Omit<FeedbackRoutingDecision, "id" | "timestamp">
Returns
createStrategyDistiller()
function createStrategyDistiller(
outcomeStore,
logger?,
config?
): StrategyDistiller;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:516
Factory function for creating StrategyDistiller.
Parameters
outcomeStore
logger?
config?
Partial<DistillerConfig>
Returns
createTaskOutcome()
function createTaskOutcome(params): TaskOutcome;
Defined in: packages/nexus-agents/src/learning/outcome-feedback-helpers.ts:138
Create a task outcome record.
Parameters
params
Omit<TaskOutcome, "timestamp">
Returns
detectFailurePatterns()
function detectFailurePatterns(groups, threshold): DetectedPattern[];
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:141
Detect groups with failure rate above threshold.
Parameters
groups
readonly OutcomeGroup[]
threshold
number
Returns
DetectedPattern[]
detectLatencyPatterns()
function detectLatencyPatterns(groups, threshold): DetectedPattern[];
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:187
Detect groups with latency spike (p90/median > threshold).
Parameters
groups
readonly OutcomeGroup[]
threshold
number
Returns
DetectedPattern[]
detectSuccessPatterns()
function detectSuccessPatterns(groups, threshold): DetectedPattern[];
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:164
Detect groups with success rate above threshold.
Parameters
groups
readonly OutcomeGroup[]
threshold
number
Returns
DetectedPattern[]
effectFor()
function effectFor(
patternType,
metric,
thresholds
): number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:68
Effect size of a detected pattern in [0, 1] (#5004 finding 3): how far the metric sits past the detector threshold that produced it, normalised.
failure-rate:(rate − failureRateThreshold) / (1 − failureRateThreshold)success-rate:(rate − successRateThreshold) / (1 − successRateThreshold)latency-spike:min(1, (ratio − latencyRatioThreshold) / latencyRatioThreshold)
A metric exactly at its threshold is 0: the detector fired, but there is no
margin to act on. A metric at the far end of its scale is 1. Never NaN — a
threshold with no headroom (failure threshold 1.0, latency threshold 0) or a
NaN metric yields 0, so baseDelta × confidence in routing stays a number.
Parameters
patternType
metric
number
thresholds
Returns
number
meanConfidenceInterval()
function meanConfidenceInterval(values, options?): ConfidenceInterval;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:82
Calculate confidence interval for a mean.
Parameters
values
readonly number[]
options?
StatisticalOptions = {}
Returns
proportionConfidenceInterval()
function proportionConfidenceInterval(
successes,
total,
options?
): ConfidenceInterval;
Defined in: packages/nexus-agents/src/learning/validation-stats.ts:32
Calculate confidence interval for a proportion (success rate). Uses Wilson score interval for better coverage at extreme proportions.
Parameters
successes
number
total
number
options?
StatisticalOptions = {}
Returns
sigmoidConfidence()
function sigmoidConfidence(observations, center?): number;
Defined in: packages/nexus-agents/src/learning/strategy-distiller.ts:44
Sample support: 1 / (1 + exp(-(n - center) / 5)).
This is the support factor of a rule’s confidence (#5004 finding 3). The
name predates the support/effect split and is kept because it is exported
from the package root.
Parameters
observations
number
center?
number = 30
Returns
number