opencode-mem 2.7.3 → 2.7.4

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.
@@ -146,10 +146,19 @@ export declare function handleDetectTagMigration(): Promise<ApiResponse<{
146
146
  needsMigration: boolean;
147
147
  count: number;
148
148
  }>>;
149
- export declare function handleRunTagMigration(): Promise<ApiResponse<{
150
- success: boolean;
149
+ interface MigrationProgress {
151
150
  processed: number;
152
- duration: number;
151
+ total: number;
152
+ currentBatch: number;
153
+ totalBatches: number;
154
+ isComplete: boolean;
155
+ errors: string[];
156
+ }
157
+ export declare function handleGetTagMigrationProgress(): Promise<ApiResponse<MigrationProgress>>;
158
+ export declare function handleRunTagMigrationBatch(batchSize?: number): Promise<ApiResponse<{
159
+ processed: number;
160
+ total: number;
161
+ hasMore: boolean;
153
162
  }>>;
154
163
  export {};
155
164
  //# 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":"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"}
1
+ {"version":3,"file":"api-handlers.d.ts","sourceRoot":"","sources":["../../src/services/api-handlers.ts"],"names":[],"mappings":"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"}
@@ -800,9 +800,19 @@ export async function handleDetectTagMigration() {
800
800
  return { success: false, error: String(error) };
801
801
  }
802
802
  }
