@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.
- package/.mcp.json +18 -0
- package/README.md +47 -0
- package/agents/search-conversations.md +171 -0
- package/dist/LICENSE +25 -0
- package/dist/cli.d.ts +25 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +125 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex-hook-trust.d.ts +4 -0
- package/dist/codex-hook-trust.d.ts.map +1 -0
- package/dist/codex-hook-trust.js +114 -0
- package/dist/codex-hook-trust.js.map +1 -0
- package/dist/codex-support.d.ts +6 -0
- package/dist/codex-support.d.ts.map +1 -0
- package/dist/codex-support.js +29 -0
- package/dist/codex-support.js.map +1 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -0
- package/dist/db.d.ts +103 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +430 -0
- package/dist/db.js.map +1 -0
- package/dist/doctor-cli.d.ts +3 -0
- package/dist/doctor-cli.d.ts.map +1 -0
- package/dist/doctor-cli.js +43 -0
- package/dist/doctor-cli.js.map +1 -0
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +98 -0
- package/dist/doctor.js.map +1 -0
- package/dist/embedding-migration.d.ts +73 -0
- package/dist/embedding-migration.d.ts.map +1 -0
- package/dist/embedding-migration.js +120 -0
- package/dist/embedding-migration.js.map +1 -0
- package/dist/embeddings.d.ts +78 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +180 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/file-lock.d.ts +39 -0
- package/dist/file-lock.d.ts.map +1 -0
- package/dist/file-lock.js +91 -0
- package/dist/file-lock.js.map +1 -0
- package/dist/index-cli.d.ts +10 -0
- package/dist/index-cli.d.ts.map +1 -0
- package/dist/index-cli.js +195 -0
- package/dist/index-cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +4 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +318 -0
- package/dist/indexer.js.map +1 -0
- package/dist/install-check.d.ts +48 -0
- package/dist/install-check.d.ts.map +1 -0
- package/dist/install-check.js +82 -0
- package/dist/install-check.js.map +1 -0
- package/dist/journal/index.d.ts +5 -0
- package/dist/journal/index.d.ts.map +1 -0
- package/dist/journal/index.js +5 -0
- package/dist/journal/index.js.map +1 -0
- package/dist/journal/legacy-sidecars.d.ts +74 -0
- package/dist/journal/legacy-sidecars.d.ts.map +1 -0
- package/dist/journal/legacy-sidecars.js +151 -0
- package/dist/journal/legacy-sidecars.js.map +1 -0
- package/dist/journal/markdown.d.ts +91 -0
- package/dist/journal/markdown.d.ts.map +1 -0
- package/dist/journal/markdown.js +234 -0
- package/dist/journal/markdown.js.map +1 -0
- package/dist/journal/search.d.ts +91 -0
- package/dist/journal/search.d.ts.map +1 -0
- package/dist/journal/search.js +203 -0
- package/dist/journal/search.js.map +1 -0
- package/dist/journal/store.d.ts +96 -0
- package/dist/journal/store.d.ts.map +1 -0
- package/dist/journal/store.js +270 -0
- package/dist/journal/store.js.map +1 -0
- package/dist/journal-cli.d.ts +19 -0
- package/dist/journal-cli.d.ts.map +1 -0
- package/dist/journal-cli.js +153 -0
- package/dist/journal-cli.js.map +1 -0
- package/dist/logging.d.ts +6 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +20 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp-server.d.ts +34 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +607 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/parser.d.ts +11 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +445 -0
- package/dist/parser.js.map +1 -0
- package/dist/paths.d.ts +103 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +258 -0
- package/dist/paths.js.map +1 -0
- package/dist/search-cli.d.ts +3 -0
- package/dist/search-cli.d.ts.map +1 -0
- package/dist/search-cli.js +138 -0
- package/dist/search-cli.js.map +1 -0
- package/dist/search.d.ts +36 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +371 -0
- package/dist/search.js.map +1 -0
- package/dist/show-cli.d.ts +3 -0
- package/dist/show-cli.d.ts.map +1 -0
- package/dist/show-cli.js +60 -0
- package/dist/show-cli.js.map +1 -0
- package/dist/show.d.ts +3 -0
- package/dist/show.d.ts.map +1 -0
- package/dist/show.js +984 -0
- package/dist/show.js.map +1 -0
- package/dist/stats-cli.d.ts +3 -0
- package/dist/stats-cli.d.ts.map +1 -0
- package/dist/stats-cli.js +51 -0
- package/dist/stats-cli.js.map +1 -0
- package/dist/stats.d.ts +19 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +116 -0
- package/dist/stats.js.map +1 -0
- package/dist/summarizer.d.ts +83 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +526 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/summary-sentinel.d.ts +31 -0
- package/dist/summary-sentinel.d.ts.map +1 -0
- package/dist/summary-sentinel.js +80 -0
- package/dist/summary-sentinel.js.map +1 -0
- package/dist/sync-cli.d.ts +15 -0
- package/dist/sync-cli.d.ts.map +1 -0
- package/dist/sync-cli.js +202 -0
- package/dist/sync-cli.js.map +1 -0
- package/dist/sync.d.ts +35 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +204 -0
- package/dist/sync.js.map +1 -0
- package/dist/types.d.ts +125 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +32 -0
- package/dist/types.js.map +1 -0
- package/dist/verify.d.ts +30 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +174 -0
- package/dist/verify.js.map +1 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- package/hooks/hooks.json +15 -0
- package/package.json +71 -0
- package/prompts/search-agent.md +160 -0
- package/skills/remembering-conversations/MCP-TOOLS.md +147 -0
- 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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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -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"}
|