@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.
- package/LICENSE +202 -0
- package/README.md +144 -0
- package/dist/adapters/antigravity.d.ts +19 -0
- package/dist/adapters/antigravity.js +463 -0
- package/dist/adapters/antigravity.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +14 -0
- package/dist/adapters/claude-code.js +213 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +12 -0
- package/dist/adapters/codex.js +247 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/gemini.d.ts +10 -0
- package/dist/adapters/gemini.js +171 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/opencode.d.ts +3 -0
- package/dist/adapters/opencode.js +137 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/pi.d.ts +6 -0
- package/dist/adapters/pi.js +172 -0
- package/dist/adapters/pi.js.map +1 -0
- package/dist/artifacts.d.ts +25 -0
- package/dist/artifacts.js +50 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/bench-live.d.ts +28 -0
- package/dist/bench-live.js +187 -0
- package/dist/bench-live.js.map +1 -0
- package/dist/bench.d.ts +33 -0
- package/dist/bench.js +213 -0
- package/dist/bench.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +338 -0
- package/dist/cli.js.map +1 -0
- package/dist/compile.d.ts +27 -0
- package/dist/compile.js +193 -0
- package/dist/compile.js.map +1 -0
- package/dist/git.d.ts +45 -0
- package/dist/git.js +172 -0
- package/dist/git.js.map +1 -0
- package/dist/handoff.d.ts +26 -0
- package/dist/handoff.js +80 -0
- package/dist/handoff.js.map +1 -0
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.js +114 -0
- package/dist/hooks.js.map +1 -0
- package/dist/ids.d.ts +10 -0
- package/dist/ids.js +32 -0
- package/dist/ids.js.map +1 -0
- package/dist/inject/antigravity.d.ts +7 -0
- package/dist/inject/antigravity.js +391 -0
- package/dist/inject/antigravity.js.map +1 -0
- package/dist/inject/claude-code.d.ts +15 -0
- package/dist/inject/claude-code.js +53 -0
- package/dist/inject/claude-code.js.map +1 -0
- package/dist/inject/codex.d.ts +7 -0
- package/dist/inject/codex.js +307 -0
- package/dist/inject/codex.js.map +1 -0
- package/dist/inject/dispatch.d.ts +11 -0
- package/dist/inject/dispatch.js +42 -0
- package/dist/inject/dispatch.js.map +1 -0
- package/dist/inject.d.ts +22 -0
- package/dist/inject.js +47 -0
- package/dist/inject.js.map +1 -0
- package/dist/ledger.d.ts +45 -0
- package/dist/ledger.js +50 -0
- package/dist/ledger.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.js +197 -0
- package/dist/mcp.js.map +1 -0
- package/dist/packet.d.ts +185 -0
- package/dist/packet.js +154 -0
- package/dist/packet.js.map +1 -0
- package/dist/redact.d.ts +19 -0
- package/dist/redact.js +86 -0
- package/dist/redact.js.map +1 -0
- package/dist/render.d.ts +11 -0
- package/dist/render.js +145 -0
- package/dist/render.js.map +1 -0
- package/dist/summarize.d.ts +35 -0
- package/dist/summarize.js +166 -0
- package/dist/summarize.js.map +1 -0
- package/package.json +61 -0
- package/schemas/packet.v1.schema.json +510 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { loadPacket } from "./artifacts.js";
|
|
5
|
+
import { captureGitState, restoreWorkspace, snapshotRefExists, verifyWorkspace } from "./git.js";
|
|
6
|
+
import { AGENTS, performHandoff, REASONS } from "./handoff.js";
|
|
7
|
+
import { handleHookPayload, installClaudeHooks, readStdin } from "./hooks.js";
|
|
8
|
+
import { runMcpServer } from "./mcp.js";
|
|
9
|
+
import { packetJsonSchema, verifySeal } from "./packet.js";
|
|
10
|
+
import { renderResumePrompt, renderStatus } from "./render.js";
|
|
11
|
+
import { INJECT_TARGETS, injectPacket, isInjectTarget } from "./inject/dispatch.js";
|
|
12
|
+
const HELP = `memento — cross-agent session continuity
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
memento compile [--agent claude-code|codex|gemini-cli|antigravity|pi|opencode]
|
|
16
|
+
[--transcript <path>] [--workspace <dir>] [--reason <reason>]
|
|
17
|
+
[--task <taskId>] [--no-snapshot]
|
|
18
|
+
Compile a Continuation Packet from an agent session and write it to
|
|
19
|
+
<workspace>/.memento/handoff.json + HANDOFF.md.
|
|
20
|
+
--reason: context_exhaustion | operator_switch | session_end |
|
|
21
|
+
scheduled | team_handoff (default: operator_switch)
|
|
22
|
+
|
|
23
|
+
memento inject codex|antigravity|claude-code [--workspace <dir>]
|
|
24
|
+
Write the compiled packet as a native session in the target agent's
|
|
25
|
+
sessions directory so it appears in their Recent list — no paste step.
|
|
26
|
+
codex → ~/.codex/sessions/<date>/rollout-*.jsonl + SQLite index
|
|
27
|
+
antigravity → brain logs + SQLite
|
|
28
|
+
claude-code → ~/.claude/projects/<workspace>/<uuid>.jsonl
|
|
29
|
+
|
|
30
|
+
memento handoff <from> <to> [--workspace <dir>] [--reason <reason>]
|
|
31
|
+
One shot: compile the latest <from> session and inject it as a native
|
|
32
|
+
<to> session — the whole point of memento.
|
|
33
|
+
<from>: claude-code | codex | gemini-cli | antigravity | pi | opencode
|
|
34
|
+
<to>: codex | claude-code | antigravity
|
|
35
|
+
e.g. memento handoff codex claude-code
|
|
36
|
+
|
|
37
|
+
memento resume [--workspace <dir>]
|
|
38
|
+
Print the resume prompt for pasting into any agent:
|
|
39
|
+
codex exec "$(memento resume)"
|
|
40
|
+
|
|
41
|
+
memento verify [--workspace <dir>]
|
|
42
|
+
Compare the live workspace against the packet's recorded git state.
|
|
43
|
+
Exit 0 when clean, 1 on drift.
|
|
44
|
+
|
|
45
|
+
memento restore [--workspace <dir>] [--force]
|
|
46
|
+
Materialize the packet's working-tree snapshot into the workspace — the
|
|
47
|
+
prior agent's actual uncommitted + untracked files, not just a summary.
|
|
48
|
+
Refuses to overwrite diverging local edits unless --force.
|
|
49
|
+
|
|
50
|
+
memento status [--workspace <dir>]
|
|
51
|
+
One-line packet summary.
|
|
52
|
+
|
|
53
|
+
memento schema
|
|
54
|
+
Print the Packet v1 JSON Schema.
|
|
55
|
+
|
|
56
|
+
memento install-hooks claude-code [--workspace <dir>] [--command <cmd>]
|
|
57
|
+
Add PreCompact + SessionEnd hooks to <workspace>/.claude/settings.json
|
|
58
|
+
so a packet is compiled automatically at context pressure.
|
|
59
|
+
--command defaults to "memento hook" (requires memento on PATH).
|
|
60
|
+
|
|
61
|
+
memento install-hooks codex
|
|
62
|
+
Register [mcp_servers.memento] in ~/.codex/config.toml so Codex calls
|
|
63
|
+
memento_resume / memento_handoff natively. Idempotent, append-only.
|
|
64
|
+
|
|
65
|
+
memento hook
|
|
66
|
+
Hook stdin entrypoint: reads the Claude Code hook payload and compiles
|
|
67
|
+
a packet from the session's own transcript. Always exits 0.
|
|
68
|
+
|
|
69
|
+
memento mcp
|
|
70
|
+
Run Memento as an MCP server over stdio, exposing memento_handoff,
|
|
71
|
+
memento_resume, memento_verify, memento_status as native agent tools.
|
|
72
|
+
Register: claude mcp add memento -- memento mcp
|
|
73
|
+
|
|
74
|
+
memento bench [--json <path>]
|
|
75
|
+
Continuity Bench: fixed scenarios scoring packet fidelity
|
|
76
|
+
(objective survival, failure surfacing, in-flight state, redaction,
|
|
77
|
+
chain integrity). Offline, reproducible. Exit 1 on any failed check.
|
|
78
|
+
|
|
79
|
+
memento bench-live [--exec "<cmd>"] [--baseline] [--json <path>]
|
|
80
|
+
Live bench: a REAL receiving agent gets the resume prompt on stdin in
|
|
81
|
+
a fixture repo; what it does is scored mechanically (next step done,
|
|
82
|
+
constraint honored, completed work not redone). --baseline adds a
|
|
83
|
+
cold-start arm — the delta is what the packet buys.
|
|
84
|
+
Default executor: claude -p --permission-mode acceptEdits
|
|
85
|
+
`;
|
|
86
|
+
function flag(args, name) {
|
|
87
|
+
const index = args.indexOf(name);
|
|
88
|
+
return index !== -1 ? args[index + 1] : undefined;
|
|
89
|
+
}
|
|
90
|
+
function readPacket(workspace) {
|
|
91
|
+
const packet = loadPacket(workspace);
|
|
92
|
+
if (!packet) {
|
|
93
|
+
console.error(`No packet found in ${workspace}/.memento — run \`memento compile\` first.`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
return packet;
|
|
97
|
+
}
|
|
98
|
+
async function main() {
|
|
99
|
+
const [command, ...args] = process.argv.slice(2);
|
|
100
|
+
const workspace = resolve(flag(args, "--workspace") ?? process.cwd());
|
|
101
|
+
if (command === "version" || command === "--version" || command === "-v") {
|
|
102
|
+
const pkg = createRequire(import.meta.url)("../package.json");
|
|
103
|
+
console.log(`memento ${pkg.version}`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
switch (command) {
|
|
107
|
+
case "compile": {
|
|
108
|
+
const reasonInput = flag(args, "--reason") ?? "operator_switch";
|
|
109
|
+
if (!REASONS.includes(reasonInput)) {
|
|
110
|
+
console.error(`Unknown --reason "${reasonInput}". One of: ${REASONS.join(", ")}`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
const agent = flag(args, "--agent");
|
|
114
|
+
const transcript = flag(args, "--transcript");
|
|
115
|
+
const taskId = flag(args, "--task");
|
|
116
|
+
const result = await performHandoff({
|
|
117
|
+
workspaceDir: workspace,
|
|
118
|
+
reason: reasonInput,
|
|
119
|
+
...(agent ? { agent } : {}),
|
|
120
|
+
...(transcript ? { transcript } : {}),
|
|
121
|
+
...(taskId ? { taskId } : {}),
|
|
122
|
+
...(args.includes("--no-snapshot") ? { noSnapshot: true } : {}),
|
|
123
|
+
});
|
|
124
|
+
const { packet, artifacts } = result;
|
|
125
|
+
console.log(`Sealed packet ${packet.packet.id} (task ${packet.packet.taskId}, seq ${packet.packet.seq})`);
|
|
126
|
+
console.log(` ledger: ${result.transcriptPath} (${result.eventCount} events)`);
|
|
127
|
+
console.log(` snapshot: ${packet.workspace.git?.snapshotRef ?? "(none)"}`);
|
|
128
|
+
console.log(` redaction: ${packet.redaction.count} hit(s)`);
|
|
129
|
+
console.log(` wrote: ${artifacts.jsonPath}`);
|
|
130
|
+
console.log(` ${artifacts.markdownPath}`);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
case "inject": {
|
|
134
|
+
const target = args.find((a) => !a.startsWith("--"));
|
|
135
|
+
if (!target || !isInjectTarget(target)) {
|
|
136
|
+
console.error(`Usage: memento inject ${INJECT_TARGETS.join("|")} [--workspace <dir>]`);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
const packet = readPacket(workspace);
|
|
140
|
+
try {
|
|
141
|
+
const lines = await injectPacket(target, packet, workspace);
|
|
142
|
+
console.log(lines.join("\n"));
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
console.error(`Inject failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
case "handoff": {
|
|
151
|
+
// One shot: compile from <from>, inject into <to>. The whole point
|
|
152
|
+
// of memento — pass the live session straight to the next agent.
|
|
153
|
+
const positionals = args.filter((a) => !a.startsWith("--"));
|
|
154
|
+
const from = positionals[0];
|
|
155
|
+
const to = positionals[1];
|
|
156
|
+
if (!from || !to || !AGENTS.includes(from) || !isInjectTarget(to)) {
|
|
157
|
+
console.error(`Usage: memento handoff <from> <to> e.g. memento handoff codex claude-code`);
|
|
158
|
+
console.error(` <from> (session to read): ${AGENTS.join(" | ")}`);
|
|
159
|
+
console.error(` <to> (native target): ${INJECT_TARGETS.join(" | ")}`);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
const reasonInput = flag(args, "--reason") ?? "operator_switch";
|
|
163
|
+
if (!REASONS.includes(reasonInput)) {
|
|
164
|
+
console.error(`Unknown --reason "${reasonInput}". One of: ${REASONS.join(", ")}`);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
const transcript = flag(args, "--transcript");
|
|
168
|
+
const result = await performHandoff({
|
|
169
|
+
workspaceDir: workspace,
|
|
170
|
+
reason: reasonInput,
|
|
171
|
+
agent: from,
|
|
172
|
+
...(transcript ? { transcript } : {}),
|
|
173
|
+
...(args.includes("--no-snapshot") ? { noSnapshot: true } : {}),
|
|
174
|
+
});
|
|
175
|
+
console.log(`Compiled packet ${result.packet.packet.id} from ${from} (${result.eventCount} events).`);
|
|
176
|
+
try {
|
|
177
|
+
const lines = await injectPacket(to, result.packet, workspace);
|
|
178
|
+
console.log(lines.join("\n"));
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
console.error(`Inject failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
console.log(`\nHanded off ${from} → ${to}.`);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
case "mcp": {
|
|
188
|
+
await runMcpServer();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
case "bench-live": {
|
|
192
|
+
const { runLiveBench, formatLiveBenchReport, shellExecutor } = await import("./bench-live.js");
|
|
193
|
+
const command = flag(args, "--exec") ?? "claude -p --permission-mode acceptEdits";
|
|
194
|
+
const report = await runLiveBench({
|
|
195
|
+
executor: shellExecutor(command),
|
|
196
|
+
executorLabel: command,
|
|
197
|
+
...(args.includes("--baseline") ? { baseline: true } : {}),
|
|
198
|
+
});
|
|
199
|
+
console.log(formatLiveBenchReport(report));
|
|
200
|
+
const liveOut = flag(args, "--json");
|
|
201
|
+
if (liveOut) {
|
|
202
|
+
const { writeFileSync } = await import("node:fs");
|
|
203
|
+
writeFileSync(liveOut, `${JSON.stringify(report, null, 2)}\n`);
|
|
204
|
+
console.log(`report: ${liveOut}`);
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
case "bench": {
|
|
209
|
+
const { runContinuityBench, formatBenchReport } = await import("./bench.js");
|
|
210
|
+
const report = await runContinuityBench();
|
|
211
|
+
console.log(formatBenchReport(report));
|
|
212
|
+
const out = flag(args, "--json");
|
|
213
|
+
if (out) {
|
|
214
|
+
const { writeFileSync } = await import("node:fs");
|
|
215
|
+
writeFileSync(out, `${JSON.stringify(report, null, 2)}\n`);
|
|
216
|
+
console.log(`report: ${out}`);
|
|
217
|
+
}
|
|
218
|
+
if (!report.allPassed) {
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
case "install-hooks": {
|
|
224
|
+
const agent = args.find((arg) => !arg.startsWith("--")) ?? "claude-code";
|
|
225
|
+
if (agent === "codex") {
|
|
226
|
+
const { installCodexMcp } = await import("./hooks.js");
|
|
227
|
+
const result = installCodexMcp();
|
|
228
|
+
console.log(result.installed
|
|
229
|
+
? `Registered [mcp_servers.memento] in ${result.configPath}`
|
|
230
|
+
: `Already registered in ${result.configPath} — left as-is.`);
|
|
231
|
+
console.log(`Codex can now call memento_resume / memento_handoff / memento_verify / memento_status natively.`);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (agent !== "claude-code") {
|
|
235
|
+
console.error(`Installer for "${agent}" is not implemented yet (claude-code | codex).`);
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
const command = flag(args, "--command") ?? "memento hook";
|
|
239
|
+
const result = installClaudeHooks(workspace, command);
|
|
240
|
+
console.log(`Updated ${result.settingsPath}`);
|
|
241
|
+
result.installed.forEach((event) => console.log(` + ${event} → ${command}`));
|
|
242
|
+
result.skipped.forEach((event) => console.log(` = ${event} (already installed, left as-is)`));
|
|
243
|
+
if (command === "memento hook") {
|
|
244
|
+
console.log(`\nNote: "memento" must be on PATH for hooks to fire (pnpm build && npm link).`);
|
|
245
|
+
}
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
case "hook": {
|
|
249
|
+
const outcome = await handleHookPayload(await readStdin());
|
|
250
|
+
console.error(outcome.message);
|
|
251
|
+
// Always exit 0: a capture failure must never disrupt the
|
|
252
|
+
// session it is trying to protect.
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
case "resume": {
|
|
256
|
+
const packet = readPacket(workspace);
|
|
257
|
+
if (!verifySeal(packet)) {
|
|
258
|
+
console.error("⚠ Packet seal does not verify — it was modified after sealing. Refusing.");
|
|
259
|
+
process.exit(1);
|
|
260
|
+
}
|
|
261
|
+
console.log(renderResumePrompt(packet));
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
case "verify": {
|
|
265
|
+
const packet = readPacket(workspace);
|
|
266
|
+
if (!packet.workspace.git) {
|
|
267
|
+
console.log("Packet carries no git state; nothing to verify.");
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const report = await verifyWorkspace(workspace, packet.workspace.git);
|
|
271
|
+
if (report.clean) {
|
|
272
|
+
console.log(`✓ Workspace matches packet ${packet.packet.id} — safe to continue.`);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
console.error(`✗ Drift detected against packet ${packet.packet.id}:`);
|
|
276
|
+
report.drift.forEach((line) => console.error(` ${line}`));
|
|
277
|
+
process.exit(1);
|
|
278
|
+
// eslint-disable-next-line no-unreachable
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
case "restore": {
|
|
282
|
+
const packet = readPacket(workspace);
|
|
283
|
+
const snapshotRef = packet.workspace.git?.snapshotRef;
|
|
284
|
+
if (!snapshotRef) {
|
|
285
|
+
console.error("Packet carries no working-tree snapshot — nothing to restore.");
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
if (!(await snapshotRefExists(workspace, snapshotRef))) {
|
|
289
|
+
console.error(`Snapshot ${snapshotRef} is not present in this repo.`);
|
|
290
|
+
console.error("Restore runs where the packet was captured; cross-machine restore needs a bundle.");
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
// Don't silently clobber the receiver's own uncommitted work: refuse
|
|
294
|
+
// when the live tree has edits that diverge from the packet, unless
|
|
295
|
+
// --force. A clean checkout (or one already matching the packet) is
|
|
296
|
+
// safe — that's the primary "bring the work here" case.
|
|
297
|
+
const force = args.includes("--force");
|
|
298
|
+
if (!force && packet.workspace.git) {
|
|
299
|
+
const current = await captureGitState(workspace);
|
|
300
|
+
if (current && current.dirty.length > 0) {
|
|
301
|
+
const report = await verifyWorkspace(workspace, packet.workspace.git);
|
|
302
|
+
if (!report.clean) {
|
|
303
|
+
console.error("⚠ Workspace has uncommitted changes that diverge from the packet — restore would overwrite them.");
|
|
304
|
+
report.drift.forEach((line) => console.error(` ${line}`));
|
|
305
|
+
console.error("Commit/stash your changes, or re-run with --force to overwrite.");
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const result = await restoreWorkspace(workspace, snapshotRef);
|
|
311
|
+
console.log(`✓ Restored ${result.files.length} file(s) from ${snapshotRef} into ${workspace}.`);
|
|
312
|
+
result.files.slice(0, 12).forEach((file) => console.log(` ${file}`));
|
|
313
|
+
if (result.files.length > 12) {
|
|
314
|
+
console.log(` … and ${result.files.length - 12} more`);
|
|
315
|
+
}
|
|
316
|
+
console.log("\nThe prior agent's working tree (uncommitted + untracked included) is now in place.");
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
case "status": {
|
|
320
|
+
const packet = readPacket(workspace);
|
|
321
|
+
console.log(renderStatus(packet, verifySeal(packet)));
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
case "schema": {
|
|
325
|
+
console.log(JSON.stringify(packetJsonSchema(), null, 2));
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
default: {
|
|
329
|
+
console.log(HELP);
|
|
330
|
+
process.exit(command ? 1 : 0);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
main().catch((error) => {
|
|
335
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
336
|
+
process.exit(1);
|
|
337
|
+
});
|
|
338
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Ledger } from "./ledger.js";
|
|
2
|
+
import { type Packet } from "./packet.js";
|
|
3
|
+
import { type Summarizer } from "./summarize.js";
|
|
4
|
+
/**
|
|
5
|
+
* The packet compiler (spec §7.2). Deterministic fields (git state, tool
|
|
6
|
+
* outcomes, in-flight calls) are EXTRACTED from the ledger and workspace;
|
|
7
|
+
* narrative fields (objective, next, warnings) come from the pluggable
|
|
8
|
+
* summarizer. The LLM — when one is configured — only ever writes prose
|
|
9
|
+
* around verified facts, never the facts themselves.
|
|
10
|
+
*/
|
|
11
|
+
export interface CompilePacketOptions {
|
|
12
|
+
ledger: Ledger;
|
|
13
|
+
workspaceDir: string;
|
|
14
|
+
reason: Packet["packet"]["reason"];
|
|
15
|
+
peer?: string;
|
|
16
|
+
human?: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
taskId?: string;
|
|
19
|
+
parent?: string | null;
|
|
20
|
+
seq?: number;
|
|
21
|
+
scope?: Packet["packet"]["scope"];
|
|
22
|
+
summarizer?: Summarizer;
|
|
23
|
+
/** Skip the refs/memento/* snapshot (e.g. read-only checkouts). */
|
|
24
|
+
noSnapshot?: boolean;
|
|
25
|
+
now?: () => Date;
|
|
26
|
+
}
|
|
27
|
+
export declare function compilePacket(options: CompilePacketOptions): Promise<Packet>;
|
package/dist/compile.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { inFlightCalls, truncate } from "./ledger.js";
|
|
2
|
+
import { newPacketId, newTaskId, workspaceId } from "./ids.js";
|
|
3
|
+
import { captureGitState } from "./git.js";
|
|
4
|
+
import { PacketSchema, sealPacket, } from "./packet.js";
|
|
5
|
+
import { redactDeep } from "./redact.js";
|
|
6
|
+
import { HeuristicSummarizer } from "./summarize.js";
|
|
7
|
+
const COMPLETED_MAX = 14;
|
|
8
|
+
const OUTCOME_MAX = 200;
|
|
9
|
+
export async function compilePacket(options) {
|
|
10
|
+
let summarizer = options.summarizer;
|
|
11
|
+
if (!summarizer) {
|
|
12
|
+
if (process.env.OPENAI_API_KEY || process.env.ANTHROPIC_API_KEY) {
|
|
13
|
+
try {
|
|
14
|
+
const { LlmSummarizer } = await import("./summarize.js");
|
|
15
|
+
summarizer = new LlmSummarizer();
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
summarizer = new HeuristicSummarizer();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
summarizer = new HeuristicSummarizer();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const now = options.now ?? (() => new Date());
|
|
26
|
+
const packetId = newPacketId();
|
|
27
|
+
const git = await captureGitState(options.workspaceDir, {
|
|
28
|
+
...(options.noSnapshot ? {} : { snapshotPacketId: packetId }),
|
|
29
|
+
});
|
|
30
|
+
const finalSummarizer = summarizer || new HeuristicSummarizer();
|
|
31
|
+
const summary = await finalSummarizer.summarize(options.ledger);
|
|
32
|
+
const toolState = extractToolState(options.ledger);
|
|
33
|
+
const lastRun = extractLastRun(options.ledger);
|
|
34
|
+
// Redact everything narrative or tool-derived BEFORE assembly; git paths
|
|
35
|
+
// and ids are structural and stay as-is.
|
|
36
|
+
const redacted = redactDeep({
|
|
37
|
+
objective: summary.objective,
|
|
38
|
+
planSteps: summary.planSteps,
|
|
39
|
+
decisions: summary.decisions,
|
|
40
|
+
next: summary.next,
|
|
41
|
+
warnings: summary.warnings,
|
|
42
|
+
toolState,
|
|
43
|
+
lastRun,
|
|
44
|
+
});
|
|
45
|
+
const r = redacted.value;
|
|
46
|
+
const title = truncate(r.objective.split(/[.!?\n]/)[0] ?? r.objective, 80);
|
|
47
|
+
const packet = {
|
|
48
|
+
memento: "1.0",
|
|
49
|
+
packet: {
|
|
50
|
+
id: packetId,
|
|
51
|
+
taskId: options.taskId ?? newTaskId(),
|
|
52
|
+
workspaceId: workspaceId(git?.remote ?? options.workspaceDir),
|
|
53
|
+
scope: options.scope ?? "workspace",
|
|
54
|
+
createdAt: now().toISOString(),
|
|
55
|
+
reason: options.reason,
|
|
56
|
+
from: {
|
|
57
|
+
peer: options.peer ?? `peer_${options.ledger.agent}`,
|
|
58
|
+
agent: options.ledger.agent,
|
|
59
|
+
...(options.model ? { model: options.model } : {}),
|
|
60
|
+
...(options.human ? { human: options.human } : {}),
|
|
61
|
+
},
|
|
62
|
+
seq: options.seq ?? 0,
|
|
63
|
+
parent: options.parent ?? null,
|
|
64
|
+
},
|
|
65
|
+
task: {
|
|
66
|
+
title,
|
|
67
|
+
objective: r.objective,
|
|
68
|
+
constraints: [],
|
|
69
|
+
acceptance: [],
|
|
70
|
+
},
|
|
71
|
+
plan: { steps: r.planSteps },
|
|
72
|
+
decisions: r.decisions,
|
|
73
|
+
workspace: {
|
|
74
|
+
...(git ? { git } : {}),
|
|
75
|
+
...(r.lastRun ? { lastRun: r.lastRun } : {}),
|
|
76
|
+
},
|
|
77
|
+
toolState: r.toolState,
|
|
78
|
+
memory: { inline: [] },
|
|
79
|
+
next: r.next,
|
|
80
|
+
warnings: r.warnings,
|
|
81
|
+
...(options.ledger.sourcePath ? { ledgerRef: options.ledger.sourcePath } : {}),
|
|
82
|
+
fidelity: "structural",
|
|
83
|
+
redaction: {
|
|
84
|
+
applied: redacted.count > 0,
|
|
85
|
+
rules: redacted.rulesHit,
|
|
86
|
+
count: redacted.count,
|
|
87
|
+
},
|
|
88
|
+
...(options.ledger.sourcePath ? { ledgerRef: options.ledger.sourcePath } : {}),
|
|
89
|
+
};
|
|
90
|
+
// Validate against the schema before sealing — a packet that does not
|
|
91
|
+
// parse is a bug here, not a surprise for the receiving agent.
|
|
92
|
+
return sealPacket(PacketSchema.parse(packet));
|
|
93
|
+
}
|
|
94
|
+
function extractToolState(ledger) {
|
|
95
|
+
const completed = [];
|
|
96
|
+
const seen = new Set();
|
|
97
|
+
// Walk backwards: the most recent outcome per tool+target wins, and the
|
|
98
|
+
// packet keeps only the freshest COMPLETED_MAX.
|
|
99
|
+
for (let i = ledger.events.length - 1; i >= 0; i -= 1) {
|
|
100
|
+
const event = ledger.events[i];
|
|
101
|
+
if (!event || (event.type !== "tool.completed" && event.type !== "tool.failed") || !event.tool) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const key = `${event.tool.name} ${event.tool.target ?? ""}`;
|
|
105
|
+
if (seen.has(key)) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
seen.add(key);
|
|
109
|
+
completed.unshift({
|
|
110
|
+
tool: event.tool.name,
|
|
111
|
+
...(event.tool.target ? { target: event.tool.target } : {}),
|
|
112
|
+
outcome: `${event.type === "tool.failed" ? "FAILED: " : ""}${truncate(event.tool.outcome ?? "(no output)", OUTCOME_MAX)}`,
|
|
113
|
+
});
|
|
114
|
+
if (completed.length >= COMPLETED_MAX) {
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const inFlight = inFlightCalls(ledger).map((event) => ({
|
|
119
|
+
tool: event.tool?.name ?? "unknown",
|
|
120
|
+
...(event.tool?.target ? { target: event.tool.target } : {}),
|
|
121
|
+
disposition: "NOT applied — re-derive from the actual working tree, do not assume this ran.",
|
|
122
|
+
}));
|
|
123
|
+
return {
|
|
124
|
+
completed,
|
|
125
|
+
inFlight,
|
|
126
|
+
approvals: extractApprovals(ledger),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function extractApprovals(ledger) {
|
|
130
|
+
const grantedSessionSet = new Set();
|
|
131
|
+
const pendingRequests = new Map();
|
|
132
|
+
const denied = [];
|
|
133
|
+
// Map to find request details for a resolved event
|
|
134
|
+
const requestedById = new Map();
|
|
135
|
+
for (const event of ledger.events) {
|
|
136
|
+
if (event.type === "approval.requested" && event.tool) {
|
|
137
|
+
const approvalId = event.meta?.approvalId ?? String(event.seq);
|
|
138
|
+
const detail = {
|
|
139
|
+
tool: event.tool.name,
|
|
140
|
+
target: event.tool.target,
|
|
141
|
+
reason: event.content,
|
|
142
|
+
};
|
|
143
|
+
requestedById.set(approvalId, detail);
|
|
144
|
+
pendingRequests.set(approvalId, detail);
|
|
145
|
+
}
|
|
146
|
+
else if (event.type === "approval.resolved" && event.tool) {
|
|
147
|
+
const approvalId = event.meta?.approvalId ?? String(event.seq);
|
|
148
|
+
const status = event.meta?.status;
|
|
149
|
+
const scope = event.meta?.scope;
|
|
150
|
+
// Remove from pending as it is resolved
|
|
151
|
+
pendingRequests.delete(approvalId);
|
|
152
|
+
const req = requestedById.get(approvalId);
|
|
153
|
+
const tool = event.tool.name || req?.tool || "unknown";
|
|
154
|
+
const target = event.tool.target || req?.target;
|
|
155
|
+
if (status === "approved" && scope === "session") {
|
|
156
|
+
const key = target ? `${tool}:${target}` : tool;
|
|
157
|
+
grantedSessionSet.add(key);
|
|
158
|
+
}
|
|
159
|
+
else if (status === "denied") {
|
|
160
|
+
denied.push({
|
|
161
|
+
tool,
|
|
162
|
+
...(target ? { target } : {}),
|
|
163
|
+
...(event.content ? { note: event.content } : req?.reason ? { note: req.reason } : {}),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const pending = Array.from(pendingRequests.values()).map((req) => {
|
|
169
|
+
return req.target ? `${req.tool}:${req.target}` : req.tool;
|
|
170
|
+
});
|
|
171
|
+
return {
|
|
172
|
+
granted_session: Array.from(grantedSessionSet),
|
|
173
|
+
pending,
|
|
174
|
+
denied,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function extractLastRun(ledger) {
|
|
178
|
+
for (let i = ledger.events.length - 1; i >= 0; i -= 1) {
|
|
179
|
+
const event = ledger.events[i];
|
|
180
|
+
if (event
|
|
181
|
+
&& (event.type === "tool.completed" || event.type === "tool.failed")
|
|
182
|
+
&& event.tool?.name.toLowerCase() === "bash"
|
|
183
|
+
&& event.tool.target) {
|
|
184
|
+
return {
|
|
185
|
+
cmd: event.tool.target,
|
|
186
|
+
result: truncate(event.tool.outcome ?? "(no output)", OUTCOME_MAX),
|
|
187
|
+
...(event.at ? { at: event.at } : {}),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { PacketGitState } from "./packet.js";
|
|
2
|
+
export interface CaptureGitStateOptions {
|
|
3
|
+
/** Create a refs/memento/<packetId> snapshot of the full tree. Default true. */
|
|
4
|
+
snapshotPacketId?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Capture the workspace's git state for a packet. Returns undefined when the
|
|
8
|
+
* directory is not a git repository (packets allow workspace.git to be absent).
|
|
9
|
+
*/
|
|
10
|
+
export declare function captureGitState(dir: string, options?: CaptureGitStateOptions): Promise<PacketGitState | undefined>;
|
|
11
|
+
export declare function digestDirtyState(porcelain: string, diff: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Snapshot the FULL working tree (incl. uncommitted and untracked files) into
|
|
14
|
+
* a shadow commit at refs/memento/<packetId>. Uses GIT_INDEX_FILE so the user's
|
|
15
|
+
* staging area is untouched. Returns the ref name, or null on failure —
|
|
16
|
+
* snapshot failure must never block packet compilation.
|
|
17
|
+
*/
|
|
18
|
+
export declare function snapshotWorkspace(dir: string, packetId: string, headSha: string | null): Promise<string | null>;
|
|
19
|
+
export interface DriftReport {
|
|
20
|
+
clean: boolean;
|
|
21
|
+
drift: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The continuity check (spec §7.4): compare the live workspace against the
|
|
25
|
+
* git state recorded in a packet. Drift is surfaced, never auto-resolved.
|
|
26
|
+
*/
|
|
27
|
+
export declare function verifyWorkspace(dir: string, expected: PacketGitState): Promise<DriftReport>;
|
|
28
|
+
/** True if `ref` resolves in this repo (snapshots live only where captured). */
|
|
29
|
+
export declare function snapshotRefExists(dir: string, ref: string): Promise<boolean>;
|
|
30
|
+
export interface RestoreReport {
|
|
31
|
+
/** Paths written into the working tree from the snapshot. */
|
|
32
|
+
files: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Materialize a packet's working-tree snapshot (refs/memento/<id>) back into
|
|
36
|
+
* `dir` — the receiving agent gets the prior agent's actual uncommitted AND
|
|
37
|
+
* untracked files, not just a description of them. This is what makes a memento
|
|
38
|
+
* carry executable state rather than notes.
|
|
39
|
+
*
|
|
40
|
+
* Uses a TEMPORARY index + checkout-index so the real index and HEAD are never
|
|
41
|
+
* touched. Existing files are overwritten (-f); files absent from the snapshot
|
|
42
|
+
* are left in place (non-deleting by design — restore is additive, never
|
|
43
|
+
* destructive to work the snapshot didn't know about).
|
|
44
|
+
*/
|
|
45
|
+
export declare function restoreWorkspace(dir: string, snapshotRef: string): Promise<RestoreReport>;
|