803
- export async function handleRunTagMigration() {
803
+ let migrationProgress = {
804
+ processed: 0,
805
+ total: 0,
806
+ currentBatch: 0,
807
+ totalBatches: 0,
808
+ isComplete: true,
809
+ errors: [],
810
+ };
811
+ export async function handleGetTagMigrationProgress() {
812
+ return { success: true, data: migrationProgress };
813
+ }
814
+ export async function handleRunTagMigrationBatch(batchSize = 5) {
804
815
  try {
805
- const startTime = Date.now();
806
816
  const { AIProviderFactory } = await import("./ai/ai-provider-factory.js");
807
817
  const providerConfig = {
808
818
  model: CONFIG.memoryModel,
@@ -813,54 +823,83 @@ export async function handleRunTagMigration() {
813
823
  };
814
824
  const provider = AIProviderFactory.createProvider(CONFIG.memoryProvider, providerConfig);
815
825
  const projectShards = shardManager.getAllShards("project", "");
816
- let processed = 0;
826
+ let batchProcessed = 0;
827
+ const allMemories = [];
817
828
  for (const shard of projectShards) {
818
829
  const db = connectionManager.getConnection(shard.dbPath);
819
830
  const memories = db.prepare("SELECT * FROM memories").all();
820
831
  for (const m of memories) {
821
- try {
822
- let currentTags = m.tags
823
- ? m.tags
824
- .split(",")
825
- .map((t) => t.trim().toLowerCase())
826
- .filter((t) => t)
827
- : [];
828
- if (currentTags.length === 0) {
829
- const prompt = `Generate 2-4 short technical tags for this memory content:\n\n${m.content}\n\nReturn ONLY a comma-separated list of tags.`;
830
- const result = await provider.executeToolCall("You are a technical tagger.", prompt, {
831
- type: "function",
832
- function: {
833
- name: "save_tags",
834
- description: "Save generated tags",
835
- parameters: {
836
- type: "object",
837
- properties: { tags: { type: "array", items: { type: "string" } } },
838
- required: ["tags"],
839
- },
832
+ allMemories.push({ memory: m, shard });
833
+ }
834
+ }
835
+ if (migrationProgress.total === 0) {
836
+ migrationProgress.total = allMemories.length;
837
+ migrationProgress.totalBatches = Math.ceil(allMemories.length / batchSize);
838
+ migrationProgress.isComplete = false;
839
+ }
840
+ const startIdx = migrationProgress.processed;
841
+ const endIdx = Math.min(startIdx + batchSize, allMemories.length);
842
+ for (let i = startIdx; i < endIdx; i++) {
843
+ const item = allMemories[i];
844
+ if (!item)
845
+ continue;
846
+ const { memory: m, shard } = item;
847
+ const db = connectionManager.getConnection(shard.dbPath);
848
+ try {
849
+ let currentTags = m.tags
850
+ ? m.tags
851
+ .split(",")
852
+ .map((t) => t.trim().toLowerCase())
853
+ .filter((t) => t)
854
+ : [];
855
+ if (currentTags.length === 0) {
856
+ const prompt = `Generate 2-4 short technical tags for this memory content:\n\n${m.content}\n\nReturn ONLY a comma-separated list of tags.`;
857
+ const result = await provider.executeToolCall("You are a technical tagger.", prompt, {
858
+ type: "function",
859
+ function: {
860
+ name: "save_tags",
861
+ description: "Save generated tags",
862
+ parameters: {
863
+ type: "object",
864
+ properties: { tags: { type: "array", items: { type: "string" } } },
865
+ required: ["tags"],
840
866
  },
841
- }, `migration_${m.id}`);
842
- if (result.success && result.data?.tags) {
843
- currentTags = result.data.tags;
844
- db.prepare("UPDATE memories SET tags = ? WHERE id = ?").run(currentTags.join(","), m.id);
845
- }
867
+ },
868
+ }, `migration_${m.id}`);
869
+ if (result.success && result.data?.tags) {
870
+ currentTags = result.data.tags;
871
+ db.prepare("UPDATE memories SET tags = ? WHERE id = ?").run(currentTags.join(","), m.id);
846
872
  }
847
- const vector = await embeddingService.embedWithTimeout(m.content);
848
- const vectorBuffer = new Uint8Array(vector.buffer);
849
- db.prepare("UPDATE memories SET vector = ?, updated_at = ? WHERE id = ?").run(vectorBuffer, Date.now(), m.id);
850
- db.prepare("INSERT OR REPLACE INTO vec_memories (memory_id, embedding) VALUES (?, ?)").run(m.id, vectorBuffer);
851
- if (currentTags.length > 0) {
852
- const tagsVector = await embeddingService.embedWithTimeout(currentTags.join(", "));
853
- const tagsVectorBuffer = new Uint8Array(tagsVector.buffer);
854
- db.prepare("INSERT OR REPLACE INTO vec_tags (memory_id, embedding) VALUES (?, ?)").run(m.id, tagsVectorBuffer);
855
- }
856
- processed++;
857
873
  }
858
- catch (e) {
859
- log("Migration error for memory", { id: m.id, error: String(e) });
874
+ const vector = await embeddingService.embedWithTimeout(m.content);
875
+ const vectorBuffer = new Uint8Array(vector.buffer);
876
+ db.prepare("UPDATE memories SET vector = ?, updated_at = ? WHERE id = ?").run(vectorBuffer, Date.now(), m.id);
877
+ db.prepare("DELETE FROM vec_memories WHERE memory_id = ?").run(m.id);
878
+ db.prepare("INSERT INTO vec_memories (memory_id, embedding) VALUES (?, ?)").run(m.id, vectorBuffer);
879
+ if (currentTags.length > 0) {
880
+ const tagsVector = await embeddingService.embedWithTimeout(currentTags.join(", "));
881
+ const tagsVectorBuffer = new Uint8Array(tagsVector.buffer);
882
+ db.prepare("DELETE FROM vec_tags WHERE memory_id = ?").run(m.id);
883
+ db.prepare("INSERT INTO vec_tags (memory_id, embedding) VALUES (?, ?)").run(m.id, tagsVectorBuffer);
860
884
  }
885
+ migrationProgress.processed++;
886
+ batchProcessed++;
887
+ }
888
+ catch (e) {
889
+ const errorMsg = String(e);
890
+ migrationProgress.errors.push(errorMsg);
891
+ log("Migration error for memory", { id: m.id, error: errorMsg });
861
892
  }
862
893
  }
863
- return { success: true, data: { success: true, processed, duration: Date.now() - startTime } };
894
+ migrationProgress.currentBatch++;
895
+ const hasMore = migrationProgress.processed < migrationProgress.total;
896
+ if (!hasMore) {
897
+ migrationProgress.isComplete = true;
898
+ }
899
+ return {
900
+ success: true,
901
+ data: { processed: migrationProgress.processed, total: migrationProgress.total, hasMore },
902
+ };
864
903
  }
865
904
  catch (error) {
866
905
  return { success: false, error: String(error) };
@@ -1,4 +1,3 @@
1
- export declare function containsPrivateTag(content: string): boolean;
2
1
  export declare function stripPrivateContent(content: string): string;
3
2
  export declare function isFullyPrivate(content: string): boolean;
4
3
  //# sourceMappingURL=privacy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/services/privacy.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD"}
1
+ {"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/services/privacy.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD"}
@@ -1,6 +1,3 @@
1
- export function containsPrivateTag(content) {
2
- return /<private>[\s\S]*?<\/private>/i.test(content);
3
- }
4
1
  export function stripPrivateContent(content) {
5
2
  return content.replace(/<private>[\s\S]*?<\/private>/gi, "[REDACTED]");
6
3
  }
@@ -5,6 +5,7 @@ export declare class VectorSearch {
5
5
  searchInShard(shard: ShardInfo, queryVector: Float32Array, containerTag: string, limit: number, queryText?: string): SearchResult[];
6
6
  searchAcrossShards(shards: ShardInfo[], queryVector: Float32Array, containerTag: string, limit: number, similarityThreshold: number, queryText?: string): Promise<SearchResult[]>;
7
7
  deleteVector(db: Database, memoryId: string): void;
8
+ updateVector(db: Database, memoryId: string, vector: Float32Array, tagsVector?: Float32Array): void;
8
9
  listMemories(db: Database, containerTag: string, limit: number): any[];
9
10
  getAllMemories(db: Database): any[];
10
11
  getMemoryById(db: Database, memoryId: string): any | null;
@@ -1 +1 @@
1
- {"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../../src/services/sqlite/vector-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,YAAY;IACvB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IA0CtD,aAAa,CACX,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE;IA0FX,kBAAkB,CACtB,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,EAC3B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB1B,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMlD,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAWtE,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE;IAKnC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAKzD,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAMxD,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM;IAMrC,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE;IAepC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK/C,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAIlD;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../../src/services/sqlite/vector-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,YAAY;IACvB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IA0CtD,aAAa,CACX,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE;IA0FX,kBAAkB,CACtB,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,EAC3B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB1B,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMlD,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,YAAY,GAAG,IAAI;IAYnG,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAWtE,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE;IAKnC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAKzD,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAMxD,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM;IAMrC,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE;IAepC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK/C,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAIlD;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -113,6 +113,16 @@ export class VectorSearch {
113
113
  db.prepare(`DELETE FROM vec_tags WHERE memory_id = ?`).run(memoryId);
114
114
  db.prepare(`DELETE FROM memories WHERE id = ?`).run(memoryId);
115
115
  }
116
+ updateVector(db, memoryId, vector, tagsVector) {
117
+ const vectorBuffer = new Uint8Array(vector.buffer);
118
+ db.prepare(`DELETE FROM vec_memories WHERE memory_id = ?`).run(memoryId);
119
+ db.prepare(`INSERT INTO vec_memories (memory_id, embedding) VALUES (?, ?)`).run(memoryId, vectorBuffer);
120
+ if (tagsVector) {
121
+ const tagsVectorBuffer = new Uint8Array(tagsVector.buffer);
122
+ db.prepare(`DELETE FROM vec_tags WHERE memory_id = ?`).run(memoryId);
123
+ db.prepare(`INSERT INTO vec_tags (memory_id, embedding) VALUES (?, ?)`).run(memoryId, tagsVectorBuffer);
124
+ }
125
+ }
116
126
  listMemories(db, containerTag, limit) {
117
127
  const stmt = db.prepare(`
118
128
  SELECT * FROM memories
@@ -1,7 +1,7 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { join, dirname } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- import { handleListTags, handleListMemories, handleAddMemory, handleDeleteMemory, handleBulkDelete, handleUpdateMemory, handleSearch, handleStats, handlePinMemory, handleUnpinMemory, handleRunCleanup, handleRunDeduplication, handleDetectMigration, handleRunMigration, handleDetectTagMigration, handleRunTagMigration, handleDeletePrompt, handleBulkDeletePrompts, handleGetUserProfile, handleGetProfileChangelog, handleGetProfileSnapshot, handleRefreshProfile, } from "./api-handlers.js";
4
+ import { handleListTags, handleListMemories, handleAddMemory, handleDeleteMemory, handleBulkDelete, handleUpdateMemory, handleSearch, handleStats, handlePinMemory, handleUnpinMemory, handleRunCleanup, handleRunDeduplication, handleDetectMigration, handleRunMigration, handleDetectTagMigration, handleRunTagMigrationBatch, handleGetTagMigrationProgress, handleDeletePrompt, handleBulkDeletePrompts, handleGetUserProfile, handleGetProfileChangelog, handleGetProfileSnapshot, handleRefreshProfile, } from "./api-handlers.js";
5
5
  const __filename = fileURLToPath(import.meta.url);
6
6
  const __dirname = dirname(__filename);
7
7
  let server = null;
@@ -111,8 +111,14 @@ async function handleRequest(req) {
111
111
  const result = await handleDetectTagMigration();
112
112
  return jsonResponse(result);
113
113
  }
114
- if (path === "/api/migration/tags/run" && method === "POST") {
115
- const result = await handleRunTagMigration();
114
+ if (path === "/api/migration/tags/run-batch" && method === "POST") {
115
+ const body = (await req.json());
116
+ const batchSize = body?.batchSize || 5;
117
+ const result = await handleRunTagMigrationBatch(batchSize);
118
+ return jsonResponse(result);
119
+ }
120
+ if (path === "/api/migration/tags/progress" && method === "GET") {
121
+ const result = await handleGetTagMigrationProgress();
116
122
  return jsonResponse(result);
117
123
  }
118
124
  if (path === "/api/migration/run" && method === "POST") {
@@ -1,35 +1,4 @@
1
- export type MemoryScope = "user" | "project";
2
1
  export type MemoryType = string;
3
- export type ConversationRole = "user" | "assistant" | "system" | "tool";
4
- export type ConversationContentPart = {
5
- type: "text";
6
- text: string;
7
- } | {
8
- type: "image_url";
9
- imageUrl: {
10
- url: string;
11
- };
12
- };
13
- export interface ConversationToolCall {
14
- id: string;
15
- type: "function";
16
- function: {
17
- name: string;
18
- arguments: string;
19
- };
20
- }
21
- export interface ConversationMessage {
22
- role: ConversationRole;
23
- content: string | ConversationContentPart[];
24
- name?: string;
25
- tool_calls?: ConversationToolCall[];
26
- tool_call_id?: string;
27
- }
28
- export interface ConversationIngestResponse {
29
- id: string;
30
- conversationId: string;
31
- status: string;
32
- }
33
2
  export interface MemoryMetadata {
34
3
  type?: MemoryType;
35
4
  source?: "manual" | "auto-capture" | "import" | "api";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,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;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,kBAAkB,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,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;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,kBAAkB,GAAG,WAAW,CAAC"}
package/dist/web/app.js CHANGED
@@ -30,7 +30,13 @@ function renderMarkdown(markdown) {
30
30
 
31
31
  async function fetchAPI(endpoint, options = {}) {
32
32
  try {
33
- const response = await fetch(API_BASE + endpoint, options);
33
+ const controller = new AbortController();
34
+ const timeoutId = setTimeout(() => controller.abort(), 60000);
35
+ const response = await fetch(API_BASE + endpoint, {
36
+ ...options,
37
+ signal: controller.signal,
38
+ });
39
+ clearTimeout(timeoutId);
34
40
  const data = await response.json();
35
41
  return data;
36
42
  } catch (error) {
@@ -73,40 +79,6 @@ function populateTagDropdowns() {
73
79
  });
74
80
  }
75
81
 
76
- async function loadMemories() {
77
- showRefreshIndicator(true);
78
-
79
- let endpoint = `/api/memories?page=${state.currentPage}&pageSize=${state.pageSize}&includePrompts=true`;
80
-
81
- if (state.isSearching && state.searchQuery) {
82
- endpoint = `/api/search?q=${encodeURIComponent(state.searchQuery)}&page=${state.currentPage}&pageSize=${state.pageSize}`;
83
- if (state.selectedTag) {
84
- endpoint += `&tag=${encodeURIComponent(state.selectedTag)}`;
85
- }
86
- } else {
87
- if (state.selectedTag) {
88
- endpoint += `&tag=${encodeURIComponent(state.selectedTag)}`;
89
- }
90
- }
91
-
92
- const result = await fetchAPI(endpoint);
93
-
94
- showRefreshIndicator(false);
95
-
96
- if (result.success) {
97
- state.memories = result.data.items;
98
- state.totalPages = result.data.totalPages;
99
- state.totalItems = result.data.total;
100
- state.currentPage = result.data.page;
101
-
102
- renderMemories();
103
- updatePagination();
104
- updateSectionTitle();
105
- } else {
106
- showError(result.error || "Failed to load memories");
107
- }
108
- }
109
-
110
82
  function renderMemories() {
111
83
  const container = document.getElementById("memories-list");
112
84
 
@@ -437,23 +409,6 @@ async function addMemory(e) {
437
409
  }
438
410
  }
439
411
 
440
- function performSearch() {
441
- const input = document.getElementById("search-input").value.trim();
442
-
443
- if (!input) {
444
- clearSearch();
445
- return;
446
- }
447
-
448
- state.searchQuery = input;
449
- state.isSearching = true;
450
- state.currentPage = 1;
451
-
452
- document.getElementById("clear-search-btn").classList.remove("hidden");
453
-
454
- loadMemories();
455
- }
456
-
457
412
  async function loadMemories() {
458
413
  showRefreshIndicator(true);
459
414
 
@@ -655,23 +610,6 @@ function changePage(delta) {
655
610
  loadMemories();
656
611
  }
657
612
 
658
- function handleAddScopeChange() {
659
- const tagDropdown = document.getElementById("add-tag");
660
-
661
- tagDropdown.innerHTML = '<option value="">Select tag</option>';
662
-
663
- const tags = state.tags.project;
664
- tags.forEach((tagInfo) => {
665
- const displayText = tagInfo.displayName || tagInfo.tag;
666
- const shortDisplay =
667
- displayText.length > 50 ? displayText.substring(0, 50) + "..." : displayText;
668
- const option = document.createElement("option");
669
- option.value = tagInfo.tag;
670
- option.textContent = shortDisplay;
671
- tagDropdown.appendChild(option);
672
- });
673
- }
674
-
675
613
  function showToast(message, type = "success") {
676
614
  const toast = document.getElementById("toast");
677
615
  toast.textContent = message;
@@ -809,24 +747,55 @@ async function runTagMigration() {
809
747
  const progress = document.getElementById("tag-migration-progress");
810
748
 
811
749
  actions.classList.add("hidden");
812
- status.textContent = "Running technical tagging... This uses AI and may take a while.";
813
- progress.style.width = "50%"; // Simple progress for now as it is non-streaming
750
+ status.textContent = "Starting migration...";
751
+ progress.style.width = "0%";
814
752
 
815
- const result = await fetchAPI("/api/migration/tags/run", { method: "POST" });
753
+ let totalProcessed = 0;
754
+ let hasMore = true;
755
+ let attempts = 0;
756
+ const maxAttempts = 1000;
816
757
 
817
- if (result.success) {
818
- progress.style.width = "100%";
819
- status.textContent = `Successfully tagged ${result.data.processed} memories!`;
820
- showToast("Migration complete", "success");
821
- setTimeout(() => {
822
- document.getElementById("tag-migration-overlay").classList.add("hidden");
823
- loadMemories();
824
- loadStats();
825
- }, 2000);
826
- } else {
827
- status.textContent = "Migration failed: " + result.error;
758
+ while (hasMore && attempts < maxAttempts) {
759
+ attempts++;
760
+ const result = await fetchAPI("/api/migration/tags/run-batch", {
761
+ method: "POST",
762
+ headers: { "Content-Type": "application/json" },
763
+ body: JSON.stringify({ batchSize: 3 }),
764
+ });
765
+
766
+ if (!result.success) {
767
+ status.textContent = "Migration failed: " + result.error;
768
+ actions.classList.remove("hidden");
769
+ return;
770
+ }
771
+
772
+ totalProcessed = result.data.processed;
773
+ hasMore = result.data.hasMore;
774
+ const total = result.data.total;
775
+ const percent = total > 0 ? Math.round((totalProcessed / total) * 100) : 0;
776
+
777
+ progress.style.width = percent + "%";
778
+ status.textContent = `Processing memories... ${totalProcessed}/${total} (${percent}%)`;
779
+
780
+ if (hasMore) {
781
+ await new Promise((resolve) => setTimeout(resolve, 100));
782
+ }
783
+ }
784
+
785
+ if (attempts >= maxAttempts) {
786
+ status.textContent = "Migration stopped: maximum attempts reached";
828
787
  actions.classList.remove("hidden");
788
+ return;
829
789
  }
790
+
791
+ progress.style.width = "100%";
792
+ status.textContent = `Successfully tagged ${totalProcessed} memories!`;
793
+ showToast("Migration complete", "success");
794
+ setTimeout(() => {
795
+ document.getElementById("tag-migration-overlay").classList.add("hidden");
796
+ loadMemories();
797
+ loadStats();
798
+ }, 2000);
830
799
  }
831
800
 
832
801
  function showMigrationWarning(data) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-mem",
3
- "version": "2.7.3",
3
+ "version": "2.7.4",
4
4
  "description": "OpenCode plugin that gives coding agents persistent memory using local vector database",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",
@@ -10,7 +10,8 @@
10
10
  "dev": "tsc --watch",
11
11
  "typecheck": "tsc --noEmit",
12
12
  "format": "prettier --write \"src/**/*.{ts,js,css,html}\"",
13
- "format:check": "prettier --check \"src/**/*.{ts,js,css,html}\""
13
+ "format:check": "prettier --check \"src/**/*.{ts,js,css,html}\"",
14
+ "prepare": "husky"
14
15
  },
15
16
  "keywords": [
16
17
  "opencode",
@@ -39,7 +40,9 @@
39
40
  "sqlite-vec": "^0.1.7-alpha.2"
40
41
  },
41
42
  "devDependencies": {
42
- "@types/bun": "latest",
43
+ "@types/bun": "^1.3.8",
44
+ "husky": "^9.1.7",
45
+ "lint-staged": "^16.2.7",
43
46
  "prettier": "^3.4.2",
44
47
  "typescript": "^5.7.3"
45
48
  },
@@ -53,5 +56,10 @@
53
56
  "files": [
54
57
  "dist",
55
58
  "package.json"
56
- ]
59
+ ],
60
+ "lint-staged": {
61
+ "*.{ts,tsx,js,jsx,css,html,json,md}": [
62
+ "prettier --write"
63
+ ]
64
+ }
57
65
  }