@mrc2204/agent-smart-memo 4.1.2 → 5.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.
Files changed (57) hide show
  1. package/README.md +317 -135
  2. package/dist/adapters/openclaw/tool-runtime.d.ts +29 -0
  3. package/dist/adapters/openclaw/tool-runtime.d.ts.map +1 -0
  4. package/dist/adapters/openclaw/tool-runtime.js +48 -0
  5. package/dist/adapters/openclaw/tool-runtime.js.map +1 -0
  6. package/dist/core/contracts/adapter-contracts.d.ts +31 -0
  7. package/dist/core/contracts/adapter-contracts.d.ts.map +1 -0
  8. package/dist/core/contracts/adapter-contracts.js +2 -0
  9. package/dist/core/contracts/adapter-contracts.js.map +1 -0
  10. package/dist/core/runtime-boundary.d.ts +23 -0
  11. package/dist/core/runtime-boundary.d.ts.map +1 -0
  12. package/dist/core/runtime-boundary.js +39 -0
  13. package/dist/core/runtime-boundary.js.map +1 -0
  14. package/dist/core/usecases/default-memory-usecase-port.d.ts +21 -0
  15. package/dist/core/usecases/default-memory-usecase-port.d.ts.map +1 -0
  16. package/dist/core/usecases/default-memory-usecase-port.js +263 -0
  17. package/dist/core/usecases/default-memory-usecase-port.js.map +1 -0
  18. package/dist/core/usecases/semantic-memory-usecase.d.ts +52 -0
  19. package/dist/core/usecases/semantic-memory-usecase.d.ts.map +1 -0
  20. package/dist/core/usecases/semantic-memory-usecase.js +136 -0
  21. package/dist/core/usecases/semantic-memory-usecase.js.map +1 -0
  22. package/dist/hooks/tool-context-injector.d.ts +9 -0
  23. package/dist/hooks/tool-context-injector.d.ts.map +1 -0
  24. package/dist/hooks/tool-context-injector.js +55 -0
  25. package/dist/hooks/tool-context-injector.js.map +1 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +30 -10
  28. package/dist/index.js.map +1 -1
  29. package/dist/tools/graph-tools.d.ts +2 -0
  30. package/dist/tools/graph-tools.d.ts.map +1 -1
  31. package/dist/tools/graph-tools.js +126 -177
  32. package/dist/tools/graph-tools.js.map +1 -1
  33. package/dist/tools/semantic-memory-tools.d.ts +8 -0
  34. package/dist/tools/semantic-memory-tools.d.ts.map +1 -0
  35. package/dist/tools/semantic-memory-tools.js +111 -0
  36. package/dist/tools/semantic-memory-tools.js.map +1 -0
  37. package/dist/tools/slot-tools.d.ts +3 -1
  38. package/dist/tools/slot-tools.d.ts.map +1 -1
  39. package/dist/tools/slot-tools.js +82 -156
  40. package/dist/tools/slot-tools.js.map +1 -1
  41. package/package.json +25 -32
  42. package/dist/config.d.ts +0 -62
  43. package/dist/config.d.ts.map +0 -1
  44. package/dist/config.js +0 -102
  45. package/dist/config.js.map +0 -1
  46. package/dist/scripts/reembed-collection.d.ts +0 -2
  47. package/dist/scripts/reembed-collection.d.ts.map +0 -1
  48. package/dist/scripts/reembed-collection.js +0 -165
  49. package/dist/scripts/reembed-collection.js.map +0 -1
  50. package/dist/tools/memory_search.d.ts +0 -89
  51. package/dist/tools/memory_search.d.ts.map +0 -1
  52. package/dist/tools/memory_search.js +0 -188
  53. package/dist/tools/memory_search.js.map +0 -1
  54. package/dist/tools/memory_store.d.ts +0 -65
  55. package/dist/tools/memory_store.d.ts.map +0 -1
  56. package/dist/tools/memory_store.js +0 -196
  57. package/dist/tools/memory_store.js.map +0 -1
