@mce-bt/microagents-memory 0.7.0 → 0.8.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/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge-graph.d.ts +13 -1
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +95 -47
- package/dist/knowledge-graph.js.map +1 -1
- package/dist/ltm.d.ts +10 -1
- package/dist/ltm.d.ts.map +1 -1
- package/dist/ltm.js +40 -21
- package/dist/ltm.js.map +1 -1
- package/dist/manager.d.ts +40 -0
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +79 -4
- package/dist/manager.js.map +1 -1
- package/dist/memory-tools.js +38 -13
- package/dist/memory-tools.js.map +1 -1
- package/dist/mtm.d.ts +8 -1
- package/dist/mtm.d.ts.map +1 -1
- package/dist/mtm.js +19 -6
- package/dist/mtm.js.map +1 -1
- package/dist/vector-index.d.ts +46 -0
- package/dist/vector-index.d.ts.map +1 -0
- package/dist/vector-index.js +83 -0
- package/dist/vector-index.js.map +1 -0
- package/package.json +1 -1
package/dist/ltm.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import pg from 'pg';
|
|
2
|
+
import { DEFAULT_SIMILARITY_THRESHOLD, ensureVectorIndex } from './vector-index.js';
|
|
2
3
|
const { Pool } = pg;
|
|
3
4
|
/**
|
|
4
5
|
* Long-Term Memory (LTM) — PostgreSQL + pgvector knowledge store.
|
|
@@ -11,9 +12,15 @@ export class LongTermMemory {
|
|
|
11
12
|
config;
|
|
12
13
|
agentId = '';
|
|
13
14
|
embeddingDimensions;
|
|
15
|
+
namespace;
|
|
14
16
|
constructor(config) {
|
|
15
17
|
this.config = config;
|
|
16
18
|
this.embeddingDimensions = config.embeddingDimensions ?? 1536;
|
|
19
|
+
this.namespace = config.namespace ?? 'default';
|
|
20
|
+
}
|
|
21
|
+
/** The dimension this instance's vector column was created with. */
|
|
22
|
+
get dimensions() {
|
|
23
|
+
return this.embeddingDimensions;
|
|
17
24
|
}
|
|
18
25
|
async start(agentId) {
|
|
19
26
|
this.agentId = agentId;
|
|
@@ -35,6 +42,7 @@ export class LongTermMemory {
|
|
|
35
42
|
CREATE TABLE IF NOT EXISTS ltm_knowledge (
|
|
36
43
|
id TEXT PRIMARY KEY,
|
|
37
44
|
agent_id TEXT NOT NULL,
|
|
45
|
+
namespace TEXT NOT NULL DEFAULT 'default',
|
|
38
46
|
content TEXT NOT NULL,
|
|
39
47
|
category TEXT NOT NULL DEFAULT 'general',
|
|
40
48
|
tags TEXT[] DEFAULT '{}',
|
|
@@ -44,22 +52,16 @@ export class LongTermMemory {
|
|
|
44
52
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
45
53
|
);
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
-- Pre-namespace deployments: existing rows collapse into 'default',
|
|
56
|
+
-- which is what they already were — one undifferentiated pool.
|
|
57
|
+
ALTER TABLE ltm_knowledge
|
|
58
|
+
ADD COLUMN IF NOT EXISTS namespace TEXT NOT NULL DEFAULT 'default';
|
|
59
|
+
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_ltm_agent_id ON ltm_knowledge(namespace, agent_id);
|
|
48
61
|
CREATE INDEX IF NOT EXISTS idx_ltm_category ON ltm_knowledge(category);
|
|
49
62
|
CREATE INDEX IF NOT EXISTS idx_ltm_tags ON ltm_knowledge USING GIN(tags);
|
|
50
63
|
`);
|
|
51
|
-
|
|
52
|
-
// Only create if enough rows exist; otherwise use default sequential scan
|
|
53
|
-
try {
|
|
54
|
-
await this.pool.query(`
|
|
55
|
-
CREATE INDEX IF NOT EXISTS idx_ltm_embedding
|
|
56
|
-
ON ltm_knowledge USING ivfflat (embedding vector_cosine_ops)
|
|
57
|
-
WITH (lists = 100)
|
|
58
|
-
`);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
// IVFFlat index requires data to build; will be created later
|
|
62
|
-
}
|
|
64
|
+
await ensureVectorIndex(this.pool, 'ltm_knowledge', 'idx_ltm_embedding');
|
|
63
65
|
}
|
|
64
66
|
/**
|
|
65
67
|
* Store a knowledge fact with optional embedding.
|
|
@@ -71,10 +73,11 @@ export class LongTermMemory {
|
|
|
71
73
|
const embeddingStr = fact.embedding
|
|
72
74
|
? `[${fact.embedding.join(',')}]`
|
|
73
75
|
: null;
|
|
74
|
-
await this.pool.query(`INSERT INTO ltm_knowledge (id, agent_id, content, category, tags, embedding, metadata)
|
|
75
|
-
VALUES ($1, $2, $3, $4, $5, $6::vector, $
|
|
76
|
+
await this.pool.query(`INSERT INTO ltm_knowledge (id, agent_id, namespace, content, category, tags, embedding, metadata)
|
|
77
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7::vector, $8)`, [
|
|
76
78
|
id,
|
|
77
79
|
this.agentId,
|
|
80
|
+
this.namespace,
|
|
78
81
|
fact.content,
|
|
79
82
|
fact.category ?? 'general',
|
|
80
83
|
fact.tags ?? [],
|
|
@@ -92,6 +95,11 @@ export class LongTermMemory {
|
|
|
92
95
|
const conditions = ['embedding IS NOT NULL'];
|
|
93
96
|
const params = [];
|
|
94
97
|
let idx = 1;
|
|
98
|
+
// The namespace is never caller-overridable: `options.agentId` may reach
|
|
99
|
+
// across agents, but only ever within this instance's own boundary.
|
|
100
|
+
conditions.push(`namespace = $${idx}`);
|
|
101
|
+
params.push(this.namespace);
|
|
102
|
+
idx++;
|
|
95
103
|
conditions.push(`agent_id = $${idx}`);
|
|
96
104
|
params.push(options.agentId ?? this.agentId);
|
|
97
105
|
idx++;
|
|
@@ -107,7 +115,13 @@ export class LongTermMemory {
|
|
|
107
115
|
}
|
|
108
116
|
const embeddingStr = `[${queryEmbedding.join(',')}]`;
|
|
109
117
|
const limit = options.limit ?? 10;
|
|
110
|
-
|
|
118
|
+
// 0.7 was aspirational. Measured with text-embedding-3-small against a
|
|
119
|
+
// stored fact ("strongly prefers espresso over filter coffee"), genuinely
|
|
120
|
+
// relevant queries scored 0.31-0.55 — short asymmetric text simply does not
|
|
121
|
+
// reach 0.7, so that default returned nothing for every real question.
|
|
122
|
+
// DEFAULT_SIMILARITY_THRESHOLD admits those; `limit` still caps how much
|
|
123
|
+
// reaches the prompt, and the model judges what is actually relevant.
|
|
124
|
+
const threshold = options.threshold ?? DEFAULT_SIMILARITY_THRESHOLD;
|
|
111
125
|
const where = conditions.join(' AND ');
|
|
112
126
|
const result = await this.pool.query(`SELECT *,
|
|
113
127
|
1 - (embedding <=> $${idx}::vector) as similarity
|
|
@@ -130,6 +144,9 @@ export class LongTermMemory {
|
|
|
130
144
|
const conditions = [];
|
|
131
145
|
const params = [];
|
|
132
146
|
let idx = 1;
|
|
147
|
+
conditions.push(`namespace = $${idx}`);
|
|
148
|
+
params.push(this.namespace);
|
|
149
|
+
idx++;
|
|
133
150
|
conditions.push(`agent_id = $${idx}`);
|
|
134
151
|
params.push(this.agentId);
|
|
135
152
|
idx++;
|
|
@@ -152,12 +169,13 @@ export class LongTermMemory {
|
|
|
152
169
|
return result.rows.map(this.rowToFact);
|
|
153
170
|
}
|
|
154
171
|
/**
|
|
155
|
-
* Get a fact by ID.
|
|
172
|
+
* Get a fact by ID, within this instance's scope. An id belonging to another
|
|
173
|
+
* namespace or agent reads as "not found" — ids are not capability tokens.
|
|
156
174
|
*/
|
|
157
175
|
async getById(id) {
|
|
158
176
|
if (!this.pool)
|
|
159
177
|
throw new Error('LTM not started');
|
|
160
|
-
const result = await this.pool.query('SELECT * FROM ltm_knowledge WHERE id = $1', [id]);
|
|
178
|
+
const result = await this.pool.query('SELECT * FROM ltm_knowledge WHERE id = $1 AND namespace = $2 AND agent_id = $3', [id, this.namespace, this.agentId]);
|
|
161
179
|
if (result.rows.length === 0)
|
|
162
180
|
return null;
|
|
163
181
|
return this.rowToFact(result.rows[0]);
|
|
@@ -196,8 +214,9 @@ export class LongTermMemory {
|
|
|
196
214
|
params.push(JSON.stringify(updates.metadata));
|
|
197
215
|
idx++;
|
|
198
216
|
}
|
|
199
|
-
params.push(id);
|
|
200
|
-
await this.pool.query(`UPDATE ltm_knowledge SET ${sets.join(', ')}
|
|
217
|
+
params.push(id, this.namespace, this.agentId);
|
|
218
|
+
await this.pool.query(`UPDATE ltm_knowledge SET ${sets.join(', ')}
|
|
219
|
+
WHERE id = $${idx} AND namespace = $${idx + 1} AND agent_id = $${idx + 2}`, params);
|
|
201
220
|
}
|
|
202
221
|
/**
|
|
203
222
|
* Delete a fact.
|
|
@@ -205,7 +224,7 @@ export class LongTermMemory {
|
|
|
205
224
|
async forget(id) {
|
|
206
225
|
if (!this.pool)
|
|
207
226
|
throw new Error('LTM not started');
|
|
208
|
-
await this.pool.query('DELETE FROM ltm_knowledge WHERE id = $1', [id]);
|
|
227
|
+
await this.pool.query('DELETE FROM ltm_knowledge WHERE id = $1 AND namespace = $2 AND agent_id = $3', [id, this.namespace, this.agentId]);
|
|
209
228
|
}
|
|
210
229
|
rowToFact(row) {
|
|
211
230
|
return {
|
package/dist/ltm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ltm.js","sourceRoot":"","sources":["../src/ltm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ltm.js","sourceRoot":"","sources":["../src/ltm.ts"],"names":[],"mappings":"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"}
|
package/dist/manager.d.ts
CHANGED
|
@@ -9,6 +9,28 @@ export interface MemoryManagerConfig {
|
|
|
9
9
|
ltm: LTMConfig;
|
|
10
10
|
/** Optional knowledge graph config. When provided, enables KG features. */
|
|
11
11
|
kg?: KGConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Isolation boundary applied to the Postgres-backed tiers. Set it once here
|
|
14
|
+
* rather than on each store; a per-store `namespace` still wins if given.
|
|
15
|
+
*/
|
|
16
|
+
namespace?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Turns a piece of text into a vector. Supplying it is what makes semantic
|
|
19
|
+
* storage and recall real — without it facts are still stored and still
|
|
20
|
+
* searchable, just by substring rather than by meaning.
|
|
21
|
+
*/
|
|
22
|
+
embed?: (text: string) => Promise<number[]>;
|
|
23
|
+
/** Reports why semantic memory was disabled, for host logs and status UI. */
|
|
24
|
+
onSemanticUnavailable?: (reason: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/** What the boot probe concluded about semantic memory. */
|
|
27
|
+
export interface SemanticStatus {
|
|
28
|
+
/** True only if an embedder is configured AND the probe agreed with the column. */
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
/** Vector width the embedder actually returned, once probed. */
|
|
31
|
+
dimensions: number | null;
|
|
32
|
+
/** Why it is off, when it is off. */
|
|
33
|
+
reason: string | null;
|
|
12
34
|
}
|
|
13
35
|
export interface ContextBlock {
|
|
14
36
|
source: 'system' | 'stm' | 'mtm' | 'ltm' | 'kg';
|
|
@@ -28,8 +50,26 @@ export declare class MemoryManager {
|
|
|
28
50
|
readonly ltm: LongTermMemory;
|
|
29
51
|
readonly kg: KnowledgeGraph | null;
|
|
30
52
|
private agentId;
|
|
53
|
+
private readonly embedFn?;
|
|
54
|
+
private readonly onSemanticUnavailable?;
|
|
55
|
+
private semantic;
|
|
31
56
|
constructor(config: MemoryManagerConfig);
|
|
57
|
+
/** What the boot probe concluded. Hosts surface this so a silent downgrade is visible. */
|
|
58
|
+
get semanticStatus(): SemanticStatus;
|
|
32
59
|
start(agentId: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Ask the embedder for one vector and check its width against the column the
|
|
62
|
+
* tables were created with. Done once at boot rather than lazily, because the
|
|
63
|
+
* alternative is discovering a misconfiguration as a failed INSERT halfway
|
|
64
|
+
* through a conversation. A failure here downgrades to substring search; it
|
|
65
|
+
* never prevents the agent from starting.
|
|
66
|
+
*/
|
|
67
|
+
private probeEmbedder;
|
|
68
|
+
/**
|
|
69
|
+
* Embed text for storage or recall, or null when semantic memory is off.
|
|
70
|
+
* Callers treat null as "carry on without a vector" — never as an error.
|
|
71
|
+
*/
|
|
72
|
+
embed(text: string): Promise<number[] | null>;
|
|
33
73
|
stop(): Promise<void>;
|
|
34
74
|
/**
|
|
35
75
|
* Log an entry to the session's short-term memory.
|
package/dist/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAuB,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAsB,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/manager.js
CHANGED
|
@@ -2,6 +2,7 @@ import { ShortTermMemory } from './stm.js';
|
|
|
2
2
|
import { MidTermMemory } from './mtm.js';
|
|
3
3
|
import { LongTermMemory } from './ltm.js';
|
|
4
4
|
import { KnowledgeGraph } from './knowledge-graph.js';
|
|
5
|
+
import { DEFAULT_SIMILARITY_THRESHOLD } from './vector-index.js';
|
|
5
6
|
/**
|
|
6
7
|
* Unified Memory Manager — orchestrates all 3 memory tiers.
|
|
7
8
|
*
|
|
@@ -15,11 +16,28 @@ export class MemoryManager {
|
|
|
15
16
|
ltm;
|
|
16
17
|
kg;
|
|
17
18
|
agentId = '';
|
|
19
|
+
embedFn;
|
|
20
|
+
onSemanticUnavailable;
|
|
21
|
+
semantic;
|
|
18
22
|
constructor(config) {
|
|
23
|
+
const ns = config.namespace;
|
|
19
24
|
this.stm = new ShortTermMemory(config.stm);
|
|
20
|
-
this.mtm = new MidTermMemory(config.mtm);
|
|
21
|
-
this.ltm = new LongTermMemory(config.ltm);
|
|
22
|
-
this.kg = config.kg
|
|
25
|
+
this.mtm = new MidTermMemory({ ...config.mtm, namespace: config.mtm.namespace ?? ns });
|
|
26
|
+
this.ltm = new LongTermMemory({ ...config.ltm, namespace: config.ltm.namespace ?? ns });
|
|
27
|
+
this.kg = config.kg
|
|
28
|
+
? new KnowledgeGraph({ ...config.kg, namespace: config.kg.namespace ?? ns })
|
|
29
|
+
: null;
|
|
30
|
+
this.embedFn = config.embed;
|
|
31
|
+
this.onSemanticUnavailable = config.onSemanticUnavailable;
|
|
32
|
+
this.semantic = {
|
|
33
|
+
enabled: false,
|
|
34
|
+
dimensions: null,
|
|
35
|
+
reason: config.embed ? 'not probed yet' : 'no embedder configured',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** What the boot probe concluded. Hosts surface this so a silent downgrade is visible. */
|
|
39
|
+
get semanticStatus() {
|
|
40
|
+
return { ...this.semantic };
|
|
23
41
|
}
|
|
24
42
|
async start(agentId) {
|
|
25
43
|
this.agentId = agentId;
|
|
@@ -31,6 +49,63 @@ export class MemoryManager {
|
|
|
31
49
|
if (this.kg)
|
|
32
50
|
inits.push(this.kg.start(agentId));
|
|
33
51
|
await Promise.all(inits);
|
|
52
|
+
await this.probeEmbedder();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Ask the embedder for one vector and check its width against the column the
|
|
56
|
+
* tables were created with. Done once at boot rather than lazily, because the
|
|
57
|
+
* alternative is discovering a misconfiguration as a failed INSERT halfway
|
|
58
|
+
* through a conversation. A failure here downgrades to substring search; it
|
|
59
|
+
* never prevents the agent from starting.
|
|
60
|
+
*/
|
|
61
|
+
async probeEmbedder() {
|
|
62
|
+
if (!this.embedFn)
|
|
63
|
+
return;
|
|
64
|
+
const expected = this.ltm.dimensions;
|
|
65
|
+
// Both vector columns are written with the same embedder, so a split
|
|
66
|
+
// between them can only ever produce failed inserts on one of the two.
|
|
67
|
+
if (this.kg && this.kg.dimensions !== expected) {
|
|
68
|
+
const reason = `memory tiers disagree on vector width (ltm ${expected}, kg ${this.kg.dimensions})`;
|
|
69
|
+
this.semantic = { enabled: false, dimensions: null, reason };
|
|
70
|
+
this.onSemanticUnavailable?.(reason);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let reason;
|
|
74
|
+
try {
|
|
75
|
+
const vector = await this.embedFn('probe');
|
|
76
|
+
if (!Array.isArray(vector) || vector.length === 0) {
|
|
77
|
+
reason = 'embedder returned no vector';
|
|
78
|
+
}
|
|
79
|
+
else if (vector.length !== expected) {
|
|
80
|
+
reason =
|
|
81
|
+
`embedder returns ${vector.length}-dim vectors but the column is ${expected}-dim — ` +
|
|
82
|
+
'point it at a matching model, or recreate the memory tables at the new width';
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.semantic = { enabled: true, dimensions: vector.length, reason: null };
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
reason = `embedder unavailable: ${err instanceof Error ? err.message : String(err)}`;
|
|
91
|
+
}
|
|
92
|
+
this.semantic = { enabled: false, dimensions: null, reason };
|
|
93
|
+
this.onSemanticUnavailable?.(reason);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Embed text for storage or recall, or null when semantic memory is off.
|
|
97
|
+
* Callers treat null as "carry on without a vector" — never as an error.
|
|
98
|
+
*/
|
|
99
|
+
async embed(text) {
|
|
100
|
+
if (!this.semantic.enabled || !this.embedFn)
|
|
101
|
+
return null;
|
|
102
|
+
try {
|
|
103
|
+
return await this.embedFn(text);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// A transient provider failure degrades this one call, not the agent.
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
34
109
|
}
|
|
35
110
|
async stop() {
|
|
36
111
|
const stops = [
|
|
@@ -87,7 +162,7 @@ export class MemoryManager {
|
|
|
87
162
|
category: options.ltmOptions?.category,
|
|
88
163
|
tags: options.ltmOptions?.tags,
|
|
89
164
|
limit: options.ltmOptions?.limit ?? 5,
|
|
90
|
-
threshold: options.ltmOptions?.threshold ??
|
|
165
|
+
threshold: options.ltmOptions?.threshold ?? DEFAULT_SIMILARITY_THRESHOLD,
|
|
91
166
|
});
|
|
92
167
|
if (facts.length > 0) {
|
|
93
168
|
blocks.push({
|
package/dist/manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAuC,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/memory-tools.js
CHANGED
|
@@ -10,8 +10,8 @@ export function createMemoryTools(manager) {
|
|
|
10
10
|
if (!kg)
|
|
11
11
|
return [];
|
|
12
12
|
return [
|
|
13
|
-
searchKnowledgeTool(kg),
|
|
14
|
-
storFactTool(kg),
|
|
13
|
+
searchKnowledgeTool(kg, manager),
|
|
14
|
+
storFactTool(kg, manager),
|
|
15
15
|
recallEntityTool(kg),
|
|
16
16
|
relateEntitiesTool(kg),
|
|
17
17
|
listEntitiesTool(kg),
|
|
@@ -19,25 +19,37 @@ export function createMemoryTools(manager) {
|
|
|
19
19
|
];
|
|
20
20
|
}
|
|
21
21
|
// ─── Tool Definitions ───
|
|
22
|
-
function searchKnowledgeTool(kg) {
|
|
22
|
+
function searchKnowledgeTool(kg, manager) {
|
|
23
23
|
return {
|
|
24
24
|
name: 'search_knowledge',
|
|
25
|
-
description: 'Search
|
|
26
|
-
'Use this
|
|
27
|
-
'or
|
|
25
|
+
description: 'Search stored knowledge for entities, facts, and relationships. ' +
|
|
26
|
+
'Use this whenever answering might depend on something learned earlier — ' +
|
|
27
|
+
'a preference, a decision, a detail about a person or project — rather than ' +
|
|
28
|
+
'assuming you were never told. Matches by meaning, so phrase the query as ' +
|
|
29
|
+
'the question you are trying to answer.',
|
|
28
30
|
parameters: z.object({
|
|
29
|
-
query: z.string().describe('
|
|
31
|
+
query: z.string().describe('What you are trying to recall, phrased naturally'),
|
|
30
32
|
entityType: z.string().optional().describe('Filter by entity type (e.g., "person", "tool", "concept")'),
|
|
31
33
|
limit: z.number().optional().describe('Max results to return (default: 10)'),
|
|
32
34
|
}),
|
|
33
35
|
visibility: 'internal',
|
|
34
36
|
handler: async (params) => {
|
|
35
37
|
const { query, entityType, limit } = params;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
// Semantic first, so "what does he like to drink" can reach a fact
|
|
39
|
+
// stored as "prefers espresso". Substring search cannot span that gap,
|
|
40
|
+
// but it is a real fallback rather than an error when there is no
|
|
41
|
+
// embedder — and also when the query simply matches nothing by meaning.
|
|
42
|
+
const queryVector = await manager.embed(query);
|
|
43
|
+
let entities = queryVector
|
|
44
|
+
? await kg.searchEntitiesByEmbedding(queryVector, { entityType, limit: limit ?? 10 })
|
|
45
|
+
: [];
|
|
46
|
+
if (entities.length === 0) {
|
|
47
|
+
entities = await kg.searchEntities({
|
|
48
|
+
query,
|
|
49
|
+
entityType,
|
|
50
|
+
limit: limit ?? 10,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
41
53
|
if (entities.length === 0) {
|
|
42
54
|
return { found: false, message: 'No matching knowledge found.' };
|
|
43
55
|
}
|
|
@@ -59,7 +71,7 @@ function searchKnowledgeTool(kg) {
|
|
|
59
71
|
},
|
|
60
72
|
};
|
|
61
73
|
}
|
|
62
|
-
function storFactTool(kg) {
|
|
74
|
+
function storFactTool(kg, manager) {
|
|
63
75
|
return {
|
|
64
76
|
name: 'store_fact',
|
|
65
77
|
description: 'Store a new fact or observation about an entity in long-term memory. ' +
|
|
@@ -73,10 +85,23 @@ function storFactTool(kg) {
|
|
|
73
85
|
visibility: 'internal',
|
|
74
86
|
handler: async (params) => {
|
|
75
87
|
const { entityName, entityType, observations } = params;
|
|
88
|
+
// Embed the entity together with its observations: recall works on what
|
|
89
|
+
// a fact *says*, and a bare name like "user" carries almost no signal.
|
|
90
|
+
// upsertEntity MERGES into any existing entity, so the vector has to
|
|
91
|
+
// describe the merged result — embedding only the incoming observations
|
|
92
|
+
// would make an updated entity findable by its newest fact alone.
|
|
93
|
+
// A null vector (no embedder, or a transient failure) still stores the
|
|
94
|
+
// fact; it just stays reachable by substring only.
|
|
95
|
+
const existing = await kg.getEntityByName(entityName);
|
|
96
|
+
const merged = existing
|
|
97
|
+
? [...existing.observations, ...observations.filter((o) => !existing.observations.includes(o))]
|
|
98
|
+
: observations;
|
|
99
|
+
const embedding = await manager.embed([entityName, entityType, ...merged].join(' — '));
|
|
76
100
|
const entity = await kg.upsertEntity({
|
|
77
101
|
name: entityName,
|
|
78
102
|
entityType,
|
|
79
103
|
observations,
|
|
104
|
+
...(embedding ? { embedding } : {}),
|
|
80
105
|
});
|
|
81
106
|
return {
|
|
82
107
|
stored: true,
|
package/dist/memory-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-tools.js","sourceRoot":"","sources":["../src/memory-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsB;IAEtB,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAEnB,OAAO;QACL,mBAAmB,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-tools.js","sourceRoot":"","sources":["../src/memory-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/mtm.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export interface MTMConfig {
|
|
2
2
|
connectionString: string;
|
|
3
|
+
/**
|
|
4
|
+
* Isolation boundary for every row this instance reads or writes. Hosts
|
|
5
|
+
* serving more than one owner MUST set it — the table is shared.
|
|
6
|
+
*/
|
|
7
|
+
namespace?: string;
|
|
3
8
|
}
|
|
4
9
|
export interface EpisodicMemory {
|
|
5
10
|
id: string;
|
|
@@ -24,6 +29,7 @@ export declare class MidTermMemory {
|
|
|
24
29
|
private pool;
|
|
25
30
|
private config;
|
|
26
31
|
private agentId;
|
|
32
|
+
private namespace;
|
|
27
33
|
constructor(config: MTMConfig);
|
|
28
34
|
start(agentId: string): Promise<void>;
|
|
29
35
|
stop(): Promise<void>;
|
|
@@ -43,7 +49,8 @@ export declare class MidTermMemory {
|
|
|
43
49
|
sinceDate?: Date;
|
|
44
50
|
}): Promise<EpisodicMemory[]>;
|
|
45
51
|
/**
|
|
46
|
-
* Get a specific episode by ID.
|
|
52
|
+
* Get a specific episode by ID, within this instance's scope. An id from
|
|
53
|
+
* another namespace or agent reads as "not found".
|
|
47
54
|
*/
|
|
48
55
|
getById(id: string): Promise<EpisodicMemory | null>;
|
|
49
56
|
/**
|
package/dist/mtm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtm.d.ts","sourceRoot":"","sources":["../src/mtm.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mtm.d.ts","sourceRoot":"","sources":["../src/mtm.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,SAAS;IAKvB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,YAAY;IA4B1B;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBtF;;OAEG;IACG,SAAS,CAAC,OAAO,GAAE;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,IAAI,CAAC;KACb,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA+ClC;;;OAGG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAYzD;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,OAAO,CAAC,YAAY;CAcrB"}
|