@t0ken.ai/memoryx-openclaw-plugin 2.2.59 → 2.2.61
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 +14 -2
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +13 -0
- package/dist/hooks.d.ts +8 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +39 -0
- package/dist/index.d.ts +7 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -1049
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +50 -0
- package/dist/plugin-core.d.ts +48 -0
- package/dist/plugin-core.d.ts.map +1 -0
- package/dist/plugin-core.js +202 -0
- package/dist/proxy-credentials.d.ts +63 -0
- package/dist/proxy-credentials.d.ts.map +1 -0
- package/dist/proxy-credentials.js +234 -0
- package/dist/proxy-redirect.d.ts +7 -0
- package/dist/proxy-redirect.d.ts.map +1 -0
- package/dist/proxy-redirect.js +76 -0
- package/dist/sidecar.d.ts +40 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +322 -0
- package/dist/tools.d.ts +6 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +348 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +5 -3
package/dist/tools.js
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
export function registerTools(api, plugin) {
|
|
2
|
+
api.registerTool({
|
|
3
|
+
name: "memoryx_recall",
|
|
4
|
+
label: "MemoryX Recall",
|
|
5
|
+
description: "Search long-term memories. Direct results = vector DB; related = graph DB (entities: file, command, search, decision, error). Use before answering about preferences/history. Time: use absolute dates in time_filter (YYYY-MM-DD). For graph-focused search (memories related to an entity), pass entity_name. Returned id is used for memoryx_forget.",
|
|
6
|
+
parameters: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
query: { type: "string", description: "Search intent (keywords or natural language)" },
|
|
10
|
+
limit: { type: "number", description: "Max results (default: 5)" },
|
|
11
|
+
time_filter: { type: "object", description: "Optional. start/end in YYYY-MM-DD or YYYY-MM-DD HH:mm:ss (absolute dates only)" },
|
|
12
|
+
categories: { type: "array", items: { type: "string" }, description: "Optional. Filter by category (semantic/episodic/procedural/emotional/reflective)" },
|
|
13
|
+
tags: { type: "array", items: { type: "string" }, description: "Optional. Filter by tags" },
|
|
14
|
+
entity_name: { type: "string", description: "Optional. Expand graph from this entity (e.g. file path, command name); same convention as server extraction" },
|
|
15
|
+
},
|
|
16
|
+
required: ["query"],
|
|
17
|
+
},
|
|
18
|
+
async execute(_toolCallId, params) {
|
|
19
|
+
const { query, limit = 5, time_filter, categories, tags, entity_name } = params;
|
|
20
|
+
if (!plugin) {
|
|
21
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const result = await plugin.recall(query, limit, { time_filter, categories, tags, entity_name });
|
|
25
|
+
if (result.isLimited) {
|
|
26
|
+
return {
|
|
27
|
+
content: [{ type: "text", text: result.upgradeHint || "Quota exceeded" }],
|
|
28
|
+
details: { error: "quota_exceeded", hint: result.upgradeHint },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (result.memories.length === 0 && result.relatedMemories.length === 0) {
|
|
32
|
+
return { content: [{ type: "text", text: "No relevant memories found." }], details: { count: 0 } };
|
|
33
|
+
}
|
|
34
|
+
const lines = [];
|
|
35
|
+
const total = result.memories.length + result.relatedMemories.length;
|
|
36
|
+
if (result.memories.length > 0) {
|
|
37
|
+
lines.push(`Found ${result.memories.length} direct memories:`);
|
|
38
|
+
result.memories.forEach((m, i) => lines.push(`${i + 1}. [${m.category}] ${m.content} (${Math.round(m.score * 100)}%)`));
|
|
39
|
+
}
|
|
40
|
+
if (result.relatedMemories.length > 0) {
|
|
41
|
+
if (lines.length > 0)
|
|
42
|
+
lines.push("");
|
|
43
|
+
lines.push(`Found ${result.relatedMemories.length} related memories:`);
|
|
44
|
+
result.relatedMemories.forEach((m, i) => lines.push(`${i + 1}. [${m.category}] ${m.content}`));
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
48
|
+
details: {
|
|
49
|
+
count: total,
|
|
50
|
+
direct_count: result.memories.length,
|
|
51
|
+
related_count: result.relatedMemories.length,
|
|
52
|
+
remaining_quota: result.remainingQuota,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return {
|
|
58
|
+
content: [{ type: "text", text: `Memory search failed: ${error.message}` }],
|
|
59
|
+
details: { error: error.message },
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
}, { name: "memoryx_recall" });
|
|
64
|
+
api.registerTool({
|
|
65
|
+
name: "memoryx_graph_search",
|
|
66
|
+
label: "MemoryX Graph Search",
|
|
67
|
+
description: "Search memories by graph entity (file path, command, search query, decision, error). Use when user asks 'what did we do with X', 'memories about file Y', or 'recall related to command Z'. Same entity types as server: file, command, search_query, decision, error. Returns direct + related memories. Time_filter uses absolute dates (YYYY-MM-DD).",
|
|
68
|
+
parameters: {
|
|
69
|
+
type: "object",
|
|
70
|
+
properties: {
|
|
71
|
+
entity_name: { type: "string", description: "Entity to expand (e.g. file path, command, search term, decision summary)" },
|
|
72
|
+
query: { type: "string", description: "Optional. Extra keywords; if empty, entity_name is used as query" },
|
|
73
|
+
limit: { type: "number", description: "Max results (default: 5)" },
|
|
74
|
+
time_filter: { type: "object", description: "Optional. start/end YYYY-MM-DD" },
|
|
75
|
+
},
|
|
76
|
+
required: ["entity_name"],
|
|
77
|
+
},
|
|
78
|
+
async execute(_toolCallId, params) {
|
|
79
|
+
const { entity_name, query, limit = 5, time_filter } = params;
|
|
80
|
+
if (!plugin) {
|
|
81
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
82
|
+
}
|
|
83
|
+
if (!entity_name || String(entity_name).trim().length === 0) {
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: "text", text: "entity_name is required for graph search." }],
|
|
86
|
+
details: { error: "missing_entity_name" },
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const searchQuery = (query && String(query).trim()) ? String(query).trim() : String(entity_name).trim();
|
|
91
|
+
const result = await plugin.recall(searchQuery, limit, { time_filter, entity_name: String(entity_name).trim() });
|
|
92
|
+
if (result.isLimited) {
|
|
93
|
+
return {
|
|
94
|
+
content: [{ type: "text", text: result.upgradeHint || "Quota exceeded" }],
|
|
95
|
+
details: { error: "quota_exceeded", hint: result.upgradeHint },
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (result.memories.length === 0 && result.relatedMemories.length === 0) {
|
|
99
|
+
return {
|
|
100
|
+
content: [{ type: "text", text: `No memories found for entity "${entity_name}".` }],
|
|
101
|
+
details: { count: 0, entity_name },
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const lines = [];
|
|
105
|
+
if (result.memories.length > 0) {
|
|
106
|
+
lines.push(`Direct (${result.memories.length}):`);
|
|
107
|
+
result.memories.forEach((m, i) => lines.push(`${i + 1}. [${m.category}] ${m.content} (${Math.round(m.score * 100)}%)`));
|
|
108
|
+
}
|
|
109
|
+
if (result.relatedMemories.length > 0) {
|
|
110
|
+
if (lines.length > 0)
|
|
111
|
+
lines.push("");
|
|
112
|
+
lines.push(`Related by graph (${result.relatedMemories.length}):`);
|
|
113
|
+
result.relatedMemories.forEach((m, i) => lines.push(`${i + 1}. [${m.category}] ${m.content}`));
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
117
|
+
details: {
|
|
118
|
+
count: result.memories.length + result.relatedMemories.length,
|
|
119
|
+
direct_count: result.memories.length,
|
|
120
|
+
related_count: result.relatedMemories.length,
|
|
121
|
+
entity_name: String(entity_name).trim(),
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
return {
|
|
127
|
+
content: [{ type: "text", text: `Graph search failed: ${error.message}` }],
|
|
128
|
+
details: { error: error.message },
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
}, { name: "memoryx_graph_search" });
|
|
133
|
+
api.registerTool({
|
|
134
|
+
name: "memoryx_forget",
|
|
135
|
+
label: "MemoryX Forget",
|
|
136
|
+
description: "Delete a memory. memory_id MUST be the id returned by memoryx_recall or memoryx_list—do not use any other value.",
|
|
137
|
+
parameters: {
|
|
138
|
+
type: "object",
|
|
139
|
+
properties: { memory_id: { type: "string", description: "Id from memoryx_recall or memoryx_list result (required)" } },
|
|
140
|
+
required: ["memory_id"],
|
|
141
|
+
},
|
|
142
|
+
async execute(_toolCallId, params) {
|
|
143
|
+
const { memory_id } = params;
|
|
144
|
+
if (!plugin) {
|
|
145
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const success = await plugin.forget(memory_id);
|
|
149
|
+
if (success) {
|
|
150
|
+
return { content: [{ type: "text", text: `Memory ${memory_id} has been forgotten.` }], details: { action: "deleted", id: memory_id } };
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
content: [{ type: "text", text: `Memory ${memory_id} not found or could not be deleted.` }],
|
|
154
|
+
details: { action: "failed", id: memory_id },
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return {
|
|
159
|
+
content: [{ type: "text", text: `Failed to forget memory: ${error.message}` }],
|
|
160
|
+
details: { error: error.message },
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
}, { name: "memoryx_forget" });
|
|
165
|
+
api.registerTool({
|
|
166
|
+
name: "memoryx_store",
|
|
167
|
+
label: "MemoryX Store",
|
|
168
|
+
description: "Save one atomic fact to long-term memory. RULES YOU MUST FOLLOW: (1) ONE fact per call—do not merge multiple facts. (2) DATES: Use ONLY absolute dates (YYYY-MM-DD or ISO 8601). NEVER use 'yesterday', 'last week', 'recently', or any relative time. (3) CONTEXT COMPLETION (mandatory): If content has 'it'/'this'/'that'/'the project'—MUST rewrite with explicit referents so the fact is self-contained. Example: 'it broke' → '[Device] MacBook Pro 2023 screen damaged'. Content that is not self-contained will be stored incorrectly. (4) metadata.category MUST be one of: semantic | episodic | procedural | emotional | reflective. (5) Call when: user says 'remember this', design/code decisions, task completion, or end-of-session summary (≤100 words).",
|
|
169
|
+
parameters: {
|
|
170
|
+
type: "object",
|
|
171
|
+
properties: {
|
|
172
|
+
content: {
|
|
173
|
+
type: "string",
|
|
174
|
+
description: "REQUIRED. One atomic fact, self-contained. MUST use absolute dates (YYYY-MM-DD). MUST resolve any 'it'/'this'/'that' to explicit nouns. Session summary: max 100 words.",
|
|
175
|
+
},
|
|
176
|
+
metadata: {
|
|
177
|
+
type: "object",
|
|
178
|
+
description: "category (required): semantic|episodic|procedural|emotional|reflective. tags (optional): string array.",
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
required: ["content"],
|
|
182
|
+
},
|
|
183
|
+
async execute(_toolCallId, params) {
|
|
184
|
+
const { content, metadata } = params;
|
|
185
|
+
if (!plugin) {
|
|
186
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
187
|
+
}
|
|
188
|
+
if (!content || content.trim().length < 5) {
|
|
189
|
+
return {
|
|
190
|
+
content: [{ type: "text", text: "Content too short. Please provide more meaningful information to remember." }],
|
|
191
|
+
details: { error: "content_too_short" },
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const result = await plugin.store(content.trim(), metadata);
|
|
196
|
+
if (result.success) {
|
|
197
|
+
return {
|
|
198
|
+
content: [{ type: "text", text: `Stored: "${content.slice(0, 100)}${content.length > 100 ? "..." : ""}"` }],
|
|
199
|
+
details: { action: "stored", task_id: result.task_id },
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
content: [{ type: "text", text: "Failed to store memory. Please try again." }],
|
|
204
|
+
details: { error: "store_failed" },
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
return {
|
|
209
|
+
content: [{ type: "text", text: `Failed to store memory: ${error.message}` }],
|
|
210
|
+
details: { error: error.message },
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
}, { name: "memoryx_store" });
|
|
215
|
+
api.registerTool({
|
|
216
|
+
name: "memoryx_list",
|
|
217
|
+
label: "MemoryX List",
|
|
218
|
+
description: "List recent memories by creation time (newest first). No search—time-ordered only. To delete one, use memoryx_recall to get id then memoryx_forget. Returned id = memory_id for forget.",
|
|
219
|
+
parameters: {
|
|
220
|
+
type: "object",
|
|
221
|
+
properties: {
|
|
222
|
+
limit: { type: "number", description: "Max items (default: 10)" },
|
|
223
|
+
offset: { type: "number", description: "Pagination offset (default: 0)" },
|
|
224
|
+
time_filter: { type: "object", description: "Optional. start/end YYYY-MM-DD HH:mm:ss" },
|
|
225
|
+
categories: { type: "array", items: { type: "string" }, description: "Optional. Filter by category" },
|
|
226
|
+
tags: { type: "array", items: { type: "string" }, description: "Optional. Filter by tags" },
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
async execute(_toolCallId, params) {
|
|
230
|
+
const { limit = 10, offset = 0, time_filter, categories, tags } = params;
|
|
231
|
+
if (!plugin) {
|
|
232
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const memories = await plugin.list(limit, offset, { time_filter, categories, tags });
|
|
236
|
+
if (memories.length === 0) {
|
|
237
|
+
return { content: [{ type: "text", text: "No memories stored yet." }], details: { count: 0 } };
|
|
238
|
+
}
|
|
239
|
+
const lines = [`Here are the ${memories.length} most recent memories:`];
|
|
240
|
+
memories.forEach((m, i) => lines.push(`${i + 1}. [${m.category || "general"}] ${m.content || m.memory}`));
|
|
241
|
+
return { content: [{ type: "text", text: lines.join("\n") }], details: { count: memories.length } };
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return {
|
|
245
|
+
content: [{ type: "text", text: `Failed to list memories: ${error.message}` }],
|
|
246
|
+
details: { error: error.message },
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
}, { name: "memoryx_list" });
|
|
251
|
+
api.registerTool({
|
|
252
|
+
name: "memoryx_account_info",
|
|
253
|
+
label: "MemoryX Account Info",
|
|
254
|
+
description: "Get MemoryX account information including API Key, Project ID, User ID, and API Base URL. Use when user asks about their MemoryX account, API key, project settings, or account status. Returns all stored account configuration from local database.",
|
|
255
|
+
parameters: { type: "object", properties: {} },
|
|
256
|
+
async execute(_toolCallId, params) {
|
|
257
|
+
if (!plugin) {
|
|
258
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
259
|
+
}
|
|
260
|
+
try {
|
|
261
|
+
const accountInfo = await plugin.getAccountInfo();
|
|
262
|
+
if (!accountInfo) {
|
|
263
|
+
return {
|
|
264
|
+
content: [{ type: "text", text: "No account information found. The plugin may not be registered yet." }],
|
|
265
|
+
details: { error: "no_account" },
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
const lines = [
|
|
269
|
+
"📊 MemoryX account info:",
|
|
270
|
+
`API Key: ${accountInfo.apiKey || "not set"}`,
|
|
271
|
+
`Agent ID: ${accountInfo.agentId || "not set"}`,
|
|
272
|
+
`Agent Type: ${accountInfo.agentType || "not set"}`,
|
|
273
|
+
`Status: ${accountInfo.initialized ? "✅ initialized" : "❌ not initialized"}`,
|
|
274
|
+
];
|
|
275
|
+
if (accountInfo.quota) {
|
|
276
|
+
const quota = accountInfo.quota;
|
|
277
|
+
if (quota.search_count !== undefined) {
|
|
278
|
+
const limit = quota.search_limit || "unlimited";
|
|
279
|
+
lines.push(`Search count: ${quota.search_count}/${limit}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (accountInfo.apiKey) {
|
|
283
|
+
lines.push("");
|
|
284
|
+
lines.push("💡 Open Portal to manage your memories:");
|
|
285
|
+
lines.push(` https://t0ken.ai/portal?api_key=${accountInfo.apiKey}`);
|
|
286
|
+
}
|
|
287
|
+
return {
|
|
288
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
289
|
+
details: { apiKey: accountInfo.apiKey, agentId: accountInfo.agentId, agentType: accountInfo.agentType, quota: accountInfo.quota },
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
return {
|
|
294
|
+
content: [{ type: "text", text: `Failed to get account info: ${error.message}` }],
|
|
295
|
+
details: { error: error.message },
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
}, { name: "memoryx_account_info" });
|
|
300
|
+
api.registerTool({
|
|
301
|
+
name: "memoryx_queue_status",
|
|
302
|
+
label: "MemoryX Queue Status",
|
|
303
|
+
description: "Get Celery queue status: current backlog count and estimated wait time. Use when diagnosing memory processing delay or when the user asks why memories are not processed yet, memory processing status, or queue status.",
|
|
304
|
+
parameters: { type: "object", properties: {} },
|
|
305
|
+
async execute(_toolCallId, params) {
|
|
306
|
+
if (!plugin) {
|
|
307
|
+
return { content: [{ type: "text", text: "MemoryX plugin not initialized." }], details: { error: "not_initialized" } };
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
const result = await plugin.getQueueStatus();
|
|
311
|
+
if (!result.success) {
|
|
312
|
+
return {
|
|
313
|
+
content: [{ type: "text", text: `Failed to get queue status: ${result.error || "unknown error"}` }],
|
|
314
|
+
details: { error: result.error },
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
const data = result.data;
|
|
318
|
+
const statusEmoji = { normal: "✅", backlogged: "⚠️", severely_backlogged: "🔴" };
|
|
319
|
+
const emoji = statusEmoji[String(data.status)] ?? "❓";
|
|
320
|
+
const lines = [
|
|
321
|
+
`${emoji} MemoryX queue status:`,
|
|
322
|
+
`Queue name: ${data.queue_name}`,
|
|
323
|
+
`Tier: ${data.tier}`,
|
|
324
|
+
`Backlog: ${data.queue_length} tasks`,
|
|
325
|
+
`Free queue: ${data.memory_free_queue}`,
|
|
326
|
+
`Pro queue: ${data.memory_pro_queue}`,
|
|
327
|
+
`Estimated wait: ${data.estimated_wait_time}`,
|
|
328
|
+
`Status: ${data.message}`,
|
|
329
|
+
];
|
|
330
|
+
return {
|
|
331
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
332
|
+
details: {
|
|
333
|
+
queue_name: data.queue_name,
|
|
334
|
+
queue_length: data.queue_length,
|
|
335
|
+
status: data.status,
|
|
336
|
+
estimated_wait_time: data.estimated_wait_time,
|
|
337
|
+
},
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
return {
|
|
342
|
+
content: [{ type: "text", text: `Failed to get queue status: ${error.message}` }],
|
|
343
|
+
details: { error: error.message },
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
}, { name: "memoryx_queue_status" });
|
|
348
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the MemoryX OpenClaw plugin.
|
|
3
|
+
*/
|
|
4
|
+
export interface PluginConfig {
|
|
5
|
+
apiBaseUrl?: string;
|
|
6
|
+
/** Enable debug mode: intercept all requests and log to plugin.log */
|
|
7
|
+
debugProvider?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface RecallResult {
|
|
10
|
+
memories: Array<{
|
|
11
|
+
id: string;
|
|
12
|
+
content: string;
|
|
13
|
+
category: string;
|
|
14
|
+
score: number;
|
|
15
|
+
}>;
|
|
16
|
+
relatedMemories: Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
content: string;
|
|
19
|
+
category: string;
|
|
20
|
+
score: number;
|
|
21
|
+
}>;
|
|
22
|
+
isLimited: boolean;
|
|
23
|
+
remainingQuota: number;
|
|
24
|
+
upgradeHint?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ProviderCredentials {
|
|
27
|
+
baseUrl: string;
|
|
28
|
+
apiKey: string;
|
|
29
|
+
models?: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
name?: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD"}
|
package/dist/types.js
ADDED
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t0ken.ai/memoryx-openclaw-plugin",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.61",
|
|
4
4
|
"description": "MemoryX real-time memory capture and recall plugin for OpenClaw (powered by @t0ken.ai/memoryx-sdk)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "MemoryX Team",
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
15
|
"prebuild": "node scripts/update-version.cjs",
|
|
16
|
-
"build": "tsc"
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"test:recall": "node scripts/test-recall-capture.mjs",
|
|
18
|
+
"reset-proxy-usage": "node scripts/reset-memoryx-proxy-usage.mjs"
|
|
17
19
|
},
|
|
18
20
|
"keywords": [
|
|
19
21
|
"openclaw",
|
|
@@ -36,6 +38,6 @@
|
|
|
36
38
|
"typescript": "^5.0.0"
|
|
37
39
|
},
|
|
38
40
|
"dependencies": {
|
|
39
|
-
"@t0ken.ai/memoryx-sdk": "^1.5.
|
|
41
|
+
"@t0ken.ai/memoryx-sdk": "^1.5.3"
|
|
40
42
|
}
|
|
41
43
|
}
|