opencode-mem 1.0.0 → 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.
Files changed (71) hide show
  1. package/README.md +80 -477
  2. package/dist/config.d.ts +5 -5
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +46 -20
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +28 -88
  7. package/dist/plugin.d.ts.map +1 -1
  8. package/dist/plugin.js +1 -8
  9. package/dist/services/ai/ai-provider-factory.d.ts +8 -0
  10. package/dist/services/ai/ai-provider-factory.d.ts.map +1 -0
  11. package/dist/services/ai/ai-provider-factory.js +25 -0
  12. package/dist/services/ai/providers/anthropic-messages.d.ts +13 -0
  13. package/dist/services/ai/providers/anthropic-messages.d.ts.map +1 -0
  14. package/dist/services/ai/providers/anthropic-messages.js +176 -0
  15. package/dist/services/ai/providers/base-provider.d.ts +21 -0
  16. package/dist/services/ai/providers/base-provider.d.ts.map +1 -0
  17. package/dist/services/ai/providers/base-provider.js +6 -0
  18. package/dist/services/ai/providers/openai-chat-completion.d.ts +12 -0
  19. package/dist/services/ai/providers/openai-chat-completion.d.ts.map +1 -0
  20. package/dist/services/ai/providers/openai-chat-completion.js +181 -0
  21. package/dist/services/ai/providers/openai-responses.d.ts +14 -0
  22. package/dist/services/ai/providers/openai-responses.d.ts.map +1 -0
  23. package/dist/services/ai/providers/openai-responses.js +191 -0
  24. package/dist/services/ai/session/ai-session-manager.d.ts +21 -0
  25. package/dist/services/ai/session/ai-session-manager.d.ts.map +1 -0
  26. package/dist/services/ai/session/ai-session-manager.js +165 -0
  27. package/dist/services/ai/session/session-types.d.ts +43 -0
  28. package/dist/services/ai/session/session-types.d.ts.map +1 -0
  29. package/dist/services/ai/session/session-types.js +1 -0
  30. package/dist/services/ai/tools/tool-schema.d.ts +41 -0
  31. package/dist/services/ai/tools/tool-schema.d.ts.map +1 -0
  32. package/dist/services/ai/tools/tool-schema.js +24 -0
  33. package/dist/services/api-handlers.d.ts +11 -3
  34. package/dist/services/api-handlers.d.ts.map +1 -1
  35. package/dist/services/api-handlers.js +143 -30
  36. package/dist/services/auto-capture.d.ts +1 -30
  37. package/dist/services/auto-capture.d.ts.map +1 -1
  38. package/dist/services/auto-capture.js +199 -396
  39. package/dist/services/cleanup-service.d.ts +3 -0
  40. package/dist/services/cleanup-service.d.ts.map +1 -1
  41. package/dist/services/cleanup-service.js +31 -4
  42. package/dist/services/client.d.ts +1 -0
  43. package/dist/services/client.d.ts.map +1 -1
  44. package/dist/services/client.js +3 -11
  45. package/dist/services/sqlite/connection-manager.d.ts.map +1 -1
  46. package/dist/services/sqlite/connection-manager.js +8 -4
  47. package/dist/services/user-memory-learning.d.ts +3 -0
  48. package/dist/services/user-memory-learning.d.ts.map +1 -0
  49. package/dist/services/user-memory-learning.js +157 -0
  50. package/dist/services/user-prompt/user-prompt-manager.d.ts +38 -0
  51. package/dist/services/user-prompt/user-prompt-manager.d.ts.map +1 -0
  52. package/dist/services/user-prompt/user-prompt-manager.js +164 -0
  53. package/dist/services/web-server-worker.js +27 -6
  54. package/dist/services/web-server.d.ts.map +1 -1
  55. package/dist/services/web-server.js +0 -5
  56. package/dist/types/index.d.ts +5 -1
  57. package/dist/types/index.d.ts.map +1 -1
  58. package/dist/web/app.js +210 -120
  59. package/dist/web/index.html +14 -10
  60. package/dist/web/styles.css +326 -1
  61. package/package.json +4 -1
  62. package/dist/services/compaction.d.ts +0 -92
  63. package/dist/services/compaction.d.ts.map +0 -1
  64. package/dist/services/compaction.js +0 -421
  65. package/dist/services/sqlite-client.d.ts +0 -116
  66. package/dist/services/sqlite-client.d.ts.map +0 -1
  67. package/dist/services/sqlite-client.js +0 -284
  68. package/dist/services/web-server-lock.d.ts +0 -12
  69. package/dist/services/web-server-lock.d.ts.map +0 -1
  70. package/dist/services/web-server-lock.js +0 -157
  71. package/dist/web/favicon.svg +0 -14
