@samjurnio_/memento 0.2.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 (82) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +144 -0
  3. package/dist/adapters/antigravity.d.ts +19 -0
  4. package/dist/adapters/antigravity.js +463 -0
  5. package/dist/adapters/antigravity.js.map +1 -0
  6. package/dist/adapters/claude-code.d.ts +14 -0
  7. package/dist/adapters/claude-code.js +213 -0
  8. package/dist/adapters/claude-code.js.map +1 -0
  9. package/dist/adapters/codex.d.ts +12 -0
  10. package/dist/adapters/codex.js +247 -0
  11. package/dist/adapters/codex.js.map +1 -0
  12. package/dist/adapters/gemini.d.ts +10 -0
  13. package/dist/adapters/gemini.js +171 -0
  14. package/dist/adapters/gemini.js.map +1 -0
  15. package/dist/adapters/opencode.d.ts +3 -0
  16. package/dist/adapters/opencode.js +137 -0
  17. package/dist/adapters/opencode.js.map +1 -0
  18. package/dist/adapters/pi.d.ts +6 -0
  19. package/dist/adapters/pi.js +172 -0
  20. package/dist/adapters/pi.js.map +1 -0
  21. package/dist/artifacts.d.ts +25 -0
  22. package/dist/artifacts.js +50 -0
  23. package/dist/artifacts.js.map +1 -0
  24. package/dist/bench-live.d.ts +28 -0
  25. package/dist/bench-live.js +187 -0
  26. package/dist/bench-live.js.map +1 -0
  27. package/dist/bench.d.ts +33 -0
  28. package/dist/bench.js +213 -0
  29. package/dist/bench.js.map +1 -0
  30. package/dist/cli.d.ts +2 -0
  31. package/dist/cli.js +338 -0
  32. package/dist/cli.js.map +1 -0
  33. package/dist/compile.d.ts +27 -0
  34. package/dist/compile.js +193 -0
  35. package/dist/compile.js.map +1 -0
  36. package/dist/git.d.ts +45 -0
  37. package/dist/git.js +172 -0
  38. package/dist/git.js.map +1 -0
  39. package/dist/handoff.d.ts +26 -0
  40. package/dist/handoff.js +80 -0
  41. package/dist/handoff.js.map +1 -0
  42. package/dist/hooks.d.ts +25 -0
  43. package/dist/hooks.js +114 -0
  44. package/dist/hooks.js.map +1 -0
  45. package/dist/ids.d.ts +10 -0
  46. package/dist/ids.js +32 -0
  47. package/dist/ids.js.map +1 -0
  48. package/dist/inject/antigravity.d.ts +7 -0
  49. package/dist/inject/antigravity.js +391 -0
  50. package/dist/inject/antigravity.js.map +1 -0
  51. package/dist/inject/claude-code.d.ts +15 -0
  52. package/dist/inject/claude-code.js +53 -0
  53. package/dist/inject/claude-code.js.map +1 -0
  54. package/dist/inject/codex.d.ts +7 -0
  55. package/dist/inject/codex.js +307 -0
  56. package/dist/inject/codex.js.map +1 -0
  57. package/dist/inject/dispatch.d.ts +11 -0
  58. package/dist/inject/dispatch.js +42 -0
  59. package/dist/inject/dispatch.js.map +1 -0
  60. package/dist/inject.d.ts +22 -0
  61. package/dist/inject.js +47 -0
  62. package/dist/inject.js.map +1 -0
  63. package/dist/ledger.d.ts +45 -0
  64. package/dist/ledger.js +50 -0
  65. package/dist/ledger.js.map +1 -0
  66. package/dist/mcp.d.ts +3 -0
  67. package/dist/mcp.js +197 -0
  68. package/dist/mcp.js.map +1 -0
  69. package/dist/packet.d.ts +185 -0
  70. package/dist/packet.js +154 -0
  71. package/dist/packet.js.map +1 -0
  72. package/dist/redact.d.ts +19 -0
  73. package/dist/redact.js +86 -0
  74. package/dist/redact.js.map +1 -0
  75. package/dist/render.d.ts +11 -0
  76. package/dist/render.js +145 -0
  77. package/dist/render.js.map +1 -0
  78. package/dist/summarize.d.ts +35 -0
  79. package/dist/summarize.js +166 -0
  80. package/dist/summarize.js.map +1 -0
  81. package/package.json +61 -0
  82. package/schemas/packet.v1.schema.json +510 -0
