@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
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { appendFileSync, mkdirSync, writeFileSync, existsSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { loadClaudeLedger } from "../adapters/claude-code.js";
|
|
7
|
+
import { loadCodexLedger } from "../adapters/codex.js";
|
|
8
|
+
import { loadAntigravityLedger } from "../adapters/antigravity.js";
|
|
9
|
+
import { loadGeminiLedger } from "../adapters/gemini.js";
|
|
10
|
+
function translateToolCall(name, input, localCwd) {
|
|
11
|
+
let targetName = name;
|
|
12
|
+
let targetArgs = {};
|
|
13
|
+
const cleanInput = (input && typeof input === "object") ? input : {};
|
|
14
|
+
if (name === "run_command" || name === "bash" || name === "execute_command") {
|
|
15
|
+
targetName = "exec_command";
|
|
16
|
+
targetArgs = {
|
|
17
|
+
cmd: cleanInput.CommandLine || cleanInput.cmd || cleanInput.CommandLineInput || "",
|
|
18
|
+
workdir: cleanInput.Cwd || localCwd,
|
|
19
|
+
yield_time_ms: 1000,
|
|
20
|
+
max_output_tokens: 20000
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
else if (name === "view_file" || name === "read_file" || name === "view_file_content") {
|
|
24
|
+
targetName = "exec_command";
|
|
25
|
+
const filePath = cleanInput.AbsolutePath || cleanInput.path || cleanInput.TargetFile || "";
|
|
26
|
+
targetArgs = {
|
|
27
|
+
cmd: `cat ${filePath}`,
|
|
28
|
+
workdir: localCwd,
|
|
29
|
+
yield_time_ms: 1000,
|
|
30
|
+
max_output_tokens: 20000
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else if (name === "list_dir" || name === "list_directory") {
|
|
34
|
+
targetName = "exec_command";
|
|
35
|
+
const dirPath = cleanInput.DirectoryPath || cleanInput.path || "";
|
|
36
|
+
targetArgs = {
|
|
37
|
+
cmd: `ls -la ${dirPath}`,
|
|
38
|
+
workdir: localCwd,
|
|
39
|
+
yield_time_ms: 1000,
|
|
40
|
+
max_output_tokens: 20000
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
else if (name === "grep_search" || name === "grep") {
|
|
44
|
+
targetName = "exec_command";
|
|
45
|
+
const query = cleanInput.Query || cleanInput.query || "";
|
|
46
|
+
const searchPath = cleanInput.SearchPath || localCwd;
|
|
47
|
+
targetArgs = {
|
|
48
|
+
cmd: `rg ${query}`,
|
|
49
|
+
workdir: searchPath,
|
|
50
|
+
yield_time_ms: 1000,
|
|
51
|
+
max_output_tokens: 20000
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
else if (name === "write_file" || name === "write_to_file" || name === "create_file" || name === "CODE_ACTION" || name === "replace_file_content" || name === "multi_replace_file_content") {
|
|
55
|
+
targetName = "exec_command";
|
|
56
|
+
const filePath = cleanInput.TargetFile || cleanInput.path || "";
|
|
57
|
+
const content = cleanInput.CodeContent || cleanInput.content || cleanInput.ReplacementContent || "";
|
|
58
|
+
targetArgs = {
|
|
59
|
+
cmd: `cat << 'EOF' > ${filePath}\n${content}\nEOF`,
|
|
60
|
+
workdir: localCwd,
|
|
61
|
+
yield_time_ms: 1000,
|
|
62
|
+
max_output_tokens: 20000
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Fallback to exec_command with a generic print or placeholder if unknown
|
|
67
|
+
targetName = "exec_command";
|
|
68
|
+
targetArgs = {
|
|
69
|
+
cmd: `echo "Called tool: ${name}"`,
|
|
70
|
+
workdir: localCwd,
|
|
71
|
+
yield_time_ms: 1000,
|
|
72
|
+
max_output_tokens: 20000
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
name: targetName,
|
|
77
|
+
arguments: JSON.stringify(targetArgs)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function injectCodexSession(packet, workspaceDir, home = homedir()) {
|
|
81
|
+
const now = new Date();
|
|
82
|
+
const yyyy = String(now.getFullYear());
|
|
83
|
+
const mm = String(now.getMonth() + 1).padStart(2, "0");
|
|
84
|
+
const dd = String(now.getDate()).padStart(2, "0");
|
|
85
|
+
const uuid = randomUUID();
|
|
86
|
+
const timestampStr = now.toISOString().replace(/:/g, "-").replace(/\..*$/, "");
|
|
87
|
+
const rolloutName = `rollout-${timestampStr}-${uuid}.jsonl`;
|
|
88
|
+
const dirPath = join(home, ".codex", "sessions", yyyy, mm, dd);
|
|
89
|
+
const rolloutPath = join(dirPath, rolloutName);
|
|
90
|
+
mkdirSync(dirPath, { recursive: true });
|
|
91
|
+
const nowIso = now.toISOString();
|
|
92
|
+
const localCwd = resolve(workspaceDir);
|
|
93
|
+
let ledgerEvents = [];
|
|
94
|
+
if (packet.ledgerRef && existsSync(packet.ledgerRef)) {
|
|
95
|
+
try {
|
|
96
|
+
const agent = packet.packet.from.agent;
|
|
97
|
+
let ledger;
|
|
98
|
+
if (agent === "codex") {
|
|
99
|
+
ledger = loadCodexLedger(packet.ledgerRef);
|
|
100
|
+
}
|
|
101
|
+
else if (agent === "gemini-cli") {
|
|
102
|
+
ledger = loadGeminiLedger(packet.ledgerRef);
|
|
103
|
+
}
|
|
104
|
+
else if (agent === "antigravity") {
|
|
105
|
+
ledger = loadAntigravityLedger(packet.ledgerRef);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
ledger = loadClaudeLedger(packet.ledgerRef);
|
|
109
|
+
}
|
|
110
|
+
if (ledger && Array.isArray(ledger.events)) {
|
|
111
|
+
ledgerEvents = ledger.events;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.warn("Could not load ledger from ledgerRef:", error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const lines = [];
|
|
119
|
+
// 1. Write session_meta
|
|
120
|
+
lines.push(JSON.stringify({
|
|
121
|
+
timestamp: nowIso,
|
|
122
|
+
type: "session_meta",
|
|
123
|
+
payload: {
|
|
124
|
+
id: uuid,
|
|
125
|
+
timestamp: nowIso,
|
|
126
|
+
cwd: localCwd,
|
|
127
|
+
originator: "memento",
|
|
128
|
+
cli_version: "0.140.0-alpha.2",
|
|
129
|
+
source: "vscode",
|
|
130
|
+
// Codex rebuilds model context from response_items and needs these
|
|
131
|
+
// meta fields to resume cleanly; omitting them leaves the session
|
|
132
|
+
// un-resumable ("nothing carried over").
|
|
133
|
+
model_provider: "openai",
|
|
134
|
+
base_instructions: null,
|
|
135
|
+
dynamic_tools: [],
|
|
136
|
+
git: packet.workspace.git ? {
|
|
137
|
+
commit_hash: packet.workspace.git.headSha,
|
|
138
|
+
branch: packet.workspace.git.branch,
|
|
139
|
+
repository_url: packet.workspace.git.remote,
|
|
140
|
+
} : null,
|
|
141
|
+
},
|
|
142
|
+
}));
|
|
143
|
+
// 2. Write historical events from ledger
|
|
144
|
+
for (const event of ledgerEvents) {
|
|
145
|
+
const at = event.at ?? nowIso;
|
|
146
|
+
if (event.type === "message.user") {
|
|
147
|
+
// event_msg drives the TUI scrollback; response_item drives the
|
|
148
|
+
// model's conversation history on resume. Both are required.
|
|
149
|
+
lines.push(JSON.stringify({
|
|
150
|
+
timestamp: at,
|
|
151
|
+
type: "event_msg",
|
|
152
|
+
payload: {
|
|
153
|
+
type: "user_message",
|
|
154
|
+
message: event.content,
|
|
155
|
+
kind: "plain",
|
|
156
|
+
},
|
|
157
|
+
}));
|
|
158
|
+
lines.push(JSON.stringify({
|
|
159
|
+
timestamp: at,
|
|
160
|
+
type: "response_item",
|
|
161
|
+
payload: {
|
|
162
|
+
type: "message",
|
|
163
|
+
role: "user",
|
|
164
|
+
content: [{ type: "input_text", text: event.content }],
|
|
165
|
+
},
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
else if (event.type === "message.assistant") {
|
|
169
|
+
lines.push(JSON.stringify({
|
|
170
|
+
timestamp: at,
|
|
171
|
+
type: "event_msg",
|
|
172
|
+
payload: {
|
|
173
|
+
type: "agent_message",
|
|
174
|
+
message: event.content,
|
|
175
|
+
phase: "final_answer",
|
|
176
|
+
},
|
|
177
|
+
}));
|
|
178
|
+
lines.push(JSON.stringify({
|
|
179
|
+
timestamp: at,
|
|
180
|
+
type: "response_item",
|
|
181
|
+
payload: {
|
|
182
|
+
type: "message",
|
|
183
|
+
role: "assistant",
|
|
184
|
+
content: [{ type: "output_text", text: event.content }],
|
|
185
|
+
},
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
else if (event.type === "tool.called" && event.tool) {
|
|
189
|
+
const translated = translateToolCall(event.tool.name, event.tool.input, localCwd);
|
|
190
|
+
lines.push(JSON.stringify({
|
|
191
|
+
timestamp: at,
|
|
192
|
+
type: "response_item",
|
|
193
|
+
payload: {
|
|
194
|
+
type: "function_call",
|
|
195
|
+
name: translated.name,
|
|
196
|
+
arguments: translated.arguments,
|
|
197
|
+
call_id: event.tool.callId || `call_${Math.random().toString(36).substring(7)}`,
|
|
198
|
+
},
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
else if ((event.type === "tool.completed" || event.type === "tool.failed") && event.tool) {
|
|
202
|
+
const isError = event.type === "tool.failed" || event.tool.isError;
|
|
203
|
+
const formattedOutput = `Process exited with code ${isError ? 1 : 0}\nOutput:\n${event.tool.outcome ?? ""}`;
|
|
204
|
+
lines.push(JSON.stringify({
|
|
205
|
+
timestamp: at,
|
|
206
|
+
type: "response_item",
|
|
207
|
+
payload: {
|
|
208
|
+
type: "function_call_output",
|
|
209
|
+
call_id: event.tool.callId || `call_${Math.random().toString(36).substring(7)}`,
|
|
210
|
+
output: formattedOutput,
|
|
211
|
+
},
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// 3. Write final resume message
|
|
216
|
+
const codexResumeMessage = [
|
|
217
|
+
"You are continuing a task another agent started. Here is the objective and immediate next steps:",
|
|
218
|
+
"",
|
|
219
|
+
"Objective:",
|
|
220
|
+
packet.task.objective,
|
|
221
|
+
"",
|
|
222
|
+
"Next steps:",
|
|
223
|
+
packet.next.map((step, idx) => `${idx + 1}. ${step}`).join("\n"),
|
|
224
|
+
].join("\n");
|
|
225
|
+
lines.push(JSON.stringify({
|
|
226
|
+
timestamp: nowIso,
|
|
227
|
+
type: "event_msg",
|
|
228
|
+
payload: {
|
|
229
|
+
type: "user_message",
|
|
230
|
+
message: codexResumeMessage,
|
|
231
|
+
kind: "plain",
|
|
232
|
+
},
|
|
233
|
+
}));
|
|
234
|
+
// The resume prompt must reach the model, so it also goes in as a
|
|
235
|
+
// response_item message — without this, the continuing agent never sees
|
|
236
|
+
// the objective or next steps.
|
|
237
|
+
lines.push(JSON.stringify({
|
|
238
|
+
timestamp: nowIso,
|
|
239
|
+
type: "response_item",
|
|
240
|
+
payload: {
|
|
241
|
+
type: "message",
|
|
242
|
+
role: "user",
|
|
243
|
+
content: [{ type: "input_text", text: codexResumeMessage }],
|
|
244
|
+
},
|
|
245
|
+
}));
|
|
246
|
+
// 4. Write turn_context
|
|
247
|
+
lines.push(JSON.stringify({
|
|
248
|
+
timestamp: nowIso,
|
|
249
|
+
type: "turn_context",
|
|
250
|
+
payload: {
|
|
251
|
+
cwd: localCwd,
|
|
252
|
+
approval_policy: "never",
|
|
253
|
+
sandbox_policy: {
|
|
254
|
+
mode: "danger-full-access",
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
}));
|
|
258
|
+
writeFileSync(rolloutPath, lines.join("\n") + "\n");
|
|
259
|
+
// Insert row into sqlite state_5.sqlite
|
|
260
|
+
let sqliteUpdated = false;
|
|
261
|
+
const dbPath = join(home, ".codex", "state_5.sqlite");
|
|
262
|
+
if (existsSync(dbPath)) {
|
|
263
|
+
try {
|
|
264
|
+
const require = createRequire(import.meta.url);
|
|
265
|
+
const { DatabaseSync } = require("node:sqlite");
|
|
266
|
+
const db = new DatabaseSync(dbPath);
|
|
267
|
+
try {
|
|
268
|
+
const nowSec = Math.floor(now.getTime() / 1000);
|
|
269
|
+
const nowMs = now.getTime();
|
|
270
|
+
const title = `Memento Handoff: ${packet.task.title}`;
|
|
271
|
+
db.prepare(`
|
|
272
|
+
INSERT OR REPLACE INTO threads (
|
|
273
|
+
id, rollout_path, created_at, updated_at, source, model_provider, cwd, title,
|
|
274
|
+
sandbox_policy, approval_mode, tokens_used, has_user_event, archived, cli_version,
|
|
275
|
+
first_user_message, preview, created_at_ms, updated_at_ms, thread_source
|
|
276
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
277
|
+
`).run(uuid, rolloutPath, nowSec, nowSec, "vscode", "openai", localCwd, title, '{"type":"danger-full-access"}', "never", 0, 1, 0, "0.140.0-alpha.2", packet.task.objective, title, nowMs, nowMs, "user");
|
|
278
|
+
sqliteUpdated = true;
|
|
279
|
+
}
|
|
280
|
+
finally {
|
|
281
|
+
db.close();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
console.warn("Could not insert session into Codex SQLite database:", error);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Append to session_index.jsonl
|
|
289
|
+
const indexPath = join(home, ".codex", "session_index.jsonl");
|
|
290
|
+
const indexLine = JSON.stringify({
|
|
291
|
+
id: uuid,
|
|
292
|
+
thread_name: `Memento Handoff: ${packet.task.title}`,
|
|
293
|
+
updated_at: nowIso,
|
|
294
|
+
}) + "\n";
|
|
295
|
+
try {
|
|
296
|
+
appendFileSync(indexPath, indexLine);
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
console.warn("Could not append session to session_index.jsonl:", error);
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
sessionId: uuid,
|
|
303
|
+
rolloutPath,
|
|
304
|
+
sqliteUpdated,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/inject/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Packet } from "../packet.js";
|
|
2
|
+
export type InjectTarget = "codex" | "antigravity" | "claude-code";
|
|
3
|
+
export declare const INJECT_TARGETS: readonly InjectTarget[];
|
|
4
|
+
export declare function isInjectTarget(value: string): value is InjectTarget;
|
|
5
|
+
/**
|
|
6
|
+
* Write the packet as a native session for the target agent. Shared by the
|
|
7
|
+
* `inject` and `handoff` CLI commands and the `memento_handoff` MCP tool, so the
|
|
8
|
+
* per-agent logic lives in exactly one place. Returns human-readable summary
|
|
9
|
+
* lines; the caller decides how to surface them.
|
|
10
|
+
*/
|
|
11
|
+
export declare function injectPacket(target: InjectTarget, packet: Packet, workspace: string): Promise<string[]>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const INJECT_TARGETS = ["codex", "antigravity", "claude-code"];
|
|
2
|
+
export function isInjectTarget(value) {
|
|
3
|
+
return INJECT_TARGETS.includes(value);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Write the packet as a native session for the target agent. Shared by the
|
|
7
|
+
* `inject` and `handoff` CLI commands and the `memento_handoff` MCP tool, so the
|
|
8
|
+
* per-agent logic lives in exactly one place. Returns human-readable summary
|
|
9
|
+
* lines; the caller decides how to surface them.
|
|
10
|
+
*/
|
|
11
|
+
export async function injectPacket(target, packet, workspace) {
|
|
12
|
+
if (target === "codex") {
|
|
13
|
+
const { injectCodexSession } = await import("./codex.js");
|
|
14
|
+
const r = injectCodexSession(packet, workspace);
|
|
15
|
+
return [
|
|
16
|
+
"Injected Codex session:",
|
|
17
|
+
` id: ${r.sessionId}`,
|
|
18
|
+
` rollout: ${r.rolloutPath}`,
|
|
19
|
+
` sqlite: ${r.sqliteUpdated ? "updated" : "skipped/unavailable"}`,
|
|
20
|
+
" Open Codex — the session will appear in Recent.",
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
if (target === "antigravity") {
|
|
24
|
+
const { injectAntigravitySession } = await import("./antigravity.js");
|
|
25
|
+
const r = injectAntigravitySession(packet, workspace);
|
|
26
|
+
return [
|
|
27
|
+
"Injected Antigravity session:",
|
|
28
|
+
` id: ${r.sessionId}`,
|
|
29
|
+
` transcript: ${r.transcriptPath}`,
|
|
30
|
+
` sqlite: ${r.sqliteUpdated ? "updated" : "skipped/unavailable"}`,
|
|
31
|
+
" Open Antigravity — the session will appear in the sidebar.",
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
const { injectClaudeCode } = await import("./claude-code.js");
|
|
35
|
+
const r = injectClaudeCode(packet, workspace);
|
|
36
|
+
return [
|
|
37
|
+
"Injected Claude Code session:",
|
|
38
|
+
` file: ${r.sessionFile}`,
|
|
39
|
+
" Open Claude Code in this workspace — the continuation will appear in Recent.",
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/inject/dispatch.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAE/F,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,OAAQ,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,MAAoB,EACpB,MAAc,EACd,SAAiB;IAEjB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,EAAC,kBAAkB,EAAC,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO;YACH,yBAAyB;YACzB,cAAc,CAAC,CAAC,SAAS,EAAE;YAC3B,cAAc,CAAC,CAAC,WAAW,EAAE;YAC7B,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,EAAE;YACnE,mDAAmD;SACtD,CAAC;IACN,CAAC;IAED,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC3B,MAAM,EAAC,wBAAwB,EAAC,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO;YACH,+BAA+B;YAC/B,iBAAiB,CAAC,CAAC,SAAS,EAAE;YAC9B,iBAAiB,CAAC,CAAC,cAAc,EAAE;YACnC,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,EAAE;YACtE,8DAA8D;SACjE,CAAC;IACN,CAAC;IAED,MAAM,EAAC,gBAAgB,EAAC,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,OAAO;QACH,+BAA+B;QAC/B,WAAW,CAAC,CAAC,WAAW,EAAE;QAC1B,gFAAgF;KACnF,CAAC;AACN,CAAC"}
|
package/dist/inject.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public re-export surface for the inject sub-modules. Consumers can either
|
|
3
|
+
* import from this file (unified API) or from the individual adapters in
|
|
4
|
+
* src/inject/ (for tree-shaking or CLI lazy imports).
|
|
5
|
+
*/
|
|
6
|
+
export { injectCodexSession } from "./inject/codex.js";
|
|
7
|
+
export type { InjectResult as CodexInjectResult } from "./inject/codex.js";
|
|
8
|
+
export { injectAntigravitySession } from "./inject/antigravity.js";
|
|
9
|
+
export type { InjectResult as AntigravityInjectResult } from "./inject/antigravity.js";
|
|
10
|
+
export { injectClaudeCode } from "./inject/claude-code.js";
|
|
11
|
+
export type { ClaudeInjectResult } from "./inject/claude-code.js";
|
|
12
|
+
import type { Packet } from "./packet.js";
|
|
13
|
+
export type InjectTarget = "codex" | "antigravity" | "claude-code";
|
|
14
|
+
export interface InjectResult {
|
|
15
|
+
target: InjectTarget;
|
|
16
|
+
sessionFile: string;
|
|
17
|
+
hint: string;
|
|
18
|
+
}
|
|
19
|
+
/** Inject a sealed packet into the given target agent's sessions directory. */
|
|
20
|
+
export declare function injectSession(packet: Packet, target: InjectTarget, workspaceDir: string, home?: string): InjectResult;
|
|
21
|
+
/** Convenience: load packet from workspace and inject. */
|
|
22
|
+
export declare function injectFromWorkspace(workspaceDir: string, target: InjectTarget, home?: string): InjectResult;
|
package/dist/inject.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public re-export surface for the inject sub-modules. Consumers can either
|
|
3
|
+
* import from this file (unified API) or from the individual adapters in
|
|
4
|
+
* src/inject/ (for tree-shaking or CLI lazy imports).
|
|
5
|
+
*/
|
|
6
|
+
export { injectCodexSession } from "./inject/codex.js";
|
|
7
|
+
export { injectAntigravitySession } from "./inject/antigravity.js";
|
|
8
|
+
export { injectClaudeCode } from "./inject/claude-code.js";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { loadPacket } from "./artifacts.js";
|
|
11
|
+
import { injectCodexSession } from "./inject/codex.js";
|
|
12
|
+
import { injectAntigravitySession } from "./inject/antigravity.js";
|
|
13
|
+
import { injectClaudeCode } from "./inject/claude-code.js";
|
|
14
|
+
/** Inject a sealed packet into the given target agent's sessions directory. */
|
|
15
|
+
export function injectSession(packet, target, workspaceDir, home = homedir()) {
|
|
16
|
+
if (target === "codex") {
|
|
17
|
+
const r = injectCodexSession(packet, workspaceDir, home);
|
|
18
|
+
return {
|
|
19
|
+
target,
|
|
20
|
+
sessionFile: r.rolloutPath,
|
|
21
|
+
hint: `Open Codex — the session will appear in Recent.`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (target === "antigravity") {
|
|
25
|
+
const r = injectAntigravitySession(packet, workspaceDir, home);
|
|
26
|
+
return {
|
|
27
|
+
target,
|
|
28
|
+
sessionFile: r.transcriptPath,
|
|
29
|
+
hint: `Open Antigravity — the session will appear in the sidebar.`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const r = injectClaudeCode(packet, workspaceDir, home);
|
|
33
|
+
return {
|
|
34
|
+
target,
|
|
35
|
+
sessionFile: r.sessionFile,
|
|
36
|
+
hint: `Open Claude Code in this workspace — the continuation will appear in Recent.`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Convenience: load packet from workspace and inject. */
|
|
40
|
+
export function injectFromWorkspace(workspaceDir, target, home = homedir()) {
|
|
41
|
+
const packet = loadPacket(workspaceDir);
|
|
42
|
+
if (!packet) {
|
|
43
|
+
throw new Error(`No packet found in ${workspaceDir}/.memento — run \`memento compile\` first.`);
|
|
44
|
+
}
|
|
45
|
+
return injectSession(packet, target, workspaceDir, home);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAC,wBAAwB,EAAC,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAGzD,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAC,wBAAwB,EAAC,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAWzD,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CACzB,MAAc,EACd,MAAoB,EACpB,YAAoB,EACpB,OAAe,OAAO,EAAE;IAExB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO;YACH,MAAM;YACN,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,IAAI,EAAE,iDAAiD;SAC1D,CAAC;IACN,CAAC;IAED,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/D,OAAO;YACH,MAAM;YACN,WAAW,EAAE,CAAC,CAAC,cAAc;YAC7B,IAAI,EAAE,4DAA4D;SACrE,CAAC;IACN,CAAC;IAED,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO;QACH,MAAM;QACN,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,8EAA8E;KACvF,CAAC;AACN,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,mBAAmB,CAC/B,YAAoB,EACpB,MAAoB,EACpB,OAAe,OAAO,EAAE;IAExB,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,4CAA4C,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/ledger.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Session Ledger (spec §5.2): every agent's native session format is
|
|
3
|
+
* normalized into this one event vocabulary. Adapters produce ledgers;
|
|
4
|
+
* the compiler consumes them. The ledger is the raw material — packets are
|
|
5
|
+
* compiled FROM it, never invented beside it.
|
|
6
|
+
*/
|
|
7
|
+
export type LedgerEventType = "task.started" | "message.user" | "message.assistant" | "tool.called" | "tool.completed" | "tool.failed" | "approval.requested" | "approval.resolved" | "plan.updated" | "decision.made" | "compaction" | "handoff.initiated" | "handoff.completed";
|
|
8
|
+
export interface LedgerToolInfo {
|
|
9
|
+
name: string;
|
|
10
|
+
/** Primary argument worth showing a human: file path, command, url… */
|
|
11
|
+
target?: string;
|
|
12
|
+
/** Correlates tool.called with its tool.completed/failed. */
|
|
13
|
+
callId?: string;
|
|
14
|
+
input?: unknown;
|
|
15
|
+
/** For completed/failed events: truncated observable result. */
|
|
16
|
+
outcome?: string;
|
|
17
|
+
isError?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface LedgerEvent {
|
|
20
|
+
seq: number;
|
|
21
|
+
type: LedgerEventType;
|
|
22
|
+
/** ISO 8601 when the source format provides one. */
|
|
23
|
+
at?: string;
|
|
24
|
+
/** Human-readable payload: message text, summary text, decision text. */
|
|
25
|
+
content?: string;
|
|
26
|
+
tool?: LedgerToolInfo;
|
|
27
|
+
meta?: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
export interface Ledger {
|
|
30
|
+
sessionId: string;
|
|
31
|
+
/** Producing agent, e.g. "claude-code", "codex", "gemini-cli", "pi". */
|
|
32
|
+
agent: string;
|
|
33
|
+
sourcePath?: string;
|
|
34
|
+
cwd?: string;
|
|
35
|
+
gitBranch?: string;
|
|
36
|
+
events: LedgerEvent[];
|
|
37
|
+
}
|
|
38
|
+
/** Truncate observable output for packet/ledger embedding. */
|
|
39
|
+
export declare function truncate(text: string, max: number): string;
|
|
40
|
+
export declare function cleanMementoTemplate(content: string): string;
|
|
41
|
+
export declare function cleanUserMessage(content: string): string;
|
|
42
|
+
/** First user message = the task statement, by convention. */
|
|
43
|
+
export declare function firstUserMessage(ledger: Ledger): string | undefined;
|
|
44
|
+
/** tool.called events that never got a completed/failed with the same callId. */
|
|
45
|
+
export declare function inFlightCalls(ledger: Ledger): LedgerEvent[];
|
package/dist/ledger.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Session Ledger (spec §5.2): every agent's native session format is
|
|
3
|
+
* normalized into this one event vocabulary. Adapters produce ledgers;
|
|
4
|
+
* the compiler consumes them. The ledger is the raw material — packets are
|
|
5
|
+
* compiled FROM it, never invented beside it.
|
|
6
|
+
*/
|
|
7
|
+
/** Truncate observable output for packet/ledger embedding. */
|
|
8
|
+
export function truncate(text, max) {
|
|
9
|
+
const collapsed = text.replace(/\s+/g, " ").trim();
|
|
10
|
+
return collapsed.length <= max ? collapsed : `${collapsed.slice(0, max - 1)}…`;
|
|
11
|
+
}
|
|
12
|
+
export function cleanMementoTemplate(content) {
|
|
13
|
+
const trimmed = content.trim();
|
|
14
|
+
if (!trimmed.includes("You are continuing a task another agent started") && !trimmed.includes("# Memento Handoff")) {
|
|
15
|
+
return content;
|
|
16
|
+
}
|
|
17
|
+
// 1. Try "## Objective" markdown header format
|
|
18
|
+
const objectiveMarkdownMatch = trimmed.match(/##\s+Objective\s*\n+([\s\S]*?)(?:\n##|\n---|$)/i);
|
|
19
|
+
if (objectiveMarkdownMatch && objectiveMarkdownMatch[1]) {
|
|
20
|
+
return objectiveMarkdownMatch[1].trim();
|
|
21
|
+
}
|
|
22
|
+
// 2. Try "Objective:" label format
|
|
23
|
+
const objectiveLabelMatch = trimmed.match(/Objective:\s*\n+([\s\S]*?)(?:\n\n\w+:|\n\nNext steps:|$)/i);
|
|
24
|
+
if (objectiveLabelMatch && objectiveLabelMatch[1]) {
|
|
25
|
+
return objectiveLabelMatch[1].trim();
|
|
26
|
+
}
|
|
27
|
+
return content;
|
|
28
|
+
}
|
|
29
|
+
export function cleanUserMessage(content) {
|
|
30
|
+
const match = content.match(/<USER_REQUEST>([\s\S]*?)<\/USER_REQUEST>/i);
|
|
31
|
+
let text = match && match[1] ? match[1].trim() : content;
|
|
32
|
+
text = text.replace(/<ADDITIONAL_METADATA>[\s\S]*?<\/ADDITIONAL_METADATA>/gi, "");
|
|
33
|
+
text = text.replace(/<USER_SETTINGS_CHANGE>[\s\S]*?<\/USER_SETTINGS_CHANGE>/gi, "");
|
|
34
|
+
text = text.replace(/<EPHEMERAL_MESSAGE>[\s\S]*?<\/EPHEMERAL_MESSAGE>/gi, "");
|
|
35
|
+
text = text.trim();
|
|
36
|
+
return cleanMementoTemplate(text);
|
|
37
|
+
}
|
|
38
|
+
/** First user message = the task statement, by convention. */
|
|
39
|
+
export function firstUserMessage(ledger) {
|
|
40
|
+
return ledger.events.find((event) => event.type === "message.user")?.content;
|
|
41
|
+
}
|
|
42
|
+
/** tool.called events that never got a completed/failed with the same callId. */
|
|
43
|
+
export function inFlightCalls(ledger) {
|
|
44
|
+
const resolved = new Set(ledger.events
|
|
45
|
+
.filter((e) => e.type === "tool.completed" || e.type === "tool.failed")
|
|
46
|
+
.map((e) => e.tool?.callId)
|
|
47
|
+
.filter((id) => Boolean(id)));
|
|
48
|
+
return ledger.events.filter((e) => e.type === "tool.called" && (!e.tool?.callId || !resolved.has(e.tool.callId)));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
ADDED