@bubstack/moe-memory 0.1.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 (157) hide show
  1. package/.mcp.json +18 -0
  2. package/README.md +47 -0
  3. package/agents/search-conversations.md +171 -0
  4. package/dist/LICENSE +25 -0
  5. package/dist/cli.d.ts +25 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +125 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/codex-hook-trust.d.ts +4 -0
  10. package/dist/codex-hook-trust.d.ts.map +1 -0
  11. package/dist/codex-hook-trust.js +114 -0
  12. package/dist/codex-hook-trust.js.map +1 -0
  13. package/dist/codex-support.d.ts +6 -0
  14. package/dist/codex-support.d.ts.map +1 -0
  15. package/dist/codex-support.js +29 -0
  16. package/dist/codex-support.js.map +1 -0
  17. package/dist/constants.d.ts +14 -0
  18. package/dist/constants.d.ts.map +1 -0
  19. package/dist/constants.js +14 -0
  20. package/dist/constants.js.map +1 -0
  21. package/dist/db.d.ts +103 -0
  22. package/dist/db.d.ts.map +1 -0
  23. package/dist/db.js +430 -0
  24. package/dist/db.js.map +1 -0
  25. package/dist/doctor-cli.d.ts +3 -0
  26. package/dist/doctor-cli.d.ts.map +1 -0
  27. package/dist/doctor-cli.js +43 -0
  28. package/dist/doctor-cli.js.map +1 -0
  29. package/dist/doctor.d.ts +17 -0
  30. package/dist/doctor.d.ts.map +1 -0
  31. package/dist/doctor.js +98 -0
  32. package/dist/doctor.js.map +1 -0
  33. package/dist/embedding-migration.d.ts +73 -0
  34. package/dist/embedding-migration.d.ts.map +1 -0
  35. package/dist/embedding-migration.js +120 -0
  36. package/dist/embedding-migration.js.map +1 -0
  37. package/dist/embeddings.d.ts +78 -0
  38. package/dist/embeddings.d.ts.map +1 -0
  39. package/dist/embeddings.js +180 -0
  40. package/dist/embeddings.js.map +1 -0
  41. package/dist/file-lock.d.ts +39 -0
  42. package/dist/file-lock.d.ts.map +1 -0
  43. package/dist/file-lock.js +91 -0
  44. package/dist/file-lock.js.map +1 -0
  45. package/dist/index-cli.d.ts +10 -0
  46. package/dist/index-cli.d.ts.map +1 -0
  47. package/dist/index-cli.js +195 -0
  48. package/dist/index-cli.js.map +1 -0
  49. package/dist/index.d.ts +12 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +19 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/indexer.d.ts +4 -0
  54. package/dist/indexer.d.ts.map +1 -0
  55. package/dist/indexer.js +318 -0
  56. package/dist/indexer.js.map +1 -0
  57. package/dist/install-check.d.ts +48 -0
  58. package/dist/install-check.d.ts.map +1 -0
  59. package/dist/install-check.js +82 -0
  60. package/dist/install-check.js.map +1 -0
  61. package/dist/journal/index.d.ts +5 -0
  62. package/dist/journal/index.d.ts.map +1 -0
  63. package/dist/journal/index.js +5 -0
  64. package/dist/journal/index.js.map +1 -0
  65. package/dist/journal/legacy-sidecars.d.ts +74 -0
  66. package/dist/journal/legacy-sidecars.d.ts.map +1 -0
  67. package/dist/journal/legacy-sidecars.js +151 -0
  68. package/dist/journal/legacy-sidecars.js.map +1 -0
  69. package/dist/journal/markdown.d.ts +91 -0
  70. package/dist/journal/markdown.d.ts.map +1 -0
  71. package/dist/journal/markdown.js +234 -0
  72. package/dist/journal/markdown.js.map +1 -0
  73. package/dist/journal/search.d.ts +91 -0
  74. package/dist/journal/search.d.ts.map +1 -0
  75. package/dist/journal/search.js +203 -0
  76. package/dist/journal/search.js.map +1 -0
  77. package/dist/journal/store.d.ts +96 -0
  78. package/dist/journal/store.d.ts.map +1 -0
  79. package/dist/journal/store.js +270 -0
  80. package/dist/journal/store.js.map +1 -0
  81. package/dist/journal-cli.d.ts +19 -0
  82. package/dist/journal-cli.d.ts.map +1 -0
  83. package/dist/journal-cli.js +153 -0
  84. package/dist/journal-cli.js.map +1 -0
  85. package/dist/logging.d.ts +6 -0
  86. package/dist/logging.d.ts.map +1 -0
  87. package/dist/logging.js +20 -0
  88. package/dist/logging.js.map +1 -0
  89. package/dist/mcp-server.d.ts +34 -0
  90. package/dist/mcp-server.d.ts.map +1 -0
  91. package/dist/mcp-server.js +607 -0
  92. package/dist/mcp-server.js.map +1 -0
  93. package/dist/parser.d.ts +11 -0
  94. package/dist/parser.d.ts.map +1 -0
  95. package/dist/parser.js +445 -0
  96. package/dist/parser.js.map +1 -0
  97. package/dist/paths.d.ts +103 -0
  98. package/dist/paths.d.ts.map +1 -0
  99. package/dist/paths.js +258 -0
  100. package/dist/paths.js.map +1 -0
  101. package/dist/search-cli.d.ts +3 -0
  102. package/dist/search-cli.d.ts.map +1 -0
  103. package/dist/search-cli.js +138 -0
  104. package/dist/search-cli.js.map +1 -0
  105. package/dist/search.d.ts +36 -0
  106. package/dist/search.d.ts.map +1 -0
  107. package/dist/search.js +371 -0
  108. package/dist/search.js.map +1 -0
  109. package/dist/show-cli.d.ts +3 -0
  110. package/dist/show-cli.d.ts.map +1 -0
  111. package/dist/show-cli.js +60 -0
  112. package/dist/show-cli.js.map +1 -0
  113. package/dist/show.d.ts +3 -0
  114. package/dist/show.d.ts.map +1 -0
  115. package/dist/show.js +984 -0
  116. package/dist/show.js.map +1 -0
  117. package/dist/stats-cli.d.ts +3 -0
  118. package/dist/stats-cli.d.ts.map +1 -0
  119. package/dist/stats-cli.js +51 -0
  120. package/dist/stats-cli.js.map +1 -0
  121. package/dist/stats.d.ts +19 -0
  122. package/dist/stats.d.ts.map +1 -0
  123. package/dist/stats.js +116 -0
  124. package/dist/stats.js.map +1 -0
  125. package/dist/summarizer.d.ts +83 -0
  126. package/dist/summarizer.d.ts.map +1 -0
  127. package/dist/summarizer.js +526 -0
  128. package/dist/summarizer.js.map +1 -0
  129. package/dist/summary-sentinel.d.ts +31 -0
  130. package/dist/summary-sentinel.d.ts.map +1 -0
  131. package/dist/summary-sentinel.js +80 -0
  132. package/dist/summary-sentinel.js.map +1 -0
  133. package/dist/sync-cli.d.ts +15 -0
  134. package/dist/sync-cli.d.ts.map +1 -0
  135. package/dist/sync-cli.js +202 -0
  136. package/dist/sync-cli.js.map +1 -0
  137. package/dist/sync.d.ts +35 -0
  138. package/dist/sync.d.ts.map +1 -0
  139. package/dist/sync.js +204 -0
  140. package/dist/sync.js.map +1 -0
  141. package/dist/types.d.ts +125 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +32 -0
  144. package/dist/types.js.map +1 -0
  145. package/dist/verify.d.ts +30 -0
  146. package/dist/verify.d.ts.map +1 -0
  147. package/dist/verify.js +174 -0
  148. package/dist/verify.js.map +1 -0
  149. package/dist/version.d.ts +13 -0
  150. package/dist/version.d.ts.map +1 -0
  151. package/dist/version.js +13 -0
  152. package/dist/version.js.map +1 -0
  153. package/hooks/hooks.json +15 -0
  154. package/package.json +71 -0
  155. package/prompts/search-agent.md +160 -0
  156. package/skills/remembering-conversations/MCP-TOOLS.md +147 -0
  157. package/skills/remembering-conversations/SKILL.md +97 -0
