memory-mimir 2.3.0 → 2.3.2
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/cli.js +119 -28
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -20,6 +20,7 @@ function parseArgs(argv) {
|
|
|
20
20
|
let url = DEFAULT_URL;
|
|
21
21
|
let apiKey = "";
|
|
22
22
|
let code = "";
|
|
23
|
+
let skipVerify = false;
|
|
23
24
|
for (let i = 1; i < args.length; i++) {
|
|
24
25
|
if (args[i] === "--url" && args[i + 1]) {
|
|
25
26
|
url = args[++i];
|
|
@@ -31,8 +32,11 @@ function parseArgs(argv) {
|
|
|
31
32
|
else if (args[i] === "--code" && args[i + 1]) {
|
|
32
33
|
code = args[++i];
|
|
33
34
|
}
|
|
35
|
+
else if (args[i] === "--skip-verify") {
|
|
36
|
+
skipVerify = true;
|
|
37
|
+
}
|
|
34
38
|
}
|
|
35
|
-
return { command, url, apiKey, code };
|
|
39
|
+
return { command, url, apiKey, code, skipVerify };
|
|
36
40
|
}
|
|
37
41
|
function readConfig(configPath) {
|
|
38
42
|
try {
|
|
@@ -98,23 +102,107 @@ function installPlugin() {
|
|
|
98
102
|
return false;
|
|
99
103
|
}
|
|
100
104
|
}
|
|
101
|
-
|
|
105
|
+
const SKILL_MD = `---
|
|
106
|
+
name: mimir-memory
|
|
107
|
+
description: >
|
|
108
|
+
Long-term memory for AI agents powered by Mimir (knowledge graph + vector + BM25).
|
|
109
|
+
Use when: (1) The user asks about past conversations, people, events, or preferences,
|
|
110
|
+
(2) The user says "remember this" or shares important facts to save,
|
|
111
|
+
(3) The user references something discussed before ("remember when...", "what did I say about..."),
|
|
112
|
+
(4) The user wants to forget or delete stored memories,
|
|
113
|
+
(5) Auto-recalled memories are insufficient and a deeper search is needed,
|
|
114
|
+
(6) The user asks a time-specific question about the past ("last week", "in January").
|
|
115
|
+
Available tools: mimir_search (active memory lookup), mimir_store (save facts), mimir_forget (delete memories).
|
|
116
|
+
Auto-recall injects basic context automatically before each conversation — use mimir_search for deeper queries.
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
# Mimir Memory
|
|
120
|
+
|
|
121
|
+
## How Memory Works
|
|
122
|
+
|
|
123
|
+
- **Auto-recall**: Before each conversation, relevant memories are silently injected as \\\`<memories>\\\` context. No action needed.
|
|
124
|
+
- **mimir_search**: Actively search memory when auto-recall is insufficient.
|
|
125
|
+
- **mimir_store**: Save important facts, preferences, or notes the user wants remembered.
|
|
126
|
+
- **mimir_forget**: Look up and preview memories for deletion.
|
|
127
|
+
|
|
128
|
+
## Using mimir_search
|
|
129
|
+
|
|
130
|
+
### Query Crafting
|
|
131
|
+
|
|
132
|
+
Be specific. Include names, dates, and topic keywords.
|
|
133
|
+
|
|
134
|
+
\\\`\\\`\\\`
|
|
135
|
+
GOOD: "Arthur's Chrome extension project in March"
|
|
136
|
+
BAD: "that project"
|
|
137
|
+
|
|
138
|
+
GOOD: "Caroline's birthday gift ideas"
|
|
139
|
+
BAD: "gift ideas"
|
|
140
|
+
\\\`\\\`\\\`
|
|
141
|
+
|
|
142
|
+
### memory_types Selection
|
|
143
|
+
|
|
144
|
+
| Goal | memory_types | Example query |
|
|
145
|
+
|------|-------------|---------------|
|
|
146
|
+
| Specific facts/events | \\\`["event_log"]\\\` | "What did I eat last Tuesday?" |
|
|
147
|
+
| People/places/things | \\\`["entity"]\\\` | "Who is Caroline?" |
|
|
148
|
+
| How things connect | \\\`["relation"]\\\` | "How do Arthur and Caroline know each other?" |
|
|
149
|
+
| Full conversation context | \\\`["episode"]\\\` | "Summarize our Chrome extension discussion" |
|
|
150
|
+
| Best general results | \\\`["event_log", "entity", "relation"]\\\` | "Tell me about the Japan trip" |
|
|
151
|
+
| Broad exploratory | *(omit)* | When unsure what type to look for |
|
|
152
|
+
|
|
153
|
+
### Time Filtering
|
|
154
|
+
|
|
155
|
+
When the user mentions time, convert to ISO 8601 and pass \\\`start_time\\\`/\\\`end_time\\\`:
|
|
156
|
+
|
|
157
|
+
- "last week" → 7 days ago to now
|
|
158
|
+
- "in March 2025" → \\\`2025-03-01\\\` to \\\`2025-03-31\\\`
|
|
159
|
+
- "yesterday" → yesterday 00:00 to 23:59
|
|
160
|
+
|
|
161
|
+
### Parameters
|
|
162
|
+
|
|
163
|
+
\\\`\\\`\\\`
|
|
164
|
+
mimir_search({
|
|
165
|
+
query: string, // Required. Specific search query.
|
|
166
|
+
memory_types?: string[],// Optional. Filter: "event_log", "entity", "relation", "episode", "raw_doc", "foresight"
|
|
167
|
+
start_time?: string, // Optional. ISO 8601 start.
|
|
168
|
+
end_time?: string, // Optional. ISO 8601 end.
|
|
169
|
+
top_k?: number // Optional. Max results (default 10, max 30).
|
|
170
|
+
})
|
|
171
|
+
\\\`\\\`\\\`
|
|
172
|
+
|
|
173
|
+
## Using mimir_store
|
|
174
|
+
|
|
175
|
+
Save when the user explicitly asks to remember something, or shares clearly important personal information (preferences, plans, decisions).
|
|
176
|
+
|
|
177
|
+
\\\`\\\`\\\`
|
|
178
|
+
mimir_store({ content: "Arthur prefers dark roast coffee, no sugar." })
|
|
179
|
+
\\\`\\\`\\\`
|
|
180
|
+
|
|
181
|
+
Keep content atomic — one fact per call. Include the person's name for attribution.
|
|
182
|
+
|
|
183
|
+
## Installation
|
|
184
|
+
|
|
185
|
+
\\\`\\\`\\\`bash
|
|
186
|
+
# With invite code (closed beta)
|
|
187
|
+
npx memory-mimir init --code XXXXXX
|
|
188
|
+
|
|
189
|
+
# Or with existing API key
|
|
190
|
+
npx memory-mimir setup --api-key sk-mimir-xxx
|
|
191
|
+
\\\`\\\`\\\`
|
|
192
|
+
|
|
193
|
+
Use the same invite code on any device to recover your memory. Restart the AI agent after setup.
|
|
194
|
+
`;
|
|
195
|
+
function installSkill() {
|
|
102
196
|
console.log("\x1b[2m Installing Mimir SKILL...\x1b[0m");
|
|
103
197
|
try {
|
|
104
|
-
const res = await fetch(`${serverUrl}/SKILL.md`);
|
|
105
|
-
if (!res.ok)
|
|
106
|
-
throw new Error(`HTTP ${res.status}`);
|
|
107
|
-
const content = await res.text();
|
|
108
|
-
// Write to ~/.openclaw/skills/memory-mimir/SKILL.md
|
|
109
198
|
const skillDir = path.join(os.homedir(), ".openclaw", "skills", "memory-mimir");
|
|
110
199
|
fs.mkdirSync(skillDir, { recursive: true });
|
|
111
|
-
fs.writeFileSync(path.join(skillDir, "SKILL.md"),
|
|
200
|
+
fs.writeFileSync(path.join(skillDir, "SKILL.md"), SKILL_MD);
|
|
112
201
|
console.log("\x1b[2m SKILL installed → ~/.openclaw/skills/memory-mimir/SKILL.md\x1b[0m");
|
|
113
202
|
return true;
|
|
114
203
|
}
|
|
115
204
|
catch {
|
|
116
|
-
console.log("\x1b[33m ⚠ Could not
|
|
117
|
-
console.log(`\x1b[2m curl -o ~/.openclaw/skills/memory-mimir/SKILL.md ${serverUrl}/SKILL.md\x1b[0m`);
|
|
205
|
+
console.log("\x1b[33m ⚠ Could not install SKILL.md\x1b[0m");
|
|
118
206
|
return false;
|
|
119
207
|
}
|
|
120
208
|
}
|
|
@@ -186,7 +274,7 @@ async function cmdInit(url, code) {
|
|
|
186
274
|
}
|
|
187
275
|
// Install plugin + SKILL (best-effort)
|
|
188
276
|
installPlugin();
|
|
189
|
-
|
|
277
|
+
installSkill();
|
|
190
278
|
// Write config
|
|
191
279
|
const configPath = path.join(os.homedir(), ".openclaw", "openclaw.json");
|
|
192
280
|
writeConfig(configPath, deviceData.device_key, url);
|
|
@@ -215,34 +303,37 @@ async function cmdInit(url, code) {
|
|
|
215
303
|
`);
|
|
216
304
|
}
|
|
217
305
|
}
|
|
218
|
-
async function cmdSetup(url, apiKey) {
|
|
306
|
+
async function cmdSetup(url, apiKey, skipVerify) {
|
|
219
307
|
if (!apiKey) {
|
|
220
308
|
console.error("Error: --api-key is required.");
|
|
221
309
|
console.error(" Usage: npx memory-mimir setup --api-key sk-mimir-xxx");
|
|
222
310
|
console.error(" Or run: npx memory-mimir init (for zero-config setup)");
|
|
223
311
|
process.exit(1);
|
|
224
312
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
313
|
+
let displayName = "(skipped verification)";
|
|
314
|
+
if (!skipVerify) {
|
|
315
|
+
console.log();
|
|
316
|
+
console.log("\x1b[2m Validating API key...\x1b[0m");
|
|
317
|
+
const client = new MimirClient({ url, apiKey });
|
|
318
|
+
try {
|
|
319
|
+
const identity = await client.me();
|
|
320
|
+
displayName = identity.display_name;
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
324
|
+
console.error(`\x1b[31m ✗ Authentication failed: ${msg}\x1b[0m`);
|
|
325
|
+
console.error(`\x1b[2m Tip: use --skip-verify to skip validation and write config directly.\x1b[0m`);
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
236
328
|
}
|
|
237
329
|
// Install plugin + SKILL (best-effort)
|
|
238
330
|
installPlugin();
|
|
239
|
-
|
|
331
|
+
installSkill();
|
|
240
332
|
// Write config
|
|
241
333
|
const configPath = path.join(os.homedir(), ".openclaw", "openclaw.json");
|
|
242
334
|
writeConfig(configPath, apiKey, url);
|
|
243
335
|
console.log();
|
|
244
|
-
console.log(` \x1b[1;32m✓
|
|
245
|
-
console.log(` \x1b[2mUser ID: ${identity.user_id}\x1b[0m`);
|
|
336
|
+
console.log(` \x1b[1;32m✓ Configured as: ${displayName}\x1b[0m`);
|
|
246
337
|
console.log(` \x1b[2mServer: ${url}\x1b[0m`);
|
|
247
338
|
console.log(` \x1b[2mConfig: ${configPath}\x1b[0m`);
|
|
248
339
|
console.log();
|
|
@@ -250,13 +341,13 @@ async function cmdSetup(url, apiKey) {
|
|
|
250
341
|
console.log();
|
|
251
342
|
}
|
|
252
343
|
async function main() {
|
|
253
|
-
const { command, url, apiKey, code } = parseArgs(process.argv);
|
|
344
|
+
const { command, url, apiKey, code, skipVerify } = parseArgs(process.argv);
|
|
254
345
|
switch (command) {
|
|
255
346
|
case "init":
|
|
256
347
|
await cmdInit(url, code);
|
|
257
348
|
break;
|
|
258
349
|
case "setup":
|
|
259
|
-
await cmdSetup(url, apiKey);
|
|
350
|
+
await cmdSetup(url, apiKey, skipVerify);
|
|
260
351
|
break;
|
|
261
352
|
default:
|
|
262
353
|
console.log("Usage:");
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,SAAS,SAAS,CAAC,IAAc;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|