package/dist/config.d.ts DELETED
@@ -1,62 +0,0 @@
1
- /**
2
- * Configuration loader for Agent-Memo Plugin
3
- * Reads from environment variables or .env file
4
- */
5
- /**
6
- * Plugin configuration object
7
- * All values read from environment variables with sensible defaults
8
- */
9
- export declare const PluginConfig: {
10
- qdrant: {
11
- host: string;
12
- port: number;
13
- collection: string;
14
- timeout: number;
15
- };
16
- ollama: {
17
- host: string;
18
- port: number;
19
- model: string;
20
- timeout: number;
21
- readonly baseUrl: string;
22
- };
23
- embedding: {
24
- model: string;
25
- dimensions: number;
26
- apiUrl: string;
27
- };
28
- autoCapture: {
29
- enabled: boolean;
30
- minConfidence: number;
31
- useLLM: boolean;
32
- agentBlocklist: string[];
33
- noisePatterns: RegExp[];
34
- maxMessagesPerCapture: number;
35
- minContentLength: number;
36
- noiseThreshold: number;
37
- };
38
- contextWindow: {
39
- maxConversationTokens: number;
40
- tokenEstimateDivisor: number;
41
- absoluteMaxMessages: number;
42
- };
43
- stateDir: string;
44
- slotDbDir: string;
45
- defaults: {
46
- namespace: string;
47
- slotCategories: string[];
48
- };
49
- };
50
- /**
51
- * Validate configuration
52
- * Checks if required services are accessible
53
- */
54
- export declare function validateConfig(): Promise<{
55
- qdrant: boolean;
56
- ollama: boolean;
57
- }>;
58
- /**
59
- * Print configuration (for debugging)
60
- */
61
- export declare function printConfig(): void;
62
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DxB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBpF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAQlC"}
package/dist/config.js DELETED
@@ -1,102 +0,0 @@
1
- /**
2
- * Configuration loader for Agent-Memo Plugin
3
- * Reads from environment variables or .env file
4
- */
5
- import { config } from "dotenv";
6
- import { join } from "path";
7
- // Load .env file from plugin directory
8
- config({ path: join(import.meta.dirname || "", "../.env") });
9
- /**
10
- * Plugin configuration object
11
- * All values read from environment variables with sensible defaults
12
- */
13
- export const PluginConfig = {
14
- // Qdrant settings
15
- qdrant: {
16
- host: process.env.QDRANT_HOST || "localhost",
17
- port: parseInt(process.env.QDRANT_PORT || "6333"),
18
- collection: process.env.QDRANT_COLLECTION || "mrc_bot",
19
- timeout: parseInt(process.env.QDRANT_TIMEOUT || "30000"),
20
- },
21
- // Ollama LLM settings
22
- ollama: {
23
- host: process.env.OLLAMA_HOST || "http://localhost",
24
- port: parseInt(process.env.OLLAMA_PORT || "11434"),
25
- model: process.env.OLLAMA_MODEL || "deepseek-r1:8b",
26
- timeout: parseInt(process.env.OLLAMA_TIMEOUT || "60000"),
27
- get baseUrl() {
28
- return `${this.host}:${this.port}`;
29
- },
30
- },
31
- // Embedding service settings
32
- embedding: {
33
- model: process.env.EMBEDDING_MODEL || "text-embedding-3-small",
34
- dimensions: parseInt(process.env.EMBEDDING_DIMENSIONS || "1024"),
35
- apiUrl: process.env.EMBEDDING_API_URL || "http://localhost:8000",
36
- },
37
- // Auto-capture settings
38
- autoCapture: {
39
- enabled: process.env.AUTO_CAPTURE_ENABLED !== "false", // default true
40
- minConfidence: parseFloat(process.env.AUTO_CAPTURE_MIN_CONFIDENCE || "0.7"),
41
- useLLM: process.env.AUTO_CAPTURE_USE_LLM !== "false", // default true
42
- // RAG Memory Isolation - Noise Filter settings
43
- agentBlocklist: (process.env.AUTO_CAPTURE_AGENT_BLOCKLIST || "").split(",").filter(Boolean),
44
- noisePatterns: (process.env.AUTO_CAPTURE_NOISE_PATTERNS || "").split(",").filter(Boolean).map((p) => new RegExp(p, "i")),
45
- maxMessagesPerCapture: parseInt(process.env.AUTO_CAPTURE_MAX_MESSAGES || "50"),
46
- minContentLength: parseInt(process.env.AUTO_CAPTURE_MIN_CONTENT_LENGTH || "20"),
47
- noiseThreshold: parseFloat(process.env.AUTO_CAPTURE_NOISE_THRESHOLD || "0.5"),
48
- },
49
- // Context window management settings
50
- contextWindow: {
51
- maxConversationTokens: parseInt(process.env.CONTEXT_WINDOW_MAX_TOKENS || "12000"),
52
- tokenEstimateDivisor: parseInt(process.env.CONTEXT_WINDOW_TOKEN_DIVISOR || "4"),
53
- absoluteMaxMessages: parseInt(process.env.CONTEXT_WINDOW_MAX_MESSAGES || "200"),
54
- },
55
- // State storage
56
- stateDir: process.env.STATE_DIR || process.env.OPENCLAW_STATE_DIR || `${process.env.HOME}/.openclaw`,
57
- slotDbDir: process.env.OPENCLAW_SLOTDB_DIR || `${process.env.HOME}/.openclaw/agent-memo`,
58
- // Plugin defaults
59
- defaults: {
60
- namespace: process.env.DEFAULT_NAMESPACE || "default",
61
- slotCategories: (process.env.DEFAULT_SLOT_CATEGORIES || "profile,preferences,project,environment,custom").split(","),
62
- },
63
- };
64
- /**
65
- * Validate configuration
66
- * Checks if required services are accessible
67
- */
68
- export async function validateConfig() {
69
- const results = { qdrant: false, ollama: false };
70
- // Check Qdrant
71
- try {
72
- const response = await fetch(`http://${PluginConfig.qdrant.host}:${PluginConfig.qdrant.port}/collections`, { signal: AbortSignal.timeout(5000) });
73
- results.qdrant = response.ok;
74
- }
75
- catch {
76
- results.qdrant = false;
77
- }
78
- // Check Ollama
79
- try {
80
- const response = await fetch(`${PluginConfig.ollama.baseUrl}/api/tags`, {
81
- signal: AbortSignal.timeout(5000),
82
- });
83
- results.ollama = response.ok;
84
- }
85
- catch {
86
- results.ollama = false;
87
- }
88
- return results;
89
- }
90
- /**
91
- * Print configuration (for debugging)
92
- */
93
- export function printConfig() {
94
- console.log("[AgentMemo] Configuration:");
95
- console.log(` Qdrant: ${PluginConfig.qdrant.host}:${PluginConfig.qdrant.port}/${PluginConfig.qdrant.collection}`);
96
- console.log(` Ollama: ${PluginConfig.ollama.baseUrl} (model: ${PluginConfig.ollama.model})`);
97
- console.log(` Embedding: ${PluginConfig.embedding.model} (${PluginConfig.embedding.dimensions}d)`);
98
- console.log(` AutoCapture: ${PluginConfig.autoCapture.enabled ? "enabled" : "disabled"}`);
99
- console.log(` StateDir: ${PluginConfig.stateDir}`);
100
- console.log(` SlotDbDir: ${PluginConfig.slotDbDir}`);
101
- }
102
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import "dotenv/config";
2
- //# sourceMappingURL=reembed-collection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reembed-collection.d.ts","sourceRoot":"","sources":["../../src/scripts/reembed-collection.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
@@ -1,165 +0,0 @@
1
- import "dotenv/config";
2
- import { EmbeddingClient } from "../services/embedding.js";
3
- import { QdrantClient } from "../services/qdrant.js";
4
- function sampleArray(items, n) {
5
- if (items.length <= n)
6
- return [...items];
7
- const copy = [...items];
8
- const out = [];
9
- while (out.length < n && copy.length > 0) {
10
- const idx = Math.floor(Math.random() * copy.length);
11
- out.push(copy.splice(idx, 1)[0]);
12
- }
13
- return out;
14
- }
15
- async function run() {
16
- const qdrantHost = process.env.QDRANT_HOST || "localhost";
17
- const qdrantPort = Number(process.env.QDRANT_PORT || 6333);
18
- const qdrantCollection = process.env.QDRANT_COLLECTION || "mrc_bot_memory";
19
- const embeddingApiUrl = process.env.EMBEDDING_API_URL || process.env.OLLAMA_URL || "http://localhost:4142";
20
- const embeddingModel = process.env.EMBEDDING_MODEL || "text-embedding-3-small";
21
- let embeddingDimensions = Number(process.env.EMBEDDING_DIMENSIONS || 1536);
22
- const batchSize = Math.max(1, Number(process.env.REEMBED_BATCH_SIZE || 25));
23
- const qdrant = new QdrantClient({
24
- host: qdrantHost,
25
- port: qdrantPort,
26
- collection: qdrantCollection,
27
- vectorSize: embeddingDimensions,
28
- timeout: 60000,
29
- maxRetries: 4,
30
- }, console);
31
- const collectionInfo = await qdrant.getCollectionInfo();
32
- const detectedVectorSize = Number(collectionInfo?.result?.config?.params?.vectors?.size || 0);
33
- if (detectedVectorSize > 0 && detectedVectorSize !== embeddingDimensions) {
34
- console.warn(`[Reembed] EMBEDDING_DIMENSIONS mismatch env=${embeddingDimensions} qdrant=${detectedVectorSize}. Using qdrant size.`);
35
- embeddingDimensions = detectedVectorSize;
36
- }
37
- const embedding = new EmbeddingClient({
38
- embeddingApiUrl,
39
- model: embeddingModel,
40
- dimensions: embeddingDimensions,
41
- timeout: 120000,
42
- }, console);
43
- const stats = {
44
- totalProcessed: 0,
45
- chunkedCount: 0,
46
- maxChunksSeen: 0,
47
- failedCount: 0,
48
- startedAt: Date.now(),
49
- };
50
- console.log(`[Reembed] Start collection=${qdrantCollection} host=${qdrantHost}:${qdrantPort} model=${embeddingModel} dims=${embeddingDimensions}`);
51
- const pointsBefore = await qdrant.countPoints(true);
52
- console.log(`[Reembed] points_before=${pointsBefore}`);
53
- const processedIds = [];
54
- let offset = undefined;
55
- while (true) {
56
- const page = await qdrant.scroll(batchSize, offset, false);
57
- if (page.points.length === 0)
58
- break;
59
- const fallbackUpsertPoints = [];
60
- const vectorUpdates = [];
61
- for (const point of page.points) {
62
- const payload = point.payload || {};
63
- const text = typeof payload.text === "string" ? payload.text.trim() : "";
64
- if (!text) {
65
- stats.failedCount += 1;
66
- console.warn(`[Reembed] Skip id=${point.id}: empty text`);
67
- continue;
68
- }
69
- try {
70
- const embedded = await embedding.embedDetailed(text);
71
- const mergedPayload = {
72
- ...payload,
73
- ...embedded.metadata,
74
- metadata: {
75
- ...(payload.metadata && typeof payload.metadata === "object" ? payload.metadata : {}),
76
- ...embedded.metadata,
77
- },
78
- };
79
- vectorUpdates.push({ id: point.id, vector: embedded.vector });
80
- fallbackUpsertPoints.push({ id: point.id, vector: embedded.vector, payload: mergedPayload });
81
- processedIds.push(point.id);
82
- stats.totalProcessed += 1;
83
- if (embedded.metadata.embedding_chunked)
84
- stats.chunkedCount += 1;
85
- if (embedded.metadata.embedding_chunks_count > stats.maxChunksSeen) {
86
- stats.maxChunksSeen = embedded.metadata.embedding_chunks_count;
87
- }
88
- }
89
- catch (error) {
90
- stats.failedCount += 1;
91
- console.error(`[Reembed] Failed id=${point.id}: ${error.message}`);
92
- }
93
- }
94
- if (vectorUpdates.length > 0) {
95
- let usedFallbackUpsert = false;
96
- try {
97
- await qdrant.updateVectors(vectorUpdates);
98
- await qdrant.setPayload(fallbackUpsertPoints.map((p) => ({ id: p.id, payload: p.payload })));
99
- }
100
- catch (_error) {
101
- usedFallbackUpsert = true;
102
- await qdrant.upsert(fallbackUpsertPoints);
103
- }
104
- console.log(`[Reembed] Batch done size=${page.points.length} updated=${vectorUpdates.length} mode=${usedFallbackUpsert ? "upsert_fallback" : "updateVectors+setPayload"}`);
105
- }
106
- offset = page.nextOffset;
107
- if (offset === undefined || offset === null)
108
- break;
109
- }
110
- const pointsAfter = await qdrant.countPoints(true);
111
- console.log(`[Reembed] points_after=${pointsAfter}`);
112
- if (pointsBefore !== pointsAfter) {
113
- throw new Error(`Point count mismatch: before=${pointsBefore}, after=${pointsAfter}`);
114
- }
115
- const verifyIds = sampleArray(processedIds, Math.min(10, processedIds.length));
116
- const toKey = (id) => JSON.stringify(id);
117
- let verifyChecked = 0;
118
- if (verifyIds.length > 0) {
119
- let verifyOffset = undefined;
120
- const need = new Set(verifyIds.map((id) => toKey(id)));
121
- while (need.size > 0) {
122
- const page = await qdrant.scroll(100, verifyOffset, true);
123
- if (page.points.length === 0)
124
- break;
125
- for (const p of page.points) {
126
- const key = toKey(p.id);
127
- if (need.has(key)) {
128
- const dim = p.vector?.length || 0;
129
- if (dim !== embeddingDimensions) {
130
- throw new Error(`Vector dim mismatch for id=${key}: expected=${embeddingDimensions}, got=${dim}`);
131
- }
132
- verifyChecked += 1;
133
- need.delete(key);
134
- }
135
- }
136
- verifyOffset = page.nextOffset;
137
- if (verifyOffset === undefined || verifyOffset === null)
138
- break;
139
- }
140
- }
141
- const smokeVector = await embedding.embed("memory search smoke test");
142
- const smokeResults = await qdrant.search(smokeVector, 3);
143
- if (!Array.isArray(smokeResults)) {
144
- throw new Error("Search smoke test failed: no result array");
145
- }
146
- const totalTime = Date.now() - stats.startedAt;
147
- console.log("[Reembed] Verification passed");
148
- console.log(JSON.stringify({
149
- collection: qdrantCollection,
150
- points_before: pointsBefore,
151
- points_after: pointsAfter,
152
- random_verified_vectors: verifyChecked,
153
- search_smoke_test: true,
154
- total_processed: stats.totalProcessed,
155
- chunked_count: stats.chunkedCount,
156
- max_chunks_seen: stats.maxChunksSeen,
157
- failed_count: stats.failedCount,
158
- total_time_ms: totalTime,
159
- }, null, 2));
160
- }
161
- run().catch((error) => {
162
- console.error(`[Reembed] Fatal: ${error.stack || error.message}`);
163
- process.exit(1);
164
- });
165
- //# sourceMappingURL=reembed-collection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reembed-collection.js","sourceRoot":"","sources":["../../src/scripts/reembed-collection.ts"],"names":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- import { QdrantClient } from "../services/qdrant.js";
2
- import { EmbeddingClient } from "../services/embedding.js";
3
- import { SearchParams, ToolResult, MemoryNamespace } from "../types.js";
4
- export declare const memorySearchSchema: {
5
- type: string;
6
- properties: {
7
- query: {
8
- type: string;
9
- description: string;
10
- };
11
- limit: {
12
- type: string;
13
- description: string;
14
- minimum: number;
15
- maximum: number;
16
- };
17
- namespace: {
18
- type: string;
19
- description: string;
20
- };
21
- sessionId: {
22
- type: string;
23
- description: string;
24
- };
25
- userId: {
26
- type: string;
27
- description: string;
28
- };
29
- minScore: {
30
- type: string;
31
- description: string;
32
- minimum: number;
33
- maximum: number;
34
- };
35
- sourceAgent: {
36
- type: string;
37
- description: string;
38
- };
39
- };
40
- required: string[];
41
- };
42
- export declare function createMemorySearchTool(qdrant: QdrantClient, embedding: EmbeddingClient, defaultNamespace: MemoryNamespace): {
43
- name: string;
44
- label: string;
45
- description: string;
46
- parameters: {
47
- type: string;
48
- properties: {
49
- query: {
50
- type: string;
51
- description: string;
52
- };
53
- limit: {
54
- type: string;
55
- description: string;
56
- minimum: number;
57
- maximum: number;
58
- };
59
- namespace: {
60
- type: string;
61
- description: string;
62
- };
63
- sessionId: {
64
- type: string;
65
- description: string;
66
- };
67
- userId: {
68
- type: string;
69
- description: string;
70
- };
71
- minScore: {
72
- type: string;
73
- description: string;
74
- minimum: number;
75
- maximum: number;
76
- };
77
- sourceAgent: {
78
- type: string;
79
- description: string;
80
- };
81
- };
82
- required: string[];
83
- };
84
- execute(_id: string, params: SearchParams & {
85
- sourceAgent?: string;
86
- agentId?: string;
87
- }, _signal?: AbortSignal): Promise<ToolResult>;
88
- };
89
- //# sourceMappingURL=memory_search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory_search.d.ts","sourceRoot":"","sources":["../../src/tools/memory_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAe,eAAe,EAAE,MAAM,aAAa,CAAC;AAyBrF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC9B,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcxB,MAAM,UACH,YAAY,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,YACvD,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC;EAuIzB"}
@@ -1,188 +0,0 @@
1
- import { getAgentNamespaces, getNamespaceWeight, parseExplicitNamespace, toCoreAgent } from "../shared/memory-config.js";
2
- function resolveAgentFromRuntimeParams(params) {
3
- const directAgentId = typeof params.agentId === "string" ? params.agentId.trim() : "";
4
- if (directAgentId)
5
- return toCoreAgent(directAgentId);
6
- const sessionId = typeof params.sessionId === "string" ? params.sessionId.trim() : "";
7
- if (sessionId) {
8
- const parts = sessionId.split(":");
9
- if (parts.length >= 2 && parts[0] === "agent") {
10
- const fromSession = parts[1]?.trim();
11
- if (fromSession)
12
- return toCoreAgent(fromSession);
13
- }
14
- }
15
- const namespace = typeof params.namespace === "string" ? params.namespace.trim() : "";
16
- const nsMatch = /^agent\.([a-z0-9][a-z0-9_-]*)\.(working_memory|lessons|decisions)$/i.exec(namespace);
17
- if (nsMatch?.[1]) {
18
- return toCoreAgent(nsMatch[1]);
19
- }
20
- return "assistant";
21
- }
22
- export const memorySearchSchema = {
23
- type: "object",
24
- properties: {
25
- query: {
26
- type: "string",
27
- description: "Search query for relevant memories",
28
- },
29
- limit: {
30
- type: "number",
31
- description: "Max results (default: 5)",
32
- minimum: 1,
33
- maximum: 20,
34
- },
35
- namespace: {
36
- type: "string",
37
- description: "Filter by namespace (default: auto-detected from agent)",
38
- },
39
- sessionId: {
40
- type: "string",
41
- description: "Filter by session ID",
42
- },
43
- userId: {
44
- type: "string",
45
- description: "Filter by user ID",
46
- },
47
- minScore: {
48
- type: "number",
49
- description: "Minimum similarity score (0-1, default: 0.7)",
50
- minimum: 0,
51
- maximum: 1,
52
- },
53
- sourceAgent: {
54
- type: "string",
55
- description: "Filter by source agent ID",
56
- },
57
- },
58
- required: ["query"],
59
- };
60
- export function createMemorySearchTool(qdrant, embedding, defaultNamespace) {
61
- const createDetails = (text, extra = {}) => ({
62
- ...extra,
63
- toolResult: { text },
64
- });
65
- return {
66
- name: "memory_search",
67
- label: "Memory Search",
68
- description: "Search stored memories by semantic similarity. Returns most relevant past information.",
69
- parameters: memorySearchSchema,
70
- async execute(_id, params, _signal) {
71
- try {
72
- // Validate
73
- if (!params.query || typeof params.query !== "string") {
74
- return {
75
- content: [{ type: "text", text: "Error: query is required" }],
76
- isError: true,
77
- details: createDetails("Error: query is required", { error: "Missing query parameter" }),
78
- };
79
- }
80
- const query = params.query.trim();
81
- if (query.length === 0) {
82
- return {
83
- content: [{ type: "text", text: "Error: query cannot be empty" }],
84
- isError: true,
85
- details: createDetails("Error: query cannot be empty", { error: "Empty query" }),
86
- };
87
- }
88
- const limit = Math.min(Math.max(params.limit || 5, 1), 20);
89
- const minScore = params.minScore ?? 0.7;
90
- // Determine namespaces to search (normalize user-facing aliases to canonical namespaces)
91
- const sourceAgent = resolveAgentFromRuntimeParams(params);
92
- const namespaces = params.namespace
93
- ? [parseExplicitNamespace(params.namespace, sourceAgent)]
94
- : getAgentNamespaces(sourceAgent);
95
- // Build namespace filter (OR if multiple namespaces)
96
- const namespaceConditions = namespaces.map(ns => ({
97
- key: "namespace",
98
- match: { value: ns },
99
- }));
100
- const filterConditions = [];
101
- if (namespaceConditions.length === 1) {
102
- filterConditions.push(namespaceConditions[0]);
103
- }
104
- else if (namespaceConditions.length > 1) {
105
- filterConditions.push({ should: namespaceConditions });
106
- }
107
- if (params.sessionId) {
108
- filterConditions.push({
109
- key: "sessionId",
110
- match: { value: params.sessionId },
111
- });
112
- }
113
- if (params.userId) {
114
- filterConditions.push({
115
- key: "userId",
116
- match: { value: params.userId },
117
- });
118
- }
119
- if (params.sourceAgent) {
120
- filterConditions.push({
121
- key: "source_agent",
122
- match: { value: params.sourceAgent },
123
- });
124
- }
125
- const filter = filterConditions.length > 0 ? { must: filterConditions } : undefined;
126
- // Generate embedding and search
127
- const vector = await embedding.embed(query);
128
- const results = await qdrant.search(vector, limit, filter);
129
- // Exclude quarantined noise and apply namespace-priority weighting
130
- const weighted = results
131
- .filter((r) => (r.payload?.namespace || "") !== "noise.filtered")
132
- .map((r) => {
133
- const ns = String(r.payload?.namespace || "");
134
- const weight = getNamespaceWeight(sourceAgent, ns);
135
- return {
136
- ...r,
137
- _rawScore: r.score,
138
- score: Math.min(1, r.score * weight),
139
- };
140
- })
141
- .sort((a, b) => b.score - a.score);
142
- // Filter by minScore on weighted score
143
- const filtered = weighted.filter((r) => r.score >= minScore);
144
- if (filtered.length === 0) {
145
- const textOut = "No relevant memories found.";
146
- return {
147
- content: [{ type: "text", text: textOut }],
148
- details: createDetails(textOut, { count: 0, query }),
149
- };
150
- }
151
- // Format results
152
- const formatted = filtered.map((r, i) => {
153
- const payload = r.payload;
154
- const date = payload.timestamp
155
- ? new Date(payload.timestamp).toLocaleDateString()
156
- : "Unknown";
157
- const lines = [
158
- `[${i + 1}] Score: ${(r.score * 100).toFixed(1)}%`,
159
- `Namespace: ${payload.namespace || "unknown"}`,
160
- `Text: ${payload.text}`,
161
- `Date: ${date}`,
162
- ];
163
- if (payload.metadata && Object.keys(payload.metadata).length > 0) {
164
- lines.push(`Metadata: ${JSON.stringify(payload.metadata)}`);
165
- }
166
- return lines.join("\n");
167
- }).join("\n\n---\n\n");
168
- const textOut = `Found ${filtered.length} relevant memories for "${query}":\n\n${formatted}`;
169
- return {
170
- content: [{
171
- type: "text",
172
- text: textOut,
173
- }],
174
- details: createDetails(textOut, { count: filtered.length, query, results: filtered }),
175
- };
176
- }
177
- catch (error) {
178
- const textOut = `Error searching memories: ${error.message}`;
179
- return {
180
- content: [{ type: "text", text: textOut }],
181
- isError: true,
182
- details: createDetails(textOut, { error: error.message }),
183
- };
184
- }
185
- },
186
- };
187
- }
188
- //# sourceMappingURL=memory_search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory_search.js","sourceRoot":"","sources":["../../src/tools/memory_search.ts"],"names":[],"mappings":"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"}