@aeriondyseti/vector-memory-mcp 1.1.0-dev.2 → 1.1.0-dev.5

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 (96) hide show
  1. package/README.md +24 -11
  2. package/dist/package.json +1 -2
  3. package/dist/src/config/index.d.ts +17 -10
  4. package/dist/src/config/index.d.ts.map +1 -1
  5. package/dist/src/config/index.js +25 -11
  6. package/dist/src/config/index.js.map +1 -1
  7. package/dist/src/db/conversation.repository.d.ts +26 -0
  8. package/dist/src/db/conversation.repository.d.ts.map +1 -0
  9. package/dist/src/db/conversation.repository.js +72 -0
  10. package/dist/src/db/conversation.repository.js.map +1 -0
  11. package/dist/src/db/conversation.schema.d.ts +4 -0
  12. package/dist/src/db/conversation.schema.d.ts.map +1 -0
  13. package/dist/src/db/conversation.schema.js +15 -0
  14. package/dist/src/db/conversation.schema.js.map +1 -0
  15. package/dist/src/db/lancedb-utils.d.ts +13 -3
  16. package/dist/src/db/lancedb-utils.d.ts.map +1 -1
  17. package/dist/src/db/lancedb-utils.js +36 -7
  18. package/dist/src/db/lancedb-utils.js.map +1 -1
  19. package/dist/src/db/memory.repository.d.ts +1 -0
  20. package/dist/src/db/memory.repository.d.ts.map +1 -1
  21. package/dist/src/db/memory.repository.js +18 -7
  22. package/dist/src/db/memory.repository.js.map +1 -1
  23. package/dist/src/http/server.d.ts.map +1 -1
  24. package/dist/src/http/server.js +38 -24
  25. package/dist/src/http/server.js.map +1 -1
  26. package/dist/src/index.js +7 -6
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/mcp/handlers.d.ts +3 -3
  29. package/dist/src/mcp/handlers.d.ts.map +1 -1
  30. package/dist/src/mcp/handlers.js +128 -145
  31. package/dist/src/mcp/handlers.js.map +1 -1
  32. package/dist/src/mcp/tools.d.ts +2 -2
  33. package/dist/src/mcp/tools.d.ts.map +1 -1
  34. package/dist/src/mcp/tools.js +53 -24
  35. package/dist/src/mcp/tools.js.map +1 -1
  36. package/dist/src/services/conversation.service.d.ts +38 -0
  37. package/dist/src/services/conversation.service.d.ts.map +1 -0
  38. package/dist/src/services/conversation.service.js +252 -0
  39. package/dist/src/services/conversation.service.js.map +1 -0
  40. package/dist/src/services/memory.service.d.ts +10 -27
  41. package/dist/src/services/memory.service.d.ts.map +1 -1
  42. package/dist/src/services/memory.service.js +94 -94
  43. package/dist/src/services/memory.service.js.map +1 -1
  44. package/dist/src/services/parsers/claude-code.parser.d.ts +8 -0
  45. package/dist/src/services/parsers/claude-code.parser.d.ts.map +1 -0
  46. package/dist/src/services/parsers/claude-code.parser.js +191 -0
  47. package/dist/src/services/parsers/claude-code.parser.js.map +1 -0
  48. package/dist/src/services/parsers/types.d.ts +9 -0
  49. package/dist/src/services/parsers/types.d.ts.map +1 -0
  50. package/dist/src/services/parsers/types.js +2 -0
  51. package/dist/src/services/parsers/types.js.map +1 -0
  52. package/dist/src/types/conversation.d.ts +99 -0
  53. package/dist/src/types/conversation.d.ts.map +1 -0
  54. package/dist/src/types/conversation.js +2 -0
  55. package/dist/src/types/conversation.js.map +1 -0
  56. package/package.json +1 -2
  57. package/src/config/index.ts +39 -21
  58. package/src/db/conversation.repository.ts +120 -0
  59. package/src/db/conversation.schema.ts +33 -0
  60. package/src/db/lancedb-utils.ts +35 -7
  61. package/src/db/memory.repository.ts +18 -7
  62. package/src/http/server.ts +43 -25
  63. package/src/index.ts +10 -11
  64. package/src/mcp/handlers.ts +144 -151
  65. package/src/mcp/tools.ts +54 -25
  66. package/src/services/conversation.service.ts +354 -0
  67. package/src/services/memory.service.ts +136 -119
  68. package/src/services/parsers/claude-code.parser.ts +242 -0
  69. package/src/services/parsers/types.ts +14 -0
  70. package/src/types/conversation.ts +108 -0
  71. package/dist/src/db/conversation-history.repository.d.ts +0 -24
  72. package/dist/src/db/conversation-history.repository.d.ts.map +0 -1
  73. package/dist/src/db/conversation-history.repository.js +0 -184
  74. package/dist/src/db/conversation-history.repository.js.map +0 -1
  75. package/dist/src/db/conversation-history.schema.d.ts +0 -10
  76. package/dist/src/db/conversation-history.schema.d.ts.map +0 -1
  77. package/dist/src/db/conversation-history.schema.js +0 -31
  78. package/dist/src/db/conversation-history.schema.js.map +0 -1
  79. package/dist/src/services/conversation-history.service.d.ts +0 -64
  80. package/dist/src/services/conversation-history.service.d.ts.map +0 -1
  81. package/dist/src/services/conversation-history.service.js +0 -244
  82. package/dist/src/services/conversation-history.service.js.map +0 -1
  83. package/dist/src/services/session-parser.d.ts +0 -59
  84. package/dist/src/services/session-parser.d.ts.map +0 -1
  85. package/dist/src/services/session-parser.js +0 -147
  86. package/dist/src/services/session-parser.js.map +0 -1
  87. package/dist/src/types/conversation-history.d.ts +0 -74
  88. package/dist/src/types/conversation-history.d.ts.map +0 -1
  89. package/dist/src/types/conversation-history.js +0 -2
  90. package/dist/src/types/conversation-history.js.map +0 -1
  91. package/hooks/session-start.ts +0 -100
  92. package/src/db/conversation-history.repository.ts +0 -255
  93. package/src/db/conversation-history.schema.ts +0 -40
  94. package/src/services/conversation-history.service.ts +0 -320
  95. package/src/services/session-parser.ts +0 -232
  96. package/src/types/conversation-history.ts +0 -82