package/dist/parser.js ADDED
@@ -0,0 +1,445 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import readline from "node:readline";
5
+ async function detectConversationHarness(filePath) {
6
+ const fileStream = fs.createReadStream(filePath);
7
+ const rl = readline.createInterface({
8
+ input: fileStream,
9
+ crlfDelay: Infinity,
10
+ });
11
+ for await (const line of rl) {
12
+ if (!line.trim())
13
+ continue;
14
+ try {
15
+ const parsed = JSON.parse(line);
16
+ if (parsed.payload &&
17
+ (parsed.type === "session_meta" ||
18
+ parsed.type === "turn_context" ||
19
+ parsed.type === "response_item" ||
20
+ parsed.type === "event_msg" ||
21
+ parsed.type === "compacted")) {
22
+ return "codex";
23
+ }
24
+ return "claude";
25
+ }
26
+ catch { }
27
+ }
28
+ return "claude";
29
+ }
30
+ export async function parseConversation(filePath, projectName, archivePath) {
31
+ const harness = await detectConversationHarness(filePath);
32
+ if (harness === "codex") {
33
+ return parseCodexConversation(filePath, projectName, archivePath);
34
+ }
35
+ return parseClaudeConversation(filePath, projectName, archivePath);
36
+ }
37
+ async function parseClaudeConversation(filePath, projectName, archivePath) {
38
+ const exchanges = [];
39
+ const fileStream = fs.createReadStream(filePath);
40
+ const rl = readline.createInterface({
41
+ input: fileStream,
42
+ crlfDelay: Infinity,
43
+ });
44
+ let lineNumber = 0;
45
+ let currentExchange = null;
46
+ const finalizeExchange = () => {
47
+ if (currentExchange && currentExchange.assistantMessages.length > 0) {
48
+ const exchangeId = crypto
49
+ .createHash("md5")
50
+ .update(`${archivePath}:${currentExchange.userLine}-${currentExchange.lastAssistantLine}`)
51
+ .digest("hex");
52
+ // Update tool call exchange IDs
53
+ const toolCalls = currentExchange.toolCalls.map((tc) => ({
54
+ ...tc,
55
+ exchangeId,
56
+ }));
57
+ const exchange = {
58
+ id: exchangeId,
59
+ project: currentExchange.project,
60
+ timestamp: currentExchange.timestamp,
61
+ userMessage: currentExchange.userMessage,
62
+ assistantMessage: currentExchange.assistantMessages.join("\n\n"),
63
+ archivePath,
64
+ lineStart: currentExchange.userLine,
65
+ lineEnd: currentExchange.lastAssistantLine,
66
+ parentUuid: currentExchange.parentUuid,
67
+ isSidechain: currentExchange.isSidechain,
68
+ harness: currentExchange.harness,
69
+ sessionId: currentExchange.sessionId,
70
+ cwd: currentExchange.cwd,
71
+ gitBranch: currentExchange.gitBranch,
72
+ claudeVersion: currentExchange.claudeVersion,
73
+ agentVersion: currentExchange.agentVersion,
74
+ model: currentExchange.model,
75
+ modelProvider: currentExchange.modelProvider,
76
+ thinkingLevel: currentExchange.thinkingLevel,
77
+ thinkingDisabled: currentExchange.thinkingDisabled,
78
+ thinkingTriggers: currentExchange.thinkingTriggers,
79
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
80
+ };
81
+ exchanges.push(exchange);
82
+ }
83
+ };
84
+ for await (const line of rl) {
85
+ lineNumber++;
86
+ try {
87
+ const parsed = JSON.parse(line);
88
+ // Skip non-message types
89
+ if (parsed.type !== "user" && parsed.type !== "assistant") {
90
+ continue;
91
+ }
92
+ if (!parsed.message) {
93
+ continue;
94
+ }
95
+ // Extract text from message content
96
+ let text = "";
97
+ const toolCalls = [];
98
+ if (typeof parsed.message.content === "string") {
99
+ text = parsed.message.content;
100
+ }
101
+ else if (Array.isArray(parsed.message.content)) {
102
+ // Extract text blocks
103
+ const textBlocks = parsed.message.content
104
+ .filter((block) => block.type === "text" && block.text)
105
+ .map((block) => block.text);
106
+ text = textBlocks.join("\n");
107
+ // Extract tool use blocks
108
+ if (parsed.message.role === "assistant") {
109
+ for (const block of parsed.message.content) {
110
+ if (block.type === "tool_use") {
111
+ const toolCallId = crypto.randomUUID();
112
+ toolCalls.push({
113
+ id: toolCallId,
114
+ exchangeId: "", // Will be set when we know the exchange ID
115
+ toolName: block.name || "unknown",
116
+ toolInput: block.input,
117
+ isError: false,
118
+ timestamp: parsed.timestamp || new Date().toISOString(),
119
+ });
120
+ }
121
+ }
122
+ }
123
+ // Extract tool results
124
+ if (parsed.message.role === "user") {
125
+ for (const block of parsed.message.content) {
126
+ if (block.type === "tool_result") {
127
+ // Store for later association with tool_use
128
+ // For now, we'll just track results exist
129
+ // TODO: Match tool_use_id to previous tool_use
130
+ }
131
+ }
132
+ }
133
+ }
134
+ // Skip empty messages
135
+ if (!text.trim() && toolCalls.length === 0) {
136
+ continue;
137
+ }
138
+ if (parsed.message.role === "user") {
139
+ // Finalize previous exchange before starting new one
140
+ finalizeExchange();
141
+ // Start new exchange
142
+ currentExchange = {
143
+ project: projectName,
144
+ userMessage: text || "(tool results only)",
145
+ userLine: lineNumber,
146
+ assistantMessages: [],
147
+ lastAssistantLine: lineNumber,
148
+ timestamp: parsed.timestamp || new Date().toISOString(),
149
+ parentUuid: parsed.parentUuid,
150
+ isSidechain: parsed.isSidechain,
151
+ harness: "claude",
152
+ sessionId: parsed.sessionId,
153
+ cwd: parsed.cwd,
154
+ gitBranch: parsed.gitBranch,
155
+ claudeVersion: parsed.version,
156
+ agentVersion: parsed.version,
157
+ model: parsed.message.model,
158
+ thinkingLevel: parsed.thinkingMetadata?.level,
159
+ thinkingDisabled: parsed.thinkingMetadata?.disabled,
160
+ thinkingTriggers: parsed.thinkingMetadata?.triggers
161
+ ? JSON.stringify(parsed.thinkingMetadata.triggers)
162
+ : undefined,
163
+ toolCalls: [],
164
+ };
165
+ }
166
+ else if (parsed.message.role === "assistant" && currentExchange) {
167
+ // Accumulate assistant messages
168
+ if (text.trim()) {
169
+ currentExchange.assistantMessages.push(text);
170
+ }
171
+ currentExchange.lastAssistantLine = lineNumber;
172
+ // Add tool calls to current exchange
173
+ if (toolCalls.length > 0) {
174
+ currentExchange.toolCalls.push(...toolCalls);
175
+ }
176
+ // Update timestamp to last assistant message
177
+ if (parsed.timestamp) {
178
+ currentExchange.timestamp = parsed.timestamp;
179
+ }
180
+ // Update metadata from assistant messages (use most recent)
181
+ if (parsed.sessionId)
182
+ currentExchange.sessionId = parsed.sessionId;
183
+ if (parsed.cwd)
184
+ currentExchange.cwd = parsed.cwd;
185
+ if (parsed.gitBranch)
186
+ currentExchange.gitBranch = parsed.gitBranch;
187
+ if (parsed.version) {
188
+ currentExchange.claudeVersion = parsed.version;
189
+ currentExchange.agentVersion = parsed.version;
190
+ }
191
+ if (parsed.message.model)
192
+ currentExchange.model = parsed.message.model;
193
+ }
194
+ }
195
+ catch { }
196
+ }
197
+ // Finalize last exchange
198
+ finalizeExchange();
199
+ return exchanges;
200
+ }
201
+ function extractTextFromContent(content) {
202
+ if (typeof content === "string") {
203
+ return content;
204
+ }
205
+ if (!Array.isArray(content)) {
206
+ return "";
207
+ }
208
+ return content
209
+ .filter((block) => block && typeof block === "object" && typeof block.text === "string")
210
+ .map((block) => block.text)
211
+ .join("\n");
212
+ }
213
+ function safeParseJson(value) {
214
+ try {
215
+ return JSON.parse(value);
216
+ }
217
+ catch {
218
+ return value;
219
+ }
220
+ }
221
+ function stringifyToolOutput(output) {
222
+ if (output === undefined || output === null) {
223
+ return undefined;
224
+ }
225
+ if (typeof output === "string") {
226
+ return output;
227
+ }
228
+ const text = extractTextFromContent(output);
229
+ if (text.trim()) {
230
+ return text;
231
+ }
232
+ return JSON.stringify(output);
233
+ }
234
+ function projectFromCwd(cwd) {
235
+ if (!cwd) {
236
+ return undefined;
237
+ }
238
+ const project = path.basename(cwd);
239
+ return project || undefined;
240
+ }
241
+ async function parseCodexConversation(filePath, projectName, archivePath) {
242
+ const exchanges = [];
243
+ const fileStream = fs.createReadStream(filePath);
244
+ const rl = readline.createInterface({
245
+ input: fileStream,
246
+ crlfDelay: Infinity,
247
+ });
248
+ let lineNumber = 0;
249
+ let sessionId;
250
+ let cwd;
251
+ let gitBranch;
252
+ let agentVersion;
253
+ let model;
254
+ let modelProvider;
255
+ let currentExchange = null;
256
+ const toolCallsByCallId = new Map();
257
+ const currentProject = () => projectFromCwd(cwd) || projectName;
258
+ const applyMetadataToCurrentExchange = () => {
259
+ if (!currentExchange) {
260
+ return;
261
+ }
262
+ currentExchange.project = currentProject();
263
+ currentExchange.sessionId = sessionId;
264
+ currentExchange.cwd = cwd;
265
+ currentExchange.gitBranch = gitBranch;
266
+ currentExchange.agentVersion = agentVersion;
267
+ currentExchange.model = model;
268
+ currentExchange.modelProvider = modelProvider;
269
+ };
270
+ const finalizeExchange = () => {
271
+ if (currentExchange && currentExchange.assistantMessages.length > 0) {
272
+ applyMetadataToCurrentExchange();
273
+ const exchangeId = crypto
274
+ .createHash("md5")
275
+ .update(`${archivePath}:${currentExchange.userLine}-${currentExchange.lastAssistantLine}`)
276
+ .digest("hex");
277
+ const toolCalls = currentExchange.toolCalls.map((tc) => ({
278
+ ...tc,
279
+ exchangeId,
280
+ }));
281
+ exchanges.push({
282
+ id: exchangeId,
283
+ project: currentExchange.project,
284
+ timestamp: currentExchange.timestamp,
285
+ userMessage: currentExchange.userMessage,
286
+ assistantMessage: currentExchange.assistantMessages.join("\n\n"),
287
+ archivePath,
288
+ lineStart: currentExchange.userLine,
289
+ lineEnd: currentExchange.lastAssistantLine,
290
+ harness: "codex",
291
+ sessionId: currentExchange.sessionId,
292
+ cwd: currentExchange.cwd,
293
+ gitBranch: currentExchange.gitBranch,
294
+ agentVersion: currentExchange.agentVersion,
295
+ model: currentExchange.model,
296
+ modelProvider: currentExchange.modelProvider,
297
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
298
+ });
299
+ }
300
+ currentExchange = null;
301
+ toolCallsByCallId.clear();
302
+ };
303
+ const startExchange = (text, timestamp) => {
304
+ finalizeExchange();
305
+ currentExchange = {
306
+ project: currentProject(),
307
+ userMessage: text,
308
+ userLine: lineNumber,
309
+ assistantMessages: [],
310
+ lastAssistantLine: lineNumber,
311
+ timestamp,
312
+ harness: "codex",
313
+ sessionId,
314
+ cwd,
315
+ gitBranch,
316
+ agentVersion,
317
+ model,
318
+ modelProvider,
319
+ toolCalls: [],
320
+ };
321
+ };
322
+ const appendToolCall = (payload, timestamp) => {
323
+ if (!currentExchange) {
324
+ return;
325
+ }
326
+ const callId = payload.call_id || crypto.randomUUID();
327
+ let toolInput = payload.arguments;
328
+ if (typeof toolInput === "string") {
329
+ toolInput = safeParseJson(toolInput);
330
+ }
331
+ else if (payload.input !== undefined) {
332
+ toolInput = payload.input;
333
+ }
334
+ else if (payload.action !== undefined) {
335
+ toolInput = payload.action;
336
+ }
337
+ const toolCall = {
338
+ id: callId,
339
+ exchangeId: "",
340
+ toolName: payload.name || payload.namespace || payload.type || "unknown",
341
+ toolInput,
342
+ isError: false,
343
+ timestamp,
344
+ };
345
+ currentExchange.toolCalls.push(toolCall);
346
+ toolCallsByCallId.set(callId, toolCall);
347
+ currentExchange.lastAssistantLine = lineNumber;
348
+ };
349
+ const appendToolResult = (payload) => {
350
+ const callId = payload.call_id;
351
+ if (!callId) {
352
+ return;
353
+ }
354
+ const toolCall = toolCallsByCallId.get(callId);
355
+ if (!toolCall) {
356
+ return;
357
+ }
358
+ const output = stringifyToolOutput(payload.output);
359
+ if (output !== undefined) {
360
+ toolCall.toolResult = output;
361
+ }
362
+ currentExchange.lastAssistantLine = lineNumber;
363
+ };
364
+ for await (const line of rl) {
365
+ lineNumber++;
366
+ if (!line.trim()) {
367
+ continue;
368
+ }
369
+ try {
370
+ const parsed = JSON.parse(line);
371
+ const payload = parsed.payload;
372
+ const timestamp = parsed.timestamp || new Date().toISOString();
373
+ if (parsed.type === "session_meta" && payload) {
374
+ sessionId = payload.id || sessionId;
375
+ cwd = payload.cwd || cwd;
376
+ gitBranch = payload.git?.branch || gitBranch;
377
+ agentVersion = payload.cli_version || agentVersion;
378
+ modelProvider = payload.model_provider || modelProvider;
379
+ applyMetadataToCurrentExchange();
380
+ continue;
381
+ }
382
+ if (parsed.type === "turn_context" && payload) {
383
+ cwd = payload.cwd || cwd;
384
+ model = payload.model || model;
385
+ applyMetadataToCurrentExchange();
386
+ continue;
387
+ }
388
+ if (parsed.type !== "response_item" || !payload) {
389
+ continue;
390
+ }
391
+ if (payload.type === "message") {
392
+ const text = extractTextFromContent(payload.content);
393
+ if (!text.trim()) {
394
+ continue;
395
+ }
396
+ if (payload.role === "user") {
397
+ startExchange(text, timestamp);
398
+ }
399
+ else if (payload.role === "assistant") {
400
+ const exchange = currentExchange;
401
+ if (exchange) {
402
+ exchange.assistantMessages.push(text);
403
+ exchange.lastAssistantLine = lineNumber;
404
+ exchange.timestamp = timestamp;
405
+ }
406
+ }
407
+ }
408
+ else if (payload.type === "function_call" ||
409
+ payload.type === "custom_tool_call" ||
410
+ payload.type === "tool_search_call" ||
411
+ payload.type === "local_shell_call") {
412
+ appendToolCall(payload, timestamp);
413
+ }
414
+ else if (payload.type === "function_call_output" ||
415
+ payload.type === "custom_tool_call_output" ||
416
+ payload.type === "tool_search_output" ||
417
+ payload.type === "local_shell_call_output") {
418
+ appendToolResult(payload);
419
+ }
420
+ }
421
+ catch { }
422
+ }
423
+ finalizeExchange();
424
+ return exchanges;
425
+ }
426
+ /**
427
+ * Convenience function to parse a conversation file
428
+ * Extracts project name from the file path and returns exchanges with metadata
429
+ */
430
+ export async function parseConversationFile(filePath) {
431
+ // Extract project name from path (directory name before the .jsonl file)
432
+ const pathParts = filePath.split("/");
433
+ let project = "unknown";
434
+ // Find the parent directory name (second to last part)
435
+ const parentDir = pathParts[pathParts.length - 2];
436
+ if (parentDir) {
437
+ project = parentDir;
438
+ }
439
+ const exchanges = await parseConversation(filePath, project, filePath);
440
+ return {
441
+ project,
442
+ exchanges,
443
+ };
444
+ }
445
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /** Path resolution for transcript archives, indexes, and journals. */
2
+ /** Project-local journal directory name. */
3
+ export declare const JOURNAL_DIR_NAME = ".moe-journal";
4
+ /**
5
+ * Get the Claude Code configuration directory.
6
+ * Supports CLAUDE_CONFIG_DIR for multiple profiles.
7
+ * Falls back to ~/.claude when not set.
8
+ */
9
+ export declare function getClaudeDir(): string;
10
+ /**
11
+ * Get the Codex configuration directory.
12
+ * Supports CODEX_HOME for alternate profiles.
13
+ * Falls back to ~/.codex when not set.
14
+ */
15
+ export declare function getCodexDir(): string;
16
+ /**
17
+ * Get all directories where supported harnesses store conversation files.
18
+ * Checks Claude Code legacy (projects/) and current (transcripts/) locations,
19
+ * plus Codex sessions.
20
+ * Returns only directories that exist.
21
+ */
22
+ export declare function getConversationSourceDirs(): string[];
23
+ /**
24
+ * Recursively find all .jsonl files under a directory.
25
+ * Returns paths relative to the given directory.
26
+ *
27
+ * `excludedDirNames` skips any subdirectory whose name matches an entry in
28
+ * the set, at any depth. Top-level project skipping at the caller is the
29
+ * usual case; this parameter handles nested directories like `subagents/`
30
+ * inside session UUIDs (#80).
31
+ */
32
+ export declare function findJsonlFiles(dir: string, excludedDirNames?: ReadonlySet<string>): string[];
33
+ /**
34
+ * Get this package's data directory: archive, index, model cache, logs, locks
35
+ * and the user-global journal all live under it.
36
+ *
37
+ * Precedence:
38
+ * 1. MOE_MEMORY_CONFIG_DIR — this package's dir directly (also the test seam)
39
+ * 2. MOE_DATA_DIR/memory — the shared cross-package Moe data root
40
+ * 3. XDG_CONFIG_HOME/moe/memory
41
+ * 4. ~/.config/moe/memory (default)
42
+ */
43
+ export declare function getMemoryDataDir(): string;
44
+ /**
45
+ * Get conversation archive directory
46
+ */
47
+ export declare function getArchiveDir(): string;
48
+ /**
49
+ * Get conversation index directory
50
+ */
51
+ export declare function getIndexDir(): string;
52
+ /**
53
+ * Where transformers.js caches the ONNX model.
54
+ *
55
+ * Upstream never set `env.cacheDir`, so the first `initEmbeddings()` fetched
56
+ * the model into whatever transformers.js defaults to — which under pnpm is a
57
+ * path inside the content-addressed store, shared across the workspace and
58
+ * possibly read-only in a container. Pinning it here keeps the download in one
59
+ * writable place that moves with `MOE_MEMORY_CONFIG_DIR`, which is what makes
60
+ * the encoder-dependent test project reproducible.
61
+ */
62
+ export declare function getModelCacheDir(): string;
63
+ /**
64
+ * Get database path. Both record types live in this one file.
65
+ */
66
+ export declare function getDbPath(): string;
67
+ /**
68
+ * Get exclude config path
69
+ */
70
+ export declare function getExcludeConfigPath(): string;
71
+ /**
72
+ * Get list of projects to exclude from indexing
73
+ * Configurable via env var or config file
74
+ */
75
+ export declare function getExcludedProjects(): string[];
76
+ /**
77
+ * Resolve a writable directory for journal storage.
78
+ *
79
+ * The override wins outright, then cwd (unless cwd is a system root), then
80
+ * HOME, USERPROFILE, and the temp directories.
81
+ *
82
+ * @param subdirectory subdirectory name (e.g. `.moe-journal`)
83
+ * @param includeCurrentDirectory whether to consider the current working directory
84
+ */
85
+ export declare function resolveJournalPath(subdirectory?: string, includeCurrentDirectory?: boolean): string;
86
+ /**
87
+ * Project-local journal directory: `<project>/.moe-journal`.
88
+ * Per-project journals are a feature, not an accident — they are the half of
89
+ * the journal that belongs to the codebase you are in.
90
+ */
91
+ export declare function resolveProjectJournalPath(): string;
92
+ /**
93
+ * User-global journal directory.
94
+ *
95
+ * It lives at `<data dir>/journal`, alongside the conversation archive and
96
+ * index. `MOE_MEMORY_JOURNAL_PATH` overrides it.
97
+ */
98
+ export declare function resolveUserJournalPath(): string;
99
+ /**
100
+ * The journal roots to read, resolved and de-duplicated.
101
+ */
102
+ export declare function journalRoots(): string[];
103
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAMtE,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAY/C;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAWpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAmB5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAiBzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAkB9C;AAWD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,GAAE,MAAyB,EACvC,uBAAuB,UAAO,GAC7B,MAAM,CAqCR;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAGvC"}