opencode-mem 2.5.1 → 2.6.1
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/index.d.ts.map +1 -1
- package/dist/index.js +55 -162
- package/dist/services/api-handlers.d.ts +14 -0
- package/dist/services/api-handlers.d.ts.map +1 -1
- package/dist/services/api-handlers.js +145 -97
- package/dist/services/auto-capture.d.ts.map +1 -1
- package/dist/services/auto-capture.js +11 -3
- package/dist/services/client.d.ts +1 -0
- package/dist/services/client.d.ts.map +1 -1
- package/dist/services/client.js +8 -1
- package/dist/services/sqlite/connection-manager.d.ts +1 -0
- package/dist/services/sqlite/connection-manager.d.ts.map +1 -1
- package/dist/services/sqlite/connection-manager.js +20 -0
- package/dist/services/sqlite/shard-manager.d.ts +1 -0
- package/dist/services/sqlite/shard-manager.d.ts.map +1 -1
- package/dist/services/sqlite/shard-manager.js +32 -18
- package/dist/services/sqlite/types.d.ts +3 -0
- package/dist/services/sqlite/types.d.ts.map +1 -1
- package/dist/services/sqlite/vector-search.d.ts.map +1 -1
- package/dist/services/sqlite/vector-search.js +67 -43
- package/dist/services/web-server-worker.js +9 -1
- package/dist/web/app.js +111 -1
- package/dist/web/index.html +28 -0
- package/dist/web/styles.css +52 -3
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAkB/D,eAAO,MAAM,iBAAiB,EAAE,MAiU/B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { userPromptManager } from "./services/user-prompt/user-prompt-manager.js
|
|
|
9
9
|
import { startWebServer, WebServer } from "./services/web-server.js";
|
|
10
10
|
import { isConfigured, CONFIG } from "./config.js";
|
|
11
11
|
import { log } from "./services/logger.js";
|
|
12
|
+
import { getLanguageName } from "./services/language-detector.js";
|
|
12
13
|
export const OpenCodeMemPlugin = async (ctx) => {
|
|
13
14
|
const { directory } = ctx;
|
|
14
15
|
const tags = getTags(directory);
|
|
@@ -164,11 +165,12 @@ export const OpenCodeMemPlugin = async (ctx) => {
|
|
|
164
165
|
},
|
|
165
166
|
tool: {
|
|
166
167
|
memory: tool({
|
|
167
|
-
description:
|
|
168
|
+
description: `Manage and query project memory (MATCH USER LANGUAGE: ${getLanguageName(CONFIG.autoCaptureLanguage || "en")}). Use 'search' with technical keywords/tags, 'add' to store knowledge, 'profile' for preferences.`,
|
|
168
169
|
args: {
|
|
169
170
|
mode: tool.schema.enum(["add", "search", "profile", "list", "forget", "help"]).optional(),
|
|
170
171
|
content: tool.schema.string().optional(),
|
|
171
172
|
query: tool.schema.string().optional(),
|
|
173
|
+
tags: tool.schema.string().optional(),
|
|
172
174
|
type: tool.schema.string().optional(),
|
|
173
175
|
memoryId: tool.schema.string().optional(),
|
|
174
176
|
limit: tool.schema.number().optional(),
|
|
@@ -182,66 +184,46 @@ export const OpenCodeMemPlugin = async (ctx) => {
|
|
|
182
184
|
}
|
|
183
185
|
const needsWarmup = !(await memoryClient.isReady());
|
|
184
186
|
if (needsWarmup) {
|
|
185
|
-
return JSON.stringify({
|
|
186
|
-
success: false,
|
|
187
|
-
error: "Memory system is initializing. Please wait a moment and try again.",
|
|
188
|
-
});
|
|
187
|
+
return JSON.stringify({ success: false, error: "Memory system is initializing." });
|
|
189
188
|
}
|
|
190
189
|
const mode = args.mode || "help";
|
|
190
|
+
const langName = getLanguageName(CONFIG.autoCaptureLanguage || "en");
|
|
191
191
|
try {
|
|
192
192
|
switch (mode) {
|
|
193
|
-
case "help":
|
|
193
|
+
case "help":
|
|
194
194
|
return JSON.stringify({
|
|
195
195
|
success: true,
|
|
196
196
|
message: "Memory System Usage Guide",
|
|
197
197
|
commands: [
|
|
198
198
|
{
|
|
199
199
|
command: "add",
|
|
200
|
-
description:
|
|
201
|
-
args: ["content", "type?"],
|
|
200
|
+
description: `Store new memory (MATCH USER LANGUAGE: ${langName})`,
|
|
201
|
+
args: ["content", "type?", "tags?"],
|
|
202
202
|
},
|
|
203
203
|
{
|
|
204
204
|
command: "search",
|
|
205
|
-
description:
|
|
205
|
+
description: `Search memories via keywords (MATCH USER LANGUAGE: ${langName})`,
|
|
206
206
|
args: ["query"],
|
|
207
207
|
},
|
|
208
|
-
{
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
args: [],
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
command: "list",
|
|
215
|
-
description: "List recent project memories",
|
|
216
|
-
args: ["limit?"],
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
command: "forget",
|
|
220
|
-
description: "Remove a project memory",
|
|
221
|
-
args: ["memoryId"],
|
|
222
|
-
},
|
|
208
|
+
{ command: "profile", description: "View user profile", args: [] },
|
|
209
|
+
{ command: "list", description: "List recent memories", args: ["limit?"] },
|
|
210
|
+
{ command: "forget", description: "Remove memory", args: ["memoryId"] },
|
|
223
211
|
],
|
|
224
|
-
|
|
225
|
-
typeGuidance: "Choose appropriate type: preference, architecture, workflow, bug-fix, configuration, pattern, request, context, etc. Be specific and descriptive with categories.",
|
|
212
|
+
tagGuidance: "Use technical keywords for search. Tags rank highest.",
|
|
226
213
|
});
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
return JSON.stringify({
|
|
231
|
-
success: false,
|
|
232
|
-
error: "content parameter is required for add mode",
|
|
233
|
-
});
|
|
234
|
-
}
|
|
214
|
+
case "add":
|
|
215
|
+
if (!args.content)
|
|
216
|
+
return JSON.stringify({ success: false, error: "content required" });
|
|
235
217
|
const sanitizedContent = stripPrivateContent(args.content);
|
|
236
|
-
if (isFullyPrivate(args.content))
|
|
237
|
-
return JSON.stringify({
|
|
238
|
-
success: false,
|
|
239
|
-
error: "Cannot store fully private content",
|
|
240
|
-
});
|
|
241
|
-
}
|
|
218
|
+
if (isFullyPrivate(args.content))
|
|
219
|
+
return JSON.stringify({ success: false, error: "Private content blocked" });
|
|
242
220
|
const tagInfo = tags.project;
|
|
221
|
+
const parsedTags = args.tags
|
|
222
|
+
? args.tags.split(",").map((t) => t.trim())
|
|
223
|
+
: undefined;
|
|
243
224
|
const result = await memoryClient.addMemory(sanitizedContent, tagInfo.tag, {
|
|
244
225
|
type: args.type,
|
|
226
|
+
tags: parsedTags,
|
|
245
227
|
displayName: tagInfo.displayName,
|
|
246
228
|
userName: tagInfo.userName,
|
|
247
229
|
userEmail: tagInfo.userEmail,
|
|
@@ -249,162 +231,73 @@ export const OpenCodeMemPlugin = async (ctx) => {
|
|
|
249
231
|
projectName: tagInfo.projectName,
|
|
250
232
|
gitRepoUrl: tagInfo.gitRepoUrl,
|
|
251
233
|
});
|
|
252
|
-
if (!result.success) {
|
|
253
|
-
return JSON.stringify({
|
|
254
|
-
success: false,
|
|
255
|
-
error: result.error || "Failed to add memory",
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
234
|
return JSON.stringify({
|
|
259
|
-
success:
|
|
260
|
-
message: `Memory added
|
|
235
|
+
success: result.success,
|
|
236
|
+
message: `Memory added`,
|
|
261
237
|
id: result.id,
|
|
262
|
-
|
|
238
|
+
tags: parsedTags,
|
|
263
239
|
});
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
const result = await memoryClient.searchMemories(args.query, tags.project.tag);
|
|
273
|
-
if (!result.success) {
|
|
274
|
-
return JSON.stringify({
|
|
275
|
-
success: false,
|
|
276
|
-
error: result.error || "Failed to search memories",
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
return formatSearchResults(args.query, result, args.limit);
|
|
280
|
-
}
|
|
281
|
-
case "profile": {
|
|
240
|
+
case "search":
|
|
241
|
+
if (!args.query)
|
|
242
|
+
return JSON.stringify({ success: false, error: "query required" });
|
|
243
|
+
const searchRes = await memoryClient.searchMemories(args.query, tags.project.tag);
|
|
244
|
+
if (!searchRes.success)
|
|
245
|
+
return JSON.stringify({ success: false, error: searchRes.error });
|
|
246
|
+
return formatSearchResults(args.query, searchRes, args.limit);
|
|
247
|
+
case "profile":
|
|
282
248
|
const { userProfileManager } = await import("./services/user-profile/user-profile-manager.js");
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
success: true,
|
|
288
|
-
profile: null,
|
|
289
|
-
message: "No user profile found",
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
const profileData = JSON.parse(profile.profileData);
|
|
249
|
+
const profile = userProfileManager.getActiveProfile(tags.user.userEmail || "unknown");
|
|
250
|
+
if (!profile)
|
|
251
|
+
return JSON.stringify({ success: true, profile: null });
|
|
252
|
+
const pData = JSON.parse(profile.profileData);
|
|
293
253
|
return JSON.stringify({
|
|
294
254
|
success: true,
|
|
295
255
|
profile: {
|
|
296
|
-
|
|
297
|
-
patterns: profileData.patterns,
|
|
298
|
-
workflows: profileData.workflows,
|
|
299
|
-
skillLevel: profileData.skillLevel,
|
|
256
|
+
...pData,
|
|
300
257
|
version: profile.version,
|
|
301
258
|
lastAnalyzed: profile.lastAnalyzedAt,
|
|
302
|
-
totalPromptsAnalyzed: profile.totalPromptsAnalyzed,
|
|
303
259
|
},
|
|
304
260
|
});
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
if (!result.success) {
|
|
310
|
-
return JSON.stringify({
|
|
311
|
-
success: false,
|
|
312
|
-
error: result.error || "Failed to list memories",
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
const memories = result.memories || [];
|
|
261
|
+
case "list":
|
|
262
|
+
const listRes = await memoryClient.listMemories(tags.project.tag, args.limit || 20);
|
|
263
|
+
if (!listRes.success)
|
|
264
|
+
return JSON.stringify({ success: false, error: listRes.error });
|
|
316
265
|
return JSON.stringify({
|
|
317
266
|
success: true,
|
|
318
|
-
count: memories
|
|
319
|
-
memories: memories
|
|
267
|
+
count: listRes.memories?.length,
|
|
268
|
+
memories: listRes.memories?.map((m) => ({
|
|
320
269
|
id: m.id,
|
|
321
270
|
content: m.summary,
|
|
322
271
|
createdAt: m.createdAt,
|
|
323
|
-
metadata: m.metadata,
|
|
324
272
|
})),
|
|
325
273
|
});
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
error: "memoryId parameter is required for forget mode",
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
const result = await memoryClient.deleteMemory(args.memoryId);
|
|
335
|
-
if (!result.success) {
|
|
336
|
-
return JSON.stringify({
|
|
337
|
-
success: false,
|
|
338
|
-
error: result.error || "Failed to delete memory",
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
return JSON.stringify({
|
|
342
|
-
success: true,
|
|
343
|
-
message: `Memory ${args.memoryId} removed`,
|
|
344
|
-
});
|
|
345
|
-
}
|
|
274
|
+
case "forget":
|
|
275
|
+
if (!args.memoryId)
|
|
276
|
+
return JSON.stringify({ success: false, error: "memoryId required" });
|
|
277
|
+
const delRes = await memoryClient.deleteMemory(args.memoryId);
|
|
278
|
+
return JSON.stringify({ success: delRes.success, message: `Memory removed` });
|
|
346
279
|
default:
|
|
347
|
-
return JSON.stringify({
|
|
348
|
-
success: false,
|
|
349
|
-
error: `Unknown mode: ${mode}`,
|
|
350
|
-
});
|
|
280
|
+
return JSON.stringify({ success: false, error: `Unknown mode: ${mode}` });
|
|
351
281
|
}
|
|
352
282
|
}
|
|
353
283
|
catch (error) {
|
|
354
|
-
return JSON.stringify({
|
|
355
|
-
success: false,
|
|
356
|
-
error: error instanceof Error ? error.message : String(error),
|
|
357
|
-
});
|
|
284
|
+
return JSON.stringify({ success: false, error: String(error) });
|
|
358
285
|
}
|
|
359
286
|
},
|
|
360
287
|
}),
|
|
361
288
|
},
|
|
362
289
|
event: async (input) => {
|
|
363
290
|
const event = input.event;
|
|
364
|
-
const props = event.properties;
|
|
365
291
|
if (event.type === "session.idle") {
|
|
366
292
|
if (!isConfigured())
|
|
367
293
|
return;
|
|
368
|
-
const sessionID =
|
|
369
|
-
if (sessionID)
|
|
294
|
+
const sessionID = event.properties?.sessionID;
|
|
295
|
+
if (sessionID)
|
|
370
296
|
await performAutoCapture(ctx, sessionID, directory);
|
|
371
|
-
}
|
|
372
297
|
await performUserProfileLearning(ctx, directory);
|
|
373
298
|
const { cleanupService } = await import("./services/cleanup-service.js");
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
return;
|
|
377
|
-
cleanupService
|
|
378
|
-
.runCleanup()
|
|
379
|
-
.then((result) => {
|
|
380
|
-
if (result.deletedCount > 0 && ctx.client?.tui) {
|
|
381
|
-
ctx.client.tui
|
|
382
|
-
.showToast({
|
|
383
|
-
body: {
|
|
384
|
-
title: "Memory Cleanup",
|
|
385
|
-
message: `Deleted ${result.deletedCount} old memories (user: ${result.userCount}, project: ${result.projectCount})`,
|
|
386
|
-
variant: "info",
|
|
387
|
-
duration: 5000,
|
|
388
|
-
},
|
|
389
|
-
})
|
|
390
|
-
.catch(() => { });
|
|
391
|
-
}
|
|
392
|
-
})
|
|
393
|
-
.catch((err) => {
|
|
394
|
-
log("Auto-cleanup failed", { error: String(err) });
|
|
395
|
-
if (ctx.client?.tui && CONFIG.showErrorToasts) {
|
|
396
|
-
ctx.client.tui
|
|
397
|
-
.showToast({
|
|
398
|
-
body: {
|
|
399
|
-
title: "Memory Cleanup Error",
|
|
400
|
-
message: String(err),
|
|
401
|
-
variant: "error",
|
|
402
|
-
duration: 5000,
|
|
403
|
-
},
|
|
404
|
-
})
|
|
405
|
-
.catch(() => { });
|
|
406
|
-
}
|
|
407
|
-
});
|
|
299
|
+
if (await cleanupService.shouldRunCleanup())
|
|
300
|
+
await cleanupService.runCleanup();
|
|
408
301
|
}
|
|
409
302
|
},
|
|
410
303
|
};
|
|
@@ -8,6 +8,7 @@ interface Memory {
|
|
|
8
8
|
id: string;
|
|
9
9
|
content: string;
|
|
10
10
|
type?: string;
|
|
11
|
+
tags?: string[];
|
|
11
12
|
createdAt: string;
|
|
12
13
|
updatedAt?: string;
|
|
13
14
|
metadata?: Record<string, unknown>;
|
|
@@ -21,6 +22,7 @@ interface Memory {
|
|
|
21
22
|
}
|
|
22
23
|
interface TagInfo {
|
|
23
24
|
tag: string;
|
|
25
|
+
tags?: string[];
|
|
24
26
|
displayName?: string;
|
|
25
27
|
userName?: string;
|
|
26
28
|
userEmail?: string;
|
|
@@ -43,6 +45,7 @@ export declare function handleAddMemory(data: {
|
|
|
43
45
|
content: string;
|
|
44
46
|
containerTag: string;
|
|
45
47
|
type?: MemoryType;
|
|
48
|
+
tags?: string[];
|
|
46
49
|
displayName?: string;
|
|
47
50
|
userName?: string;
|
|
48
51
|
userEmail?: string;
|
|
@@ -61,6 +64,7 @@ export declare function handleBulkDelete(ids: string[], cascade?: boolean): Prom
|
|
|
61
64
|
export declare function handleUpdateMemory(id: string, data: {
|
|
62
65
|
content?: string;
|
|
63
66
|
type?: MemoryType;
|
|
67
|
+
tags?: string[];
|
|
64
68
|
}): Promise<ApiResponse<void>>;
|
|
65
69
|
interface FormattedPrompt {
|
|
66
70
|
type: "prompt";
|
|
@@ -78,6 +82,7 @@ interface FormattedMemory {
|
|
|
78
82
|
id: string;
|
|
79
83
|
content: string;
|
|
80
84
|
memoryType?: string;
|
|
85
|
+
tags?: string[];
|
|
81
86
|
createdAt: string;
|
|
82
87
|
updatedAt?: string;
|
|
83
88
|
similarity?: number;
|
|
@@ -137,5 +142,14 @@ export declare function handleGetUserProfile(userId?: string): Promise<ApiRespon
|
|
|
137
142
|
export declare function handleGetProfileChangelog(profileId: string, limit?: number): Promise<ApiResponse<any[]>>;
|
|
138
143
|
export declare function handleGetProfileSnapshot(changelogId: string): Promise<ApiResponse<any>>;
|
|
139
144
|
export declare function handleRefreshProfile(userId?: string): Promise<ApiResponse<any>>;
|
|
145
|
+
export declare function handleDetectTagMigration(): Promise<ApiResponse<{
|
|
146
|
+
needsMigration: boolean;
|
|
147
|
+
count: number;
|
|
148
|
+
}>>;
|
|
149
|
+
export declare function handleRunTagMigration(): Promise<ApiResponse<{
|
|
150
|
+
success: boolean;
|
|
151
|
+
processed: number;
|
|
152
|
+
duration: number;
|
|
153
|
+
}>>;
|
|
140
154
|
export {};
|
|
141
155
|
//# sourceMappingURL=api-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-handlers.d.ts","sourceRoot":"","sources":["../../src/services/api-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-handlers.d.ts","sourceRoot":"","sources":["../../src/services/api-handlers.ts"],"names":[],"mappings":"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"}
|