@aeriondyseti/vector-memory-mcp 1.1.0-dev.6 → 2.0.0-rc

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 (106) hide show
  1. package/README.md +22 -4
  2. package/package.json +12 -18
  3. package/scripts/migrate-from-lancedb.ts +56 -0
  4. package/scripts/smoke-test.ts +699 -0
  5. package/scripts/test-runner.ts +11 -1
  6. package/src/db/connection.ts +18 -4
  7. package/src/db/conversation.repository.ts +164 -79
  8. package/src/db/memory.repository.ts +182 -170
  9. package/src/db/migrations.ts +70 -0
  10. package/src/db/sqlite-utils.ts +78 -0
  11. package/src/http/server.ts +40 -35
  12. package/src/index.ts +33 -3
  13. package/src/mcp/server.ts +2 -1
  14. package/src/migration.ts +254 -0
  15. package/dist/package.json +0 -71
  16. package/dist/scripts/test-runner.d.ts +0 -9
  17. package/dist/scripts/test-runner.d.ts.map +0 -1
  18. package/dist/scripts/test-runner.js +0 -61
  19. package/dist/scripts/test-runner.js.map +0 -1
  20. package/dist/scripts/warmup.d.ts +0 -8
  21. package/dist/scripts/warmup.d.ts.map +0 -1
  22. package/dist/scripts/warmup.js +0 -61
  23. package/dist/scripts/warmup.js.map +0 -1
  24. package/dist/src/config/index.d.ts +0 -41
  25. package/dist/src/config/index.d.ts.map +0 -1
  26. package/dist/src/config/index.js +0 -75
  27. package/dist/src/config/index.js.map +0 -1
  28. package/dist/src/db/connection.d.ts +0 -3
  29. package/dist/src/db/connection.d.ts.map +0 -1
  30. package/dist/src/db/connection.js +0 -10
  31. package/dist/src/db/connection.js.map +0 -1
  32. package/dist/src/db/conversation.repository.d.ts +0 -26
  33. package/dist/src/db/conversation.repository.d.ts.map +0 -1
  34. package/dist/src/db/conversation.repository.js +0 -73
  35. package/dist/src/db/conversation.repository.js.map +0 -1
  36. package/dist/src/db/conversation.schema.d.ts +0 -4
  37. package/dist/src/db/conversation.schema.d.ts.map +0 -1
  38. package/dist/src/db/conversation.schema.js +0 -15
  39. package/dist/src/db/conversation.schema.js.map +0 -1
  40. package/dist/src/db/lancedb-utils.d.ts +0 -57
  41. package/dist/src/db/lancedb-utils.d.ts.map +0 -1
  42. package/dist/src/db/lancedb-utils.js +0 -124
  43. package/dist/src/db/lancedb-utils.js.map +0 -1
  44. package/dist/src/db/memory.repository.d.ts +0 -40
  45. package/dist/src/db/memory.repository.d.ts.map +0 -1
  46. package/dist/src/db/memory.repository.js +0 -183
  47. package/dist/src/db/memory.repository.js.map +0 -1
  48. package/dist/src/db/schema.d.ts +0 -7
  49. package/dist/src/db/schema.d.ts.map +0 -1
  50. package/dist/src/db/schema.js +0 -19
  51. package/dist/src/db/schema.js.map +0 -1
  52. package/dist/src/http/mcp-transport.d.ts +0 -19
  53. package/dist/src/http/mcp-transport.d.ts.map +0 -1
  54. package/dist/src/http/mcp-transport.js +0 -191
  55. package/dist/src/http/mcp-transport.js.map +0 -1
  56. package/dist/src/http/server.d.ts +0 -13
  57. package/dist/src/http/server.d.ts.map +0 -1
  58. package/dist/src/http/server.js +0 -224
  59. package/dist/src/http/server.js.map +0 -1
  60. package/dist/src/index.d.ts +0 -3
  61. package/dist/src/index.d.ts.map +0 -1
  62. package/dist/src/index.js +0 -68
  63. package/dist/src/index.js.map +0 -1
  64. package/dist/src/mcp/handlers.d.ts +0 -15
  65. package/dist/src/mcp/handlers.d.ts.map +0 -1
  66. package/dist/src/mcp/handlers.js +0 -313
  67. package/dist/src/mcp/handlers.js.map +0 -1
  68. package/dist/src/mcp/server.d.ts +0 -5
  69. package/dist/src/mcp/server.d.ts.map +0 -1
  70. package/dist/src/mcp/server.js +0 -22
  71. package/dist/src/mcp/server.js.map +0 -1
  72. package/dist/src/mcp/tools.d.ts +0 -13
  73. package/dist/src/mcp/tools.d.ts.map +0 -1
  74. package/dist/src/mcp/tools.js +0 -352
  75. package/dist/src/mcp/tools.js.map +0 -1
  76. package/dist/src/services/conversation.service.d.ts +0 -38
  77. package/dist/src/services/conversation.service.d.ts.map +0 -1
  78. package/dist/src/services/conversation.service.js +0 -252
  79. package/dist/src/services/conversation.service.js.map +0 -1
  80. package/dist/src/services/embeddings.service.d.ts +0 -12
  81. package/dist/src/services/embeddings.service.d.ts.map +0 -1
  82. package/dist/src/services/embeddings.service.js +0 -37
  83. package/dist/src/services/embeddings.service.js.map +0 -1
  84. package/dist/src/services/memory.service.d.ts +0 -40
  85. package/dist/src/services/memory.service.d.ts.map +0 -1
  86. package/dist/src/services/memory.service.js +0 -258
  87. package/dist/src/services/memory.service.js.map +0 -1
  88. package/dist/src/services/parsers/claude-code.parser.d.ts +0 -8
  89. package/dist/src/services/parsers/claude-code.parser.d.ts.map +0 -1
  90. package/dist/src/services/parsers/claude-code.parser.js +0 -191
  91. package/dist/src/services/parsers/claude-code.parser.js.map +0 -1
  92. package/dist/src/services/parsers/types.d.ts +0 -9
  93. package/dist/src/services/parsers/types.d.ts.map +0 -1
  94. package/dist/src/services/parsers/types.js +0 -2
  95. package/dist/src/services/parsers/types.js.map +0 -1
  96. package/dist/src/types/conversation.d.ts +0 -99
  97. package/dist/src/types/conversation.d.ts.map +0 -1
  98. package/dist/src/types/conversation.js +0 -2
  99. package/dist/src/types/conversation.js.map +0 -1
  100. package/dist/src/types/memory.d.ts +0 -30
  101. package/dist/src/types/memory.d.ts.map +0 -1
  102. package/dist/src/types/memory.js +0 -18
  103. package/dist/src/types/memory.js.map +0 -1
  104. package/src/db/conversation.schema.ts +0 -33
  105. package/src/db/lancedb-utils.ts +0 -142
  106. package/src/db/schema.ts +0 -38
