vesper-memory 0.4.0 → 0.5.1
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/CHANGELOG.md +57 -3
- package/LICENSE +59 -0
- package/README.md +420 -23
- package/config/migrations/001_add_skill_summary.sql +75 -0
- package/config/migrations/001_rollback_skill_summary.sql +60 -0
- package/config/sqlite-schema.sql +68 -4
- package/dist/benchmark/types.d.ts +4 -4
- package/dist/cli.js +0 -0
- package/dist/consolidation/pipeline.d.ts +6 -1
- package/dist/consolidation/pipeline.d.ts.map +1 -1
- package/dist/consolidation/pipeline.js +53 -35
- package/dist/consolidation/pipeline.js.map +1 -1
- package/dist/memory-layers/semantic-memory.d.ts +9 -19
- package/dist/memory-layers/semantic-memory.d.ts.map +1 -1
- package/dist/memory-layers/semantic-memory.js +31 -54
- package/dist/memory-layers/semantic-memory.js.map +1 -1
- package/dist/memory-layers/skill-lazy-loading.d.ts +160 -0
- package/dist/memory-layers/skill-lazy-loading.d.ts.map +1 -0
- package/dist/memory-layers/skill-lazy-loading.js +247 -0
- package/dist/memory-layers/skill-lazy-loading.js.map +1 -0
- package/dist/memory-layers/skill-library.d.ts +133 -4
- package/dist/memory-layers/skill-library.d.ts.map +1 -1
- package/dist/memory-layers/skill-library.js +427 -8
- package/dist/memory-layers/skill-library.js.map +1 -1
- package/dist/memory-layers/working-memory.d.ts +35 -14
- package/dist/memory-layers/working-memory.d.ts.map +1 -1
- package/dist/memory-layers/working-memory.js +114 -36
- package/dist/memory-layers/working-memory.js.map +1 -1
- package/dist/retrieval/hybrid-search.d.ts +2 -2
- package/dist/retrieval/hybrid-search.d.ts.map +1 -1
- package/dist/retrieval/hybrid-search.js +4 -3
- package/dist/retrieval/hybrid-search.js.map +1 -1
- package/dist/router/smart-router.d.ts +25 -0
- package/dist/router/smart-router.d.ts.map +1 -1
- package/dist/router/smart-router.js +90 -10
- package/dist/router/smart-router.js.map +1 -1
- package/dist/scheduler/consolidation-scheduler.d.ts +129 -0
- package/dist/scheduler/consolidation-scheduler.d.ts.map +1 -0
- package/dist/scheduler/consolidation-scheduler.js +179 -0
- package/dist/scheduler/consolidation-scheduler.js.map +1 -0
- package/dist/scheduler/index.d.ts +7 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +7 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/server-wrapper.js +0 -0
- package/dist/server.js +879 -28
- package/dist/server.js.map +1 -1
- package/dist/synthesis/conflict-detector.d.ts +4 -6
- package/dist/synthesis/conflict-detector.d.ts.map +1 -1
- package/dist/synthesis/conflict-detector.js +19 -21
- package/dist/synthesis/conflict-detector.js.map +1 -1
- package/dist/utils/validation.d.ts +123 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +146 -7
- package/dist/utils/validation.js.map +1 -1
- package/docker-compose.yml +6 -6
- package/embedding-service/README.md +8 -0
- package/package.json +5 -2
- package/scripts/FRESH_INSTALL.md +1 -1
- package/scripts/ensure-infrastructure.sh +86 -26
- package/scripts/health-check.sh +2 -1
- package/scripts/stop-infrastructure.sh +23 -0
- package/scripts/test-mcp-server.sh +2 -1
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
* Semantic Memory Layer - v3.0 Implementation
|
|
3
3
|
*
|
|
4
4
|
* SQLite knowledge graph with HippoRAG Personalized PageRank.
|
|
5
|
+
* v0.5.0: Added namespace parameter for multi-agent isolation.
|
|
5
6
|
*/
|
|
6
7
|
export class SemanticMemoryLayer {
|
|
7
8
|
db;
|
|
8
9
|
constructor(db) {
|
|
9
10
|
this.db = db;
|
|
10
11
|
}
|
|
11
|
-
upsertEntity(entity) {
|
|
12
|
+
upsertEntity(entity, namespace = 'default') {
|
|
12
13
|
if (!entity.name || entity.name.trim() === '') {
|
|
13
14
|
throw new Error('Entity name cannot be empty');
|
|
14
15
|
}
|
|
15
|
-
const existing = this.db.prepare('SELECT * FROM entities WHERE name = ? AND type = ?').get(entity.name, entity.type);
|
|
16
|
+
const existing = this.db.prepare('SELECT * FROM entities WHERE name = ? AND type = ? AND namespace = ?').get(entity.name, entity.type, namespace);
|
|
16
17
|
if (existing) {
|
|
17
18
|
this.db.prepare('UPDATE entities SET last_accessed = ?, access_count = access_count + 1 WHERE id = ?').run(new Date().toISOString(), existing.id);
|
|
18
19
|
return existing;
|
|
@@ -20,9 +21,9 @@ export class SemanticMemoryLayer {
|
|
|
20
21
|
const id = 'entity_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
|
|
21
22
|
const now = new Date().toISOString();
|
|
22
23
|
this.db.prepare(`
|
|
23
|
-
INSERT INTO entities (id, name, type, description, confidence, created_at, last_accessed, access_count)
|
|
24
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
25
|
-
`).run(id, entity.name, entity.type, entity.description || null, entity.confidence || 1.0, now, now, 1);
|
|
24
|
+
INSERT INTO entities (id, name, type, description, confidence, created_at, last_accessed, access_count, namespace)
|
|
25
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
26
|
+
`).run(id, entity.name, entity.type, entity.description || null, entity.confidence || 1.0, now, now, 1, namespace);
|
|
26
27
|
return {
|
|
27
28
|
id,
|
|
28
29
|
name: entity.name,
|
|
@@ -31,15 +32,15 @@ export class SemanticMemoryLayer {
|
|
|
31
32
|
confidence: entity.confidence || 1.0
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
|
-
getEntity(name) {
|
|
35
|
-
const result = this.db.prepare('SELECT * FROM entities WHERE name = ? ORDER BY confidence DESC LIMIT 1').get(name);
|
|
35
|
+
getEntity(name, namespace = 'default') {
|
|
36
|
+
const result = this.db.prepare('SELECT * FROM entities WHERE name = ? AND namespace = ? ORDER BY confidence DESC LIMIT 1').get(name, namespace);
|
|
36
37
|
if (result) {
|
|
37
38
|
this.db.prepare('UPDATE entities SET last_accessed = ?, access_count = access_count + 1 WHERE id = ?').run(new Date().toISOString(), result.id);
|
|
38
39
|
}
|
|
39
40
|
return result || null;
|
|
40
41
|
}
|
|
41
|
-
upsertRelationship(rel) {
|
|
42
|
-
const existing = this.db.prepare('SELECT * FROM relationships WHERE source_id = ? AND target_id = ? AND relation_type = ?').get(rel.sourceId, rel.targetId, rel.relationType);
|
|
42
|
+
upsertRelationship(rel, namespace = 'default') {
|
|
43
|
+
const existing = this.db.prepare('SELECT * FROM relationships WHERE source_id = ? AND target_id = ? AND relation_type = ? AND namespace = ?').get(rel.sourceId, rel.targetId, rel.relationType, namespace);
|
|
43
44
|
const now = new Date().toISOString();
|
|
44
45
|
if (existing) {
|
|
45
46
|
const newStrength = Math.min(1.0, existing.strength + 0.2);
|
|
@@ -48,11 +49,11 @@ export class SemanticMemoryLayer {
|
|
|
48
49
|
}
|
|
49
50
|
const id = 'rel_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
|
|
50
51
|
this.db.prepare(`
|
|
51
|
-
INSERT INTO relationships (id, source_id, target_id, relation_type, strength, evidence, created_at, last_reinforced)
|
|
52
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
53
|
-
`).run(id, rel.sourceId, rel.targetId, rel.relationType, rel.strength || 0.8, '[]', now, now);
|
|
52
|
+
INSERT INTO relationships (id, source_id, target_id, relation_type, strength, evidence, created_at, last_reinforced, namespace)
|
|
53
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
54
|
+
`).run(id, rel.sourceId, rel.targetId, rel.relationType, rel.strength || 0.8, '[]', now, now, namespace);
|
|
54
55
|
}
|
|
55
|
-
personalizedPageRank(entityId, depth = 3) {
|
|
56
|
+
personalizedPageRank(entityId, depth = 3, namespace = 'default') {
|
|
56
57
|
const visited = new Set();
|
|
57
58
|
const results = [];
|
|
58
59
|
let currentLayer = [{ entityId, score: 1.0 }];
|
|
@@ -62,10 +63,10 @@ export class SemanticMemoryLayer {
|
|
|
62
63
|
if (visited.has(node.entityId))
|
|
63
64
|
continue;
|
|
64
65
|
visited.add(node.entityId);
|
|
65
|
-
const entity = this.db.prepare('SELECT * FROM entities WHERE id = ?').get(node.entityId);
|
|
66
|
+
const entity = this.db.prepare('SELECT * FROM entities WHERE id = ? AND namespace = ?').get(node.entityId, namespace);
|
|
66
67
|
if (entity)
|
|
67
68
|
results.push({ ...entity, relevanceScore: node.score });
|
|
68
|
-
const rels = this.db.prepare('SELECT * FROM relationships WHERE source_id = ? OR target_id = ?').all(node.entityId, node.entityId);
|
|
69
|
+
const rels = this.db.prepare('SELECT * FROM relationships WHERE (source_id = ? OR target_id = ?) AND namespace = ?').all(node.entityId, node.entityId, namespace);
|
|
69
70
|
for (const rel of rels) {
|
|
70
71
|
const nextId = rel.source_id === node.entityId ? rel.target_id : rel.source_id;
|
|
71
72
|
const score = node.score * rel.strength * 0.7;
|
|
@@ -78,26 +79,13 @@ export class SemanticMemoryLayer {
|
|
|
78
79
|
}
|
|
79
80
|
return results.sort((a, b) => b.relevanceScore - a.relevanceScore);
|
|
80
81
|
}
|
|
81
|
-
|
|
82
|
-
* Enhanced Personalized PageRank with fact retrieval for multi-hop reasoning.
|
|
83
|
-
*
|
|
84
|
-
* Returns both entities AND their associated facts along the traversal path,
|
|
85
|
-
* enabling multi-hop query answering (e.g., "What protocol does Vesper follow?"
|
|
86
|
-
* can chain Vesper -> MCP -> "Model Context Protocol").
|
|
87
|
-
*
|
|
88
|
-
* @param entityId - Starting entity ID for traversal
|
|
89
|
-
* @param depth - Maximum hops to traverse (default: 3 for multi-hop queries)
|
|
90
|
-
* @returns PageRankWithFactsResult containing entities, facts, paths, and chains
|
|
91
|
-
*/
|
|
92
|
-
personalizedPageRankWithFacts(entityId, depth = 3) {
|
|
82
|
+
personalizedPageRankWithFacts(entityId, depth = 3, namespace = 'default') {
|
|
93
83
|
const visited = new Set();
|
|
94
84
|
const entities = [];
|
|
95
85
|
const allFacts = [];
|
|
96
86
|
const paths = [];
|
|
97
87
|
const chains = [];
|
|
98
|
-
// Track paths for explainability: entityId -> { path: string[], hops: number }
|
|
99
88
|
const pathTracker = new Map();
|
|
100
|
-
// BFS with score propagation
|
|
101
89
|
let currentLayer = [{
|
|
102
90
|
entityId,
|
|
103
91
|
score: 1.0,
|
|
@@ -105,8 +93,7 @@ export class SemanticMemoryLayer {
|
|
|
105
93
|
depth: 0,
|
|
106
94
|
lastRelationType: 'start'
|
|
107
95
|
}];
|
|
108
|
-
|
|
109
|
-
const startEntity = this.db.prepare('SELECT * FROM entities WHERE id = ?').get(entityId);
|
|
96
|
+
const startEntity = this.db.prepare('SELECT * FROM entities WHERE id = ? AND namespace = ?').get(entityId, namespace);
|
|
110
97
|
if (!startEntity) {
|
|
111
98
|
return { entities: [], facts: [], paths: [], chains: [] };
|
|
112
99
|
}
|
|
@@ -116,19 +103,16 @@ export class SemanticMemoryLayer {
|
|
|
116
103
|
if (visited.has(node.entityId))
|
|
117
104
|
continue;
|
|
118
105
|
visited.add(node.entityId);
|
|
119
|
-
|
|
120
|
-
const entity = this.db.prepare('SELECT * FROM entities WHERE id = ?').get(node.entityId);
|
|
106
|
+
const entity = this.db.prepare('SELECT * FROM entities WHERE id = ? AND namespace = ?').get(node.entityId, namespace);
|
|
121
107
|
if (entity) {
|
|
122
108
|
entities.push({ ...entity, relevanceScore: node.score });
|
|
123
|
-
// Get facts for this entity (valid facts only)
|
|
124
109
|
const entityFacts = this.db.prepare(`
|
|
125
110
|
SELECT * FROM facts
|
|
126
|
-
WHERE entity_id = ?
|
|
111
|
+
WHERE entity_id = ? AND namespace = ?
|
|
127
112
|
AND (valid_until IS NULL OR valid_until > datetime('now'))
|
|
128
113
|
ORDER BY confidence DESC
|
|
129
|
-
`).all(node.entityId);
|
|
114
|
+
`).all(node.entityId, namespace);
|
|
130
115
|
allFacts.push(...entityFacts);
|
|
131
|
-
// Track path if not the starting node
|
|
132
116
|
if (node.depth > 0) {
|
|
133
117
|
pathTracker.set(node.entityId, {
|
|
134
118
|
path: node.path,
|
|
@@ -142,12 +126,11 @@ export class SemanticMemoryLayer {
|
|
|
142
126
|
path: node.path,
|
|
143
127
|
relationType: node.lastRelationType
|
|
144
128
|
});
|
|
145
|
-
// Build chain info for inference
|
|
146
129
|
if (node.path.length > 2) {
|
|
147
130
|
const intermediaryIds = node.path.slice(1, -1);
|
|
148
131
|
const intermediaryNames = [];
|
|
149
132
|
for (const interId of intermediaryIds) {
|
|
150
|
-
const interEntity = this.db.prepare('SELECT name FROM entities WHERE id = ?').get(interId);
|
|
133
|
+
const interEntity = this.db.prepare('SELECT name FROM entities WHERE id = ? AND namespace = ?').get(interId, namespace);
|
|
151
134
|
if (interEntity) {
|
|
152
135
|
intermediaryNames.push(interEntity.name);
|
|
153
136
|
}
|
|
@@ -161,13 +144,11 @@ export class SemanticMemoryLayer {
|
|
|
161
144
|
}
|
|
162
145
|
}
|
|
163
146
|
}
|
|
164
|
-
// Continue only if we have more depth to traverse
|
|
165
147
|
if (d < depth) {
|
|
166
|
-
const rels = this.db.prepare('SELECT * FROM relationships WHERE source_id = ? OR target_id = ?').all(node.entityId, node.entityId);
|
|
148
|
+
const rels = this.db.prepare('SELECT * FROM relationships WHERE (source_id = ? OR target_id = ?) AND namespace = ?').all(node.entityId, node.entityId, namespace);
|
|
167
149
|
for (const rel of rels) {
|
|
168
150
|
const nextId = rel.source_id === node.entityId ? rel.target_id : rel.source_id;
|
|
169
151
|
const score = node.score * rel.strength * 0.7;
|
|
170
|
-
// Lower threshold for multi-hop to ensure we reach deeper nodes
|
|
171
152
|
if (!visited.has(nextId) && score > 0.05) {
|
|
172
153
|
nextLayer.push({
|
|
173
154
|
entityId: nextId,
|
|
@@ -182,11 +163,8 @@ export class SemanticMemoryLayer {
|
|
|
182
163
|
}
|
|
183
164
|
currentLayer = nextLayer;
|
|
184
165
|
}
|
|
185
|
-
// Sort entities by relevance score
|
|
186
166
|
entities.sort((a, b) => b.relevanceScore - a.relevanceScore);
|
|
187
|
-
// Sort facts by confidence
|
|
188
167
|
allFacts.sort((a, b) => b.confidence - a.confidence);
|
|
189
|
-
// Deduplicate facts (same fact might be reached via different paths)
|
|
190
168
|
const uniqueFacts = allFacts.filter((fact, index, self) => index === self.findIndex(f => f.id === fact.id));
|
|
191
169
|
return {
|
|
192
170
|
entities,
|
|
@@ -195,27 +173,26 @@ export class SemanticMemoryLayer {
|
|
|
195
173
|
chains: chains.length > 0 ? chains : undefined
|
|
196
174
|
};
|
|
197
175
|
}
|
|
198
|
-
applyTemporalDecay() {
|
|
199
|
-
const relationships = this.db.prepare('SELECT * FROM relationships').all();
|
|
176
|
+
applyTemporalDecay(namespace = 'default') {
|
|
177
|
+
const relationships = this.db.prepare('SELECT * FROM relationships WHERE namespace = ?').all(namespace);
|
|
200
178
|
let updated = 0;
|
|
201
179
|
for (const rel of relationships) {
|
|
202
180
|
const daysSince = (Date.now() - new Date(rel.last_reinforced).getTime()) / (1000 * 60 * 60 * 24);
|
|
203
181
|
const newStrength = rel.strength * Math.exp(-daysSince / 30);
|
|
204
|
-
// Just update strength, pruning happens later in consolidation
|
|
205
182
|
this.db.prepare('UPDATE relationships SET strength = ? WHERE id = ?').run(newStrength, rel.id);
|
|
206
183
|
updated++;
|
|
207
184
|
}
|
|
208
185
|
return updated;
|
|
209
186
|
}
|
|
210
|
-
getPreferences(domain) {
|
|
187
|
+
getPreferences(domain, namespace = 'default') {
|
|
211
188
|
if (domain) {
|
|
212
|
-
return this.db.prepare('SELECT * FROM entities WHERE type = ? AND (name LIKE ? OR description LIKE ?)').all('preference', `%${domain}%`, `%${domain}%`);
|
|
189
|
+
return this.db.prepare('SELECT * FROM entities WHERE type = ? AND namespace = ? AND (name LIKE ? OR description LIKE ?)').all('preference', namespace, `%${domain}%`, `%${domain}%`);
|
|
213
190
|
}
|
|
214
|
-
return this.db.prepare('SELECT * FROM entities WHERE type = ?').all('preference');
|
|
191
|
+
return this.db.prepare('SELECT * FROM entities WHERE type = ? AND namespace = ?').all('preference', namespace);
|
|
215
192
|
}
|
|
216
|
-
getByTimeRange(start, end) {
|
|
217
|
-
let query = 'SELECT * FROM entities WHERE
|
|
218
|
-
const params = [];
|
|
193
|
+
getByTimeRange(start, end, namespace = 'default') {
|
|
194
|
+
let query = 'SELECT * FROM entities WHERE namespace = ?';
|
|
195
|
+
const params = [namespace];
|
|
219
196
|
if (start) {
|
|
220
197
|
query += ' AND created_at >= ?';
|
|
221
198
|
params.push(start.toISOString());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-memory.js","sourceRoot":"","sources":["../../src/memory-layers/semantic-memory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"semantic-memory.js","sourceRoot":"","sources":["../../src/memory-layers/semantic-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy Loading for Skill Library
|
|
3
|
+
*
|
|
4
|
+
* Token-efficient skill loading system that reduces skill-related token usage by 80-90%.
|
|
5
|
+
*
|
|
6
|
+
* Strategy:
|
|
7
|
+
* 1. Inject lightweight skill summaries (~50 tokens each) in MCP context
|
|
8
|
+
* 2. Load full implementations only when explicitly invoked
|
|
9
|
+
* 3. Cache loaded skills in working memory (Redis) for session
|
|
10
|
+
*
|
|
11
|
+
* Performance targets:
|
|
12
|
+
* - Summary retrieval: <10ms
|
|
13
|
+
* - Full load: <20ms
|
|
14
|
+
* - Cache hit: <5ms
|
|
15
|
+
* - Token reduction: 80-90%
|
|
16
|
+
*/
|
|
17
|
+
import Database from 'better-sqlite3';
|
|
18
|
+
/**
|
|
19
|
+
* Lightweight skill summary for context injection
|
|
20
|
+
*
|
|
21
|
+
* Contains minimal information needed to identify and trigger a skill.
|
|
22
|
+
* Approximately 50 tokens per summary.
|
|
23
|
+
*/
|
|
24
|
+
export interface SkillSummary {
|
|
25
|
+
/** Unique identifier for the skill */
|
|
26
|
+
id: string;
|
|
27
|
+
/** Short, descriptive name (e.g., "Data Analysis", "Code Review") */
|
|
28
|
+
name: string;
|
|
29
|
+
/** One-line description of what the skill does (~20 words max) */
|
|
30
|
+
summary: string;
|
|
31
|
+
/** Category for grouping (e.g., "analysis", "writing", "coding") */
|
|
32
|
+
category: string;
|
|
33
|
+
/** Trigger keywords that activate this skill (max 5) */
|
|
34
|
+
triggers: string[];
|
|
35
|
+
/** Quality score: 0-1, based on success rate and satisfaction */
|
|
36
|
+
quality_score: number;
|
|
37
|
+
/** When this skill was last successfully used */
|
|
38
|
+
last_used?: Date;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Full skill implementation with complete details
|
|
42
|
+
*
|
|
43
|
+
* Loaded on-demand when a skill is explicitly invoked.
|
|
44
|
+
* Contains all information needed to execute the skill.
|
|
45
|
+
*/
|
|
46
|
+
export interface FullSkill extends SkillSummary {
|
|
47
|
+
/** Full description with context and usage examples */
|
|
48
|
+
description: string;
|
|
49
|
+
/** Executable code or reference to implementation */
|
|
50
|
+
code?: string;
|
|
51
|
+
/** Type of code: 'inline' TypeScript or 'reference' to function */
|
|
52
|
+
code_type?: 'inline' | 'reference';
|
|
53
|
+
/** Prerequisites or required context */
|
|
54
|
+
prerequisites?: string[];
|
|
55
|
+
/** Success tracking */
|
|
56
|
+
success_count: number;
|
|
57
|
+
failure_count: number;
|
|
58
|
+
avg_user_satisfaction: number;
|
|
59
|
+
/** Dependency tracking for composition */
|
|
60
|
+
uses_skills?: string[];
|
|
61
|
+
used_by_skills?: string[];
|
|
62
|
+
/** Metadata */
|
|
63
|
+
created_from?: string;
|
|
64
|
+
created_at: Date;
|
|
65
|
+
last_modified: Date;
|
|
66
|
+
version: number;
|
|
67
|
+
notes?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Cache entry for a loaded skill in working memory
|
|
71
|
+
*/
|
|
72
|
+
export interface CachedSkill {
|
|
73
|
+
skill: FullSkill;
|
|
74
|
+
loaded_at: Date;
|
|
75
|
+
access_count: number;
|
|
76
|
+
ttl: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Skill invocation detection result
|
|
80
|
+
*
|
|
81
|
+
* Determines if a query is attempting to invoke a specific skill.
|
|
82
|
+
*/
|
|
83
|
+
export interface InvocationDetection {
|
|
84
|
+
/** Whether a skill invocation was detected */
|
|
85
|
+
is_invocation: boolean;
|
|
86
|
+
/** The skill ID being invoked (if detected) */
|
|
87
|
+
skill_id?: string;
|
|
88
|
+
/** Confidence score: 0-1 */
|
|
89
|
+
confidence: number;
|
|
90
|
+
/** Pattern that matched (for debugging) */
|
|
91
|
+
matched_pattern?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Lazy Loading Skill Library
|
|
95
|
+
*
|
|
96
|
+
* Extends the base SkillLibrary with lazy loading capabilities.
|
|
97
|
+
*/
|
|
98
|
+
export declare class LazyLoadingSkillLibrary {
|
|
99
|
+
private db;
|
|
100
|
+
private cacheKeyPrefix;
|
|
101
|
+
constructor(db: Database.Database);
|
|
102
|
+
/**
|
|
103
|
+
* Get skill summaries for context injection
|
|
104
|
+
*
|
|
105
|
+
* Returns lightweight summaries of all non-archived skills,
|
|
106
|
+
* sorted by quality score (satisfaction × success rate).
|
|
107
|
+
*
|
|
108
|
+
* @param limit - Maximum number of summaries to return (default: 20)
|
|
109
|
+
* @param category - Optional category filter
|
|
110
|
+
* @returns Array of SkillSummary objects
|
|
111
|
+
*/
|
|
112
|
+
getSummaries(limit?: number, category?: string, namespace?: string): SkillSummary[];
|
|
113
|
+
/**
|
|
114
|
+
* Load full skill implementation
|
|
115
|
+
*
|
|
116
|
+
* Retrieves complete skill details for execution.
|
|
117
|
+
* Results should be cached in working memory.
|
|
118
|
+
*
|
|
119
|
+
* @param skillId - The skill ID to load
|
|
120
|
+
* @returns FullSkill object or null if not found
|
|
121
|
+
*/
|
|
122
|
+
loadFull(skillId: string): FullSkill | null;
|
|
123
|
+
/**
|
|
124
|
+
* Detect if a query is attempting to invoke a specific skill
|
|
125
|
+
*
|
|
126
|
+
* Uses pattern matching to identify skill invocations:
|
|
127
|
+
* - Explicit: "use skill X", "invoke X", "run X"
|
|
128
|
+
* - Implicit: "analyze this like before", "same as last time"
|
|
129
|
+
* - By ID: References a skill ID directly
|
|
130
|
+
*
|
|
131
|
+
* @param query - The user query
|
|
132
|
+
* @param summaries - Available skill summaries for matching
|
|
133
|
+
* @returns InvocationDetection result
|
|
134
|
+
*/
|
|
135
|
+
detectInvocation(query: string, summaries: SkillSummary[]): InvocationDetection;
|
|
136
|
+
/**
|
|
137
|
+
* Calculate quality score for a skill
|
|
138
|
+
*
|
|
139
|
+
* Formula: avg_satisfaction × success_rate
|
|
140
|
+
* Where success_rate = success_count / (success_count + failure_count)
|
|
141
|
+
*
|
|
142
|
+
* @param avgSatisfaction - Average user satisfaction (0-1)
|
|
143
|
+
* @param successCount - Number of successful executions
|
|
144
|
+
* @param failureCount - Number of failed executions
|
|
145
|
+
* @returns Quality score (0-1)
|
|
146
|
+
*/
|
|
147
|
+
private calculateQualityScore;
|
|
148
|
+
/**
|
|
149
|
+
* Generate a one-line summary from name and description
|
|
150
|
+
*
|
|
151
|
+
* Used when summary field is not populated.
|
|
152
|
+
* Truncates description to ~20 words.
|
|
153
|
+
*
|
|
154
|
+
* @param name - Skill name
|
|
155
|
+
* @param description - Full description
|
|
156
|
+
* @returns One-line summary
|
|
157
|
+
*/
|
|
158
|
+
private generateSummary;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=skill-lazy-loading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-lazy-loading.d.ts","sourceRoot":"","sources":["../../src/memory-layers/skill-lazy-loading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IAEX,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IAEb,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAEhB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IAEtB,iDAAiD;IACjD,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mEAAmE;IACnE,SAAS,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAEnC,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,uBAAuB;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,IAAI,CAAC;IACjB,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,cAAc,CAA0B;gBAEpC,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC;;;;;;;;;OASG;IACH,YAAY,CAAC,KAAK,GAAE,MAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,YAAY,EAAE;IAoDlG;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAwC3C;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,mBAAmB;IAoF/E;;;;;;;;;;OAUG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;CAexB"}
|