@@ -11,26 +11,16 @@ const sigmoid = (x) => 1 / (1 + Math.exp(-x));
11
11
  export class MemoryService {
12
12
  repository;
13
13
  embeddings;
14
- historyService = null;
15
- historyWeight = 0.5;
14
+ conversationService = null;
16
15
  constructor(repository, embeddings) {
17
16
  this.repository = repository;
18
17
  this.embeddings = embeddings;
19
18
  }
20
- /**
21
- * Optionally wire conversation history for unified search.
22
- * Called from index.ts when conversationHistory.enabled is true.
23
- */
24
- setConversationHistory(service, weight) {
25
- this.historyService = service;
26
- this.historyWeight = weight;
19
+ setConversationService(service) {
20
+ this.conversationService = service;
27
21
  }
28
- /**
29
- * Access the conversation history service (if wired).
30
- * Used by MCP handlers for index/list/reindex tools.
31
- */
32
- getConversationHistory() {
33
- return this.historyService;
22
+ getConversationService() {
23
+ return this.conversationService;
34
24
  }
35
25
  async store(content, metadata = {}, embeddingText) {
36
26
  const id = randomUUID();
@@ -66,6 +56,20 @@ export class MemoryService {
66
56
  await this.repository.upsert(updatedMemory);
67
57
  return updatedMemory;
68
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
+ }
69
73
  async delete(id) {
70
74
  return await this.repository.markDeleted(id);
71
75
  }
@@ -108,93 +112,89 @@ export class MemoryService {
108
112
  await this.repository.upsert(updatedMemory);
109
113
  return updatedMemory;
110
114
  }
111
- async search(query, intent, limit = 10, includeDeleted = false) {
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) {
112
128
  const queryEmbedding = await this.embeddings.embed(query);
113
- const fetchLimit = limit * 5; // Fetch more for re-ranking
114
- const candidates = await this.repository.findHybrid(queryEmbedding, query, fetchLimit);
115
129
  const profile = INTENT_PROFILES[intent];
116
130
  const now = new Date();
117
- const scored = candidates
118
- .filter((m) => includeDeleted || !isDeleted(m))
119
- .map((candidate) => {
120
- // Relevance: RRF score (already normalized ~0-1)
121
- const relevance = candidate.rrfScore;
122
- // Recency: exponential decay
123
- const lastAccessed = candidate.lastAccessed ?? candidate.createdAt;
124
- const hoursSinceAccess = Math.max(0, (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60));
125
- const recency = Math.pow(0.995, hoursSinceAccess);
126
- // Utility: sigmoid of usefulness + log(accessCount)
127
- const utility = sigmoid((candidate.usefulness + Math.log(candidate.accessCount + 1)) / 5);
128
- // Weighted score
129
- const { weights, jitter } = profile;
130
- const score = weights.relevance * relevance +
131
- weights.recency * recency +
132
- weights.utility * utility;
133
- // Apply jitter
134
- const finalScore = score * (1 + (Math.random() * 2 - 1) * jitter);
135
- return { memory: candidate, finalScore };
136
- });
137
- // Sort by final score descending
138
- scored.sort((a, b) => b.finalScore - a.finalScore);
139
- // Return top N (read-only - no access tracking)
140
- return scored.slice(0, limit).map((s) => s.memory);
141
- }
142
- /**
143
- * Search across both memories and conversation history (if enabled).
144
- * Returns a merged, score-normalized list sorted by relevance.
145
- *
146
- * If no history service is configured, falls back to memory-only search
147
- * wrapped as MemorySearchResult[].
148
- */
149
- async searchUnified(query, intent, limit = 10, includeDeleted = false) {
150
- if (!this.historyService) {
151
- const memories = await this.search(query, intent, limit, includeDeleted);
152
- return this.toMemoryResults(memories, limit);
153
- }
154
- // Run both searches in parallel
155
- const [memories, historyResults] = await Promise.all([
156
- this.search(query, intent, limit, includeDeleted),
157
- this.historyService.search(query, limit),
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,
158
177
  ]);
159
- const memoryResults = this.toMemoryResults(memories, limit);
160
- // Apply history weight to RRF scores
161
- const weightedHistory = historyResults.map((h) => ({
162
- ...h,
163
- score: h.score * this.historyWeight,
164
- }));
165
- // Merge, sort by score descending, take top N
166
- const merged = [...memoryResults, ...weightedHistory];
178
+ // Merge and sort by score descending
179
+ const merged = [...memoryResults, ...historyResults];
167
180
  merged.sort((a, b) => b.score - a.score);
168
181
  return merged.slice(0, limit);
169
182
  }
170
- /** Convert pre-sorted Memory[] to MemorySearchResult[] with positional scores. */
171
- toMemoryResults(memories, limit) {
172
- return memories.map((m, rank) => ({
173
- source: "memory",
174
- id: m.id,
175
- content: m.content,
176
- metadata: m.metadata,
177
- score: (limit - rank) / limit,
178
- createdAt: m.createdAt,
179
- updatedAt: m.updatedAt,
180
- supersededBy: m.supersededBy,
181
- }));
182
- }
183
183
  async trackAccess(ids) {
184
+ if (ids.length === 0)
185
+ return;
186
+ const memories = await this.repository.findByIds(ids);
184
187
  const now = new Date();
185
- for (const id of ids) {
186
- const memory = await this.repository.findById(id);
187
- if (memory && !isDeleted(memory)) {
188
- await this.repository.upsert({
189
- ...memory,
190
- accessCount: memory.accessCount + 1,
191
- lastAccessed: now,
192
- });
193
- }
194
- }
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
195
  }
196
196
  static UUID_ZERO = "00000000-0000-0000-0000-000000000000";
197
- async storeCheckpoint(args) {
197
+ async setWaypoint(args) {
198
198
  // Track access for utilized memories
199
199
  if (args.memory_ids && args.memory_ids.length > 0) {
200
200
  await this.trackAccess(args.memory_ids);
@@ -208,7 +208,7 @@ export class MemoryService {
208
208
  }
209
209
  return items.map((i) => `- ${i}`).join("\n");
210
210
  };
211
- const content = `# Checkpoint - ${args.project}
211
+ const content = `# Waypoint - ${args.project}
212
212
  **Date:** ${date} ${time} | **Branch:** ${args.branch ?? "unknown"}
213
213
 
214
214
  ## Summary
@@ -230,7 +230,7 @@ ${list(args.next_steps)}
230
230
  ${list(args.memory_ids)}`;
231
231
  const metadata = {
232
232
  ...(args.metadata ?? {}),
233
- type: "checkpoint",
233
+ type: "waypoint",
234
234
  project: args.project,
235
235
  date,
236
236
  branch: args.branch ?? "unknown",
@@ -251,7 +251,7 @@ ${list(args.memory_ids)}`;
251
251
  await this.repository.upsert(memory);
252
252
  return memory;
253
253
  }
254
- async getLatestCheckpoint() {
254
+ async getLatestWaypoint() {
255
255
  return await this.get(MemoryService.UUID_ZERO);
256
256
  }
257
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,191 @@
1
+ import { readFile, readdir, stat } from "fs/promises";
2
+ import { basename, dirname, join } from "path";
3
+ // UUID pattern for session IDs
4
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
5
+ /** Extract text content from an assistant message's content array */
6
+ function extractAssistantText(content) {
7
+ return content
8
+ .filter((block) => block.type === "text" && block.text)
9
+ .map((block) => block.text)
10
+ .join("\n");
11
+ }
12
+ /**
13
+ * Extract project name from path-encoded directory name.
14
+ * Claude Code encodes paths by replacing `/` with `-`, e.g. `/home/user/project` → `-home-user-project`.
15
+ * This is a lossy encoding: directory names containing literal dashes (e.g. `my-project`)
16
+ * cannot be distinguished from path separators, so `my-project` decodes as `my/project`.
17
+ * This is a known limitation of Claude Code's encoding scheme.
18
+ */
19
+ function extractProjectFromDir(dirName) {
20
+ return dirName.startsWith("-")
21
+ ? dirName.slice(1).replace(/-/g, "/")
22
+ : dirName;
23
+ }
24
+ export class ClaudeCodeSessionParser {
25
+ async parse(filePath, indexSubagents = false) {
26
+ const fileContent = await readFile(filePath, "utf-8");
27
+ const lines = fileContent.split("\n").filter((line) => line.trim());
28
+ const messages = [];
29
+ let messageIndex = 0;
30
+ // Derive session ID and project from file path
31
+ const fileName = basename(filePath, ".jsonl");
32
+ const parentDir = basename(dirname(filePath));
33
+ // Check if this is inside a subagents directory
34
+ const isSubagentFile = filePath.includes("/subagents/");
35
+ // For subagent files, project dir is 3 levels up: <project>/<session>/subagents/<file>
36
+ // For main files, project dir is direct parent
37
+ const projectDir = isSubagentFile
38
+ ? basename(dirname(dirname(dirname(filePath))))
39
+ : parentDir;
40
+ const project = extractProjectFromDir(projectDir);
41
+ for (const line of lines) {
42
+ let entry;
43
+ try {
44
+ entry = JSON.parse(line);
45
+ }
46
+ catch {
47
+ // Skip malformed lines
48
+ continue;
49
+ }
50
+ const type = entry.type;
51
+ // Skip non-message entries
52
+ if (type === "progress" || type === "file-history-snapshot") {
53
+ continue;
54
+ }
55
+ // Skip subagent messages unless configured to include them
56
+ if (!indexSubagents && (entry.isSidechain === true || isSubagentFile)) {
57
+ continue;
58
+ }
59
+ if (type !== "user" && type !== "assistant") {
60
+ continue;
61
+ }
62
+ const message = entry.message;
63
+ if (!message)
64
+ continue;
65
+ const role = message.role;
66
+ if (role !== "user" && role !== "assistant")
67
+ continue;
68
+ let content = null;
69
+ if (role === "user") {
70
+ const msgContent = message.content;
71
+ if (typeof msgContent === "string") {
72
+ content = msgContent;
73
+ }
74
+ else if (Array.isArray(msgContent)) {
75
+ // Array content in user messages = tool_result entries, skip
76
+ continue;
77
+ }
78
+ }
79
+ else if (role === "assistant") {
80
+ const msgContent = message.content;
81
+ if (Array.isArray(msgContent)) {
82
+ content = extractAssistantText(msgContent);
83
+ }
84
+ }
85
+ // Skip empty content
86
+ if (!content || content.trim().length === 0) {
87
+ continue;
88
+ }
89
+ const sessionId = entry.sessionId ?? fileName;
90
+ messages.push({
91
+ uuid: entry.uuid ?? `${sessionId}-${messageIndex}`,
92
+ role: role,
93
+ content: content.trim(),
94
+ timestamp: entry.timestamp
95
+ ? new Date(entry.timestamp)
96
+ : new Date(),
97
+ messageIndex,
98
+ sessionId,
99
+ project,
100
+ gitBranch: entry.gitBranch,
101
+ isSubagent: entry.isSidechain ?? isSubagentFile,
102
+ agentId: entry.agentId,
103
+ });
104
+ messageIndex++;
105
+ }
106
+ return messages;
107
+ }
108
+ async findSessionFiles(dirPath, since, indexSubagents = false) {
109
+ const files = [];
110
+ let dirents;
111
+ try {
112
+ dirents = await readdir(dirPath, { withFileTypes: true });
113
+ }
114
+ catch {
115
+ return files;
116
+ }
117
+ for (const dirent of dirents) {
118
+ const entryPath = join(dirPath, dirent.name);
119
+ if (dirent.isDirectory()) {
120
+ if (dirent.name === "subagents") {
121
+ if (indexSubagents) {
122
+ const subFiles = await this.findSubagentFiles(entryPath, since, basename(dirname(dirname(entryPath))));
123
+ files.push(...subFiles);
124
+ }
125
+ continue;
126
+ }
127
+ const subFiles = await this.findSessionFiles(entryPath, since, indexSubagents);
128
+ files.push(...subFiles);
129
+ }
130
+ else if (dirent.name.endsWith(".jsonl")) {
131
+ const sessionId = basename(dirent.name, ".jsonl");
132
+ if (!UUID_PATTERN.test(sessionId))
133
+ continue;
134
+ let entryStat;
135
+ try {
136
+ entryStat = await stat(entryPath);
137
+ }
138
+ catch {
139
+ continue;
140
+ }
141
+ const lastModified = entryStat.mtime;
142
+ if (since && lastModified <= since)
143
+ continue;
144
+ const projectDir = basename(dirPath);
145
+ const project = extractProjectFromDir(projectDir);
146
+ files.push({
147
+ filePath: entryPath,
148
+ sessionId,
149
+ project,
150
+ lastModified,
151
+ });
152
+ }
153
+ }
154
+ return files;
155
+ }
156
+ async findSubagentFiles(subagentsDir, since, projectDir) {
157
+ const files = [];
158
+ let entries;
159
+ try {
160
+ entries = await readdir(subagentsDir);
161
+ }
162
+ catch {
163
+ return files;
164
+ }
165
+ for (const entry of entries) {
166
+ if (!entry.endsWith(".jsonl"))
167
+ continue;
168
+ const entryPath = join(subagentsDir, entry);
169
+ let entryStat;
170
+ try {
171
+ entryStat = await stat(entryPath);
172
+ }
173
+ catch {
174
+ continue;
175
+ }
176
+ const lastModified = entryStat.mtime;
177
+ if (since && lastModified <= since)
178
+ continue;
179
+ const sessionId = basename(entry, ".jsonl");
180
+ const project = extractProjectFromDir(projectDir);
181
+ files.push({
182
+ filePath: entryPath,
183
+ sessionId,
184
+ project,
185
+ lastModified,
186
+ });
187
+ }
188
+ return files;
189
+ }
190
+ }
191
+ //# sourceMappingURL=claude-code.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.parser.js","sourceRoot":"","sources":["../../../../src/services/parsers/claude-code.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ParsedMessage, SessionFileInfo } from "../../types/conversation.js";
2
+ /** Interface for parsing session log files into structured messages */
3
+ export interface SessionLogParser {
4
+ /** Parse a session log file into ordered messages */
5
+ parse(filePath: string, indexSubagents?: boolean): Promise<ParsedMessage[]>;
6
+ /** Discover session log files in a directory */
7
+ findSessionFiles(dirPath: string, since?: Date, indexSubagents?: boolean): Promise<SessionFileInfo[]>;
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/parsers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAElF,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE5E,gDAAgD;IAChD,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,IAAI,EACZ,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/parsers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ /** A single parsed message from a session log */
2
+ export interface ParsedMessage {
3
+ uuid: string;
4
+ role: "user" | "assistant";
5
+ content: string;
6
+ timestamp: Date;
7
+ messageIndex: number;
8
+ sessionId: string;
9
+ project: string;
10
+ gitBranch?: string;
11
+ isSubagent: boolean;
12
+ agentId?: string;
13
+ }
14
+ /** Metadata stored per conversation chunk in the database */
15
+ export interface ConversationChunkMetadata {
16
+ session_id: string;
17
+ timestamp: string;
18
+ role: string;
19
+ message_index_start: number;
20
+ message_index_end: number;
21
+ project: string;
22
+ git_branch?: string;
23
+ is_subagent: boolean;
24
+ agent_id?: string;
25
+ }
26
+ /** A chunk of conversation ready for indexing */
27
+ export interface ConversationChunk {
28
+ id: string;
29
+ content: string;
30
+ sessionId: string;
31
+ timestamp: Date;
32
+ endTimestamp: Date;
33
+ role: string;
34
+ messageIndexStart: number;
35
+ messageIndexEnd: number;
36
+ project: string;
37
+ metadata: ConversationChunkMetadata;
38
+ }
39
+ /** Tracking record for an indexed session */
40
+ export interface IndexedSession {
41
+ sessionId: string;
42
+ filePath: string;
43
+ project: string;
44
+ lastModified: number;
45
+ chunkCount: number;
46
+ messageCount: number;
47
+ indexedAt: Date;
48
+ firstMessageAt: Date;
49
+ lastMessageAt: Date;
50
+ }
51
+ /** Raw row from conversation_history table with RRF score */
52
+ export interface ConversationHybridRow {
53
+ id: string;
54
+ content: string;
55
+ metadata: Record<string, unknown>;
56
+ createdAt: Date;
57
+ rrfScore: number;
58
+ }
59
+ /** Unified search result with source provenance */
60
+ export interface SearchResult {
61
+ id: string;
62
+ content: string;
63
+ metadata: Record<string, unknown>;
64
+ createdAt: Date;
65
+ updatedAt: Date;
66
+ source: "memory" | "conversation_history";
67
+ score: number;
68
+ supersededBy?: string | null;
69
+ usefulness?: number;
70
+ accessCount?: number;
71
+ lastAccessed?: Date | null;
72
+ sessionId?: string;
73
+ role?: string;
74
+ messageIndexStart?: number;
75
+ messageIndexEnd?: number;
76
+ }
77
+ /** Session file info returned by the parser's file discovery */
78
+ export interface SessionFileInfo {
79
+ filePath: string;
80
+ sessionId: string;
81
+ project: string;
82
+ lastModified: Date;
83
+ }
84
+ /** Search filter options for conversation history */
85
+ export interface HistoryFilters {
86
+ sessionId?: string;
87
+ role?: string;
88
+ project?: string;
89
+ after?: Date;
90
+ before?: Date;
91
+ }
92
+ /** Options for the integrated search across both sources */
93
+ export interface SearchOptions {
94
+ includeHistory?: boolean;
95
+ historyOnly?: boolean;
96
+ historyWeight?: number;
97
+ historyFilters?: HistoryFilters;
98
+ }
99
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/types/conversation.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;CACrB;AAED,6DAA6D;AAC7D,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,sBAAsB,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IAEd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAE3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC;CACf;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}