@mrc2204/agent-smart-memo 4.1.3 → 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.
- package/README.md +317 -135
- package/dist/adapters/openclaw/tool-runtime.d.ts +29 -0
- package/dist/adapters/openclaw/tool-runtime.d.ts.map +1 -0
- package/dist/adapters/openclaw/tool-runtime.js +48 -0
- package/dist/adapters/openclaw/tool-runtime.js.map +1 -0
- package/dist/core/contracts/adapter-contracts.d.ts +31 -0
- package/dist/core/contracts/adapter-contracts.d.ts.map +1 -0
- package/dist/core/contracts/adapter-contracts.js +2 -0
- package/dist/core/contracts/adapter-contracts.js.map +1 -0
- package/dist/core/runtime-boundary.d.ts +23 -0
- package/dist/core/runtime-boundary.d.ts.map +1 -0
- package/dist/core/runtime-boundary.js +39 -0
- package/dist/core/runtime-boundary.js.map +1 -0
- package/dist/core/usecases/default-memory-usecase-port.d.ts +21 -0
- package/dist/core/usecases/default-memory-usecase-port.d.ts.map +1 -0
- package/dist/core/usecases/default-memory-usecase-port.js +263 -0
- package/dist/core/usecases/default-memory-usecase-port.js.map +1 -0
- package/dist/core/usecases/semantic-memory-usecase.d.ts +52 -0
- package/dist/core/usecases/semantic-memory-usecase.d.ts.map +1 -0
- package/dist/core/usecases/semantic-memory-usecase.js +136 -0
- package/dist/core/usecases/semantic-memory-usecase.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -9
- package/dist/index.js.map +1 -1
- package/dist/tools/graph-tools.d.ts +2 -0
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +126 -177
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/semantic-memory-tools.d.ts +8 -0
- package/dist/tools/semantic-memory-tools.d.ts.map +1 -0
- package/dist/tools/semantic-memory-tools.js +111 -0
- package/dist/tools/semantic-memory-tools.js.map +1 -0
- package/dist/tools/slot-tools.d.ts +3 -1
- package/dist/tools/slot-tools.d.ts.map +1 -1
- package/dist/tools/slot-tools.js +82 -156
- package/dist/tools/slot-tools.js.map +1 -1
- package/package.json +25 -32
- package/dist/config.d.ts +0 -62
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -102
- package/dist/config.js.map +0 -1
- package/dist/scripts/reembed-collection.d.ts +0 -2
- package/dist/scripts/reembed-collection.d.ts.map +0 -1
- package/dist/scripts/reembed-collection.js +0 -165
- package/dist/scripts/reembed-collection.js.map +0 -1
- package/dist/tools/memory_search.d.ts +0 -89
- package/dist/tools/memory_search.d.ts.map +0 -1
- package/dist/tools/memory_search.js +0 -188
- package/dist/tools/memory_search.js.map +0 -1
- package/dist/tools/memory_store.d.ts +0 -65
- package/dist/tools/memory_store.d.ts.map +0 -1
- package/dist/tools/memory_store.js +0 -196
- package/dist/tools/memory_store.js.map +0 -1
|
@@ -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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"}
|