@mrc2204/agent-smart-memo 4.1.3 → 5.0.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.
Files changed (70) hide show
  1. package/README.md +445 -141
  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/commands/telegram-addproject-command.d.ts +33 -0
  7. package/dist/commands/telegram-addproject-command.d.ts.map +1 -0
  8. package/dist/commands/telegram-addproject-command.js +208 -0
  9. package/dist/commands/telegram-addproject-command.js.map +1 -0
  10. package/dist/core/contracts/adapter-contracts.d.ts +31 -0
  11. package/dist/core/contracts/adapter-contracts.d.ts.map +1 -0
  12. package/dist/core/contracts/adapter-contracts.js +2 -0
  13. package/dist/core/contracts/adapter-contracts.js.map +1 -0
  14. package/dist/core/runtime-boundary.d.ts +23 -0
  15. package/dist/core/runtime-boundary.d.ts.map +1 -0
  16. package/dist/core/runtime-boundary.js +39 -0
  17. package/dist/core/runtime-boundary.js.map +1 -0
  18. package/dist/core/usecases/default-memory-usecase-port.d.ts +54 -0
  19. package/dist/core/usecases/default-memory-usecase-port.d.ts.map +1 -0
  20. package/dist/core/usecases/default-memory-usecase-port.js +1139 -0
  21. package/dist/core/usecases/default-memory-usecase-port.js.map +1 -0
  22. package/dist/core/usecases/semantic-memory-usecase.d.ts +52 -0
  23. package/dist/core/usecases/semantic-memory-usecase.d.ts.map +1 -0
  24. package/dist/core/usecases/semantic-memory-usecase.js +136 -0
  25. package/dist/core/usecases/semantic-memory-usecase.js.map +1 -0
  26. package/dist/db/slot-db.d.ts +293 -0
  27. package/dist/db/slot-db.d.ts.map +1 -1
  28. package/dist/db/slot-db.js +1272 -0
  29. package/dist/db/slot-db.js.map +1 -1
  30. package/dist/index.d.ts +537 -64
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +239 -99
  33. package/dist/index.js.map +1 -1
  34. package/dist/services/qdrant.d.ts.map +1 -1
  35. package/dist/services/qdrant.js +17 -0
  36. package/dist/services/qdrant.js.map +1 -1
  37. package/dist/tools/graph-tools.d.ts +2 -0
  38. package/dist/tools/graph-tools.d.ts.map +1 -1
  39. package/dist/tools/graph-tools.js +126 -177
  40. package/dist/tools/graph-tools.js.map +1 -1
  41. package/dist/tools/project-tools.d.ts +8 -0
  42. package/dist/tools/project-tools.d.ts.map +1 -0
  43. package/dist/tools/project-tools.js +649 -0
  44. package/dist/tools/project-tools.js.map +1 -0
  45. package/dist/tools/semantic-memory-tools.d.ts +8 -0
  46. package/dist/tools/semantic-memory-tools.d.ts.map +1 -0
  47. package/dist/tools/semantic-memory-tools.js +111 -0
  48. package/dist/tools/semantic-memory-tools.js.map +1 -0
  49. package/dist/tools/slot-tools.d.ts +3 -1
  50. package/dist/tools/slot-tools.d.ts.map +1 -1
  51. package/dist/tools/slot-tools.js +82 -156
  52. package/dist/tools/slot-tools.js.map +1 -1
  53. package/openclaw.plugin.json +22 -2
  54. package/package.json +25 -32
  55. package/dist/config.d.ts +0 -62
  56. package/dist/config.d.ts.map +0 -1
  57. package/dist/config.js +0 -102
  58. package/dist/config.js.map +0 -1
  59. package/dist/scripts/reembed-collection.d.ts +0 -2
  60. package/dist/scripts/reembed-collection.d.ts.map +0 -1
  61. package/dist/scripts/reembed-collection.js +0 -165
  62. package/dist/scripts/reembed-collection.js.map +0 -1
  63. package/dist/tools/memory_search.d.ts +0 -89
  64. package/dist/tools/memory_search.d.ts.map +0 -1
  65. package/dist/tools/memory_search.js +0 -188
  66. package/dist/tools/memory_search.js.map +0 -1
  67. package/dist/tools/memory_store.d.ts +0 -65
  68. package/dist/tools/memory_store.d.ts.map +0 -1
  69. package/dist/tools/memory_store.js +0 -196
  70. package/dist/tools/memory_store.js.map +0 -1