@@ -0,0 +1,463 @@
1
+ import { readdirSync, statSync, readFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve } from "node:path";
5
+ import { truncate, cleanUserMessage } from "../ledger.js";
6
+ import { extractTarget } from "./claude-code.js";
7
+ /**
8
+ * Google Antigravity adapter: normalizes an agent conversation
9
+ * (~/.gemini/antigravity/conversations/<uuid>.db, SQLite) into a ledger.
10
+ *
11
+ * The step payloads are protobuf blobs with NO published schema, so this
12
+ * adapter is best-effort by construction: a generic wire-format walker
13
+ * extracts leaf strings, and the `steps.step_type` COLUMN (not the blob)
14
+ * classifies each step. The step_type map below was derived empirically
15
+ * from real local conversations (Antigravity 2026.x):
16
+ *
17
+ * 14 user message 15 model/assistant step
18
+ * 5 file write/replace 7 grep_search 8 view file
19
+ * 9 list_dir 21 run_command (args carry Cwd!)
20
+ * 31 read_url_content 33 search_web 132 manage_task
21
+ * 17 model error 98 injected conversation history
22
+ * 101 inter-agent messages 138 ask_question
23
+ *
24
+ * Tool steps embed a JSON args object (toolAction/toolSummary keys) followed
25
+ * by output text — one step carries BOTH call and result. Legacy `.pb`
26
+ * conversation files (pre-SQLite) are not supported.
27
+ *
28
+ * Requires node:sqlite (Node >= 22.5).
29
+ */
30
+ const OUTCOME_MAX = 400;
31
+ const MESSAGE_MAX = 2000;
32
+ const TOOL_STEP_NAMES = {
33
+ 5: "write_file",
34
+ 7: "grep_search",
35
+ 8: "view_file",
36
+ 9: "list_dir",
37
+ 21: "run_command",
38
+ 31: "read_url_content",
39
+ 33: "search_web",
40
+ 132: "manage_task",
41
+ };
42
+ const UUID_LIKE = /^[0-9a-f-]{32,40}$/i;
43
+ /** Walk protobuf wire format without a schema, collecting leaf strings. */
44
+ export function extractProtoStrings(buffer, depth = 0) {
45
+ const out = [];
46
+ if (depth > 6) {
47
+ return out;
48
+ }
49
+ let offset = 0;
50
+ while (offset < buffer.length) {
51
+ const key = readVarint(buffer, offset);
52
+ if (!key) {
53
+ return out;
54
+ }
55
+ offset = key.next;
56
+ const wire = Number(key.value & 7n);
57
+ if (wire === 0) {
58
+ const v = readVarint(buffer, offset);
59
+ if (!v) {
60
+ return out;
61
+ }
62
+ offset = v.next;
63
+ }
64
+ else if (wire === 1) {
65
+ offset += 8;
66
+ }
67
+ else if (wire === 5) {
68
+ offset += 4;
69
+ }
70
+ else if (wire === 2) {
71
+ const len = readVarint(buffer, offset);
72
+ if (!len || Number(len.value) < 0) {
73
+ return out;
74
+ }
75
+ const start = len.next;
76
+ const end = start + Number(len.value);
77
+ if (end > buffer.length) {
78
+ return out;
79
+ }
80
+ const slice = buffer.subarray(start, end);
81
+ // Length-delimited = string OR submessage; recurse first, and if
82
+ // the slice is not valid wire format, treat it as a string.
83
+ const nested = slice.length > 1 ? extractProtoStrings(slice, depth + 1) : [];
84
+ if (nested.length > 0) {
85
+ out.push(...nested);
86
+ }
87
+ else {
88
+ const text = decodePrintable(slice);
89
+ if (text) {
90
+ out.push(text);
91
+ }
92
+ }
93
+ offset = end;
94
+ }
95
+ else {
96
+ return out; // invalid wire type → not a message
97
+ }
98
+ }
99
+ return out;
100
+ }
101
+ function readVarint(buffer, offset) {
102
+ let value = 0n;
103
+ let shift = 0n;
104
+ let pos = offset;
105
+ while (pos < buffer.length && shift < 64n) {
106
+ const byte = buffer[pos] ?? 0;
107
+ value |= BigInt(byte & 0x7f) << shift;
108
+ pos += 1;
109
+ if ((byte & 0x80) === 0) {
110
+ return { value, next: pos };
111
+ }
112
+ shift += 7n;
113
+ }
114
+ return undefined;
115
+ }
116
+ function decodePrintable(slice) {
117
+ const text = slice.toString("utf8");
118
+ if (text.length < 3 || text.includes("ďż˝")) {
119
+ return undefined;
120
+ }
121
+ let printable = 0;
122
+ for (const ch of text) {
123
+ const code = ch.codePointAt(0) ?? 0;
124
+ if (code >= 0x20 || code === 10 || code === 9) {
125
+ printable += 1;
126
+ }
127
+ }
128
+ return printable / text.length > 0.95 ? text : undefined;
129
+ }
130
+ function readSteps(dbPath) {
131
+ // Lazy require: node:sqlite needs Node >= 22.5; fail with guidance, not
132
+ // a module-load crash, and only when this adapter is actually used.
133
+ let DatabaseSync;
134
+ try {
135
+ ({ DatabaseSync } = createRequire(import.meta.url)("node:sqlite"));
136
+ }
137
+ catch {
138
+ throw new Error("The antigravity adapter needs node:sqlite (Node >= 22.5).");
139
+ }
140
+ const db = new DatabaseSync(dbPath, { readOnly: true });
141
+ try {
142
+ return db
143
+ .prepare("SELECT idx, step_type, status, step_payload, error_details FROM steps ORDER BY idx")
144
+ .all();
145
+ }
146
+ finally {
147
+ db.close();
148
+ }
149
+ }
150
+ export function parseAntigravitySteps(steps, sourcePath) {
151
+ const events = [];
152
+ let seq = 0;
153
+ let sawUserMessage = false;
154
+ let callCounter = 0;
155
+ let cwd;
156
+ const push = (event) => {
157
+ events.push({ ...event, seq: seq++ });
158
+ };
159
+ for (const step of steps) {
160
+ const toolName = TOOL_STEP_NAMES[step.stepType];
161
+ if (toolName) {
162
+ const argsJson = step.strings.find((s) => s.startsWith("{") && safeJson(s));
163
+ const args = argsJson ? safeJson(argsJson) : undefined;
164
+ if (typeof args?.Cwd === "string") {
165
+ cwd = cwd ?? args.Cwd;
166
+ }
167
+ const callId = `agy_${callCounter++}`;
168
+ const tool = {
169
+ name: toolName,
170
+ callId,
171
+ ...(args ? { input: args } : {}),
172
+ ...(antigravityTarget(args) ? { target: antigravityTarget(args) } : {}),
173
+ };
174
+ push({ type: "tool.called", tool });
175
+ // One step holds call AND result: the output is the longest
176
+ // non-args, non-id string in the payload.
177
+ const outcome = step.strings
178
+ .filter((s) => s !== argsJson && !UUID_LIKE.test(s) && s.length > 8)
179
+ .sort((a, b) => b.length - a.length)[0];
180
+ push({
181
+ type: step.hasError ? "tool.failed" : "tool.completed",
182
+ tool: {
183
+ name: toolName,
184
+ callId,
185
+ outcome: truncate(outcome ?? "(no output captured)", OUTCOME_MAX),
186
+ isError: step.hasError,
187
+ ...(tool.target ? { target: tool.target } : {}),
188
+ },
189
+ });
190
+ continue;
191
+ }
192
+ if (step.stepType === 14 || step.stepType === 15 || step.stepType === 17) {
193
+ // Longest plausible prose string — excluding ids, JSON args, and
194
+ // attachment URIs (a file:// mention must not displace the prose).
195
+ const text = step.strings
196
+ .filter((s) => !UUID_LIKE.test(s) && !s.startsWith("{")
197
+ && !s.startsWith("file://") && !/^[a-z]+:\/\/\S+$/.test(s)
198
+ && s.length >= 8)
199
+ .sort((a, b) => b.length - a.length)[0];
200
+ if (!text) {
201
+ continue;
202
+ }
203
+ if (step.stepType === 14) {
204
+ const cleanedText = cleanAntigravityContent(text);
205
+ if (!sawUserMessage) {
206
+ sawUserMessage = true;
207
+ push({ type: "task.started", content: truncate(cleanedText, MESSAGE_MAX) });
208
+ }
209
+ push({ type: "message.user", content: truncate(cleanedText, MESSAGE_MAX) });
210
+ }
211
+ else if (step.stepType === 15) {
212
+ push({ type: "message.assistant", content: truncate(text, MESSAGE_MAX) });
213
+ }
214
+ else {
215
+ push({
216
+ type: "tool.failed",
217
+ tool: { name: "model", outcome: truncate(text, OUTCOME_MAX), isError: true },
218
+ });
219
+ }
220
+ }
221
+ // 98 (history injection), 101 (inter-agent), 23, etc.: skipped.
222
+ }
223
+ return {
224
+ sessionId: sourcePath ? (sourcePath.split("/").pop() ?? "unknown").replace(/\.db$/, "") : "unknown",
225
+ agent: "antigravity",
226
+ ...(sourcePath ? { sourcePath } : {}),
227
+ ...(cwd ? { cwd } : {}),
228
+ events,
229
+ };
230
+ }
231
+ function antigravityTarget(args) {
232
+ if (!args) {
233
+ return undefined;
234
+ }
235
+ for (const key of ["CommandLine", "AbsolutePath", "DirectoryPath", "SearchPath", "Url", "Query", "query", "TargetFile"]) {
236
+ const value = args[key];
237
+ if (typeof value === "string" && value.trim()) {
238
+ return truncate(value, 160);
239
+ }
240
+ }
241
+ return extractTarget(args);
242
+ }
243
+ function safeJson(text) {
244
+ try {
245
+ return JSON.parse(text);
246
+ }
247
+ catch {
248
+ return undefined;
249
+ }
250
+ }
251
+ export function loadAntigravityLedger(dbPath) {
252
+ if (dbPath.endsWith(".jsonl")) {
253
+ return loadAntigravityJsonlLedger(dbPath);
254
+ }
255
+ const rows = readSteps(dbPath);
256
+ return parseAntigravitySteps(rows.map((row) => ({
257
+ stepType: row.step_type,
258
+ status: row.status,
259
+ strings: row.step_payload ? extractProtoStrings(Buffer.from(row.step_payload)) : [],
260
+ hasError: row.error_details !== null && row.error_details !== undefined
261
+ && row.error_details.length > 0,
262
+ })), dbPath);
263
+ }
264
+ function cleanValue(val) {
265
+ if (typeof val === "string") {
266
+ const s = val.trim();
267
+ if (s.startsWith('"') && s.endsWith('"')) {
268
+ try {
269
+ return JSON.parse(s);
270
+ }
271
+ catch {
272
+ return s.slice(1, -1);
273
+ }
274
+ }
275
+ return s;
276
+ }
277
+ return val;
278
+ }
279
+ function mapJsonlTypeToToolName(type) {
280
+ switch (type) {
281
+ case "RUN_COMMAND": return "run_command";
282
+ case "LIST_DIRECTORY": return "list_dir";
283
+ case "VIEW_FILE": return "view_file";
284
+ case "GREP_SEARCH": return "grep_search";
285
+ case "CODE_ACTION": return "write_file";
286
+ case "ASK_QUESTION": return "ask_question";
287
+ default: return "unknown";
288
+ }
289
+ }
290
+ export function cleanAntigravityContent(content) {
291
+ return cleanUserMessage(content);
292
+ }
293
+ export function loadAntigravityJsonlLedger(filePath) {
294
+ const content = readFileSync(filePath, "utf8");
295
+ const lines = content.split("\n").filter((line) => line.trim().length > 0);
296
+ const events = [];
297
+ let seq = 0;
298
+ let sawUserMessage = false;
299
+ let callCounter = 0;
300
+ let cwd;
301
+ const push = (event) => {
302
+ events.push({ ...event, seq: seq++ });
303
+ };
304
+ const pendingToolCalls = [];
305
+ for (const line of lines) {
306
+ let step;
307
+ try {
308
+ step = JSON.parse(line);
309
+ }
310
+ catch {
311
+ continue;
312
+ }
313
+ const type = step.type;
314
+ const status = step.status;
315
+ if (type === "CONVERSATION_HISTORY" || type === "KNOWLEDGE_ARTIFACTS" || type === "SYSTEM_MESSAGE") {
316
+ continue;
317
+ }
318
+ if (type === "USER_INPUT") {
319
+ const text = step.content || "";
320
+ if (text) {
321
+ const cleanedText = cleanAntigravityContent(text);
322
+ if (!sawUserMessage) {
323
+ sawUserMessage = true;
324
+ push({ type: "task.started", content: truncate(cleanedText, MESSAGE_MAX) });
325
+ }
326
+ push({ type: "message.user", content: truncate(cleanedText, MESSAGE_MAX) });
327
+ }
328
+ }
329
+ else if (type === "PLANNER_RESPONSE") {
330
+ const text = step.content || "";
331
+ if (text) {
332
+ push({ type: "message.assistant", content: truncate(text, MESSAGE_MAX) });
333
+ }
334
+ if (Array.isArray(step.tool_calls)) {
335
+ for (const tc of step.tool_calls) {
336
+ const toolName = tc.name;
337
+ const rawArgs = tc.args;
338
+ const cleanArgs = {};
339
+ if (rawArgs && typeof rawArgs === "object") {
340
+ for (const [k, v] of Object.entries(rawArgs)) {
341
+ cleanArgs[k] = cleanValue(v);
342
+ }
343
+ }
344
+ if (typeof cleanArgs.Cwd === "string") {
345
+ cwd = cwd ?? cleanArgs.Cwd;
346
+ }
347
+ const callId = `agy_${callCounter++}`;
348
+ const tool = {
349
+ name: toolName,
350
+ callId,
351
+ ...(rawArgs ? { input: cleanArgs } : {}),
352
+ ...(antigravityTarget(cleanArgs) ? { target: antigravityTarget(cleanArgs) } : {}),
353
+ };
354
+ push({ type: "tool.called", tool });
355
+ pendingToolCalls.push({ name: toolName, args: cleanArgs, callId });
356
+ }
357
+ }
358
+ }
359
+ else if (["RUN_COMMAND", "LIST_DIRECTORY", "VIEW_FILE", "GREP_SEARCH", "CODE_ACTION", "ASK_QUESTION", "ERROR_MESSAGE", "GENERIC"].includes(type)) {
360
+ const pending = pendingToolCalls.shift();
361
+ const toolName = pending?.name ?? mapJsonlTypeToToolName(type);
362
+ const callId = pending?.callId ?? `agy_${callCounter++}`;
363
+ const target = pending ? antigravityTarget(pending.args) : undefined;
364
+ const outcome = step.content || "";
365
+ const isError = status === "ERROR" || type === "ERROR_MESSAGE";
366
+ push({
367
+ type: isError ? "tool.failed" : "tool.completed",
368
+ tool: {
369
+ name: toolName,
370
+ callId,
371
+ outcome: truncate(outcome ?? "(no output captured)", OUTCOME_MAX),
372
+ isError,
373
+ ...(target ? { target } : {}),
374
+ },
375
+ });
376
+ }
377
+ }
378
+ const parts = filePath.split("/").filter(Boolean);
379
+ const sessionId = parts[parts.length - 4] ?? "unknown";
380
+ return {
381
+ sessionId,
382
+ agent: "antigravity",
383
+ sourcePath: filePath,
384
+ ...(cwd ? { cwd } : {}),
385
+ events,
386
+ };
387
+ }
388
+ const DISCOVERY_SCAN_LIMIT = 25;
389
+ /**
390
+ * Newest Antigravity conversation whose tool steps reference the workspace
391
+ * (via run_command Cwd or file-path args). Checks both the main install and
392
+ * the IDE-profile location. Legacy .pb conversations are skipped, but
393
+ * active .jsonl transcripts are supported.
394
+ */
395
+ export function latestAntigravityConversation(workspaceDir, home = homedir()) {
396
+ const target = resolve(workspaceDir);
397
+ const candidates = [];
398
+ // 1. Scan SQLite DB files
399
+ for (const root of [
400
+ join(home, ".gemini", "antigravity", "conversations"),
401
+ join(home, ".gemini", "antigravity-ide", "conversations"),
402
+ ]) {
403
+ let entries;
404
+ try {
405
+ entries = readdirSync(root);
406
+ }
407
+ catch {
408
+ continue;
409
+ }
410
+ for (const name of entries) {
411
+ if (!name.endsWith(".db")) {
412
+ continue;
413
+ }
414
+ const full = join(root, name);
415
+ try {
416
+ candidates.push({ path: full, mtime: statSync(full).mtimeMs });
417
+ }
418
+ catch {
419
+ continue;
420
+ }
421
+ }
422
+ }
423
+ // 2. Scan active JSONL brain logs
424
+ for (const root of [
425
+ join(home, ".gemini", "antigravity", "brain"),
426
+ join(home, ".gemini", "antigravity-ide", "brain"),
427
+ ]) {
428
+ let entries;
429
+ try {
430
+ entries = readdirSync(root);
431
+ }
432
+ catch {
433
+ continue;
434
+ }
435
+ for (const name of entries) {
436
+ const transcriptPath = join(root, name, ".system_generated", "logs", "transcript.jsonl");
437
+ try {
438
+ candidates.push({ path: transcriptPath, mtime: statSync(transcriptPath).mtimeMs });
439
+ }
440
+ catch {
441
+ continue;
442
+ }
443
+ }
444
+ }
445
+ candidates.sort((a, b) => b.mtime - a.mtime);
446
+ for (const candidate of candidates.slice(0, DISCOVERY_SCAN_LIMIT)) {
447
+ try {
448
+ const ledger = loadAntigravityLedger(candidate.path);
449
+ const touchesWorkspace = ledger.cwd === target
450
+ || ledger.events.some((event) => event.tool?.target?.startsWith(target)
451
+ || (typeof event.tool?.input?.Cwd === "string"
452
+ && (event.tool?.input).Cwd === target));
453
+ if (touchesWorkspace) {
454
+ return candidate.path;
455
+ }
456
+ }
457
+ catch {
458
+ continue;
459
+ }
460
+ }
461
+ return undefined;
462
+ }
463
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/adapters/antigravity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Ledger } from "../ledger.js";
2
+ export declare function parseClaudeTranscript(jsonl: string, sourcePath?: string): Ledger;
3
+ /** The one human-meaningful argument: path, command, url, pattern… (shared across adapters) */
4
+ export declare function extractTarget(input: unknown): string | undefined;
5
+ /**
6
+ * Resolve the matching tool name onto tool.completed/failed events by callId.
7
+ * Transcripts carry the name only on tool_use; results reference the id.
8
+ */
9
+ export declare function resolveToolNames(ledger: Ledger): Ledger;
10
+ /** ~/.claude/projects/<encoded-cwd>: every non [a-zA-Z0-9-] char becomes "-". */
11
+ export declare function claudeProjectDir(workspaceDir: string, home?: string): string;
12
+ /** Newest transcript JSONL for a workspace, or undefined when none exists. */
13
+ export declare function latestClaudeTranscript(workspaceDir: string, home?: string): string | undefined;
14
+ export declare function loadClaudeLedger(transcriptPath: string): Ledger;