@soleri/core 7.0.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agency/agency-manager.d.ts +27 -1
- package/dist/agency/agency-manager.d.ts.map +1 -1
- package/dist/agency/agency-manager.js +180 -9
- package/dist/agency/agency-manager.js.map +1 -1
- package/dist/agency/default-rules.d.ts +7 -0
- package/dist/agency/default-rules.d.ts.map +1 -0
- package/dist/agency/default-rules.js +79 -0
- package/dist/agency/default-rules.js.map +1 -0
- package/dist/agency/types.d.ts +48 -0
- package/dist/agency/types.d.ts.map +1 -1
- package/dist/brain/brain.d.ts +17 -2
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +118 -8
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/knowledge-synthesizer.d.ts +37 -0
- package/dist/brain/knowledge-synthesizer.d.ts.map +1 -0
- package/dist/brain/knowledge-synthesizer.js +161 -0
- package/dist/brain/knowledge-synthesizer.js.map +1 -0
- package/dist/brain/learning-radar.d.ts +96 -0
- package/dist/brain/learning-radar.d.ts.map +1 -0
- package/dist/brain/learning-radar.js +202 -0
- package/dist/brain/learning-radar.js.map +1 -0
- package/dist/brain/types.d.ts +15 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/context/context-engine.d.ts.map +1 -1
- package/dist/context/context-engine.js +82 -17
- package/dist/context/context-engine.js.map +1 -1
- package/dist/context/types.d.ts +5 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/control/intent-router.d.ts +12 -1
- package/dist/control/intent-router.d.ts.map +1 -1
- package/dist/control/intent-router.js +68 -0
- package/dist/control/intent-router.js.map +1 -1
- package/dist/control/types.d.ts +17 -0
- package/dist/control/types.d.ts.map +1 -1
- package/dist/curator/classifier.d.ts +18 -0
- package/dist/curator/classifier.d.ts.map +1 -0
- package/dist/curator/classifier.js +61 -0
- package/dist/curator/classifier.js.map +1 -0
- package/dist/curator/quality-gate.d.ts +29 -0
- package/dist/curator/quality-gate.d.ts.map +1 -0
- package/dist/curator/quality-gate.js +88 -0
- package/dist/curator/quality-gate.js.map +1 -0
- package/dist/engine/bin/soleri-engine.js +1 -0
- package/dist/engine/bin/soleri-engine.js.map +1 -1
- package/dist/events/event-bus.d.ts +30 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +51 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/flows/chain-runner.d.ts +46 -0
- package/dist/flows/chain-runner.d.ts.map +1 -0
- package/dist/flows/chain-runner.js +271 -0
- package/dist/flows/chain-runner.js.map +1 -0
- package/dist/flows/chain-types.d.ts +103 -0
- package/dist/flows/chain-types.d.ts.map +1 -0
- package/dist/flows/chain-types.js +23 -0
- package/dist/flows/chain-types.js.map +1 -0
- package/dist/health/doctor-checks.d.ts +15 -0
- package/dist/health/doctor-checks.d.ts.map +1 -0
- package/dist/health/doctor-checks.js +98 -0
- package/dist/health/doctor-checks.js.map +1 -0
- package/dist/intake/text-ingester.d.ts +52 -0
- package/dist/intake/text-ingester.d.ts.map +1 -0
- package/dist/intake/text-ingester.js +181 -0
- package/dist/intake/text-ingester.js.map +1 -0
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +37 -1
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/llm/oauth-discovery.d.ts +26 -0
- package/dist/llm/oauth-discovery.d.ts.map +1 -0
- package/dist/llm/oauth-discovery.js +149 -0
- package/dist/llm/oauth-discovery.js.map +1 -0
- package/dist/planning/evidence-collector.d.ts +41 -0
- package/dist/planning/evidence-collector.d.ts.map +1 -0
- package/dist/planning/evidence-collector.js +194 -0
- package/dist/planning/evidence-collector.js.map +1 -0
- package/dist/planning/planner.d.ts +4 -0
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +11 -0
- package/dist/planning/planner.js.map +1 -1
- package/dist/queue/job-queue.d.ts +92 -0
- package/dist/queue/job-queue.d.ts.map +1 -0
- package/dist/queue/job-queue.js +180 -0
- package/dist/queue/job-queue.js.map +1 -0
- package/dist/queue/pipeline-runner.d.ts +62 -0
- package/dist/queue/pipeline-runner.d.ts.map +1 -0
- package/dist/queue/pipeline-runner.js +126 -0
- package/dist/queue/pipeline-runner.js.map +1 -0
- package/dist/runtime/admin-setup-ops.d.ts +20 -0
- package/dist/runtime/admin-setup-ops.d.ts.map +1 -0
- package/dist/runtime/admin-setup-ops.js +583 -0
- package/dist/runtime/admin-setup-ops.js.map +1 -0
- package/dist/runtime/chain-ops.d.ts +9 -0
- package/dist/runtime/chain-ops.d.ts.map +1 -0
- package/dist/runtime/chain-ops.js +107 -0
- package/dist/runtime/chain-ops.js.map +1 -0
- package/dist/runtime/claude-md-helpers.d.ts +65 -0
- package/dist/runtime/claude-md-helpers.d.ts.map +1 -0
- package/dist/runtime/claude-md-helpers.js +173 -0
- package/dist/runtime/claude-md-helpers.js.map +1 -0
- package/dist/runtime/curator-extra-ops.d.ts +3 -2
- package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
- package/dist/runtime/curator-extra-ops.js +81 -3
- package/dist/runtime/curator-extra-ops.js.map +1 -1
- package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
- package/dist/runtime/facades/admin-facade.js +4 -0
- package/dist/runtime/facades/admin-facade.js.map +1 -1
- package/dist/runtime/facades/agency-facade.d.ts.map +1 -1
- package/dist/runtime/facades/agency-facade.js +64 -0
- package/dist/runtime/facades/agency-facade.js.map +1 -1
- package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
- package/dist/runtime/facades/brain-facade.js +122 -1
- package/dist/runtime/facades/brain-facade.js.map +1 -1
- package/dist/runtime/facades/control-facade.d.ts.map +1 -1
- package/dist/runtime/facades/control-facade.js +42 -0
- package/dist/runtime/facades/control-facade.js.map +1 -1
- package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
- package/dist/runtime/facades/memory-facade.js +20 -2
- package/dist/runtime/facades/memory-facade.js.map +1 -1
- package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
- package/dist/runtime/facades/plan-facade.js +2 -0
- package/dist/runtime/facades/plan-facade.js.map +1 -1
- package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
- package/dist/runtime/facades/vault-facade.js +25 -5
- package/dist/runtime/facades/vault-facade.js.map +1 -1
- package/dist/runtime/intake-ops.d.ts +7 -5
- package/dist/runtime/intake-ops.d.ts.map +1 -1
- package/dist/runtime/intake-ops.js +98 -5
- package/dist/runtime/intake-ops.js.map +1 -1
- package/dist/runtime/memory-extra-ops.d.ts +6 -3
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
- package/dist/runtime/memory-extra-ops.js +292 -4
- package/dist/runtime/memory-extra-ops.js.map +1 -1
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
- package/dist/runtime/planning-extra-ops.js +85 -0
- package/dist/runtime/planning-extra-ops.js.map +1 -1
- package/dist/runtime/playbook-ops.js +1 -1
- package/dist/runtime/playbook-ops.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +143 -2
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/session-briefing.d.ts +23 -0
- package/dist/runtime/session-briefing.d.ts.map +1 -0
- package/dist/runtime/session-briefing.js +140 -0
- package/dist/runtime/session-briefing.js.map +1 -0
- package/dist/runtime/types.d.ts +23 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.d.ts.map +1 -1
- package/dist/runtime/vault-linking-ops.js +1 -3
- package/dist/runtime/vault-linking-ops.js.map +1 -1
- package/dist/vault/vault.d.ts +25 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +67 -3
- package/dist/vault/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/admin-setup-ops.test.ts +355 -0
- package/src/__tests__/async-infrastructure.test.ts +307 -0
- package/src/__tests__/cognee-client-gaps.test.ts +6 -2
- package/src/__tests__/cognee-hybrid-search.test.ts +49 -35
- package/src/__tests__/cognee-sync-manager-deep.test.ts +89 -65
- package/src/__tests__/curator-extra-ops.test.ts +6 -2
- package/src/__tests__/curator-pipeline-e2e.test.ts +358 -0
- package/src/__tests__/memory-extra-ops.test.ts +2 -2
- package/src/__tests__/planning-extra-ops.test.ts +2 -2
- package/src/__tests__/second-brain-features.test.ts +583 -0
- package/src/agency/agency-manager.ts +217 -9
- package/src/agency/default-rules.ts +83 -0
- package/src/agency/types.ts +61 -0
- package/src/brain/brain.ts +110 -8
- package/src/brain/knowledge-synthesizer.ts +218 -0
- package/src/brain/learning-radar.ts +340 -0
- package/src/brain/types.ts +16 -0
- package/src/context/context-engine.ts +114 -15
- package/src/context/types.ts +5 -0
- package/src/control/intent-router.ts +107 -0
- package/src/control/types.ts +10 -0
- package/src/curator/classifier.ts +88 -0
- package/src/curator/quality-gate.ts +129 -0
- package/src/engine/bin/soleri-engine.ts +1 -0
- package/src/events/event-bus.ts +58 -0
- package/src/flows/chain-runner.ts +369 -0
- package/src/flows/chain-types.ts +57 -0
- package/src/health/doctor-checks.ts +115 -0
- package/src/intake/text-ingester.ts +234 -0
- package/src/llm/llm-client.ts +38 -1
- package/src/llm/oauth-discovery.ts +169 -0
- package/src/planning/evidence-collector.ts +247 -0
- package/src/planning/planner.ts +11 -0
- package/src/queue/job-queue.ts +281 -0
- package/src/queue/pipeline-runner.ts +149 -0
- package/src/runtime/admin-setup-ops.ts +664 -0
- package/src/runtime/chain-ops.ts +121 -0
- package/src/runtime/claude-md-helpers.ts +236 -0
- package/src/runtime/curator-extra-ops.ts +86 -3
- package/src/runtime/facades/admin-facade.ts +4 -0
- package/src/runtime/facades/agency-facade.ts +68 -0
- package/src/runtime/facades/brain-facade.ts +142 -1
- package/src/runtime/facades/control-facade.ts +45 -0
- package/src/runtime/facades/memory-facade.ts +20 -2
- package/src/runtime/facades/plan-facade.ts +2 -0
- package/src/runtime/facades/vault-facade.ts +28 -5
- package/src/runtime/intake-ops.ts +107 -5
- package/src/runtime/memory-extra-ops.ts +312 -4
- package/src/runtime/planning-extra-ops.ts +94 -0
- package/src/runtime/playbook-ops.ts +1 -1
- package/src/runtime/runtime.ts +138 -2
- package/src/runtime/session-briefing.ts +161 -0
- package/src/runtime/types.ts +23 -0
- package/src/runtime/vault-linking-ops.ts +1 -3
- package/src/vault/vault.ts +79 -4
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning Radar — automatic pattern detection from agent sessions.
|
|
3
|
+
*
|
|
4
|
+
* Analyzes signals (corrections, search misses, explicit captures, workarounds)
|
|
5
|
+
* and queues knowledge candidates by confidence level:
|
|
6
|
+
* >= 0.8 → auto-capture silently
|
|
7
|
+
* 0.4-0.8 → queue for end-of-session review
|
|
8
|
+
* < 0.4 → log to metrics only
|
|
9
|
+
*
|
|
10
|
+
* Zero-friction: never interrupts the user. All analysis is pull-based.
|
|
11
|
+
*/
|
|
12
|
+
// ─── Constants ───────────────────────────────────────────────────────
|
|
13
|
+
const HIGH_CONFIDENCE = 0.8;
|
|
14
|
+
const MEDIUM_CONFIDENCE = 0.4;
|
|
15
|
+
const DEFAULT_CONFIDENCE = {
|
|
16
|
+
explicit_capture: 0.95,
|
|
17
|
+
correction: 0.75,
|
|
18
|
+
workaround: 0.65,
|
|
19
|
+
search_miss: 0.5,
|
|
20
|
+
pattern_success: 0.4,
|
|
21
|
+
repeated_question: 0.6,
|
|
22
|
+
};
|
|
23
|
+
const DEFAULT_TYPE = {
|
|
24
|
+
explicit_capture: 'pattern',
|
|
25
|
+
correction: 'anti-pattern',
|
|
26
|
+
workaround: 'pattern',
|
|
27
|
+
search_miss: 'pattern',
|
|
28
|
+
pattern_success: 'pattern',
|
|
29
|
+
repeated_question: 'pattern',
|
|
30
|
+
};
|
|
31
|
+
// ─── Class ───────────────────────────────────────────────────────────
|
|
32
|
+
export class LearningRadar {
|
|
33
|
+
provider;
|
|
34
|
+
vault;
|
|
35
|
+
brain;
|
|
36
|
+
constructor(vault, brain) {
|
|
37
|
+
this.vault = vault;
|
|
38
|
+
this.brain = brain;
|
|
39
|
+
this.provider = vault.getProvider();
|
|
40
|
+
this.initializeTable();
|
|
41
|
+
}
|
|
42
|
+
initializeTable() {
|
|
43
|
+
this.provider.execSql(`
|
|
44
|
+
CREATE TABLE IF NOT EXISTS radar_candidates (
|
|
45
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
46
|
+
signal_type TEXT NOT NULL,
|
|
47
|
+
title TEXT NOT NULL,
|
|
48
|
+
description TEXT NOT NULL,
|
|
49
|
+
suggested_type TEXT NOT NULL DEFAULT 'pattern',
|
|
50
|
+
confidence REAL NOT NULL,
|
|
51
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
52
|
+
source_query TEXT,
|
|
53
|
+
context TEXT,
|
|
54
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_radar_status ON radar_candidates(status);
|
|
58
|
+
`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Analyze a signal and classify it by confidence.
|
|
62
|
+
* High confidence → auto-capture. Medium → queue. Low → log only.
|
|
63
|
+
*/
|
|
64
|
+
analyze(signal) {
|
|
65
|
+
const confidence = signal.confidence ?? DEFAULT_CONFIDENCE[signal.type] ?? 0.5;
|
|
66
|
+
const suggestedType = signal.suggestedType ?? DEFAULT_TYPE[signal.type] ?? 'pattern';
|
|
67
|
+
let status;
|
|
68
|
+
if (confidence >= HIGH_CONFIDENCE) {
|
|
69
|
+
status = 'captured';
|
|
70
|
+
}
|
|
71
|
+
else if (confidence >= MEDIUM_CONFIDENCE) {
|
|
72
|
+
status = 'pending';
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
status = 'logged';
|
|
76
|
+
}
|
|
77
|
+
const result = this.provider.run(`INSERT INTO radar_candidates (signal_type, title, description, suggested_type, confidence, status, source_query, context)
|
|
78
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
79
|
+
signal.type,
|
|
80
|
+
signal.title,
|
|
81
|
+
signal.description,
|
|
82
|
+
suggestedType,
|
|
83
|
+
confidence,
|
|
84
|
+
status,
|
|
85
|
+
signal.sourceQuery ?? null,
|
|
86
|
+
signal.context ?? null,
|
|
87
|
+
]);
|
|
88
|
+
const id = Number(result.lastInsertRowid);
|
|
89
|
+
// Auto-capture high confidence signals immediately
|
|
90
|
+
if (status === 'captured') {
|
|
91
|
+
this.captureCandidate(id, signal.title, signal.description, suggestedType, signal.type);
|
|
92
|
+
}
|
|
93
|
+
return this.getCandidate(id);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get all pending candidates (medium confidence, queued for review).
|
|
97
|
+
*/
|
|
98
|
+
getCandidates(limit = 20) {
|
|
99
|
+
const rows = this.provider.all('SELECT * FROM radar_candidates WHERE status = ? ORDER BY confidence DESC LIMIT ?', ['pending', limit]);
|
|
100
|
+
return rows.map(rowToCandidate);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get a single candidate by ID.
|
|
104
|
+
*/
|
|
105
|
+
getCandidate(id) {
|
|
106
|
+
const row = this.provider.get('SELECT * FROM radar_candidates WHERE id = ?', [
|
|
107
|
+
id,
|
|
108
|
+
]);
|
|
109
|
+
return row ? rowToCandidate(row) : null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Approve a pending candidate — capture it to vault.
|
|
113
|
+
*/
|
|
114
|
+
approve(candidateId) {
|
|
115
|
+
const candidate = this.getCandidate(candidateId);
|
|
116
|
+
if (!candidate || candidate.status !== 'pending') {
|
|
117
|
+
return { captured: false };
|
|
118
|
+
}
|
|
119
|
+
const entryId = this.captureCandidate(candidateId, candidate.title, candidate.description, candidate.suggestedType, candidate.signalType);
|
|
120
|
+
return { captured: true, entryId };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Dismiss a pending candidate — mark it as not worth capturing.
|
|
124
|
+
*/
|
|
125
|
+
dismiss(candidateId) {
|
|
126
|
+
const result = this.provider.run("UPDATE radar_candidates SET status = 'dismissed' WHERE id = ? AND status = 'pending'", [candidateId]);
|
|
127
|
+
return { dismissed: result.changes > 0 };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Flush: auto-capture all pending candidates above a confidence threshold.
|
|
131
|
+
*/
|
|
132
|
+
flush(minConfidence = HIGH_CONFIDENCE) {
|
|
133
|
+
const rows = this.provider.all('SELECT * FROM radar_candidates WHERE status = ? AND confidence >= ? ORDER BY confidence DESC', ['pending', minConfidence]);
|
|
134
|
+
let captured = 0;
|
|
135
|
+
let failed = 0;
|
|
136
|
+
const capturedIds = [];
|
|
137
|
+
for (const row of rows) {
|
|
138
|
+
try {
|
|
139
|
+
this.captureCandidate(row.id, row.title, row.description, row.suggested_type, row.signal_type);
|
|
140
|
+
captured++;
|
|
141
|
+
capturedIds.push(row.id);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
failed++;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { captured, capturedIds, failed };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get radar statistics.
|
|
151
|
+
*/
|
|
152
|
+
getStats() {
|
|
153
|
+
const total = this.provider.get('SELECT COUNT(*) as count FROM radar_candidates').count;
|
|
154
|
+
const statusRows = this.provider.all('SELECT status, COUNT(*) as count FROM radar_candidates GROUP BY status');
|
|
155
|
+
const byStatus = {};
|
|
156
|
+
for (const row of statusRows)
|
|
157
|
+
byStatus[row.status] = row.count;
|
|
158
|
+
const gaps = this.provider.get("SELECT COUNT(*) as count FROM radar_candidates WHERE signal_type = 'search_miss' OR signal_type = 'repeated_question'").count;
|
|
159
|
+
return {
|
|
160
|
+
totalAnalyzed: total,
|
|
161
|
+
autoCaptured: byStatus['captured'] ?? 0,
|
|
162
|
+
queued: byStatus['pending'] ?? 0,
|
|
163
|
+
dismissed: byStatus['dismissed'] ?? 0,
|
|
164
|
+
logged: byStatus['logged'] ?? 0,
|
|
165
|
+
knowledgeGaps: gaps,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// ─── Internal ──────────────────────────────────────────────────────
|
|
169
|
+
captureCandidate(candidateId, title, description, suggestedType, signalType) {
|
|
170
|
+
const id = `radar-${signalType}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
171
|
+
const entryType = suggestedType === 'anti-pattern' ? 'anti-pattern' : 'pattern';
|
|
172
|
+
this.brain.enrichAndCapture({
|
|
173
|
+
id,
|
|
174
|
+
type: entryType,
|
|
175
|
+
domain: 'general',
|
|
176
|
+
title,
|
|
177
|
+
description,
|
|
178
|
+
severity: 'suggestion',
|
|
179
|
+
tags: ['radar-detected', signalType],
|
|
180
|
+
origin: 'agent',
|
|
181
|
+
});
|
|
182
|
+
this.provider.run("UPDATE radar_candidates SET status = 'captured' WHERE id = ?", [
|
|
183
|
+
candidateId,
|
|
184
|
+
]);
|
|
185
|
+
return id;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function rowToCandidate(row) {
|
|
189
|
+
return {
|
|
190
|
+
id: row.id,
|
|
191
|
+
signalType: row.signal_type,
|
|
192
|
+
title: row.title,
|
|
193
|
+
description: row.description,
|
|
194
|
+
suggestedType: row.suggested_type,
|
|
195
|
+
confidence: row.confidence,
|
|
196
|
+
status: row.status,
|
|
197
|
+
sourceQuery: row.source_query,
|
|
198
|
+
context: row.context,
|
|
199
|
+
createdAt: row.created_at,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=learning-radar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-radar.js","sourceRoot":"","sources":["../../src/brain/learning-radar.ts"],"names":[],"mappings":"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"}
|
package/dist/brain/types.d.ts
CHANGED
|
@@ -27,6 +27,21 @@ export interface SearchOptions {
|
|
|
27
27
|
severity?: string;
|
|
28
28
|
limit?: number;
|
|
29
29
|
tags?: string[];
|
|
30
|
+
/** 'full' returns RankedResult[] with complete entries (default). 'scan' returns ScanResult[] — lightweight titles + scores for two-pass retrieval. */
|
|
31
|
+
mode?: 'full' | 'scan';
|
|
32
|
+
}
|
|
33
|
+
/** Lightweight search result for scan mode — titles + scores without full entry body. */
|
|
34
|
+
export interface ScanResult {
|
|
35
|
+
id: string;
|
|
36
|
+
title: string;
|
|
37
|
+
score: number;
|
|
38
|
+
type: string;
|
|
39
|
+
domain: string;
|
|
40
|
+
severity: string;
|
|
41
|
+
tags: string[];
|
|
42
|
+
snippet: string;
|
|
43
|
+
/** Estimated tokens if this entry were loaded in full. */
|
|
44
|
+
tokenEstimate: number;
|
|
30
45
|
}
|
|
31
46
|
export interface CaptureResult {
|
|
32
47
|
captured: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/brain/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/brain/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../../src/context/context-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAGV,sBAAsB,EAEtB,wBAAwB,EACxB,eAAe,EAEf,mBAAmB,EACpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../../src/context/context-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAGV,sBAAsB,EAEtB,wBAAwB,EACxB,eAAe,EAEf,mBAAmB,EACpB,MAAM,YAAY,CAAC;AA8EpB,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAgC;gBAG5C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,MAAM,CAAC,EAAE,mBAAmB;IAgB9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB;IAmCjD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgGrF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA+BxE,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;CAkBtB"}
|
|
@@ -49,9 +49,30 @@ const STOP_PATTERNS = new Set([
|
|
|
49
49
|
'end-to-end',
|
|
50
50
|
'out-of-the-box',
|
|
51
51
|
]);
|
|
52
|
-
// ───
|
|
52
|
+
// ─── Scoring Constants (tunable) ────────────────────────────────────
|
|
53
|
+
/** Confidence thresholds for discrete levels. */
|
|
53
54
|
const HIGH_CONFIDENCE = 0.75;
|
|
54
55
|
const MEDIUM_CONFIDENCE = 0.45;
|
|
56
|
+
/** Weights for knowledge item multi-signal scoring. */
|
|
57
|
+
const KNOWLEDGE_WEIGHTS = {
|
|
58
|
+
/** Base FTS/vector score weight. */
|
|
59
|
+
baseScore: 0.4,
|
|
60
|
+
/** Title keyword overlap weight. */
|
|
61
|
+
titleMatch: 0.25,
|
|
62
|
+
/** Tag overlap weight. */
|
|
63
|
+
tagOverlap: 0.2,
|
|
64
|
+
/** Intent/domain alignment weight. */
|
|
65
|
+
intentBoost: 0.15,
|
|
66
|
+
};
|
|
67
|
+
/** Weights for confidence computation. */
|
|
68
|
+
const CONFIDENCE_WEIGHTS = {
|
|
69
|
+
entitySignalPerEntity: 0.08,
|
|
70
|
+
entitySignalMax: 0.4,
|
|
71
|
+
actionSignal: 0.2,
|
|
72
|
+
knowledgeSignalMultiplier: 0.3,
|
|
73
|
+
sourceDiversityPerExtra: 0.05,
|
|
74
|
+
sourceDiversityMax: 0.1,
|
|
75
|
+
};
|
|
55
76
|
// ─── Class ──────────────────────────────────────────────────────────
|
|
56
77
|
export class ContextEngine {
|
|
57
78
|
vault;
|
|
@@ -87,7 +108,13 @@ export class ContextEngine {
|
|
|
87
108
|
if (type === 'pattern' && STOP_PATTERNS.has(value))
|
|
88
109
|
continue;
|
|
89
110
|
seen.add(key);
|
|
90
|
-
entities.push({
|
|
111
|
+
entities.push({
|
|
112
|
+
type,
|
|
113
|
+
value,
|
|
114
|
+
confidence,
|
|
115
|
+
start: match.index,
|
|
116
|
+
end: match.index + match[0].length,
|
|
117
|
+
});
|
|
91
118
|
}
|
|
92
119
|
}
|
|
93
120
|
// Group by type
|
|
@@ -109,15 +136,22 @@ export class ContextEngine {
|
|
|
109
136
|
domain,
|
|
110
137
|
limit: this.config.vaultSearchLimit,
|
|
111
138
|
});
|
|
112
|
-
// Normalize FTS5 -rank scores to 0-1 range
|
|
139
|
+
// Normalize FTS5 -rank scores to 0-1 range, then apply multi-signal scoring
|
|
113
140
|
const maxScore = vaultResults.length > 0 ? Math.max(...vaultResults.map((r) => r.score)) : 1;
|
|
141
|
+
const promptTokens = new Set(prompt
|
|
142
|
+
.toLowerCase()
|
|
143
|
+
.split(/\s+/)
|
|
144
|
+
.filter((t) => t.length >= 3));
|
|
114
145
|
for (const r of vaultResults) {
|
|
146
|
+
const baseScore = maxScore > 0 ? r.score / maxScore : 0.5;
|
|
147
|
+
const enrichedScore = scoreKnowledgeItem(baseScore, r.entry.title, r.entry.tags, promptTokens, domain, r.entry.domain);
|
|
115
148
|
items.push({
|
|
116
149
|
id: r.entry.id,
|
|
117
150
|
title: r.entry.title,
|
|
118
|
-
score:
|
|
151
|
+
score: enrichedScore,
|
|
119
152
|
source: 'vault',
|
|
120
153
|
domain: r.entry.domain,
|
|
154
|
+
tags: r.entry.tags,
|
|
121
155
|
});
|
|
122
156
|
vaultHits++;
|
|
123
157
|
}
|
|
@@ -200,25 +234,21 @@ export class ContextEngine {
|
|
|
200
234
|
// ─── Private Helpers ────────────────────────────────────────────
|
|
201
235
|
computeConfidence(entities, knowledge) {
|
|
202
236
|
let score = 0;
|
|
203
|
-
// Entity signal
|
|
237
|
+
// Entity signal: more entities = clearer prompt
|
|
204
238
|
const entityCount = entities.entities.length;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
// Action signal (0-0.2): explicit actions boost confidence
|
|
239
|
+
score += Math.min(CONFIDENCE_WEIGHTS.entitySignalMax, entityCount * CONFIDENCE_WEIGHTS.entitySignalPerEntity);
|
|
240
|
+
// Action signal: explicit actions boost confidence
|
|
208
241
|
const actions = entities.byType.action ?? [];
|
|
209
242
|
if (actions.length > 0)
|
|
210
|
-
score +=
|
|
211
|
-
// Knowledge signal
|
|
243
|
+
score += CONFIDENCE_WEIGHTS.actionSignal;
|
|
244
|
+
// Knowledge signal: relevant knowledge found
|
|
212
245
|
if (knowledge.items.length > 0) {
|
|
213
|
-
|
|
214
|
-
score += topScore * 0.3;
|
|
246
|
+
score += knowledge.items[0].score * CONFIDENCE_WEIGHTS.knowledgeSignalMultiplier;
|
|
215
247
|
}
|
|
216
|
-
// Source diversity bonus
|
|
248
|
+
// Source diversity bonus: multiple sources = more confident
|
|
217
249
|
const sources = new Set(knowledge.items.map((i) => i.source));
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if (sources.size >= 3)
|
|
221
|
-
score += 0.05;
|
|
250
|
+
const diversityBonus = Math.min(CONFIDENCE_WEIGHTS.sourceDiversityMax, Math.max(0, sources.size - 1) * CONFIDENCE_WEIGHTS.sourceDiversityPerExtra);
|
|
251
|
+
score += diversityBonus;
|
|
222
252
|
return Math.min(1, score);
|
|
223
253
|
}
|
|
224
254
|
toConfidenceLevel(confidence) {
|
|
@@ -242,4 +272,39 @@ export class ContextEngine {
|
|
|
242
272
|
return [...domains];
|
|
243
273
|
}
|
|
244
274
|
}
|
|
275
|
+
// ─── Multi-Signal Knowledge Scoring ─────────────────────────────────
|
|
276
|
+
/**
|
|
277
|
+
* Score a knowledge item using multiple signals:
|
|
278
|
+
* - baseScore: FTS5 rank or vector similarity (0-1)
|
|
279
|
+
* - titleMatch: keyword overlap between prompt and entry title
|
|
280
|
+
* - tagOverlap: how many prompt tokens appear in entry tags
|
|
281
|
+
* - intentBoost: domain alignment between query domain and entry domain
|
|
282
|
+
*/
|
|
283
|
+
function scoreKnowledgeItem(baseScore, title, tags, promptTokens, queryDomain, entryDomain) {
|
|
284
|
+
// Title match: fraction of prompt tokens found in title
|
|
285
|
+
const titleTokens = new Set(title
|
|
286
|
+
.toLowerCase()
|
|
287
|
+
.split(/\s+/)
|
|
288
|
+
.filter((t) => t.length >= 3));
|
|
289
|
+
let titleOverlap = 0;
|
|
290
|
+
for (const t of promptTokens) {
|
|
291
|
+
if (titleTokens.has(t))
|
|
292
|
+
titleOverlap++;
|
|
293
|
+
}
|
|
294
|
+
const titleMatch = promptTokens.size > 0 ? titleOverlap / promptTokens.size : 0;
|
|
295
|
+
// Tag overlap: fraction of tags that match prompt tokens
|
|
296
|
+
const lowerTags = tags.map((t) => t.toLowerCase());
|
|
297
|
+
let tagHits = 0;
|
|
298
|
+
for (const tag of lowerTags) {
|
|
299
|
+
if (promptTokens.has(tag))
|
|
300
|
+
tagHits++;
|
|
301
|
+
}
|
|
302
|
+
const tagOverlap = lowerTags.length > 0 ? tagHits / lowerTags.length : 0;
|
|
303
|
+
// Intent boost: 1.0 if domains match, 0.0 otherwise
|
|
304
|
+
const intentBoost = queryDomain && entryDomain && queryDomain === entryDomain ? 1.0 : 0.0;
|
|
305
|
+
return Math.min(1.0, baseScore * KNOWLEDGE_WEIGHTS.baseScore +
|
|
306
|
+
titleMatch * KNOWLEDGE_WEIGHTS.titleMatch +
|
|
307
|
+
tagOverlap * KNOWLEDGE_WEIGHTS.tagOverlap +
|
|
308
|
+
intentBoost * KNOWLEDGE_WEIGHTS.intentBoost);
|
|
309
|
+
}
|
|
245
310
|
//# sourceMappingURL=context-engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-engine.js","sourceRoot":"","sources":["../../src/context/context-engine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context-engine.js","sourceRoot":"","sources":["../../src/context/context-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/context/types.d.ts
CHANGED
|
@@ -6,6 +6,10 @@ export interface ExtractedEntity {
|
|
|
6
6
|
type: EntityType;
|
|
7
7
|
value: string;
|
|
8
8
|
confidence: number;
|
|
9
|
+
/** Start offset in the original prompt. */
|
|
10
|
+
start?: number;
|
|
11
|
+
/** End offset in the original prompt. */
|
|
12
|
+
end?: number;
|
|
9
13
|
}
|
|
10
14
|
export interface EntityExtractionResult {
|
|
11
15
|
entities: ExtractedEntity[];
|
|
@@ -17,6 +21,7 @@ export interface KnowledgeItem {
|
|
|
17
21
|
score: number;
|
|
18
22
|
source: 'vault' | 'cognee' | 'brain';
|
|
19
23
|
domain?: string;
|
|
24
|
+
tags?: string[];
|
|
20
25
|
}
|
|
21
26
|
export interface KnowledgeRetrievalResult {
|
|
22
27
|
items: KnowledgeItem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;CACxD;AAID,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,iDAAiD;IACjD,SAAS,EAAE,wBAAwB,CAAC;IACpC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,iDAAiD;IACjD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sCAAsC;IACtC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAID,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Agents can register custom modes at runtime.
|
|
9
9
|
*/
|
|
10
10
|
import type { Vault } from '../vault/vault.js';
|
|
11
|
-
import type { OperationalMode, IntentClassification, ModeConfig, MorphResult } from './types.js';
|
|
11
|
+
import type { OperationalMode, IntentClassification, ModeConfig, MorphResult, RoutingAccuracyReport } from './types.js';
|
|
12
12
|
export declare class IntentRouter {
|
|
13
13
|
private vault;
|
|
14
14
|
private provider;
|
|
@@ -24,6 +24,17 @@ export declare class IntentRouter {
|
|
|
24
24
|
getModes(): ModeConfig[];
|
|
25
25
|
registerMode(config: ModeConfig): void;
|
|
26
26
|
updateModeRules(mode: OperationalMode, rules: string[]): void;
|
|
27
|
+
recordRoutingFeedback(input: {
|
|
28
|
+
routingLogId?: number;
|
|
29
|
+
initialIntent: string;
|
|
30
|
+
actualIntent: string;
|
|
31
|
+
confidence: number;
|
|
32
|
+
correction: boolean;
|
|
33
|
+
}): {
|
|
34
|
+
recorded: boolean;
|
|
35
|
+
id: number;
|
|
36
|
+
};
|
|
37
|
+
getRoutingAccuracy(periodDays?: number): RoutingAccuracyReport;
|
|
27
38
|
getRoutingStats(): {
|
|
28
39
|
totalRouted: number;
|
|
29
40
|
byIntent: Record<string, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-router.d.ts","sourceRoot":"","sources":["../../src/control/intent-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,WAAW,
|
|
1
|
+
{"version":3,"file":"intent-router.d.ts","sourceRoot":"","sources":["../../src/control/intent-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAuHpB,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,WAAW,CAAmC;gBAE1C,KAAK,EAAE,KAAK;IASxB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,gBAAgB;IAoBxB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB;IAiDjD,OAAO,CAAC,UAAU;IAgBlB,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;IAczC,cAAc,IAAI,eAAe;IAIjC,gBAAgB,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE;IAWlD,QAAQ,IAAI,UAAU,EAAE;IAKxB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IActC,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAY7D,qBAAqB,CAAC,KAAK,EAAE;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;IAerC,kBAAkB,CAAC,UAAU,GAAE,MAAW,GAAG,qBAAqB;IA2ElE,eAAe,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC;CAuBF"}
|
|
@@ -163,6 +163,16 @@ export class IntentRouter {
|
|
|
163
163
|
matched_keywords TEXT NOT NULL DEFAULT '[]',
|
|
164
164
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
165
165
|
);
|
|
166
|
+
|
|
167
|
+
CREATE TABLE IF NOT EXISTS routing_feedback (
|
|
168
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
169
|
+
routing_log_id INTEGER,
|
|
170
|
+
initial_intent TEXT NOT NULL,
|
|
171
|
+
actual_intent TEXT NOT NULL,
|
|
172
|
+
correction INTEGER NOT NULL DEFAULT 0,
|
|
173
|
+
confidence REAL NOT NULL,
|
|
174
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
175
|
+
);
|
|
166
176
|
`);
|
|
167
177
|
}
|
|
168
178
|
seedDefaultModes() {
|
|
@@ -278,6 +288,64 @@ export class IntentRouter {
|
|
|
278
288
|
throw new Error(`Unknown mode: ${mode}`);
|
|
279
289
|
}
|
|
280
290
|
}
|
|
291
|
+
// ─── Routing Feedback ─────────────────────────────────────────────
|
|
292
|
+
recordRoutingFeedback(input) {
|
|
293
|
+
const result = this.provider.run(`INSERT INTO routing_feedback (routing_log_id, initial_intent, actual_intent, correction, confidence)
|
|
294
|
+
VALUES (?, ?, ?, ?, ?)`, [
|
|
295
|
+
input.routingLogId ?? null,
|
|
296
|
+
input.initialIntent,
|
|
297
|
+
input.actualIntent,
|
|
298
|
+
input.correction ? 1 : 0,
|
|
299
|
+
input.confidence,
|
|
300
|
+
]);
|
|
301
|
+
return { recorded: true, id: Number(result.lastInsertRowid) };
|
|
302
|
+
}
|
|
303
|
+
getRoutingAccuracy(periodDays = 30) {
|
|
304
|
+
const cutoff = new Date(Date.now() - periodDays * 86400000).toISOString();
|
|
305
|
+
const total = this.provider.get('SELECT COUNT(*) as count FROM routing_feedback WHERE created_at >= ?', [cutoff]).count;
|
|
306
|
+
const correct = this.provider.get('SELECT COUNT(*) as count FROM routing_feedback WHERE initial_intent = actual_intent AND created_at >= ?', [cutoff]).count;
|
|
307
|
+
const corrections = this.provider.get('SELECT COUNT(*) as count FROM routing_feedback WHERE correction = 1 AND created_at >= ?', [cutoff]).count;
|
|
308
|
+
// Common misroutes
|
|
309
|
+
const misrouteRows = this.provider.all(`SELECT initial_intent as from_intent, actual_intent as to_intent, COUNT(*) as count
|
|
310
|
+
FROM routing_feedback
|
|
311
|
+
WHERE initial_intent != actual_intent AND created_at >= ?
|
|
312
|
+
GROUP BY initial_intent, actual_intent
|
|
313
|
+
ORDER BY count DESC
|
|
314
|
+
LIMIT 10`, [cutoff]);
|
|
315
|
+
// Confidence calibration: group by confidence bucket and check accuracy per bucket
|
|
316
|
+
const calibrationRows = this.provider.all(`SELECT
|
|
317
|
+
CASE
|
|
318
|
+
WHEN confidence >= 0.8 THEN 'high'
|
|
319
|
+
WHEN confidence >= 0.4 THEN 'medium'
|
|
320
|
+
ELSE 'low'
|
|
321
|
+
END as bucket,
|
|
322
|
+
COUNT(*) as total,
|
|
323
|
+
SUM(CASE WHEN initial_intent = actual_intent THEN 1 ELSE 0 END) as correct
|
|
324
|
+
FROM routing_feedback
|
|
325
|
+
WHERE created_at >= ?
|
|
326
|
+
GROUP BY bucket`, [cutoff]);
|
|
327
|
+
const calibration = {};
|
|
328
|
+
for (const row of calibrationRows) {
|
|
329
|
+
calibration[row.bucket] = {
|
|
330
|
+
total: row.total,
|
|
331
|
+
correct: row.correct,
|
|
332
|
+
accuracy: row.total > 0 ? Math.round((row.correct / row.total) * 100) : 0,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
return {
|
|
336
|
+
periodDays,
|
|
337
|
+
total,
|
|
338
|
+
correct,
|
|
339
|
+
accuracy: total > 0 ? Math.round((correct / total) * 100) : 100,
|
|
340
|
+
corrections,
|
|
341
|
+
commonMisroutes: misrouteRows.map((r) => ({
|
|
342
|
+
from: r.from_intent,
|
|
343
|
+
to: r.to_intent,
|
|
344
|
+
count: r.count,
|
|
345
|
+
})),
|
|
346
|
+
confidenceCalibration: calibration,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
281
349
|
// ─── Analytics ──────────────────────────────────────────────────────
|
|
282
350
|
getRoutingStats() {
|
|
283
351
|
const total = this.provider.get('SELECT COUNT(*) as count FROM agent_routing_log').count;
|