@memclaw/plugin 0.9.0 → 0.9.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.
@@ -0,0 +1,445 @@
1
+ "use strict";
2
+ /**
3
+ * MemClaw Plugin Implementation
4
+ *
5
+ * Provides layered semantic memory for OpenClaw with:
6
+ * - Automatic service startup
7
+ * - Memory tools (search, recall, add, list, close)
8
+ * - Migration from OpenClaw native memory
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createPlugin = createPlugin;
12
+ const client_js_1 = require("./src/client.js");
13
+ const config_js_1 = require("./src/config.js");
14
+ const binaries_js_1 = require("./src/binaries.js");
15
+ const migrate_js_1 = require("./src/migrate.js");
16
+ // Tool schemas
17
+ const toolSchemas = {
18
+ cortex_search: {
19
+ name: "cortex_search",
20
+ description: `Layered semantic search across memory using L0/L1/L2 tiered retrieval.
21
+ Returns relevant memories ranked by relevance score.
22
+
23
+ Use this tool when you need to:
24
+ - Find past conversations or decisions
25
+ - Search for specific information across all sessions
26
+ - Discover related memories by semantic similarity`,
27
+ inputSchema: {
28
+ type: "object",
29
+ properties: {
30
+ query: {
31
+ type: "string",
32
+ description: "The search query - can be natural language or keywords",
33
+ },
34
+ scope: {
35
+ type: "string",
36
+ description: "Optional session/thread ID to limit search scope",
37
+ },
38
+ limit: {
39
+ type: "integer",
40
+ description: "Maximum number of results to return (default: 10)",
41
+ default: 10,
42
+ },
43
+ min_score: {
44
+ type: "number",
45
+ description: "Minimum relevance score threshold (0-1, default: 0.6)",
46
+ default: 0.6,
47
+ },
48
+ },
49
+ required: ["query"],
50
+ },
51
+ },
52
+ cortex_recall: {
53
+ name: "cortex_recall",
54
+ description: `Recall memories using L0/L1/L2 tiered retrieval.
55
+
56
+ The search engine internally performs tiered retrieval:
57
+ - L0 (Abstract): Quick filtering by summary
58
+ - L1 (Overview): Context refinement
59
+ - L2 (Full): Precise matching with full content
60
+
61
+ Returns results with snippet (summary) and content (if available).
62
+
63
+ Use this when you need memories with more context than a simple search.`,
64
+ inputSchema: {
65
+ type: "object",
66
+ properties: {
67
+ query: {
68
+ type: "string",
69
+ description: "The search query",
70
+ },
71
+ scope: {
72
+ type: "string",
73
+ description: "Optional session/thread ID to limit search scope",
74
+ },
75
+ limit: {
76
+ type: "integer",
77
+ description: "Maximum number of results (default: 10)",
78
+ default: 10,
79
+ },
80
+ },
81
+ required: ["query"],
82
+ },
83
+ },
84
+ cortex_add_memory: {
85
+ name: "cortex_add_memory",
86
+ description: `Add a message to memory for a specific session.
87
+ This stores the message and automatically triggers:
88
+ - Vector embedding for semantic search
89
+ - L0/L1 layer generation (async)
90
+
91
+ Use this to persist important information that should be searchable later.`,
92
+ inputSchema: {
93
+ type: "object",
94
+ properties: {
95
+ content: {
96
+ type: "string",
97
+ description: "The content to store in memory",
98
+ },
99
+ role: {
100
+ type: "string",
101
+ enum: ["user", "assistant", "system"],
102
+ description: "Role of the message sender (default: user)",
103
+ default: "user",
104
+ },
105
+ session_id: {
106
+ type: "string",
107
+ description: "Session/thread ID (uses default if not specified)",
108
+ },
109
+ },
110
+ required: ["content"],
111
+ },
112
+ },
113
+ cortex_list_sessions: {
114
+ name: "cortex_list_sessions",
115
+ description: `List all memory sessions with their status.
116
+ Shows session IDs, message counts, and creation/update times.`,
117
+ inputSchema: {
118
+ type: "object",
119
+ properties: {},
120
+ },
121
+ },
122
+ cortex_close_session: {
123
+ name: "cortex_close_session",
124
+ description: `Close a memory session and trigger full memory extraction.
125
+
126
+ This triggers the complete memory processing pipeline:
127
+ 1. Extracts structured memories (user preferences, entities, decisions)
128
+ 2. Generates complete L0/L1 layer summaries
129
+ 3. Indexes all extracted memories into the vector database
130
+
131
+ Note: This is a potentially long-running operation (may take 30-60s).`,
132
+ inputSchema: {
133
+ type: "object",
134
+ properties: {
135
+ session_id: {
136
+ type: "string",
137
+ description: "Session/thread ID to close (uses default if not specified)",
138
+ },
139
+ },
140
+ },
141
+ },
142
+ cortex_migrate: {
143
+ name: "cortex_migrate",
144
+ description: `Migrate memories from OpenClaw's native memory system to MemClaw.
145
+
146
+ This will:
147
+ 1. Find your OpenClaw memory files (memory/*.md and MEMORY.md)
148
+ 2. Convert them to MemClaw's L2 format
149
+ 3. Generate L0/L1 layers and vector index
150
+
151
+ Use this once during initial setup to preserve your existing memories.`,
152
+ inputSchema: {
153
+ type: "object",
154
+ properties: {},
155
+ },
156
+ },
157
+ };
158
+ function createPlugin(api) {
159
+ const config = (api.pluginConfig ?? {});
160
+ const serviceUrl = config.serviceUrl ?? "http://localhost:8085";
161
+ const defaultSessionId = config.defaultSessionId ?? "default";
162
+ const searchLimit = config.searchLimit ?? 10;
163
+ const minScore = config.minScore ?? 0.6;
164
+ const tenantId = config.tenantId ?? "tenant_claw";
165
+ const autoStartServices = config.autoStartServices ?? true;
166
+ const client = new client_js_1.CortexMemClient(serviceUrl);
167
+ let servicesStarted = false;
168
+ const log = (msg) => api.logger.info(`[memclaw] ${msg}`);
169
+ log("Initializing MemClaw plugin...");
170
+ // Ensure config file exists
171
+ const { created, path: configPath } = (0, config_js_1.ensureConfigExists)();
172
+ if (created) {
173
+ log(`Created configuration file: ${configPath}`);
174
+ log("Opening configuration file for editing...");
175
+ (0, config_js_1.openConfigFile)(configPath).catch((err) => {
176
+ api.logger.warn(`Could not open config file: ${err}`);
177
+ api.logger.warn(`Please manually edit: ${configPath}`);
178
+ });
179
+ api.logger.info(`
180
+ ╔══════════════════════════════════════════════════════════╗
181
+ ║ MemClaw First Run ║
182
+ ║ ║
183
+ ║ A configuration file has been created: ║
184
+ ║ ${configPath.padEnd(52)}║
185
+ ║ ║
186
+ ║ Please fill in the required fields: ║
187
+ ║ - llm.api_key (your LLM API key) ║
188
+ ║ - embedding.api_key (your embedding API key) ║
189
+ ║ ║
190
+ ║ Save the file and restart OpenClaw to apply changes. ║
191
+ ╚══════════════════════════════════════════════════════════╝
192
+ `);
193
+ }
194
+ // Register service lifecycle
195
+ api.registerService({
196
+ id: "memclaw",
197
+ start: async () => {
198
+ // Skip service startup if config was just created (first run)
199
+ // User needs to fill in API keys first
200
+ if (created) {
201
+ log("First run detected. Please complete configuration and restart OpenClaw.");
202
+ return;
203
+ }
204
+ if (!autoStartServices) {
205
+ log("Auto-start disabled, skipping service startup");
206
+ return;
207
+ }
208
+ // Check if binaries are available
209
+ const hasQdrant = (0, binaries_js_1.isBinaryAvailable)("qdrant");
210
+ const hasService = (0, binaries_js_1.isBinaryAvailable)("cortex-mem-service");
211
+ if (!hasQdrant || !hasService) {
212
+ log("Some binaries are missing. Services may need manual setup.");
213
+ log(`Run 'memclaw setup' or check the admin skill for installation instructions.`);
214
+ }
215
+ // Validate config
216
+ const parsedConfig = (0, config_js_1.parseConfig)(configPath);
217
+ const validation = (0, config_js_1.validateConfig)(parsedConfig);
218
+ if (!validation.valid) {
219
+ api.logger.warn(`Configuration incomplete: ${validation.errors.join(", ")}`);
220
+ api.logger.warn(`Please edit: ${configPath}`);
221
+ return;
222
+ }
223
+ // Start services
224
+ try {
225
+ log("Starting services...");
226
+ await (0, binaries_js_1.ensureAllServices)(log);
227
+ servicesStarted = true;
228
+ // Switch tenant
229
+ await client.switchTenant(tenantId);
230
+ log(`Switched to tenant: ${tenantId}`);
231
+ log("MemClaw services started successfully");
232
+ }
233
+ catch (err) {
234
+ api.logger.error(`Failed to start services: ${err}`);
235
+ api.logger.warn("Memory features may not work correctly");
236
+ }
237
+ },
238
+ stop: async () => {
239
+ log("Stopping MemClaw...");
240
+ servicesStarted = false;
241
+ },
242
+ });
243
+ // Helper to check if services are ready
244
+ const ensureServicesReady = async () => {
245
+ if (!servicesStarted) {
246
+ const status = await (0, binaries_js_1.checkServiceStatus)();
247
+ if (!status.cortexMemService) {
248
+ throw new Error("cortex-mem-service is not running. Please start the service first.");
249
+ }
250
+ }
251
+ };
252
+ // Register tools
253
+ // cortex_search
254
+ api.registerTool({
255
+ name: toolSchemas.cortex_search.name,
256
+ description: toolSchemas.cortex_search.description,
257
+ parameters: toolSchemas.cortex_search.inputSchema,
258
+ execute: async (_id, params) => {
259
+ const input = params;
260
+ try {
261
+ await ensureServicesReady();
262
+ const results = await client.search({
263
+ query: input.query,
264
+ thread: input.scope,
265
+ limit: input.limit ?? searchLimit,
266
+ min_score: input.min_score ?? minScore,
267
+ });
268
+ const formatted = results
269
+ .map((r, i) => `${i + 1}. [Score: ${r.score.toFixed(2)}] ${r.snippet}\n URI: ${r.uri}`)
270
+ .join("\n\n");
271
+ return {
272
+ content: `Found ${results.length} results for "${input.query}":\n\n${formatted}`,
273
+ results: results.map((r) => ({
274
+ uri: r.uri,
275
+ score: r.score,
276
+ snippet: r.snippet,
277
+ })),
278
+ total: results.length,
279
+ };
280
+ }
281
+ catch (error) {
282
+ const message = error instanceof Error ? error.message : String(error);
283
+ api.logger.error(`cortex_search failed: ${message}`);
284
+ return { error: `Search failed: ${message}` };
285
+ }
286
+ },
287
+ });
288
+ // cortex_recall
289
+ api.registerTool({
290
+ name: toolSchemas.cortex_recall.name,
291
+ description: toolSchemas.cortex_recall.description,
292
+ parameters: toolSchemas.cortex_recall.inputSchema,
293
+ execute: async (_id, params) => {
294
+ const input = params;
295
+ try {
296
+ await ensureServicesReady();
297
+ const results = await client.recall(input.query, input.scope, input.limit ?? 10);
298
+ const formatted = results
299
+ .map((r, i) => {
300
+ let content = `${i + 1}. [Score: ${r.score.toFixed(2)}] URI: ${r.uri}\n`;
301
+ content += ` Snippet: ${r.snippet}\n`;
302
+ if (r.content) {
303
+ const preview = r.content.length > 300 ? r.content.substring(0, 300) + "..." : r.content;
304
+ content += ` Content: ${preview}\n`;
305
+ }
306
+ return content;
307
+ })
308
+ .join("\n");
309
+ return {
310
+ content: `Recalled ${results.length} memories:\n\n${formatted}`,
311
+ results,
312
+ total: results.length,
313
+ };
314
+ }
315
+ catch (error) {
316
+ const message = error instanceof Error ? error.message : String(error);
317
+ api.logger.error(`cortex_recall failed: ${message}`);
318
+ return { error: `Recall failed: ${message}` };
319
+ }
320
+ },
321
+ });
322
+ // cortex_add_memory
323
+ api.registerTool({
324
+ name: toolSchemas.cortex_add_memory.name,
325
+ description: toolSchemas.cortex_add_memory.description,
326
+ parameters: toolSchemas.cortex_add_memory.inputSchema,
327
+ execute: async (_id, params) => {
328
+ const input = params;
329
+ try {
330
+ await ensureServicesReady();
331
+ const sessionId = input.session_id ?? defaultSessionId;
332
+ const result = await client.addMessage(sessionId, {
333
+ role: (input.role ?? "user"),
334
+ content: input.content,
335
+ });
336
+ return {
337
+ content: `Memory stored successfully in session "${sessionId}".\nResult: ${result}`,
338
+ success: true,
339
+ message_uri: result,
340
+ };
341
+ }
342
+ catch (error) {
343
+ const message = error instanceof Error ? error.message : String(error);
344
+ api.logger.error(`cortex_add_memory failed: ${message}`);
345
+ return { error: `Failed to add memory: ${message}` };
346
+ }
347
+ },
348
+ });
349
+ // cortex_list_sessions
350
+ api.registerTool({
351
+ name: toolSchemas.cortex_list_sessions.name,
352
+ description: toolSchemas.cortex_list_sessions.description,
353
+ parameters: toolSchemas.cortex_list_sessions.inputSchema,
354
+ execute: async (_id, _params) => {
355
+ try {
356
+ await ensureServicesReady();
357
+ const sessions = await client.listSessions();
358
+ if (sessions.length === 0) {
359
+ return { content: "No sessions found." };
360
+ }
361
+ const formatted = sessions
362
+ .map((s, i) => {
363
+ const created = new Date(s.created_at).toLocaleDateString();
364
+ return `${i + 1}. ${s.thread_id} (${s.status}, ${s.message_count} messages, created ${created})`;
365
+ })
366
+ .join("\n");
367
+ return {
368
+ content: `Found ${sessions.length} sessions:\n\n${formatted}`,
369
+ sessions: sessions.map((s) => ({
370
+ thread_id: s.thread_id,
371
+ status: s.status,
372
+ message_count: s.message_count,
373
+ created_at: s.created_at,
374
+ })),
375
+ };
376
+ }
377
+ catch (error) {
378
+ const message = error instanceof Error ? error.message : String(error);
379
+ api.logger.error(`cortex_list_sessions failed: ${message}`);
380
+ return { error: `Failed to list sessions: ${message}` };
381
+ }
382
+ },
383
+ });
384
+ // cortex_close_session
385
+ api.registerTool({
386
+ name: toolSchemas.cortex_close_session.name,
387
+ description: toolSchemas.cortex_close_session.description,
388
+ parameters: toolSchemas.cortex_close_session.inputSchema,
389
+ execute: async (_id, params) => {
390
+ const input = params;
391
+ try {
392
+ await ensureServicesReady();
393
+ const sessionId = input.session_id ?? defaultSessionId;
394
+ const result = await client.closeSession(sessionId);
395
+ return {
396
+ content: `Session "${sessionId}" closed successfully.\nStatus: ${result.status}, Messages: ${result.message_count}\n\nMemory extraction pipeline triggered.`,
397
+ success: true,
398
+ session: {
399
+ thread_id: result.thread_id,
400
+ status: result.status,
401
+ message_count: result.message_count,
402
+ },
403
+ };
404
+ }
405
+ catch (error) {
406
+ const message = error instanceof Error ? error.message : String(error);
407
+ api.logger.error(`cortex_close_session failed: ${message}`);
408
+ return { error: `Failed to close session: ${message}` };
409
+ }
410
+ },
411
+ });
412
+ // cortex_migrate
413
+ api.registerTool({
414
+ name: toolSchemas.cortex_migrate.name,
415
+ description: toolSchemas.cortex_migrate.description,
416
+ parameters: toolSchemas.cortex_migrate.inputSchema,
417
+ execute: async (_id, _params) => {
418
+ try {
419
+ // Check if migration is possible
420
+ const { possible, reason } = (0, migrate_js_1.canMigrate)();
421
+ if (!possible) {
422
+ return { content: `Migration not possible: ${reason}` };
423
+ }
424
+ // Run migration
425
+ const result = await (0, migrate_js_1.migrateFromOpenClaw)((msg) => api.logger.info(`[migrate] ${msg}`));
426
+ return {
427
+ content: `Migration completed!\n- Daily logs migrated: ${result.dailyLogsMigrated}\n- MEMORY.md migrated: ${result.memoryMdMigrated}\n- Sessions created: ${result.sessionsCreated.length}\n${result.errors.length > 0 ? `- Errors: ${result.errors.length}` : ""}`,
428
+ result,
429
+ };
430
+ }
431
+ catch (error) {
432
+ const message = error instanceof Error ? error.message : String(error);
433
+ api.logger.error(`cortex_migrate failed: ${message}`);
434
+ return { error: `Migration failed: ${message}` };
435
+ }
436
+ },
437
+ });
438
+ log("MemClaw plugin initialized");
439
+ return {
440
+ id: "memclaw",
441
+ name: "MemClaw",
442
+ version: "0.1.0",
443
+ };
444
+ }
445
+ //# sourceMappingURL=plugin-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-impl.js","sourceRoot":"","sources":["../plugin-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Binary management for MemClaw
3
+ *
4
+ * Binaries are bundled in platform-specific npm packages:
5
+ * - @memclaw/bin-darwin-arm64 (macOS Apple Silicon)
6
+ * - @memclaw/bin-win-x64 (Windows x64)
7
+ *
8
+ * The correct package is installed automatically via optionalDependencies.
9
+ */
10
+ type SupportedPlatform = "darwin-arm64" | "win-x64";
11
+ export declare function getPlatform(): SupportedPlatform | null;
12
+ export declare function isPlatformSupported(): boolean;
13
+ export declare function getUnsupportedPlatformMessage(): string;
14
+ export declare function getBinaryPath(binary: string): string | null;
15
+ export declare function isBinaryAvailable(binary: string): boolean;
16
+ export declare function isPlatformPackageInstalled(): boolean;
17
+ export declare function getInstallInstructions(): string;
18
+ export interface ServiceStatus {
19
+ qdrant: boolean;
20
+ cortexMemService: boolean;
21
+ }
22
+ export declare function checkServiceStatus(): Promise<ServiceStatus>;
23
+ export declare function startQdrant(log?: (msg: string) => void): Promise<void>;
24
+ export declare function startCortexMemService(log?: (msg: string) => void): Promise<void>;
25
+ export declare function stopAllServices(): void;
26
+ export declare function ensureAllServices(log?: (msg: string) => void): Promise<ServiceStatus>;
27
+ export declare function getCliPath(): string | null;
28
+ export {};
29
+ //# sourceMappingURL=binaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binaries.d.ts","sourceRoot":"","sources":["../../src/binaries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,KAAK,iBAAiB,GAAG,cAAc,GAAG,SAAS,CAAC;AAGpD,wBAAgB,WAAW,IAAI,iBAAiB,GAAG,IAAI,CAWtD;AAGD,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAGD,wBAAgB,6BAA6B,IAAI,MAAM,CAWtD;AA0BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe3D;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAGD,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAGD,wBAAgB,sBAAsB,IAAI,MAAM,CAgB/C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,CAKjE;AA2BD,wBAAsB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D5E;AAED,wBAAsB,qBAAqB,CACzC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,wBAAgB,eAAe,IAAI,IAAI,CAUtC;AAED,wBAAsB,iBAAiB,CACrC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAGD,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1C"}