memory-mimir 1.0.5 → 2.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/dist/cli.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * memory-mimir CLI — standalone installer for OpenClaw.
4
+ *
5
+ * Usage:
6
+ * npx memory-mimir init # register device + install plugin + write config
7
+ * npx memory-mimir init --url X # custom Mimir server
8
+ * npx memory-mimir setup --api-key sk-mimir-xxx # use existing API key
9
+ */
10
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * memory-mimir CLI — standalone installer for OpenClaw.
4
+ *
5
+ * Usage:
6
+ * npx memory-mimir init # register device + install plugin + write config
7
+ * npx memory-mimir init --url X # custom Mimir server
8
+ * npx memory-mimir setup --api-key sk-mimir-xxx # use existing API key
9
+ */
10
+ import * as fs from "node:fs";
11
+ import * as path from "node:path";
12
+ import * as os from "node:os";
13
+ import { execSync } from "node:child_process";
14
+ import { MimirClient } from "./mimir-client.js";
15
+ const DEFAULT_URL = "https://api.allinmimir.com";
16
+ function parseArgs(argv) {
17
+ const args = argv.slice(2); // skip node + script
18
+ const command = args[0] ?? "init";
19
+ let url = DEFAULT_URL;
20
+ let apiKey = "";
21
+ for (let i = 1; i < args.length; i++) {
22
+ if (args[i] === "--url" && args[i + 1]) {
23
+ url = args[++i];
24
+ }
25
+ else if ((args[i] === "--api-key" || args[i] === "--apiKey") &&
26
+ args[i + 1]) {
27
+ apiKey = args[++i];
28
+ }
29
+ }
30
+ return { command, url, apiKey };
31
+ }
32
+ function readConfig(configPath) {
33
+ try {
34
+ const data = fs.readFileSync(configPath, "utf8");
35
+ return JSON.parse(data);
36
+ }
37
+ catch {
38
+ return {};
39
+ }
40
+ }
41
+ function writeConfig(configPath, apiKey, mimirUrl) {
42
+ const ocConfig = readConfig(configPath);
43
+ const plugins = ocConfig.plugins ?? {};
44
+ const entries = plugins.entries ?? {};
45
+ const existing = entries["memory-mimir"] ?? {};
46
+ const pluginCfg = existing.config ?? {};
47
+ const slots = plugins.slots ?? {};
48
+ const allow = (plugins.allow ?? []).filter((x) => x !== "memory-mimir");
49
+ const hooks = ocConfig.hooks ?? {};
50
+ const updatedConfig = {
51
+ ...ocConfig,
52
+ hooks: { ...hooks, allowPromptInjection: true },
53
+ plugins: {
54
+ ...plugins,
55
+ enabled: true,
56
+ slots: { ...slots, memory: "memory-mimir" },
57
+ entries: {
58
+ ...entries,
59
+ "memory-mimir": {
60
+ ...existing,
61
+ enabled: true,
62
+ config: {
63
+ ...pluginCfg,
64
+ apiKey,
65
+ mimirUrl,
66
+ autoRecall: true,
67
+ autoCapture: true,
68
+ },
69
+ },
70
+ },
71
+ allow: [...allow, "memory-mimir"],
72
+ },
73
+ };
74
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
75
+ fs.writeFileSync(configPath, JSON.stringify(updatedConfig, null, 2));
76
+ }
77
+ function installPlugin() {
78
+ console.log("\x1b[2m Installing memory-mimir plugin...\x1b[0m");
79
+ try {
80
+ execSync("openclaw plugins install memory-mimir", {
81
+ stdio: "inherit",
82
+ timeout: 60_000,
83
+ });
84
+ return true;
85
+ }
86
+ catch {
87
+ console.log("\x1b[33m ⚠ 'openclaw plugins install' failed or not available.\x1b[0m");
88
+ console.log("\x1b[2m Config will still be written — install the plugin manually if needed.\x1b[0m");
89
+ return false;
90
+ }
91
+ }
92
+ async function cmdInit(url) {
93
+ console.log();
94
+ console.log("\x1b[1m Mimir Memory — Zero-Config Setup\x1b[0m");
95
+ console.log("\x1b[2m ─────────────────────────────────\x1b[0m");
96
+ console.log();
97
+ // 1. Register device
98
+ console.log("\x1b[2m Connecting to Mimir gateway...\x1b[0m");
99
+ const client = new MimirClient({ url });
100
+ let deviceData;
101
+ try {
102
+ deviceData = await client.deviceInit();
103
+ }
104
+ catch (err) {
105
+ const msg = err instanceof Error ? err.message : String(err);
106
+ console.error(`\x1b[31m ✗ Mimir gateway unreachable: ${msg}\x1b[0m`);
107
+ console.error(`\x1b[2m Check your network or try: npx memory-mimir init --url <server-url>\x1b[0m`);
108
+ process.exit(1);
109
+ }
110
+ // 2. Install plugin via openclaw CLI (best-effort)
111
+ installPlugin();
112
+ // 3. Write config
113
+ const configPath = path.join(os.homedir(), ".openclaw", "openclaw.json");
114
+ writeConfig(configPath, deviceData.device_key, url);
115
+ // 4. Success
116
+ console.log(`
117
+ \x1b[1;32m✅ Mimir activated! Memory engine online.\x1b[0m
118
+ \x1b[2m─────────────────────────────────────────\x1b[0m
119
+ \x1b[2m🔒 Anonymous channel assigned. Config written to openclaw.json.\x1b[0m
120
+ \x1b[2m💡 Restart OpenClaw — memories will upload in sandbox mode.\x1b[0m
121
+
122
+ \x1b[1m🌐 To manage your AI memory graph on the web:\x1b[0m
123
+ \x1b[34m🔗 1. Open: https://app.allinmimir.com/dashboard/pair\x1b[0m
124
+ \x1b[1;35m🔑 2. Enter pairing code: \x1b[43;30m ${deviceData.pairing_code} \x1b[0m
125
+
126
+ \x1b[2;3m(Skip this to stay in permanent anonymous sandbox mode)\x1b[0m
127
+ `);
128
+ }
129
+ async function cmdSetup(url, apiKey) {
130
+ if (!apiKey) {
131
+ console.error("Error: --api-key is required.");
132
+ console.error(" Usage: npx memory-mimir setup --api-key sk-mimir-xxx");
133
+ console.error(" Or run: npx memory-mimir init (for zero-config setup)");
134
+ process.exit(1);
135
+ }
136
+ console.log();
137
+ console.log("\x1b[2m Validating API key...\x1b[0m");
138
+ const client = new MimirClient({ url, apiKey });
139
+ let identity;
140
+ try {
141
+ identity = await client.me();
142
+ }
143
+ catch (err) {
144
+ const msg = err instanceof Error ? err.message : String(err);
145
+ console.error(`\x1b[31m ✗ Authentication failed: ${msg}\x1b[0m`);
146
+ process.exit(1);
147
+ }
148
+ // Install plugin (best-effort)
149
+ installPlugin();
150
+ // Write config
151
+ const configPath = path.join(os.homedir(), ".openclaw", "openclaw.json");
152
+ writeConfig(configPath, apiKey, url);
153
+ console.log();
154
+ console.log(` \x1b[1;32m✓ Authenticated as: ${identity.display_name}\x1b[0m`);
155
+ console.log(` \x1b[2mUser ID: ${identity.user_id}\x1b[0m`);
156
+ console.log(` \x1b[2mServer: ${url}\x1b[0m`);
157
+ console.log(` \x1b[2mConfig: ${configPath}\x1b[0m`);
158
+ console.log();
159
+ console.log(` \x1b[1mRestart OpenClaw to activate memory-mimir.\x1b[0m`);
160
+ console.log();
161
+ }
162
+ async function main() {
163
+ const { command, url, apiKey } = parseArgs(process.argv);
164
+ switch (command) {
165
+ case "init":
166
+ await cmdInit(url);
167
+ break;
168
+ case "setup":
169
+ await cmdSetup(url, apiKey);
170
+ break;
171
+ default:
172
+ console.log("Usage:");
173
+ console.log(" npx memory-mimir init # zero-config setup");
174
+ console.log(" npx memory-mimir setup --api-key X # use existing API key");
175
+ console.log(" npx memory-mimir init --url X # custom server");
176
+ process.exit(0);
177
+ }
178
+ }
179
+ main().catch((err) => {
180
+ console.error(`\x1b[31m Fatal: ${String(err)}\x1b[0m`);
181
+ process.exit(1);
182
+ });
183
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "memory-mimir",
3
- "version": "1.0.5",
3
+ "version": "2.0.0",
4
4
  "description": "Long-term memory for OpenClaw powered by Mimir (graph + vector + BM25)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
+ "bin": {
8
+ "memory-mimir": "./dist/cli.js"
9
+ },
7
10
  "exports": {
8
11
  ".": "./dist/index.js"
9
12
  },