@@ -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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"}
@@ -1,65 +0,0 @@
1
- import { QdrantClient } from "../services/qdrant.js";
2
- import { EmbeddingClient } from "../services/embedding.js";
3
- import { DeduplicationService } from "../services/dedupe.js";
4
- import { StoreParams, ToolResult, MemoryNamespace } from "../types.js";
5
- export declare const memoryStoreSchema: {
6
- type: string;
7
- properties: {
8
- text: {
9
- type: string;
10
- description: string;
11
- };
12
- namespace: {
13
- type: string;
14
- description: string;
15
- };
16
- sessionId: {
17
- type: string;
18
- description: string;
19
- };
20
- userId: {
21
- type: string;
22
- description: string;
23
- };
24
- metadata: {
25
- type: string;
26
- description: string;
27
- };
28
- };
29
- required: string[];
30
- };
31
- export declare function createMemoryStoreTool(qdrant: QdrantClient, embedding: EmbeddingClient, dedupe: DeduplicationService, defaultNamespace: MemoryNamespace): {
32
- name: string;
33
- label: string;
34
- description: string;
35
- parameters: {
36
- type: string;
37
- properties: {
38
- text: {
39
- type: string;
40
- description: string;
41
- };
42
- namespace: {
43
- type: string;
44
- description: string;
45
- };
46
- sessionId: {
47
- type: string;
48
- description: string;
49
- };
50
- userId: {
51
- type: string;
52
- description: string;
53
- };
54
- metadata: {
55
- type: string;
56
- description: string;
57
- };
58
- };
59
- required: string[];
60
- };
61
- execute(_id: string, params: StoreParams & {
62
- agentId?: string;
63
- }, _signal?: AbortSignal): Promise<ToolResult>;
64
- };
65
- //# sourceMappingURL=memory_store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory_store.d.ts","sourceRoot":"","sources":["../../src/tools/memory_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAS,eAAe,EAAE,MAAM,aAAa,CAAC;AAyB9E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAyB7B,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,oBAAoB,EAC5B,gBAAgB,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcxB,MAAM,UACH,WAAW,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,YAChC,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC;EAwJzB"}
@@ -1,196 +0,0 @@
1
- import { normalizeNamespace, parseExplicitNamespace, toCoreAgent, evaluateNoiseV2 } 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 memoryStoreSchema = {
23
- type: "object",
24
- properties: {
25
- text: {
26
- type: "string",
27
- description: "The content to remember",
28
- },
29
- namespace: {
30
- type: "string",
31
- description: "Namespace for organization (default: 'shared.project_context')",
32
- },
33
- sessionId: {
34
- type: "string",
35
- description: "Optional session ID for context isolation",
36
- },
37
- userId: {
38
- type: "string",
39
- description: "Optional user ID for multi-user systems",
40
- },
41
- metadata: {
42
- type: "object",
43
- description: "Additional metadata to store",
44
- },
45
- },
46
- required: ["text"],
47
- };
48
- export function createMemoryStoreTool(qdrant, embedding, dedupe, defaultNamespace) {
49
- const createDetails = (text, extra = {}) => ({
50
- ...extra,
51
- toolResult: { text },
52
- });
53
- return {
54
- name: "memory_store",
55
- label: "Memory Store",
56
- description: "Store a memory in the vector database. Automatically deduplicates similar content.",
57
- parameters: memoryStoreSchema,
58
- async execute(_id, params, _signal) {
59
- try {
60
- // Validate
61
- if (!params.text || typeof params.text !== "string") {
62
- return {
63
- content: [{ type: "text", text: "Error: text is required" }],
64
- isError: true,
65
- details: createDetails("Error: text is required", { error: "Missing text parameter" }),
66
- };
67
- }
68
- const text = params.text.trim();
69
- if (text.length === 0) {
70
- return {
71
- content: [{ type: "text", text: "Error: text cannot be empty" }],
72
- isError: true,
73
- details: createDetails("Error: text cannot be empty", { error: "Empty text" }),
74
- };
75
- }
76
- if (text.length > 10000) {
77
- return {
78
- content: [{ type: "text", text: "Error: text exceeds 10000 character limit" }],
79
- isError: true,
80
- details: createDetails("Error: text exceeds 10000 character limit", { error: "Text too long", length: text.length }),
81
- };
82
- }
83
- // Namespace router + normalization policy (ASM-5)
84
- const sourceAgent = resolveAgentFromRuntimeParams(params);
85
- const requestedNamespace = typeof params.namespace === "string" && params.namespace.trim().length > 0
86
- ? params.namespace
87
- : `agent.${sourceAgent}.working_memory`;
88
- let namespace = typeof params.namespace === "string" && params.namespace.trim().length > 0
89
- ? parseExplicitNamespace(requestedNamespace, sourceAgent)
90
- : normalizeNamespace(requestedNamespace, sourceAgent);
91
- // Noise policy v2: quarantine noisy content into noise.filtered
92
- const noise = evaluateNoiseV2(text, "tool_call");
93
- if (noise.isNoise) {
94
- namespace = "noise.filtered";
95
- }
96
- // Generate embedding (chunking + weighted average)
97
- const embeddingResult = typeof embedding.embedDetailed === "function"
98
- ? await embedding.embedDetailed(text)
99
- : {
100
- vector: await embedding.embed(text),
101
- metadata: {
102
- embedding_chunked: false,
103
- embedding_chunks_count: 1,
104
- embedding_chunking_strategy: "array_batch_weighted_avg",
105
- embedding_model: "unknown",
106
- embedding_model_key: "unknown",
107
- embedding_provider: "auto",
108
- embedding_max_tokens: 0,
109
- embedding_safe_chunk_tokens: 0,
110
- embedding_source: "docs",
111
- embedding_fallback_hash: false,
112
- },
113
- };
114
- const vector = embeddingResult.vector;
115
- // Check for duplicates
116
- const candidates = await qdrant.search(vector, 5, {
117
- must: [
118
- { key: "namespace", match: { value: namespace } },
119
- ],
120
- });
121
- const duplicateId = dedupe.findDuplicate(text, candidates);
122
- if (duplicateId) {
123
- // Update existing memory
124
- const point = {
125
- id: duplicateId,
126
- vector,
127
- payload: {
128
- text,
129
- namespace,
130
- agent: sourceAgent,
131
- source_agent: sourceAgent,
132
- source_type: "tool_call",
133
- sessionId: params.sessionId || null,
134
- userId: params.userId || null,
135
- metadata: {
136
- ...(params.metadata || {}),
137
- ...embeddingResult.metadata,
138
- noise_score: noise.score,
139
- noise_matched_patterns: noise.matchedPatterns,
140
- },
141
- ...embeddingResult.metadata,
142
- timestamp: Date.now(),
143
- noise_score: noise.score,
144
- updatedAt: Date.now(),
145
- },
146
- };
147
- await qdrant.upsert([point]);
148
- const textOut = `Memory updated (duplicate detected, ID: ${duplicateId})`;
149
- return {
150
- content: [{ type: "text", text: textOut }],
151
- details: createDetails(textOut, { id: duplicateId, updated: true }),
152
- };
153
- }
154
- // Create new memory with UUID v4
155
- const id = crypto.randomUUID();
156
- const point = {
157
- id,
158
- vector,
159
- payload: {
160
- text,
161
- namespace,
162
- agent: sourceAgent,
163
- source_agent: sourceAgent,
164
- source_type: "tool_call",
165
- sessionId: params.sessionId || null,
166
- userId: params.userId || null,
167
- metadata: {
168
- ...(params.metadata || {}),
169
- ...embeddingResult.metadata,
170
- noise_score: noise.score,
171
- noise_matched_patterns: noise.matchedPatterns,
172
- },
173
- ...embeddingResult.metadata,
174
- timestamp: Date.now(),
175
- noise_score: noise.score,
176
- },
177
- };
178
- await qdrant.upsert([point]);
179
- const textOut = `Memory stored successfully (ID: ${id})`;
180
- return {
181
- content: [{ type: "text", text: textOut }],
182
- details: createDetails(textOut, { id, created: true }),
183
- };
184
- }
185
- catch (error) {
186
- const textOut = `Error storing memory: ${error.message}`;
187
- return {
188
- content: [{ type: "text", text: textOut }],
189
- isError: true,
190
- details: createDetails(textOut, { error: error.message }),
191
- };
192
- }
193
- },
194
- };
195
- }
196
- //# sourceMappingURL=memory_store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory_store.js","sourceRoot":"","sources":["../../src/tools/memory_store.ts"],"names":[],"mappings":"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"}