@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 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Packet } from "./packet.js";
2
+ /**
3
+ * The markdown twin (spec §5.3): the same packet, rendered for (a) agents
4
+ * that can only read files and (b) humans. JSON is canonical; this is
5
+ * generated. Also the resume prompt wrapper (spec §7.3).
6
+ */
7
+ export declare function renderMarkdown(packet: Packet): string;
8
+ /** One-screen packet summary (CLI `status` and MCP `memento_status`). */
9
+ export declare function renderStatus(packet: Packet, sealVerified: boolean): string;
10
+ /** Spec §7.3 — instructions wrapped around every packet at resume time. */
11
+ export declare function renderResumePrompt(packet: Packet): string;
package/dist/render.js ADDED
@@ -0,0 +1,145 @@
1
+ /**
2
+ * The markdown twin (spec §5.3): the same packet, rendered for (a) agents
3
+ * that can only read files and (b) humans. JSON is canonical; this is
4
+ * generated. Also the resume prompt wrapper (spec §7.3).
5
+ */
6
+ export function renderMarkdown(packet) {
7
+ const p = packet.packet;
8
+ const lines = [];
9
+ lines.push(`# Memento Handoff — ${packet.task.title}`);
10
+ lines.push("");
11
+ lines.push(`> Continuation Packet \`${p.id}\` · task \`${p.taskId}\` · seq ${p.seq}${p.parent ? ` · parent \`${p.parent}\`` : ""}`);
12
+ lines.push(`> From **${p.from.peer}** (${p.from.agent}${p.from.model ? `, ${p.from.model}` : ""}${p.from.human ? `, operator ${p.from.human}` : ""}) · reason: **${p.reason}** · ${p.createdAt}`);
13
+ if (packet.seal) {
14
+ lines.push(`> Sealed: \`${packet.seal.alg}:${packet.seal.digest.slice(0, 16)}…\`${packet.redaction.applied ? ` · ${packet.redaction.count} redaction(s) applied [${packet.redaction.rules.join(", ")}]` : ""}`);
15
+ }
16
+ lines.push(`> ⚠ Provenance: machine-compiled from a session ledger. Verify workspace state before acting.`);
17
+ lines.push("");
18
+ lines.push("## Objective");
19
+ lines.push("");
20
+ lines.push(packet.task.objective);
21
+ lines.push("");
22
+ if (packet.task.constraints.length > 0) {
23
+ lines.push("## Constraints");
24
+ lines.push("");
25
+ packet.task.constraints.forEach((constraint) => lines.push(`- ${constraint}`));
26
+ lines.push("");
27
+ }
28
+ if (packet.plan.steps.length > 0) {
29
+ lines.push("## Plan");
30
+ lines.push("");
31
+ for (const step of packet.plan.steps) {
32
+ const box = step.status === "done" ? "x" : step.status === "in_progress" ? "~" : " ";
33
+ lines.push(`- [${box}] ${step.n}. ${step.desc}${step.note ? ` — ${step.note}` : ""}`);
34
+ }
35
+ lines.push("");
36
+ }
37
+ if (packet.decisions.length > 0) {
38
+ lines.push("## Decisions made (do not relitigate without cause)");
39
+ lines.push("");
40
+ packet.decisions.forEach((decision) => lines.push(`- **${decision.what}** — ${decision.why}`));
41
+ lines.push("");
42
+ }
43
+ lines.push("## Workspace");
44
+ lines.push("");
45
+ const git = packet.workspace.git;
46
+ if (git) {
47
+ lines.push(`- branch \`${git.branch ?? "(detached)"}\` at \`${git.headSha ?? "(no commits)"}\`${git.remote ? ` · remote ${git.remote}` : ""}`);
48
+ lines.push(`- snapshot: ${git.snapshotRef ? `\`${git.snapshotRef}\` (full tree incl. uncommitted work)` : "(none)"}`);
49
+ lines.push(`- dirty digest \`${git.dirtyDigest}\``);
50
+ if (git.dirty.length > 0) {
51
+ lines.push(`- dirty files at capture:`);
52
+ git.dirty.forEach((file) => lines.push(` - \`${file.path}\` (${file.state})`));
53
+ }
54
+ else {
55
+ lines.push("- working tree was clean at capture");
56
+ }
57
+ }
58
+ else {
59
+ lines.push("- (not a git repository at capture time)");
60
+ }
61
+ if (packet.workspace.lastRun) {
62
+ lines.push(`- last command: \`${packet.workspace.lastRun.cmd}\` → ${packet.workspace.lastRun.result}`);
63
+ }
64
+ lines.push("");
65
+ lines.push("## Tool state");
66
+ lines.push("");
67
+ if (packet.toolState.completed.length > 0) {
68
+ packet.toolState.completed.forEach((entry) => {
69
+ lines.push(`- ${entry.tool}${entry.target ? ` \`${entry.target}\`` : ""}: ${entry.outcome}`);
70
+ });
71
+ }
72
+ else {
73
+ lines.push("- (no tool activity captured)");
74
+ }
75
+ if (packet.toolState.inFlight.length > 0) {
76
+ lines.push("");
77
+ lines.push("**⚠ In-flight at capture (NOT applied):**");
78
+ packet.toolState.inFlight.forEach((entry) => {
79
+ lines.push(`- ${entry.tool}${entry.target ? ` \`${entry.target}\`` : ""} — ${entry.disposition}`);
80
+ });
81
+ }
82
+ const denied = packet.toolState.approvals.denied;
83
+ if (denied.length > 0) {
84
+ lines.push("");
85
+ lines.push("**⛔ Operator-denied actions (binding):**");
86
+ denied.forEach((entry) => lines.push(`- ${entry.tool}${entry.target ? ` \`${entry.target}\`` : ""}${entry.note ? ` — ${entry.note}` : ""}`));
87
+ }
88
+ lines.push("");
89
+ lines.push("## Next steps");
90
+ lines.push("");
91
+ packet.next.forEach((step, index) => lines.push(`${index + 1}. ${step}`));
92
+ lines.push("");
93
+ if (packet.warnings.length > 0) {
94
+ lines.push("## Warnings");
95
+ lines.push("");
96
+ packet.warnings.forEach((warning) => lines.push(`- ⚠ ${warning}`));
97
+ lines.push("");
98
+ }
99
+ if (packet.memory.inline.length > 0) {
100
+ lines.push("## Relevant memory");
101
+ lines.push("");
102
+ packet.memory.inline.forEach((memory) => lines.push(`- ${memory}`));
103
+ lines.push("");
104
+ }
105
+ if (packet.ledgerRef) {
106
+ lines.push(`---`);
107
+ lines.push(`Full session history: \`${packet.ledgerRef}\``);
108
+ lines.push("");
109
+ }
110
+ return lines.join("\n");
111
+ }
112
+ /** One-screen packet summary (CLI `status` and MCP `memento_status`). */
113
+ export function renderStatus(packet, sealVerified) {
114
+ const p = packet.packet;
115
+ return [
116
+ `packet ${p.id} (seq ${p.seq}${p.parent ? `, parent ${p.parent}` : ""})`,
117
+ `task ${p.taskId} — ${packet.task.title}`,
118
+ `from ${p.from.peer} (${p.from.agent}) · reason ${p.reason} · ${p.createdAt}`,
119
+ `seal ${packet.seal ? (sealVerified ? "verified" : "INVALID") : "missing"}`,
120
+ `next ${packet.next[0] ?? "(none)"}`,
121
+ ].join("\n");
122
+ }
123
+ /** Spec §7.3 — instructions wrapped around every packet at resume time. */
124
+ export function renderResumePrompt(packet) {
125
+ return [
126
+ "You are continuing a task another agent started. The handoff packet",
127
+ "below is the authoritative state. Before doing anything else:",
128
+ "",
129
+ "1. Verify the workspace: run `git status` and `git diff --stat` and",
130
+ " compare against the Workspace section. If anything has drifted,",
131
+ " STOP and report the drift to the operator.",
132
+ "2. Restate the objective and the next 1-3 steps in your own words.",
133
+ "3. Honor every constraint and warning — operator-denied actions are",
134
+ " decisions, not suggestions.",
135
+ "4. Items marked in-flight were NOT applied. Re-derive from the actual",
136
+ " file state; never assume an edit happened.",
137
+ "",
138
+ "Then continue the work from the Next steps section.",
139
+ "",
140
+ "---",
141
+ "",
142
+ renderMarkdown(packet),
143
+ ].join("\n");
144
+ }
145
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,MAAM,UAAU,cAAc,CAAC,MAAc;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAElM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,0BAA0B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpN,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;IAC5G,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrF,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;IAEjC,IAAI,GAAG,EAAE,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,MAAM,IAAI,YAAY,WAAW,GAAG,CAAC,OAAO,IAAI,cAAc,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/I,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,WAAW,uCAAuC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtH,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QAEpD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,QAAQ,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACzC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACxC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;IAEjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,YAAqB;IAC9D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,OAAO;QACH,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;QAC1E,YAAY,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;QAC7C,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,SAAS,EAAE;QACjF,YAAY,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;QAC/E,YAAY,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC7C,OAAO;QACH,qEAAqE;QACrE,+DAA+D;QAC/D,EAAE;QACF,qEAAqE;QACrE,oEAAoE;QACpE,+CAA+C;QAC/C,oEAAoE;QACpE,qEAAqE;QACrE,gCAAgC;QAChC,uEAAuE;QACvE,+CAA+C;QAC/C,EAAE;QACF,qDAAqD;QACrD,EAAE;QACF,KAAK;QACL,EAAE;QACF,cAAc,CAAC,MAAM,CAAC;KACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type Ledger } from "./ledger.js";
2
+ import type { Packet } from "./packet.js";
3
+ /**
4
+ * The compiler's narrative half (spec §7.2): deterministic fields are
5
+ * extracted, narrative fields are summarized. Summarizer is pluggable so an
6
+ * LLM can write better prose later — Phase 0 ships a heuristic that needs no
7
+ * network and no model, keeping `memento compile` fully offline.
8
+ */
9
+ export interface Summary {
10
+ objective: string;
11
+ planSteps: Packet["plan"]["steps"];
12
+ decisions: Packet["decisions"];
13
+ next: string[];
14
+ warnings: string[];
15
+ }
16
+ export interface Summarizer {
17
+ readonly id: string;
18
+ summarize(ledger: Ledger): Summary | Promise<Summary>;
19
+ }
20
+ export declare class HeuristicSummarizer implements Summarizer {
21
+ readonly id = "heuristic";
22
+ summarize(ledger: Ledger): Summary;
23
+ }
24
+ export interface LlmSummarizerOptions {
25
+ provider?: "openai" | "anthropic";
26
+ apiKey?: string;
27
+ model?: string;
28
+ baseURL?: string;
29
+ }
30
+ export declare class LlmSummarizer implements Summarizer {
31
+ readonly id = "llm";
32
+ private options;
33
+ constructor(options?: LlmSummarizerOptions);
34
+ summarize(ledger: Ledger): Promise<Summary>;
35
+ }
@@ -0,0 +1,166 @@
1
+ import { firstUserMessage, inFlightCalls, truncate, } from "./ledger.js";
2
+ export class HeuristicSummarizer {
3
+ id = "heuristic";
4
+ summarize(ledger) {
5
+ const objective = truncate(firstUserMessage(ledger) ?? "(no user message captured in this session)", 400);
6
+ const next = [];
7
+ const warnings = [];
8
+ // In-flight tool calls: the receiver must re-derive, never assume.
9
+ for (const event of inFlightCalls(ledger)) {
10
+ const what = [event.tool?.name, event.tool?.target].filter(Boolean).join(" ");
11
+ warnings.push(`In-flight at capture (NOT applied — re-derive from the working tree): ${what}`);
12
+ }
13
+ // Failures near the tail are usually the live problem.
14
+ const failures = ledger.events.filter((event) => event.type === "tool.failed");
15
+ const lastFailure = failures[failures.length - 1];
16
+ if (lastFailure?.tool) {
17
+ const what = [lastFailure.tool.name, lastFailure.tool.target].filter(Boolean).join(" ");
18
+ next.push(`Investigate the last failure: ${what} — ${truncate(lastFailure.tool.outcome ?? "no output", 160)}`);
19
+ }
20
+ if (failures.length > 1) {
21
+ warnings.push(`${failures.length} tool call(s) failed during this session — see ledger for details.`);
22
+ }
23
+ // The last assistant message is the best statement of "where we were".
24
+ const assistantMessages = ledger.events.filter((event) => event.type === "message.assistant");
25
+ const lastAssistant = assistantMessages[assistantMessages.length - 1];
26
+ if (lastAssistant?.content) {
27
+ next.push(`Pick up from the previous agent's last status: "${truncate(lastAssistant.content, 220)}"`);
28
+ }
29
+ const compactions = ledger.events.filter((event) => event.type === "compaction");
30
+ if (compactions.length > 0) {
31
+ warnings.push(`Session was compacted ${compactions.length} time(s); early detail lives only in the source transcript.`);
32
+ }
33
+ next.push("Verify workspace state against the packet (memento verify) before editing anything.");
34
+ return {
35
+ objective,
36
+ planSteps: [],
37
+ decisions: [],
38
+ next,
39
+ warnings,
40
+ };
41
+ }
42
+ }
43
+ export class LlmSummarizer {
44
+ id = "llm";
45
+ options;
46
+ constructor(options = {}) {
47
+ this.options = options;
48
+ }
49
+ async summarize(ledger) {
50
+ const provider = this.options.provider ??
51
+ (process.env.ANTHROPIC_API_KEY ? "anthropic" : "openai");
52
+ const apiKey = this.options.apiKey ??
53
+ (provider === "anthropic" ? process.env.ANTHROPIC_API_KEY : process.env.OPENAI_API_KEY);
54
+ const model = this.options.model ??
55
+ (provider === "anthropic" ? "claude-3-5-haiku-latest" : "gpt-4o-mini");
56
+ if (!apiKey) {
57
+ return new HeuristicSummarizer().summarize(ledger);
58
+ }
59
+ const eventsText = formatLedgerForPrompt(ledger);
60
+ const prompt = `You are compiling a Continuation Packet from an agent session ledger.
61
+ Analyze the chronological events below and extract:
62
+ 1. The overall task objective (concise).
63
+ 2. The current plan steps, their numbers, descriptions, and statuses (done, in_progress, pending). Note any progress or details.
64
+ 3. Key decisions made during the session (what was decided, why, and a reference line or tool/event context).
65
+ 4. The immediate next steps to continue this task.
66
+ 5. Critical warnings or constraints.
67
+
68
+ Output a valid JSON object matching this schema exactly (do not output any other text or markdown wrappers):
69
+ {
70
+ "objective": "overall objective",
71
+ "planSteps": [
72
+ { "n": 1, "desc": "Step description", "status": "done" | "in_progress" | "pending", "note": "optional details" }
73
+ ],
74
+ "decisions": [
75
+ { "what": "decision description", "why": "rationale for decision", "ref": "optional reference context" }
76
+ ],
77
+ "next": ["next step 1", "next step 2"],
78
+ "warnings": ["warning 1"]
79
+ }
80
+
81
+ Ledger Events:
82
+ ${eventsText}`;
83
+ try {
84
+ let jsonText = "";
85
+ if (provider === "anthropic") {
86
+ const baseURL = this.options.baseURL ?? "https://api.anthropic.com";
87
+ const res = await fetch(`${baseURL}/v1/messages`, {
88
+ method: "POST",
89
+ headers: {
90
+ "x-api-key": apiKey,
91
+ "anthropic-version": "2023-06-01",
92
+ "Content-Type": "application/json",
93
+ },
94
+ body: JSON.stringify({
95
+ model,
96
+ max_tokens: 4000,
97
+ messages: [{ role: "user", content: prompt }],
98
+ }),
99
+ });
100
+ if (!res.ok) {
101
+ throw new Error(`Anthropic API returned status ${res.status}`);
102
+ }
103
+ const data = await res.json();
104
+ const text = data?.content?.[0]?.text;
105
+ jsonText = extractJson(text || "");
106
+ }
107
+ else {
108
+ const baseURL = this.options.baseURL ?? "https://api.openai.com/v1";
109
+ const res = await fetch(`${baseURL}/chat/completions`, {
110
+ method: "POST",
111
+ headers: {
112
+ "Authorization": `Bearer ${apiKey}`,
113
+ "Content-Type": "application/json",
114
+ },
115
+ body: JSON.stringify({
116
+ model,
117
+ messages: [{ role: "user", content: prompt }],
118
+ response_format: { type: "json_object" },
119
+ }),
120
+ });
121
+ if (!res.ok) {
122
+ throw new Error(`OpenAI API returned status ${res.status}`);
123
+ }
124
+ const data = await res.json();
125
+ const text = data?.choices?.[0]?.message?.content;
126
+ jsonText = text || "";
127
+ }
128
+ const parsed = JSON.parse(jsonText);
129
+ return {
130
+ objective: parsed.objective || new HeuristicSummarizer().summarize(ledger).objective,
131
+ planSteps: Array.isArray(parsed.planSteps) ? parsed.planSteps : [],
132
+ decisions: Array.isArray(parsed.decisions) ? parsed.decisions : [],
133
+ next: Array.isArray(parsed.next) ? parsed.next.map(String) : new HeuristicSummarizer().summarize(ledger).next,
134
+ warnings: Array.isArray(parsed.warnings) ? parsed.warnings.map(String) : new HeuristicSummarizer().summarize(ledger).warnings,
135
+ };
136
+ }
137
+ catch {
138
+ return new HeuristicSummarizer().summarize(ledger);
139
+ }
140
+ }
141
+ }
142
+ function formatLedgerForPrompt(ledger) {
143
+ return ledger.events.map((e) => {
144
+ const at = e.at ? ` [${e.at}]` : "";
145
+ let detail = "";
146
+ if (e.type === "message.user" || e.type === "message.assistant" || e.type === "task.started") {
147
+ detail = `: ${e.content}`;
148
+ }
149
+ else if (e.type === "tool.called" && e.tool) {
150
+ detail = `: ${e.tool.name}(${JSON.stringify(e.tool.input ?? {})})`;
151
+ }
152
+ else if ((e.type === "tool.completed" || e.type === "tool.failed") && e.tool) {
153
+ detail = `: ${e.tool.name} -> ${e.tool.outcome}`;
154
+ }
155
+ return `[${e.seq}] ${e.type}${at}${detail}`;
156
+ }).join("\n");
157
+ }
158
+ function extractJson(text) {
159
+ const start = text.indexOf("{");
160
+ const end = text.lastIndexOf("}");
161
+ if (start !== -1 && end !== -1 && end > start) {
162
+ return text.substring(start, end + 1);
163
+ }
164
+ return text;
165
+ }
166
+ //# sourceMappingURL=summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@samjurnio_/memento",
3
+ "version": "0.2.0",
4
+ "description": "Cross-agent session continuity: hand off in-progress coding tasks between Claude Code, Codex, Gemini CLI, Pi and others.",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "author": "Samwel Charles <hi@samjunior.dev>",
8
+ "bin": {
9
+ "memento": "dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "schemas",
14
+ "README.md",
15
+ "LICENSE"
16
+ ],
17
+ "engines": {
18
+ "node": ">=22.5.0"
19
+ },
20
+ "scripts": {
21
+ "dev": "tsx src/cli.ts",
22
+ "build": "tsc && chmod +x dist/cli.js",
23
+ "typecheck": "tsc --noEmit",
24
+ "test": "node --import tsx --test \"src/**/*.test.ts\"",
25
+ "schema": "tsx src/cli.ts schema > schemas/packet.v1.schema.json",
26
+ "pack:dry": "npm pack --dry-run",
27
+ "smoke:pack": "mkdir -p /tmp/memento-pack-smoke && pnpm pack --pack-destination /tmp/memento-pack-smoke && npm exec --yes --package /tmp/memento-pack-smoke/samjurnio_-memento-$(node -p \"require('./package.json').version\").tgz -- memento version",
28
+ "prepack": "pnpm build && pnpm schema",
29
+ "prepublishOnly": "pnpm typecheck && pnpm test"
30
+ },
31
+ "dependencies": {
32
+ "@modelcontextprotocol/sdk": "^1.29.0",
33
+ "zod": "^4.1.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.13.0",
37
+ "tsx": "^4.19.0",
38
+ "typescript": "^5.7.0"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/younggeeks/memento.git"
46
+ },
47
+ "homepage": "https://github.com/younggeeks/memento#readme",
48
+ "bugs": {
49
+ "url": "https://github.com/younggeeks/memento/issues"
50
+ },
51
+ "keywords": [
52
+ "ai",
53
+ "agents",
54
+ "claude",
55
+ "codex",
56
+ "gemini",
57
+ "session-continuity",
58
+ "handoff",
59
+ "mcp"
60
+ ]
61
+ }