@@ -1,252 +0,0 @@
1
- import { createHash } from "crypto";
2
- import { readFile, writeFile, mkdir } from "fs/promises";
3
- import { dirname, join } from "path";
4
- import { resolveSessionLogPath } from "../config/index.js";
5
- import { ClaudeCodeSessionParser } from "./parsers/claude-code.parser.js";
6
- /**
7
- * Generate a deterministic chunk ID from session ID and message indices.
8
- */
9
- function chunkId(sessionId, startIdx, endIdx) {
10
- return createHash("sha256")
11
- .update(`${sessionId}:${startIdx}:${endIdx}`)
12
- .digest("hex")
13
- .slice(0, 32);
14
- }
15
- /**
16
- * Group parsed messages into embeddable chunks.
17
- */
18
- export function chunkMessages(messages, maxChunkMessages, overlap) {
19
- if (messages.length === 0)
20
- return [];
21
- const chunks = [];
22
- let startIdx = 0;
23
- while (startIdx < messages.length) {
24
- const endIdx = Math.min(startIdx + maxChunkMessages, messages.length);
25
- const chunkMsgs = messages.slice(startIdx, endIdx);
26
- const firstRole = chunkMsgs[0].role;
27
- const role = chunkMsgs.every((m) => m.role === firstRole)
28
- ? firstRole
29
- : "mixed";
30
- const content = chunkMsgs
31
- .map((m) => `[${m.role} @ ${m.timestamp.toISOString()}]: ${m.content}`)
32
- .join("\n\n");
33
- const firstMsg = chunkMsgs[0];
34
- const lastMsg = chunkMsgs[chunkMsgs.length - 1];
35
- chunks.push({
36
- id: chunkId(firstMsg.sessionId, firstMsg.messageIndex, lastMsg.messageIndex),
37
- content,
38
- sessionId: firstMsg.sessionId,
39
- timestamp: firstMsg.timestamp,
40
- endTimestamp: lastMsg.timestamp,
41
- role,
42
- messageIndexStart: firstMsg.messageIndex,
43
- messageIndexEnd: lastMsg.messageIndex,
44
- project: firstMsg.project,
45
- metadata: {
46
- session_id: firstMsg.sessionId,
47
- timestamp: firstMsg.timestamp.toISOString(),
48
- role,
49
- message_index_start: firstMsg.messageIndex,
50
- message_index_end: lastMsg.messageIndex,
51
- project: firstMsg.project,
52
- git_branch: firstMsg.gitBranch,
53
- is_subagent: firstMsg.isSubagent,
54
- agent_id: firstMsg.agentId,
55
- },
56
- });
57
- // Advance by (chunkSize - overlap), but always advance at least 1
58
- const advance = Math.max(1, endIdx - startIdx - overlap);
59
- startIdx += advance;
60
- }
61
- return chunks;
62
- }
63
- export class ConversationHistoryService {
64
- repository;
65
- embeddings;
66
- config;
67
- dbPath;
68
- parser;
69
- indexStatePath;
70
- indexStateCache = null;
71
- constructor(repository, embeddings, config, dbPath, parser = new ClaudeCodeSessionParser()) {
72
- this.repository = repository;
73
- this.embeddings = embeddings;
74
- this.config = config;
75
- this.dbPath = dbPath;
76
- this.parser = parser;
77
- this.indexStatePath = join(dirname(dbPath), "conversation_index_state.json");
78
- }
79
- async loadIndexState() {
80
- if (this.indexStateCache)
81
- return this.indexStateCache;
82
- try {
83
- const raw = await readFile(this.indexStatePath, "utf-8");
84
- const entries = JSON.parse(raw);
85
- const map = new Map();
86
- for (const e of entries) {
87
- map.set(e.sessionId, {
88
- sessionId: e.sessionId,
89
- filePath: e.filePath,
90
- project: e.project,
91
- lastModified: e.lastModified,
92
- chunkCount: e.chunkCount,
93
- messageCount: e.messageCount,
94
- indexedAt: new Date(e.indexedAt),
95
- firstMessageAt: new Date(e.firstMessageAt),
96
- lastMessageAt: new Date(e.lastMessageAt),
97
- });
98
- }
99
- this.indexStateCache = map;
100
- return map;
101
- }
102
- catch {
103
- const map = new Map();
104
- this.indexStateCache = map;
105
- return map;
106
- }
107
- }
108
- async saveIndexState(state) {
109
- const entries = [...state.values()].map((s) => ({
110
- sessionId: s.sessionId,
111
- filePath: s.filePath,
112
- project: s.project,
113
- lastModified: s.lastModified,
114
- chunkCount: s.chunkCount,
115
- messageCount: s.messageCount,
116
- indexedAt: s.indexedAt.toISOString(),
117
- firstMessageAt: s.firstMessageAt.toISOString(),
118
- lastMessageAt: s.lastMessageAt.toISOString(),
119
- }));
120
- await mkdir(dirname(this.indexStatePath), { recursive: true });
121
- await writeFile(this.indexStatePath, JSON.stringify(entries, null, 2));
122
- this.indexStateCache = state;
123
- }
124
- async indexConversations(path, since) {
125
- if (!this.config.enabled) {
126
- return {
127
- indexed: 0,
128
- skipped: 0,
129
- errors: ["Conversation history indexing is not enabled"],
130
- };
131
- }
132
- const logPath = path ?? resolveSessionLogPath(this.config);
133
- if (!logPath) {
134
- return {
135
- indexed: 0,
136
- skipped: 0,
137
- errors: ["No session log path configured or detected"],
138
- };
139
- }
140
- const sessionFiles = await this.parser.findSessionFiles(logPath, since, this.config.indexSubagents);
141
- const indexState = await this.loadIndexState();
142
- let indexed = 0;
143
- let skipped = 0;
144
- const errors = [];
145
- for (const file of sessionFiles) {
146
- const existing = indexState.get(file.sessionId);
147
- if (existing && existing.lastModified >= file.lastModified.getTime()) {
148
- skipped++;
149
- continue;
150
- }
151
- try {
152
- await this.indexSession(file, indexState);
153
- indexed++;
154
- }
155
- catch (err) {
156
- errors.push(`${file.sessionId}: ${err instanceof Error ? err.message : String(err)}`);
157
- }
158
- }
159
- await this.saveIndexState(indexState);
160
- return { indexed, skipped, errors };
161
- }
162
- async indexSession(file, indexState) {
163
- const messages = await this.parser.parse(file.filePath, this.config.indexSubagents);
164
- if (messages.length === 0) {
165
- // Still track it so we don't re-attempt
166
- indexState.set(file.sessionId, {
167
- sessionId: file.sessionId,
168
- filePath: file.filePath,
169
- project: file.project,
170
- lastModified: file.lastModified.getTime(),
171
- chunkCount: 0,
172
- messageCount: 0,
173
- indexedAt: new Date(),
174
- firstMessageAt: file.lastModified,
175
- lastMessageAt: file.lastModified,
176
- });
177
- return;
178
- }
179
- const chunks = chunkMessages(messages, this.config.maxChunkMessages, this.config.chunkOverlap);
180
- // Delete existing chunks for re-indexing
181
- await this.repository.deleteBySessionId(file.sessionId);
182
- // Embed all chunks
183
- const embeddings = await this.embeddings.embedBatch(chunks.map((c) => c.content));
184
- // Insert all chunks
185
- const rows = chunks.map((chunk, i) => ({
186
- id: chunk.id,
187
- vector: embeddings[i],
188
- content: chunk.content,
189
- metadata: JSON.stringify(chunk.metadata),
190
- created_at: chunk.timestamp.getTime(),
191
- session_id: chunk.sessionId,
192
- role: chunk.role,
193
- message_index_start: chunk.messageIndexStart,
194
- message_index_end: chunk.messageIndexEnd,
195
- project: chunk.project,
196
- }));
197
- await this.repository.insertBatch(rows);
198
- // Update index state
199
- indexState.set(file.sessionId, {
200
- sessionId: file.sessionId,
201
- filePath: file.filePath,
202
- project: file.project,
203
- lastModified: file.lastModified.getTime(),
204
- chunkCount: chunks.length,
205
- messageCount: messages.length,
206
- indexedAt: new Date(),
207
- firstMessageAt: messages[0].timestamp,
208
- lastMessageAt: messages[messages.length - 1].timestamp,
209
- });
210
- }
211
- async reindexSession(sessionId) {
212
- if (!this.config.enabled) {
213
- return {
214
- success: false,
215
- chunkCount: 0,
216
- error: "Conversation history indexing is not enabled",
217
- };
218
- }
219
- const indexState = await this.loadIndexState();
220
- const existing = indexState.get(sessionId);
221
- if (!existing) {
222
- return {
223
- success: false,
224
- chunkCount: 0,
225
- error: "Session not found in index state",
226
- };
227
- }
228
- // Construct session info for re-indexing
229
- const file = {
230
- filePath: existing.filePath,
231
- sessionId,
232
- project: existing.project,
233
- lastModified: new Date(),
234
- };
235
- await this.indexSession(file, indexState);
236
- await this.saveIndexState(indexState);
237
- const updated = indexState.get(sessionId);
238
- return { success: true, chunkCount: updated.chunkCount };
239
- }
240
- async listIndexedSessions(limit = 20, offset = 0) {
241
- const indexState = await this.loadIndexState();
242
- const sessions = [...indexState.values()].sort((a, b) => b.indexedAt.getTime() - a.indexedAt.getTime());
243
- return {
244
- sessions: sessions.slice(offset, offset + limit),
245
- total: sessions.length,
246
- };
247
- }
248
- async searchHistory(query, embedding, limit, filters) {
249
- return this.repository.findHybrid(embedding, query, limit, filters);
250
- }
251
- }
252
- //# sourceMappingURL=conversation.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation.service.js","sourceRoot":"","sources":["../../../src/services/conversation.service.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export declare class EmbeddingsService {
2
- private modelName;
3
- private extractor;
4
- private initPromise;
5
- private _dimension;
6
- constructor(modelName: string, dimension: number);
7
- get dimension(): number;
8
- private getExtractor;
9
- embed(text: string): Promise<number[]>;
10
- embedBatch(texts: string[]): Promise<number[][]>;
11
- }
12
- //# sourceMappingURL=embeddings.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embeddings.service.d.ts","sourceRoot":"","sources":["../../../src/services/embeddings.service.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,WAAW,CAAmD;IACtE,OAAO,CAAC,UAAU,CAAS;gBAEf,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKhD,IAAI,SAAS,IAAI,MAAM,CAEtB;YAEa,YAAY;IAiBpB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAOvD"}
@@ -1,37 +0,0 @@
1
- import { pipeline } from "@huggingface/transformers";
2
- export class EmbeddingsService {
3
- modelName;
4
- extractor = null;
5
- initPromise = null;
6
- _dimension;
7
- constructor(modelName, dimension) {
8
- this.modelName = modelName;
9
- this._dimension = dimension;
10
- }
11
- get dimension() {
12
- return this._dimension;
13
- }
14
- async getExtractor() {
15
- if (this.extractor) {
16
- return this.extractor;
17
- }
18
- if (!this.initPromise) {
19
- this.initPromise = pipeline("feature-extraction", this.modelName, { dtype: "fp32" });
20
- }
21
- this.extractor = await this.initPromise;
22
- return this.extractor;
23
- }
24
- async embed(text) {
25
- const extractor = await this.getExtractor();
26
- const output = await extractor(text, { pooling: "mean", normalize: true });
27
- return Array.from(output.data);
28
- }
29
- async embedBatch(texts) {
30
- const results = [];
31
- for (const text of texts) {
32
- results.push(await this.embed(text));
33
- }
34
- return results;
35
- }
36
- }
37
- //# sourceMappingURL=embeddings.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embeddings.service.js","sourceRoot":"","sources":["../../../src/services/embeddings.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkC,MAAM,2BAA2B,CAAC;AAErF,MAAM,OAAO,iBAAiB;IACpB,SAAS,CAAS;IAClB,SAAS,GAAqC,IAAI,CAAC;IACnD,WAAW,GAA8C,IAAI,CAAC;IAC9D,UAAU,CAAS;IAE3B,YAAY,SAAiB,EAAE,SAAiB;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,QAAQ,CACzB,oBAAoB,EACpB,IAAI,CAAC,SAAS,EACd,EAAE,KAAK,EAAE,MAAM,EAAS,CACa,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,40 +0,0 @@
1
- import type { Memory, SearchIntent } from "../types/memory.js";
2
- import type { SearchResult, SearchOptions } from "../types/conversation.js";
3
- import type { MemoryRepository } from "../db/memory.repository.js";
4
- import type { EmbeddingsService } from "./embeddings.service.js";
5
- import type { ConversationHistoryService } from "./conversation.service.js";
6
- export declare class MemoryService {
7
- private repository;
8
- private embeddings;
9
- private conversationService;
10
- constructor(repository: MemoryRepository, embeddings: EmbeddingsService);
11
- setConversationService(service: ConversationHistoryService): void;
12
- getConversationService(): ConversationHistoryService | null;
13
- store(content: string, metadata?: Record<string, unknown>, embeddingText?: string): Promise<Memory>;
14
- get(id: string): Promise<Memory | null>;
15
- getMultiple(ids: string[]): Promise<Memory[]>;
16
- delete(id: string): Promise<boolean>;
17
- update(id: string, updates: {
18
- content?: string;
19
- embeddingText?: string;
20
- metadata?: Record<string, unknown>;
21
- }): Promise<Memory | null>;
22
- vote(id: string, value: number): Promise<Memory | null>;
23
- private computeMemoryScore;
24
- search(query: string, intent: SearchIntent, limit?: number, includeDeleted?: boolean, options?: SearchOptions): Promise<SearchResult[]>;
25
- trackAccess(ids: string[]): Promise<void>;
26
- private static readonly UUID_ZERO;
27
- setWaypoint(args: {
28
- project: string;
29
- branch?: string;
30
- summary: string;
31
- completed?: string[];
32
- in_progress_blocked?: string[];
33
- key_decisions?: string[];
34
- next_steps?: string[];
35
- memory_ids?: string[];
36
- metadata?: Record<string, unknown>;
37
- }): Promise<Memory>;
38
- getLatestWaypoint(): Promise<Memory | null>;
39
- }
40
- //# sourceMappingURL=memory.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.service.d.ts","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAEzF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAY5E,qBAAa,aAAa;IAItB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,mBAAmB,CAA2C;gBAG5D,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,iBAAiB;IAGvC,sBAAsB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAIjE,sBAAsB,IAAI,0BAA0B,GAAG,IAAI;IAIrD,KAAK,CACT,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACtC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC;IAuBZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBvC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkB7C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpC,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GACA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4BnB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmB7D,OAAO,CAAC,kBAAkB;IAuBpB,MAAM,CACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAW,EAClB,cAAc,GAAE,OAAe,EAC/B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC;IA4EpB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CACQ;IAEnC,WAAW,CAAC,IAAI,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgEb,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGlD"}
@@ -1,258 +0,0 @@
1
- import { randomUUID } from "crypto";
2
- import { isDeleted } from "../types/memory.js";
3
- const INTENT_PROFILES = {
4
- continuity: { weights: { relevance: 0.3, recency: 0.5, utility: 0.2 }, jitter: 0.02 },
5
- fact_check: { weights: { relevance: 0.6, recency: 0.1, utility: 0.3 }, jitter: 0.02 },
6
- frequent: { weights: { relevance: 0.2, recency: 0.2, utility: 0.6 }, jitter: 0.02 },
7
- associative: { weights: { relevance: 0.7, recency: 0.1, utility: 0.2 }, jitter: 0.05 },
8
- explore: { weights: { relevance: 0.4, recency: 0.3, utility: 0.3 }, jitter: 0.15 },
9
- };
10
- const sigmoid = (x) => 1 / (1 + Math.exp(-x));
11
- export class MemoryService {
12
- repository;
13
- embeddings;
14
- conversationService = null;
15
- constructor(repository, embeddings) {
16
- this.repository = repository;
17
- this.embeddings = embeddings;
18
- }
19
- setConversationService(service) {
20
- this.conversationService = service;
21
- }
22
- getConversationService() {
23
- return this.conversationService;
24
- }
25
- async store(content, metadata = {}, embeddingText) {
26
- const id = randomUUID();
27
- const now = new Date();
28
- const textToEmbed = embeddingText ?? content;
29
- const embedding = await this.embeddings.embed(textToEmbed);
30
- const memory = {
31
- id,
32
- content,
33
- embedding,
34
- metadata,
35
- createdAt: now,
36
- updatedAt: now,
37
- supersededBy: null,
38
- usefulness: 0,
39
- accessCount: 0,
40
- lastAccessed: now, // Initialize to createdAt for fair discovery
41
- };
42
- await this.repository.insert(memory);
43
- return memory;
44
- }
45
- async get(id) {
46
- const memory = await this.repository.findById(id);
47
- if (!memory) {
48
- return null;
49
- }
50
- // Track access on explicit get
51
- const updatedMemory = {
52
- ...memory,
53
- accessCount: memory.accessCount + 1,
54
- lastAccessed: new Date(),
55
- };
56
- await this.repository.upsert(updatedMemory);
57
- return updatedMemory;
58
- }
59
- async getMultiple(ids) {
60
- if (ids.length === 0)
61
- return [];
62
- const memories = await this.repository.findByIds(ids);
63
- // Track access in bulk
64
- const now = new Date();
65
- const live = memories.filter((m) => !isDeleted(m));
66
- await Promise.all(live.map((m) => this.repository.upsert({
67
- ...m,
68
- accessCount: m.accessCount + 1,
69
- lastAccessed: now,
70
- })));
71
- return live;
72
- }
73
- async delete(id) {
74
- return await this.repository.markDeleted(id);
75
- }
76
- async update(id, updates) {
77
- const existing = await this.repository.findById(id);
78
- if (!existing) {
79
- return null;
80
- }
81
- const newContent = updates.content ?? existing.content;
82
- const newMetadata = updates.metadata ?? existing.metadata;
83
- // Regenerate embedding if content or embeddingText changed
84
- let newEmbedding = existing.embedding;
85
- if (updates.content !== undefined || updates.embeddingText !== undefined) {
86
- const textToEmbed = updates.embeddingText ?? newContent;
87
- newEmbedding = await this.embeddings.embed(textToEmbed);
88
- }
89
- const updatedMemory = {
90
- ...existing,
91
- content: newContent,
92
- embedding: newEmbedding,
93
- metadata: newMetadata,
94
- updatedAt: new Date(),
95
- };
96
- await this.repository.upsert(updatedMemory);
97
- return updatedMemory;
98
- }
99
- async vote(id, value) {
100
- const existing = await this.repository.findById(id);
101
- if (!existing) {
102
- return null;
103
- }
104
- // Vote also tracks access (explicit utilization signal)
105
- const updatedMemory = {
106
- ...existing,
107
- usefulness: existing.usefulness + value,
108
- accessCount: existing.accessCount + 1,
109
- lastAccessed: new Date(),
110
- updatedAt: new Date(),
111
- };
112
- await this.repository.upsert(updatedMemory);
113
- return updatedMemory;
114
- }
115
- computeMemoryScore(candidate, profile, now) {
116
- const relevance = candidate.rrfScore;
117
- const lastAccessed = candidate.lastAccessed ?? candidate.createdAt;
118
- const hoursSinceAccess = Math.max(0, (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60));
119
- const recency = Math.pow(0.995, hoursSinceAccess);
120
- const utility = sigmoid((candidate.usefulness + Math.log(candidate.accessCount + 1)) / 5);
121
- const { weights, jitter } = profile;
122
- const score = weights.relevance * relevance +
123
- weights.recency * recency +
124
- weights.utility * utility;
125
- return score * (1 + (Math.random() * 2 - 1) * jitter);
126
- }
127
- async search(query, intent, limit = 10, includeDeleted = false, options) {
128
- const queryEmbedding = await this.embeddings.embed(query);
129
- const profile = INTENT_PROFILES[intent];
130
- const now = new Date();
131
- const hasConversationService = this.conversationService !== null;
132
- const historyOnly = (options?.historyOnly ?? false) && hasConversationService;
133
- const includeHistory = (options?.includeHistory ?? true) && hasConversationService;
134
- const historyWeight = options?.historyWeight ??
135
- this.conversationService?.config.historyWeight ??
136
- 0.75;
137
- // Run memory + history queries in parallel
138
- const memoryPromise = !historyOnly
139
- ? this.repository
140
- .findHybrid(queryEmbedding, query, limit * 5)
141
- .then((candidates) => candidates
142
- .filter((m) => includeDeleted || !isDeleted(m))
143
- .map((candidate) => ({
144
- id: candidate.id,
145
- content: candidate.content,
146
- metadata: candidate.metadata,
147
- createdAt: candidate.createdAt,
148
- updatedAt: candidate.updatedAt,
149
- source: "memory",
150
- score: this.computeMemoryScore(candidate, profile, now),
151
- supersededBy: candidate.supersededBy,
152
- usefulness: candidate.usefulness,
153
- accessCount: candidate.accessCount,
154
- lastAccessed: candidate.lastAccessed,
155
- })))
156
- : Promise.resolve([]);
157
- const historyPromise = includeHistory || historyOnly
158
- ? this.conversationService
159
- .searchHistory(query, queryEmbedding, historyOnly ? limit * 5 : limit * 3, options?.historyFilters)
160
- .then((historyRows) => historyRows.map((row) => ({
161
- id: row.id,
162
- content: row.content,
163
- metadata: row.metadata,
164
- createdAt: row.createdAt,
165
- updatedAt: row.createdAt,
166
- source: "conversation_history",
167
- score: row.rrfScore * historyWeight,
168
- sessionId: row.metadata?.session_id ?? "",
169
- role: row.metadata?.role ?? "unknown",
170
- messageIndexStart: row.metadata?.message_index_start ?? 0,
171
- messageIndexEnd: row.metadata?.message_index_end ?? 0,
172
- })))
173
- : Promise.resolve([]);
174
- const [memoryResults, historyResults] = await Promise.all([
175
- memoryPromise,
176
- historyPromise,
177
- ]);
178
- // Merge and sort by score descending
179
- const merged = [...memoryResults, ...historyResults];
180
- merged.sort((a, b) => b.score - a.score);
181
- return merged.slice(0, limit);
182
- }
183
- async trackAccess(ids) {
184
- if (ids.length === 0)
185
- return;
186
- const memories = await this.repository.findByIds(ids);
187
- const now = new Date();
188
- await Promise.all(memories
189
- .filter((m) => !isDeleted(m))
190
- .map((m) => this.repository.upsert({
191
- ...m,
192
- accessCount: m.accessCount + 1,
193
- lastAccessed: now,
194
- })));
195
- }
196
- static UUID_ZERO = "00000000-0000-0000-0000-000000000000";
197
- async setWaypoint(args) {
198
- // Track access for utilized memories
199
- if (args.memory_ids && args.memory_ids.length > 0) {
200
- await this.trackAccess(args.memory_ids);
201
- }
202
- const now = new Date();
203
- const date = now.toISOString().slice(0, 10);
204
- const time = now.toISOString().slice(11, 16);
205
- const list = (items) => {
206
- if (!items || items.length === 0) {
207
- return "- (none)";
208
- }
209
- return items.map((i) => `- ${i}`).join("\n");
210
- };
211
- const content = `# Waypoint - ${args.project}
212
- **Date:** ${date} ${time} | **Branch:** ${args.branch ?? "unknown"}
213
-
214
- ## Summary
215
- ${args.summary}
216
-
217
- ## Completed
218
- ${list(args.completed)}
219
-
220
- ## In Progress / Blocked
221
- ${list(args.in_progress_blocked)}
222
-
223
- ## Key Decisions
224
- ${list(args.key_decisions)}
225
-
226
- ## Next Steps
227
- ${list(args.next_steps)}
228
-
229
- ## Memory IDs
230
- ${list(args.memory_ids)}`;
231
- const metadata = {
232
- ...(args.metadata ?? {}),
233
- type: "waypoint",
234
- project: args.project,
235
- date,
236
- branch: args.branch ?? "unknown",
237
- memory_ids: args.memory_ids ?? [],
238
- };
239
- const memory = {
240
- id: MemoryService.UUID_ZERO,
241
- content,
242
- embedding: new Array(this.embeddings.dimension).fill(0),
243
- metadata,
244
- createdAt: now,
245
- updatedAt: now,
246
- supersededBy: null,
247
- usefulness: 0,
248
- accessCount: 0,
249
- lastAccessed: now, // Initialize to now for consistency
250
- };
251
- await this.repository.upsert(memory);
252
- return memory;
253
- }
254
- async getLatestWaypoint() {
255
- return await this.get(MemoryService.UUID_ZERO);
256
- }
257
- }
258
- //# sourceMappingURL=memory.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { ParsedMessage, SessionFileInfo } from "../../types/conversation.js";
2
- import type { SessionLogParser } from "./types.js";
3
- export declare class ClaudeCodeSessionParser implements SessionLogParser {
4
- parse(filePath: string, indexSubagents?: boolean): Promise<ParsedMessage[]>;
5
- findSessionFiles(dirPath: string, since?: Date, indexSubagents?: boolean): Promise<SessionFileInfo[]>;
6
- private findSubagentFiles;
7
- }
8
- //# sourceMappingURL=claude-code.parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code.parser.d.ts","sourceRoot":"","sources":["../../../../src/services/parsers/claude-code.parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA6BnD,qBAAa,uBAAwB,YAAW,gBAAgB;IACxD,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC;IAoGrB,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,IAAI,EACZ,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,eAAe,EAAE,CAAC;YA6Df,iBAAiB;CAwChC"}