@@ -0,0 +1,24 @@
1
+ export class ToolSchemaConverter {
2
+ static toResponsesAPI(chatCompletionTool) {
3
+ return {
4
+ type: "function",
5
+ name: chatCompletionTool.function.name,
6
+ description: chatCompletionTool.function.description,
7
+ parameters: chatCompletionTool.function.parameters,
8
+ };
9
+ }
10
+ static toAnthropic(chatCompletionTool) {
11
+ return {
12
+ name: chatCompletionTool.function.name,
13
+ description: chatCompletionTool.function.description,
14
+ input_schema: chatCompletionTool.function.parameters,
15
+ };
16
+ }
17
+ static fromChatCompletion(tool) {
18
+ return {
19
+ chatCompletion: tool,
20
+ responsesAPI: this.toResponsesAPI(tool),
21
+ anthropic: this.toAnthropic(tool),
22
+ };
23
+ }
24
+ }
@@ -40,7 +40,7 @@ export declare function handleListTags(): Promise<ApiResponse<{
40
40
  user: TagInfo[];
41
41
  project: TagInfo[];
42
42
  }>>;
43
- export declare function handleListMemories(tag?: string, page?: number, pageSize?: number): Promise<ApiResponse<PaginatedResponse<Memory>>>;
43
+ export declare function handleListMemories(tag?: string, page?: number, pageSize?: number, scope?: "user" | "project", includePrompts?: boolean): Promise<ApiResponse<PaginatedResponse<Memory | any>>>;
44
44
  export declare function handleAddMemory(data: {
45
45
  content: string;
46
46
  containerTag: string;
@@ -54,8 +54,10 @@ export declare function handleAddMemory(data: {
54
54
  }): Promise<ApiResponse<{
55
55
  id: string;
56
56
  }>>;
57
- export declare function handleDeleteMemory(id: string): Promise<ApiResponse<void>>;
58
- export declare function handleBulkDelete(ids: string[]): Promise<ApiResponse<{
57
+ export declare function handleDeleteMemory(id: string, cascade?: boolean): Promise<ApiResponse<{
58
+ deletedPrompt: boolean;
59
+ }>>;
60
+ export declare function handleBulkDelete(ids: string[], cascade?: boolean): Promise<ApiResponse<{
59
61
  deleted: number;
60
62
  }>>;
61
63
  export declare function handleUpdateMemory(id: string, data: {
@@ -98,5 +100,11 @@ export declare function handleRunMigration(strategy: "fresh-start" | "re-embed")
98
100
  duration: number;
99
101
  error?: string;
100
102
  }>>;
103
+ export declare function handleDeletePrompt(id: string, cascade?: boolean): Promise<ApiResponse<{
104
+ deletedMemory: boolean;
105
+ }>>;
106
+ export declare function handleBulkDeletePrompts(ids: string[], cascade?: boolean): Promise<ApiResponse<{
107
+ deleted: number;
108
+ }>>;
101
109
  export {};
102
110
  //# 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":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,UAAU,WAAW,CAAC,CAAC,GAAG,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwCD,wBAAsB,cAAc,IAAI,OAAO,CAC7C,WAAW,CAAC;IAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CACrD,CAgDA;AAED,wBAAsB,kBAAkB,CACtC,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,EAChB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAoEjD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,WAAW,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA2CvC;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CA0B/E;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAmB/F;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC5C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CA8D5B;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,EAChB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC,CA8F1E;AAED,wBAAsB,WAAW,IAAI,OAAO,CAC1C,WAAW,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC,CACH,CAyCA;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAyB5E;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAyB9E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAC/C,WAAW,CAAC;IACV,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CACH,CASA;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CACrD,WAAW,CAAC;IACV,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,GAAG,EAAE,CAAC;CAC5B,CAAC,CACH,CASA;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CACpD,WAAW,CAAC;IACV,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,GAAG,EAAE,CAAC;CACxB,CAAC,CACH,CASA;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,GAAG,OAAO,CACrF,WAAW,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CACH,CASA"}
1
+ {"version":3,"file":"api-handlers.d.ts","sourceRoot":"","sources":["../../src/services/api-handlers.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { shardManager } from "./sqlite/shard-manager.js";
3
3
  import { vectorSearch } from "./sqlite/vector-search.js";
4
4
  import { connectionManager } from "./sqlite/connection-manager.js";
5
5
  import { log } from "./logger.js";
6
+ import { userPromptManager } from "./user-prompt/user-prompt-manager.js";
6
7
  function safeToISOString(timestamp) {
7
8
  try {
8
9
  if (timestamp === null || timestamp === undefined) {
@@ -82,17 +83,25 @@ export async function handleListTags() {
82
83
  return { success: false, error: String(error) };
83
84
  }
84
85
  }
85
- export async function handleListMemories(tag, page = 1, pageSize = 20) {
86
+ export async function handleListMemories(tag, page = 1, pageSize = 20, scope, includePrompts = true) {
86
87
  try {
87
88
  await embeddingService.warmup();
88
- let allResults = [];
89
+ let allMemories = [];
89
90
  if (tag) {
90
- const { scope, hash } = extractScopeFromTag(tag);
91
- const shards = shardManager.getAllShards(scope, hash);
91
+ const { scope: tagScope, hash } = extractScopeFromTag(tag);
92
+ const shards = shardManager.getAllShards(tagScope, hash);
92
93
  for (const shard of shards) {
93
94
  const db = connectionManager.getConnection(shard.dbPath);
94
95
  const memories = vectorSearch.listMemories(db, tag, 10000);
95
- allResults.push(...memories);
96
+ allMemories.push(...memories);
97
+ }
98
+ }
99
+ else if (scope) {
100
+ const shards = shardManager.getAllShards(scope, "");
101
+ for (const shard of shards) {
102
+ const db = connectionManager.getConnection(shard.dbPath);
103
+ const memories = vectorSearch.getAllMemories(db);
104
+ allMemories.push(...memories.filter((m) => m.container_tag?.includes(`_${scope}_`)));
96
105
  }
97
106
  }
98
107
  else {
@@ -102,34 +111,86 @@ export async function handleListMemories(tag, page = 1, pageSize = 20) {
102
111
  for (const shard of allShards) {
103
112
  const db = connectionManager.getConnection(shard.dbPath);
104
113
  const memories = vectorSearch.getAllMemories(db);
105
- allResults.push(...memories);
114
+ allMemories.push(...memories);
106
115
  }
107
116
  }
108
- const sortedResults = allResults.sort((a, b) => Number(b.created_at) - Number(a.created_at));
109
- const total = sortedResults.length;
117
+ const memoriesWithType = allMemories.map((r) => {
118
+ const metadata = safeJSONParse(r.metadata);
119
+ return {
120
+ type: "memory",
121
+ id: r.id,
122
+ content: r.content,
123
+ memoryType: r.type,
124
+ scope: r.container_tag?.includes("_user_") ? "user" : "project",
125
+ createdAt: Number(r.created_at),
126
+ updatedAt: r.updated_at ? Number(r.updated_at) : undefined,
127
+ metadata,
128
+ linkedPromptId: metadata?.promptId,
129
+ displayName: r.display_name,
130
+ userName: r.user_name,
131
+ userEmail: r.user_email,
132
+ projectPath: r.project_path,
133
+ projectName: r.project_name,
134
+ gitRepoUrl: r.git_repo_url,
135
+ isPinned: r.is_pinned === 1,
136
+ };
137
+ });
138
+ let timeline = memoriesWithType;
139
+ if (includePrompts && scope === "project") {
140
+ const prompts = userPromptManager.getCapturedPrompts(tag);
141
+ const promptsWithType = prompts.map((p) => ({
142
+ type: "prompt",
143
+ id: p.id,
144
+ sessionId: p.sessionId,
145
+ content: p.content,
146
+ createdAt: p.createdAt,
147
+ projectPath: p.projectPath,
148
+ linkedMemoryId: p.linkedMemoryId,
149
+ }));
150
+ timeline = [...memoriesWithType, ...promptsWithType];
151
+ }
152
+ timeline.sort((a, b) => b.createdAt - a.createdAt);
153
+ const total = timeline.length;
110
154
  const totalPages = Math.ceil(total / pageSize);
111
155
  const offset = (page - 1) * pageSize;
112
- const paginatedResults = sortedResults.slice(offset, offset + pageSize);
113
- const memories = paginatedResults.map((r) => ({
114
- id: r.id,
115
- content: r.content,
116
- type: r.type,
117
- scope: r.container_tag?.includes("_user_") ? "user" : "project",
118
- createdAt: safeToISOString(r.created_at),
119
- updatedAt: r.updated_at ? safeToISOString(r.updated_at) : undefined,
120
- metadata: safeJSONParse(r.metadata),
121
- displayName: r.display_name,
122
- userName: r.user_name,
123
- userEmail: r.user_email,
124
- projectPath: r.project_path,
125
- projectName: r.project_name,
126
- gitRepoUrl: r.git_repo_url,
127
- isPinned: r.is_pinned === 1,
128
- }));
156
+ const paginatedResults = timeline.slice(offset, offset + pageSize);
157
+ const items = paginatedResults.map((item) => {
158
+ if (item.type === "memory") {
159
+ return {
160
+ type: "memory",
161
+ id: item.id,
162
+ content: item.content,
163
+ memoryType: item.memoryType,
164
+ scope: item.scope,
165
+ createdAt: safeToISOString(item.createdAt),
166
+ updatedAt: item.updatedAt ? safeToISOString(item.updatedAt) : undefined,
167
+ metadata: item.metadata,
168
+ linkedPromptId: item.linkedPromptId,
169
+ displayName: item.displayName,
170
+ userName: item.userName,
171
+ userEmail: item.userEmail,
172
+ projectPath: item.projectPath,
173
+ projectName: item.projectName,
174
+ gitRepoUrl: item.gitRepoUrl,
175
+ isPinned: item.isPinned,
176
+ };
177
+ }
178
+ else {
179
+ return {
180
+ type: "prompt",
181
+ id: item.id,
182
+ sessionId: item.sessionId,
183
+ content: item.content,
184
+ createdAt: safeToISOString(item.createdAt),
185
+ projectPath: item.projectPath,
186
+ linkedMemoryId: item.linkedMemoryId,
187
+ };
188
+ }
189
+ });
129
190
  return {
130
191
  success: true,
131
192
  data: {
132
- items: memories,
193
+ items,
133
194
  total,
134
195
  page,
135
196
  pageSize,
@@ -181,7 +242,7 @@ export async function handleAddMemory(data) {
181
242
  return { success: false, error: String(error) };
182
243
  }
183
244
  }
184
- export async function handleDeleteMemory(id) {
245
+ export async function handleDeleteMemory(id, cascade = false) {
185
246
  try {
186
247
  if (!id) {
187
248
  return { success: false, error: "id is required" };
@@ -189,13 +250,22 @@ export async function handleDeleteMemory(id) {
189
250
  const userShards = shardManager.getAllShards("user", "");
190
251
  const projectShards = shardManager.getAllShards("project", "");
191
252
  const allShards = [...userShards, ...projectShards];
253
+ let deletedPrompt = false;
192
254
  for (const shard of allShards) {
193
255
  const db = connectionManager.getConnection(shard.dbPath);
194
256
  const memory = vectorSearch.getMemoryById(db, id);
195
257
  if (memory) {
258
+ if (cascade) {
259
+ const metadata = safeJSONParse(memory.metadata);
260
+ const linkedPromptId = metadata?.promptId;
261
+ if (linkedPromptId) {
262
+ userPromptManager.deletePrompt(linkedPromptId);
263
+ deletedPrompt = true;
264
+ }
265
+ }
196
266
  vectorSearch.deleteVector(db, id);
197
267
  shardManager.decrementVectorCount(shard.id);
198
- return { success: true };
268
+ return { success: true, data: { deletedPrompt } };
199
269
  }
200
270
  }
201
271
  return { success: false, error: "Memory not found" };
@@ -205,14 +275,14 @@ export async function handleDeleteMemory(id) {
205
275
  return { success: false, error: String(error) };
206
276
  }
207
277
  }
208
- export async function handleBulkDelete(ids) {
278
+ export async function handleBulkDelete(ids, cascade = false) {
209
279
  try {
210
280
  if (!ids || ids.length === 0) {
211
281
  return { success: false, error: "ids array is required" };
212
282
  }
213
283
  let deleted = 0;
214
284
  for (const id of ids) {
215
- const result = await handleDeleteMemory(id);
285
+ const result = await handleDeleteMemory(id, cascade);
216
286
  if (result.success) {
217
287
  deleted++;
218
288
  }
@@ -492,3 +562,46 @@ export async function handleRunMigration(strategy) {
492
562
  return { success: false, error: String(error) };
493
563
  }
494
564
  }
565
+ export async function handleDeletePrompt(id, cascade = false) {
566
+ try {
567
+ if (!id) {
568
+ return { success: false, error: "id is required" };
569
+ }
570
+ const prompt = userPromptManager.getPromptById(id);
571
+ if (!prompt) {
572
+ return { success: false, error: "Prompt not found" };
573
+ }
574
+ let deletedMemory = false;
575
+ if (cascade && prompt.linkedMemoryId) {
576
+ const result = await handleDeleteMemory(prompt.linkedMemoryId, false);
577
+ if (result.success) {
578
+ deletedMemory = true;
579
+ }
580
+ }
581
+ userPromptManager.deletePrompt(id);
582
+ return { success: true, data: { deletedMemory } };
583
+ }
584
+ catch (error) {
585
+ log("handleDeletePrompt: error", { error: String(error) });
586
+ return { success: false, error: String(error) };
587
+ }
588
+ }
589
+ export async function handleBulkDeletePrompts(ids, cascade = false) {
590
+ try {
591
+ if (!ids || ids.length === 0) {
592
+ return { success: false, error: "ids array is required" };
593
+ }
594
+ let deleted = 0;
595
+ for (const id of ids) {
596
+ const result = await handleDeletePrompt(id, cascade);
597
+ if (result.success) {
598
+ deleted++;
599
+ }
600
+ }
601
+ return { success: true, data: { deleted } };
602
+ }
603
+ catch (error) {
604
+ log("handleBulkDeletePrompts: error", { error: String(error) });
605
+ return { success: false, error: String(error) };
606
+ }
607
+ }
@@ -1,32 +1,3 @@
1
1
  import type { PluginInput } from "@opencode-ai/plugin";
2
- interface CaptureBuffer {
3
- sessionID: string;
4
- lastCaptureTokens: number;
5
- lastCaptureTime: number;
6
- lastCapturedMessageIndex: number;
7
- }
8
- export declare class AutoCaptureService {
9
- private buffers;
10
- private capturing;
11
- private tokenThreshold;
12
- private minTokens;
13
- private enabled;
14
- private maxMemories;
15
- constructor();
16
- isEnabled(): boolean;
17
- getDisabledReason(): string | null;
18
- toggle(): boolean;
19
- getOrCreateBuffer(sessionID: string): CaptureBuffer;
20
- checkTokenThreshold(sessionID: string, totalTokens: number): boolean;
21
- getSystemPrompt(hasContext: boolean): string;
22
- markCapturing(sessionID: string): void;
23
- clearBuffer(sessionID: string): void;
24
- getStats(sessionID: string): {
25
- lastCaptureTokens: number;
26
- timeSinceCapture: number;
27
- } | null;
28
- cleanup(sessionID: string): void;
29
- }
30
- export declare function performAutoCapture(ctx: PluginInput, service: AutoCaptureService, sessionID: string, directory: string): Promise<void>;
31
- export {};
2
+ export declare function performAutoCapture(ctx: PluginInput, sessionID: string, directory: string): Promise<void>;
32
3
  //# sourceMappingURL=auto-capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-capture.d.ts","sourceRoot":"","sources":["../../src/services/auto-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOvD,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;CAClC;AA4BD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;;IAwB5B,SAAS,IAAI,OAAO;IAIpB,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAQlC,MAAM,IAAI,OAAO;IAKjB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAYnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAkBpE,eAAe,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM;IA2C5C,aAAa,CAAC,SAAS,EAAE,MAAM;IAI/B,WAAW,CAAC,SAAS,EAAE,MAAM;IAa7B,QAAQ,CAAC,SAAS,EAAE,MAAM;;;;IAU1B,OAAO,CAAC,SAAS,EAAE,MAAM;CAI1B;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAoNf"}
1
+ {"version":3,"file":"auto-capture.d.ts","sourceRoot":"","sources":["../../src/services/auto-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAcvD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA+Ff"}