@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,391 @@
1
+ import { 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 mapToolToAntigravity(name, args) {
11
+ const cleanArgs = (args && typeof args === "object") ? args : {};
12
+ if (name === "exec_command") {
13
+ const cmd = cleanArgs.cmd || "";
14
+ if (cmd.startsWith("cat << 'EOF' > ")) {
15
+ const filePathMatch = cmd.match(/cat << 'EOF' > (\S+)/);
16
+ const filePath = filePathMatch ? filePathMatch[1] : "";
17
+ const lines = cmd.split("\n");
18
+ const content = lines.slice(1, -1).join("\n");
19
+ return {
20
+ type: "CODE_ACTION",
21
+ name: "write_file",
22
+ args: { TargetFile: filePath, CodeContent: content }
23
+ };
24
+ }
25
+ else if (cmd.startsWith("cat ")) {
26
+ const filePath = cmd.substring(4).trim();
27
+ return {
28
+ type: "VIEW_FILE",
29
+ name: "view_file",
30
+ args: { AbsolutePath: filePath }
31
+ };
32
+ }
33
+ else if (cmd.startsWith("ls -la ")) {
34
+ const dirPath = cmd.substring(7).trim();
35
+ return {
36
+ type: "LIST_DIRECTORY",
37
+ name: "list_dir",
38
+ args: { DirectoryPath: dirPath }
39
+ };
40
+ }
41
+ else if (cmd.startsWith("rg ")) {
42
+ const query = cmd.substring(3).trim();
43
+ return {
44
+ type: "GREP_SEARCH",
45
+ name: "grep_search",
46
+ args: { Query: query }
47
+ };
48
+ }
49
+ else {
50
+ return {
51
+ type: "RUN_COMMAND",
52
+ name: "run_command",
53
+ args: { CommandLine: cmd, Cwd: cleanArgs.workdir }
54
+ };
55
+ }
56
+ }
57
+ let type = "GENERIC";
58
+ if (name === "run_command" || name === "bash")
59
+ type = "RUN_COMMAND";
60
+ else if (name === "view_file" || name === "read_file")
61
+ type = "VIEW_FILE";
62
+ else if (name === "list_dir" || name === "list_directory")
63
+ type = "LIST_DIRECTORY";
64
+ else if (name === "grep_search" || name === "grep")
65
+ type = "GREP_SEARCH";
66
+ else if (name === "write_file" || name === "write_to_file" || name === "CODE_ACTION")
67
+ type = "CODE_ACTION";
68
+ else if (name === "ask_question")
69
+ type = "ASK_QUESTION";
70
+ return { type, name, args: cleanArgs };
71
+ }
72
+ export function injectAntigravitySession(packet, workspaceDir, home = homedir()) {
73
+ const uuid = randomUUID();
74
+ const dirPath = join(home, ".gemini", "antigravity-ide", "brain", uuid, ".system_generated", "logs");
75
+ const transcriptPath = join(dirPath, "transcript.jsonl");
76
+ mkdirSync(dirPath, { recursive: true });
77
+ const nowIso = new Date().toISOString();
78
+ let ledgerEvents = [];
79
+ if (packet.ledgerRef && existsSync(packet.ledgerRef)) {
80
+ try {
81
+ const agent = packet.packet.from.agent;
82
+ let ledger;
83
+ if (agent === "codex") {
84
+ ledger = loadCodexLedger(packet.ledgerRef);
85
+ }
86
+ else if (agent === "gemini-cli") {
87
+ ledger = loadGeminiLedger(packet.ledgerRef);
88
+ }
89
+ else if (agent === "antigravity") {
90
+ ledger = loadAntigravityLedger(packet.ledgerRef);
91
+ }
92
+ else {
93
+ ledger = loadClaudeLedger(packet.ledgerRef);
94
+ }
95
+ if (ledger && Array.isArray(ledger.events)) {
96
+ ledgerEvents = ledger.events;
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.warn("Could not load ledger from ledgerRef:", error);
101
+ }
102
+ }
103
+ const lines = [];
104
+ let stepIndex = 0;
105
+ // Map events chronologically
106
+ for (let i = 0; i < ledgerEvents.length; i++) {
107
+ const event = ledgerEvents[i];
108
+ const at = event.at ?? nowIso;
109
+ if (event.type === "task.started") {
110
+ // Ignore task.started to avoid duplicate user messages in UI
111
+ continue;
112
+ }
113
+ if (event.type === "message.user") {
114
+ lines.push(JSON.stringify({
115
+ step_index: stepIndex++,
116
+ source: "USER_EXPLICIT",
117
+ type: "USER_INPUT",
118
+ status: "DONE",
119
+ created_at: at,
120
+ content: `<USER_REQUEST>\n${event.content}\n</USER_REQUEST>`
121
+ }));
122
+ }
123
+ else if (event.type === "message.assistant") {
124
+ // Look ahead for subsequent tool calls to bundle them together
125
+ const toolCalls = [];
126
+ while (i + 1 < ledgerEvents.length && ledgerEvents[i + 1].type === "tool.called") {
127
+ const callEvent = ledgerEvents[i + 1];
128
+ const mapped = mapToolToAntigravity(callEvent.tool.name, callEvent.tool.input);
129
+ toolCalls.push({
130
+ name: mapped.name,
131
+ args: mapped.args,
132
+ toolAction: `Executing ${mapped.name}`,
133
+ toolSummary: `Executing ${mapped.name}`
134
+ });
135
+ i++; // advance loop
136
+ }
137
+ lines.push(JSON.stringify({
138
+ step_index: stepIndex++,
139
+ source: "MODEL",
140
+ type: "PLANNER_RESPONSE",
141
+ status: "DONE",
142
+ created_at: at,
143
+ content: event.content,
144
+ ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {})
145
+ }));
146
+ }
147
+ else if (event.type === "tool.called") {
148
+ // Standalone tool call without preceding assistant message
149
+ const mapped = mapToolToAntigravity(event.tool.name, event.tool.input);
150
+ lines.push(JSON.stringify({
151
+ step_index: stepIndex++,
152
+ source: "MODEL",
153
+ type: "PLANNER_RESPONSE",
154
+ status: "DONE",
155
+ created_at: at,
156
+ content: "",
157
+ tool_calls: [{
158
+ name: mapped.name,
159
+ args: mapped.args,
160
+ toolAction: `Executing ${mapped.name}`,
161
+ toolSummary: `Executing ${mapped.name}`
162
+ }]
163
+ }));
164
+ }
165
+ else if (event.type === "tool.completed" || event.type === "tool.failed") {
166
+ const isError = event.type === "tool.failed" || event.tool.isError;
167
+ const mapped = mapToolToAntigravity(event.tool.name, {});
168
+ let cleanOutcome = event.tool.outcome ?? "";
169
+ const prefixMatch = cleanOutcome.match(/^Process exited with code \d+\s+Output:\s*([\s\S]*)$/i);
170
+ if (prefixMatch) {
171
+ cleanOutcome = prefixMatch[1];
172
+ }
173
+ lines.push(JSON.stringify({
174
+ step_index: stepIndex++,
175
+ source: "MODEL",
176
+ type: mapped.type,
177
+ status: isError ? "ERROR" : "DONE",
178
+ created_at: at,
179
+ content: cleanOutcome
180
+ }));
181
+ }
182
+ }
183
+ // Append final resumption prompt as a new user request
184
+ const continuationMessage = [
185
+ "You are continuing a task another agent started. Here is the objective and immediate next steps:",
186
+ "",
187
+ "Objective:",
188
+ packet.task.objective,
189
+ "",
190
+ "Next steps:",
191
+ packet.next.map((step, idx) => `${idx + 1}. ${step}`).join("\n"),
192
+ ].join("\n");
193
+ lines.push(JSON.stringify({
194
+ step_index: stepIndex++,
195
+ source: "USER_EXPLICIT",
196
+ type: "USER_INPUT",
197
+ status: "DONE",
198
+ created_at: nowIso,
199
+ content: `<USER_REQUEST>\n${continuationMessage}\n</USER_REQUEST>`
200
+ }));
201
+ writeFileSync(transcriptPath, lines.join("\n") + "\n");
202
+ // Also write a dummy .pb file in conversations/ to ensure the listing works
203
+ const pbPath = join(home, ".gemini", "antigravity-ide", "conversations", `${uuid}.pb`);
204
+ try {
205
+ mkdirSync(join(home, ".gemini", "antigravity-ide", "conversations"), { recursive: true });
206
+ writeFileSync(pbPath, "");
207
+ }
208
+ catch {
209
+ // Ignored
210
+ }
211
+ // Update global state.vscdb database so that the session appears in the Antigravity sidebar
212
+ const localCwd = resolve(workspaceDir);
213
+ const workspaceUri = `file://${localCwd}`;
214
+ const workspacePath = `file://${localCwd}`;
215
+ const title = `Memento Handoff: ${packet.task.title || "Resumed Task"}`;
216
+ let gitInfo;
217
+ if (packet.workspace.git) {
218
+ let slug = "";
219
+ const remote = packet.workspace.git.remote || "";
220
+ const match = remote.match(/[:/]([^/]+\/[^/]+?)(?:\.git)?$/);
221
+ if (match && match[1]) {
222
+ slug = match[1];
223
+ }
224
+ gitInfo = {
225
+ slug,
226
+ remote,
227
+ branch: packet.workspace.git.branch || "main",
228
+ };
229
+ }
230
+ const sqliteUpdated = getGlobalStateDbPaths(home)
231
+ .map((dbPath) => updateGlobalStateDb(dbPath, uuid, title, workspaceUri, workspacePath, gitInfo))
232
+ .some(Boolean);
233
+ return {
234
+ sessionId: uuid,
235
+ transcriptPath,
236
+ sqliteUpdated,
237
+ };
238
+ }
239
+ // Protobuf helper encoders for generating Antigravity conversation summaries
240
+ function encodeVarint(val) {
241
+ const res = [];
242
+ let v = val;
243
+ while (v >= 0x80) {
244
+ res.push((v & 0x7f) | 0x80);
245
+ v >>>= 7;
246
+ }
247
+ res.push(v & 0x7f);
248
+ return Buffer.from(res);
249
+ }
250
+ function encodeLengthDelimited(field, body) {
251
+ const header = Buffer.concat([
252
+ encodeVarint((field << 3) | 2),
253
+ encodeVarint(body.length)
254
+ ]);
255
+ return Buffer.concat([header, body]);
256
+ }
257
+ function encodeString(field, text) {
258
+ return encodeLengthDelimited(field, Buffer.from(text, "utf8"));
259
+ }
260
+ function encodeInt32(field, val) {
261
+ return Buffer.concat([
262
+ encodeVarint((field << 3) | 0),
263
+ encodeVarint(val)
264
+ ]);
265
+ }
266
+ function encodeTimestamp(field, dateMs) {
267
+ const seconds = Math.floor(dateMs / 1000);
268
+ const nanos = (dateMs % 1000) * 1000000;
269
+ const inner = Buffer.concat([
270
+ encodeInt32(1, seconds),
271
+ encodeInt32(2, nanos)
272
+ ]);
273
+ return encodeLengthDelimited(field, inner);
274
+ }
275
+ function encodeGitInfo(repoSlug, remoteUrl) {
276
+ return Buffer.concat([
277
+ encodeString(1, repoSlug),
278
+ encodeString(2, remoteUrl)
279
+ ]);
280
+ }
281
+ function encodeWorkspaceInfo(field, uri, path, git) {
282
+ const parts = [
283
+ encodeString(1, uri),
284
+ encodeString(2, path)
285
+ ];
286
+ if (git) {
287
+ const gitInfoBytes = encodeGitInfo(git.slug, git.remote);
288
+ parts.push(encodeLengthDelimited(3, gitInfoBytes));
289
+ parts.push(encodeString(4, git.branch));
290
+ }
291
+ return encodeLengthDelimited(field, Buffer.concat(parts));
292
+ }
293
+ function encodeTrajectorySummary(title, uuid, workspaceUri, workspacePath, git) {
294
+ const nowMs = Date.now();
295
+ const parts = [
296
+ encodeString(1, title),
297
+ encodeInt32(2, 1),
298
+ encodeTimestamp(3, nowMs),
299
+ encodeString(4, uuid),
300
+ encodeInt32(5, 1),
301
+ encodeTimestamp(7, nowMs),
302
+ encodeWorkspaceInfo(9, workspaceUri, workspacePath, git),
303
+ encodeTimestamp(10, nowMs),
304
+ encodeString(15, ""),
305
+ encodeInt32(16, 0)
306
+ ];
307
+ return Buffer.concat(parts);
308
+ }
309
+ function encodeEntry(uuid, title, workspaceUri, workspacePath, git) {
310
+ const summaryBytes = encodeTrajectorySummary(title, uuid, workspaceUri, workspacePath, git);
311
+ const summaryB64 = summaryBytes.toString("base64");
312
+ const summaryWrapperBytes = Buffer.concat([
313
+ encodeString(1, summaryB64),
314
+ encodeInt32(2, summaryB64.length)
315
+ ]);
316
+ const entryBytes = Buffer.concat([
317
+ encodeString(1, uuid),
318
+ encodeLengthDelimited(2, summaryWrapperBytes)
319
+ ]);
320
+ return encodeLengthDelimited(1, entryBytes);
321
+ }
322
+ function decodeStoredSummaryBytes(value) {
323
+ if (!value) {
324
+ return Buffer.alloc(0);
325
+ }
326
+ if (typeof value === "string") {
327
+ return Buffer.from(value, "base64");
328
+ }
329
+ const bytes = Buffer.from(value);
330
+ const asText = bytes.toString("utf8");
331
+ if (/^[A-Za-z0-9+/]+={0,2}$/.test(asText.trim())) {
332
+ return Buffer.from(asText, "base64");
333
+ }
334
+ return bytes;
335
+ }
336
+ function getGlobalStateDbPaths(home) {
337
+ if (process.platform === "darwin") {
338
+ return [
339
+ join(home, "Library", "Application Support", "Antigravity IDE", "User", "globalStorage", "state.vscdb"),
340
+ join(home, "Library", "Application Support", "Antigravity", "User", "globalStorage", "state.vscdb"),
341
+ ];
342
+ }
343
+ else if (process.platform === "win32") {
344
+ const appData = process.env.APPDATA || join(home, "AppData", "Roaming");
345
+ return [
346
+ join(appData, "Antigravity IDE", "User", "globalStorage", "state.vscdb"),
347
+ join(appData, "Antigravity", "User", "globalStorage", "state.vscdb"),
348
+ ];
349
+ }
350
+ else {
351
+ return [
352
+ join(home, ".config", "Antigravity IDE", "User", "globalStorage", "state.vscdb"),
353
+ join(home, ".config", "Antigravity", "User", "globalStorage", "state.vscdb"),
354
+ ];
355
+ }
356
+ }
357
+ function updateGlobalStateDb(dbPath, uuid, title, workspaceUri, workspacePath, git) {
358
+ if (!existsSync(dbPath)) {
359
+ return false;
360
+ }
361
+ try {
362
+ const require = createRequire(import.meta.url);
363
+ const { DatabaseSync } = require("node:sqlite");
364
+ const db = new DatabaseSync(dbPath);
365
+ try {
366
+ const entryBytes = encodeEntry(uuid, title, workspaceUri, workspacePath, git);
367
+ for (const key of ["antigravityUnifiedStateSync.trajectorySummaries", "unifiedStateSync.trajectorySummaries"]) {
368
+ const row = db.prepare("SELECT value FROM ItemTable WHERE key = ?").get(key);
369
+ let newValueB64;
370
+ if (row && row.value) {
371
+ const existingBytes = decodeStoredSummaryBytes(row.value);
372
+ const combinedBytes = Buffer.concat([existingBytes, entryBytes]);
373
+ newValueB64 = combinedBytes.toString("base64");
374
+ }
375
+ else {
376
+ newValueB64 = entryBytes.toString("base64");
377
+ }
378
+ db.prepare("INSERT OR REPLACE INTO ItemTable (key, value) VALUES (?, ?)").run(key, newValueB64);
379
+ }
380
+ return true;
381
+ }
382
+ finally {
383
+ db.close();
384
+ }
385
+ }
386
+ catch (error) {
387
+ console.warn("Could not update global state database:", error);
388
+ return false;
389
+ }
390
+ }
391
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/inject/antigravity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Packet } from "../packet.js";
2
+ /**
3
+ * Inject a Memento packet as a native Claude Code session file so it appears
4
+ * in the Recent sessions list when the operator opens Claude Code in this
5
+ * workspace.
6
+ *
7
+ * Format: ~/.claude/projects/<encoded-cwd>/<uuid>.jsonl
8
+ * Minimal valid session: queue-operation enqueue/dequeue + user message +
9
+ * last-prompt marker. Claude Code reads these on startup.
10
+ */
11
+ export interface ClaudeInjectResult {
12
+ sessionFile: string;
13
+ sessionId: string;
14
+ }
15
+ export declare function injectClaudeCode(packet: Packet, workspaceDir: string, home?: string): ClaudeInjectResult;
@@ -0,0 +1,53 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { claudeProjectDir } from "../adapters/claude-code.js";
6
+ import { renderResumePrompt } from "../render.js";
7
+ export function injectClaudeCode(packet, workspaceDir, home = homedir()) {
8
+ const projectDir = claudeProjectDir(workspaceDir, home);
9
+ mkdirSync(projectDir, { recursive: true });
10
+ const iso = new Date().toISOString();
11
+ const sessionId = randomUUID();
12
+ const messageUuid = randomUUID();
13
+ const promptId = randomUUID();
14
+ const cwd = resolve(workspaceDir);
15
+ const resumePrompt = renderResumePrompt(packet);
16
+ const title = `Memento: continue "${packet.task.title}" (${packet.packet.id})`;
17
+ const lines = [
18
+ JSON.stringify({
19
+ type: "queue-operation",
20
+ operation: "enqueue",
21
+ timestamp: iso,
22
+ sessionId,
23
+ content: title,
24
+ }),
25
+ JSON.stringify({
26
+ type: "queue-operation",
27
+ operation: "dequeue",
28
+ timestamp: iso,
29
+ sessionId,
30
+ }),
31
+ JSON.stringify({
32
+ parentUuid: null,
33
+ isSidechain: false,
34
+ promptId,
35
+ type: "user",
36
+ message: { role: "user", content: resumePrompt },
37
+ uuid: messageUuid,
38
+ timestamp: iso,
39
+ sessionId,
40
+ cwd,
41
+ }),
42
+ JSON.stringify({
43
+ type: "last-prompt",
44
+ lastPrompt: title,
45
+ leafUuid: messageUuid,
46
+ sessionId,
47
+ }),
48
+ ];
49
+ const sessionFile = join(projectDir, `${sessionId}.jsonl`);
50
+ writeFileSync(sessionFile, lines.join("\n") + "\n", "utf8");
51
+ return { sessionFile, sessionId };
52
+ }
53
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/inject/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAiBhD,MAAM,UAAU,gBAAgB,CAC5B,MAAc,EACd,YAAoB,EACpB,OAAe,OAAO,EAAE;IAExB,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACxD,SAAS,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,sBAAsB,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;IAE/E,MAAM,KAAK,GAAG;QACV,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,GAAG;YACd,SAAS;YACT,OAAO,EAAE,KAAK;SACjB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,GAAG;YACd,SAAS;SACZ,CAAC;QACF,IAAI,CAAC,SAAS,CAAC;YACX,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;YAClB,QAAQ;YACR,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAC;YAC9C,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,GAAG;YACd,SAAS;YACT,GAAG;SACN,CAAC;QACF,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,WAAW;YACrB,SAAS;SACZ,CAAC;KACL,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;IAC3D,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAE5D,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Packet } from "../packet.js";
2
+ export interface InjectResult {
3
+ sessionId: string;
4
+ rolloutPath: string;
5
+ sqliteUpdated: boolean;
6
+ }
7
+ export declare function injectCodexSession(packet: Packet, workspaceDir: string, home?: string): InjectResult;